From de17707be0cc0dacd3a6770696f77d451830a1a0 Mon Sep 17 00:00:00 2001 From: kpsingh Date: Wed, 27 May 2026 11:11:20 +0530 Subject: [PATCH 1/8] [RealtimeKit]: add realtimekit track recording docs --- .../realtimekit/recording-guide/index.mdx | 13 +- .../recording-guide/track-recording.mdx | 146 ++++++++++++++++++ 2 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx diff --git a/src/content/docs/realtime/realtimekit/recording-guide/index.mdx b/src/content/docs/realtime/realtimekit/recording-guide/index.mdx index fa48c574748d4e8..0818278555efc44 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/index.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/index.mdx @@ -1,7 +1,7 @@ --- pcx_content_type: navigation title: Recording -description: Record audio and video from RealtimeKit meetings using composite recording mode. +description: Record RealtimeKit meetings as composite recordings or separate participant audio tracks. sidebar: order: 8 label: Overview @@ -11,18 +11,17 @@ products: import { DirectoryListing } from "~/components"; -Learn how RealtimeKit records the audio and video of multiple users in a meeting, as well as interacts with RealtimeKit plugins, in a single file using composite recording mode. +Learn how RealtimeKit records meetings as a single composite file or as separate participant audio tracks. Visit the following pages to learn more about recording meetings: -RealtimeKit records the audio and video of multiple users in a meeting, as well as -interactions with RealtimeKit plugins, in a single file using composite recording mode. +RealtimeKit can record the audio and video of multiple users in a meeting, as well as interactions with RealtimeKit plugins, in a single file using composite recording mode. RealtimeKit can also record separate participant audio tracks using track recording. -## How does RealtimeKit recording work? +## How does composite recording work? -RealtimeKit recordings are powered by anonymous virtual bot users who join your +Composite recordings are powered by anonymous virtual bot users who join your meeting, record it, and then upload it to RealtimeKit's Cloudflare R2 bucket. For video files, we currently support the [H.264](https://en.wikipedia.org/wiki/Advanced_Video_Coding) and @@ -60,3 +59,5 @@ A typical workflow for recording a meeting involves the following steps: 1. Start a recording using the [Start Recording API](/api/resources/realtime_kit/subresources/recordings/methods/start_recordings/) or client side SDK. 2. Manage the recording using the [Pause, resume, or stop recording API](/api/resources/realtime_kit/subresources/recordings/methods/pause_resume_stop_recording/) or client side SDK. 3. Fetch the download URL for downloading the recording using the [Fetch details of a recording API](/api/resources/realtime_kit/subresources/recordings/methods/get_one_recording/), webhook, or from the Developer Portal. + +For separate participant audio files, refer to [Track recording](/realtime/realtimekit/recording-guide/track-recording/). diff --git a/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx new file mode 100644 index 000000000000000..de327c04520daca --- /dev/null +++ b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx @@ -0,0 +1,146 @@ +--- +title: Track recording +description: Record separate audio tracks for selected RealtimeKit participants and download per-participant WebM files. +pcx_content_type: how-to +sidebar: + order: 9 +products: + - realtime +--- + +Track recording records each participant's audio as a separate WebM file in RealtimeKit's Cloudflare R2 bucket. Use track recording when you need isolated speaker tracks for post-processing, transcription, compliance workflows, or audio analysis. + +Composite recording creates one mixed meeting recording. Track recording creates one file per recorded participant peer. + +:::note + +Track recording currently supports audio tracks only. Video track recording is in development. + +::: + +## Availability and limits + +Track recording has the following requirements and limits: + +| Limit | Description | +| --------------------- | ----------------------------------------------------- | +| Active meeting | The meeting must have an active live session. | +| Media kind | Only `audio` layers are recorded. | +| Participant selection | Pass up to `100` values in `user_ids`. | +| Storage | Files are uploaded to the RealtimeKit bucket. | +| File retention | RealtimeKit bucket download URLs expire after 7 days. | + +## Start track recording + +To start track recording, call `POST /recordings/track` with the meeting ID. + +If you omit `layers`, RealtimeKit records all participant audio. You can pass an audio layer to set a file name prefix for generated files. + +```bash +curl --request POST \ + --url https://api.cloudflare.com/client/v4/accounts//realtime/kit//recordings/track \ + --header 'Authorization: Bearer ' \ + --header 'Content-Type: application/json' \ + --data '{ + "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a" +}' +``` + +The response includes a recording ID. Use this ID to stop or fetch the recording. + +```json +{ + "success": true, + "data": { + "recording": { + "id": "fff40c6a-140b-40a9-9499-b23fd7a3868a", + "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a", + "status": "INVOKED", + "type": "TRACK", + "output_file_name": "{{file_name_prefix}}_{{user_id}}_{{peer_id}}_{{stream_kind}}_{{media_kind}}_{{date_time}}.webm" + } + } +} +``` + +## Record selected participants + +Pass `user_ids` to record only specific participants. RealtimeKit records current and future participant peers whose `user_id` matches the allowlist. + +:::caution + +To use selective track recording with `user_ids`, contact your Cloudflare account team or RealtimeKit support. + +::: + +```json +{ + "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a", + "user_ids": ["user-123", "user-456"] +} +``` + +## Set file name prefix + +Use `file_name_prefix` to prefix every generated track recording file. + +```json +{ + "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a", + "layers": { + "default": { + "media_kind": "audio", + "file_name_prefix": "speaker" + } + } +} +``` + +If you omit `layers`, RealtimeKit uses `default` as the file name prefix. + +## Stop track recording + +Use the recording update endpoint to stop a track recording. + +```bash +curl --request PUT \ + --url https://api.cloudflare.com/client/v4/accounts//realtime/kit//recordings/ \ + --header 'Authorization: Bearer ' \ + --header 'Content-Type: application/json' \ + --data '{ + "action": "stop" +}' +``` + +Track recording also stops when the meeting session ends. + +After track recording stops, RealtimeKit uploads the per-participant WebM files and moves the recording to `UPLOADED`. + +## Download track files + +Track recording uses the same recording status lifecycle as composite recording. To monitor status, refer to [Monitor Recording Status](/realtime/realtimekit/recording-guide/monitor-status/). + +When the recording reaches `UPLOADED`, fetch the recording details or listen for the `recording.statusUpdate` webhook. The `download_url` field contains the recorded WebM files for participant peers. + +```json +{ + "download_url": [ + { + "layer_name": "default", + "download_urls": { + "speaker_user-123_peer-456_peer_audio_1760000000000.webm": { + "download_url": "https://example.com/presigned-url" + } + } + } + ] +} +``` + +File names use this format: + +```txt +{{file_name_prefix}}_{{user_id}}_{{peer_id}}_{{stream_kind}}_{{media_kind}}_{{date_time}}.webm +``` + +The `date_time` value is the Unix timestamp in milliseconds when the file was generated. From a277e97a5321cde84a73a09d5ad2bde14933c5a3 Mon Sep 17 00:00:00 2001 From: Kunwar Pratap Singh Date: Wed, 27 May 2026 23:36:59 +0530 Subject: [PATCH 2/8] Update src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx Co-authored-by: ask-bonk[bot] <249159057+ask-bonk[bot]@users.noreply.github.com> --- .../realtime/realtimekit/recording-guide/track-recording.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx index de327c04520daca..50d601987d14693 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx @@ -28,7 +28,7 @@ Track recording has the following requirements and limits: | Media kind | Only `audio` layers are recorded. | | Participant selection | Pass up to `100` values in `user_ids`. | | Storage | Files are uploaded to the RealtimeKit bucket. | -| File retention | RealtimeKit bucket download URLs expire after 7 days. | +| File retention | RealtimeKit bucket download URLs expire after seven days. | ## Start track recording From b11ab7c8ad455913644e8b2c0f3dff0125b1a955 Mon Sep 17 00:00:00 2001 From: "ask-bonk[bot]" Date: Thu, 28 May 2026 06:07:18 +0000 Subject: [PATCH 3/8] Applied 10 edits + changelog entry, validated Co-authored-by: korinne --- .agents/references/procedures.md | 20 +- .agents/skills/dependabot-review/SKILL.md | 18 +- .agents/skills/docs-review/SKILL.md | 26 +- .agents/skills/eli5/SKILL.md | 45 +- .../internal-dns/index.eli5.mdx | 1 + .../eli5/references/EXAMPLES_REFERENCE.md | 517 ++++---- .../eli5/references/content-type-guide.md | 105 +- .../skills/eli5/references/pattern-library.md | 202 +-- .github/review-template.md | 3 +- .opencode/command/styleguide.md | 1 + .windsurf/rules/general-rules.md | 2 +- CONTRIBUTING.md | 3 +- MIGRATION.md | 4 +- src/components/AutoconfigDiagram.astro | 157 ++- src/components/ComponentUsage.astro | 3 +- src/components/FeatureTable.astro | 44 +- src/components/LayerCard.astro | 8 +- src/components/LlmsTxtDirective.astro | 6 +- src/components/PagesBuildPresetsTable.astro | 15 +- src/components/ProductReleaseNotes.astro | 7 +- src/components/R2LocalUploadsdiagram.astro | 404 ++++-- src/components/WranglerCommand.astro | 2 +- src/components/WranglerConfig.astro | 4 +- src/components/WranglerNamespace.astro | 2 +- .../agent-setup/AgentComparison.astro | 12 +- src/components/agent-setup/AgentHeader.astro | 4 +- src/components/agent-setup/AgentPrimer.astro | 6 +- .../agent-setup/BuildAgentsCallout.astro | 4 +- .../agent-setup/CloudflareToolsBanner.astro | 35 +- .../agent-setup/PlatformAccessSection.astro | 7 +- src/components/ai-gateway/code-examples.astro | 329 +++-- src/components/changelog/Pagination.astro | 7 +- src/components/models/CopyableCode.astro | 11 +- src/components/models/ModelDetailPage.astro | 220 +++- src/components/models/SchemaDisplay.astro | 16 +- src/components/models/code/DeepgramFlux.astro | 15 +- .../OpenAIResponsesTextGenerationCode.astro | 4 +- src/components/overrides/Page.astro | 6 +- ...ss-Supports-Customer-Metadata-Boundary.mdx | 4 +- .../access/2025-08-26-mcp-server-portals.mdx | 1 - ...-17-clientless-access-for-private-apps.mdx | 4 +- .../2025-12-22-agents-sdk-ai-sdk-v6.mdx | 40 +- .../2026-04-15-agentlee-writeops-genui.mdx | 14 +- .../ai-search/2025-09-19-autorag-metrics.mdx | 2 +- .../2025-09-25-ai-search-more-models.mdx | 31 +- ...add-extra-headers-for-website-crawling.mdx | 7 +- ...2026-04-16-ai-search-namespace-binding.mdx | 4 +- .../2025-10-01-confidence-intervals.mdx | 8 +- .../2026-02-18-cfworker-server-timing.mdx | 8 +- .../2026-03-09-vulnerability-scanner.mdx | 4 +- .../2026-05-19-event-subscriptions.mdx | 10 +- .../2024-09-05-cache-rules-templates.mdx | 1 - .../2024-11-07-shard-cache-by-cache-key.mdx | 16 +- ...-11-07-cache-keys-for-cloudflare-trace.mdx | 26 +- ...1-25-audit-logs-for-cache-purge-events.mdx | 44 +- .../cache/2026-03-24-cache-response-rules.mdx | 2 +- .../changelog/casb/2025-10-28-casb-roles.mdx | 4 +- .../2025-08-29-warp-AI-diag-analyzer.mdx | 1 - ...nabled-search-for-zero-trust-dashboard.mdx | 4 +- ...for-supported-cloudflare-one-resources.mdx | 10 +- .../cloudflare-one/new-applications-71825.mdx | 2 +- ...-01-27-configure-cloudflare-source-ips.mdx | 2 +- ...025-10-01-new-container-instance-types.mdx | 2 +- .../containers/2025-11-21-new-cpu-pricing.mdx | 6 +- ...02-25-higher-container-resource-limits.mdx | 2 +- .../2026-03-24-docker-hub-images.mdx | 2 +- .../2026-04-05-regional-placement.mdx | 8 +- ...4-13-sandbox-outbound-workers-tls-auth.mdx | 2 +- .../2026-05-12-ssh-enabled-by-default.mdx | 2 +- .../dex/2025-11-12-dex-logpush-jobs.mdx | 4 +- .../dex/2026-02-19-dex-supports-cmb-eu.mdx | 1 - ...04-28-dex-internet-outage-notification.mdx | 2 +- .../dex/2026-04-28-dex-speed-test.mdx | 3 +- .../dex/2026-04-29-dex-tests-to-auth.mdx | 3 +- .../2025-04-14-account-level-dlp-settings.mdx | 1 + .../dlp/2025-07-17-document-matching.mdx | 5 +- .../dlp/2025-08-25-ai-prompt-protection.mdx | 12 +- ...25-har-file-detection-and-sanitization.mdx | 2 +- ...-04-14-cloudflare-api-token-detections.mdx | 16 +- .../dlp/2026-04-28-pii-record-profile.mdx | 2 +- .../dns/2026-03-31-internal-dns-open-beta.mdx | 1 + .../dns/2026-04-28-enforce-dns-only.mdx | 1 + ...2025-08-21-durable-objects-get-by-name.mdx | 8 +- ...2025-10-16-durable-objects-data-studio.mdx | 2 +- ...durable-objects-sqlite-storage-billing.mdx | 3 +- .../2026-03-15-durable-object-id-name.mdx | 18 +- .../2025-07-21-subaddressing.mdx | 2 +- .../2024-12-19-escalate-user-submissions.mdx | 2 +- .../2025-10-16-on-demand-security-report.mdx | 1 - ...adjustment-to-final-disposition-column.mdx | 3 +- ...25-12-03-submission-terminology-update.mdx | 11 +- ...anced-visibility-post-delivery-actions.mdx | 9 +- ...ed-accessibility-search-for-monitoring.mdx | 26 +- ...6-03-15-infinite-paging-investigations.mdx | 12 +- ...2026-04-06-dane-support-mx-deployments.mdx | 12 +- .../2026-04-07-triage-status-tracking.mdx | 2 + ...5-06-cloudy-summaries-in-phishnet_o365.mdx | 1 + .../2025-06-23-user-groups-ga.mdx | 4 +- .../2025-09-03-rate-limiting-improvement.mdx | 21 +- ...two-factor-authentication-backup-codes.mdx | 3 +- .../2025-09-25-sign-in-with-github.mdx | 3 +- .../fundamentals/2025-10-01-md-returned.mdx | 2 +- .../2025-10-14-sso-self-service-ux.mdx | 1 - .../fundamentals/2025-10-30-email-2FA.mdx | 6 +- ...5-10-30-member-management-improvements.mdx | 14 +- .../2026-01-23-New-2FA-Experience.mdx | 9 +- .../2026-02-12-markdown-for-agents.mdx | 3 +- ...02-16-markdown-for-agents-improvements.mdx | 2 +- ...json-rfc9457-responses-for-1xxx-errors.mdx | 1 + ...-12-retry-after-header-for-1xxx-errors.mdx | 19 +- .../2026-03-17-scim-authentik-support.mdx | 2 +- .../2026-03-18-scim-audit-logging.mdx | 4 +- .../2026-04-06-organizations-public-beta.mdx | 2 +- .../2026-04-10-secret-scanning-support.mdx | 2 +- .../2026-04-14-oauth-consent-and-revoke.mdx | 22 +- ...27-structured-responses-for-5xx-errors.mdx | 1 + .../2026-05-04-keyboard-shortcuts.mdx | 54 +- ...025-07-24-HTTP-Inspection-on-all-ports.mdx | 4 +- ...-07-28-Spam-domain-category-introduced.mdx | 12 +- ...08-15-gemini-application-replaces-bard.mdx | 3 +- .../2025-10-10-new-domain-categories.mdx | 10 +- ...-11-06-Applications-recategorised-plan.mdx | 6 +- ...02-27-new-protocol-detection-protocols.mdx | 14 +- .../Gateway-application-categories-added.mdx | 4 +- ...4-hyperdrive-remote-database-local-dev.mdx | 14 +- src/content/changelog/images/heic-support.mdx | 1 + ...2025-08-22-kv-performance-improvements.mdx | 2 - .../2025-06-04-account-load-balancing-ui.mdx | 3 +- .../2025-07-09-usage-tracking.mdx | 2 +- .../2025-08-15-extended-retention.mdx | 2 +- .../2025-09-03-log-headers-and-cookies.mdx | 2 - .../2025-09-11-contextual-pivots.mdx | 4 +- .../2025-09-11-new-results-table-view.mdx | 4 +- .../2025-11-04-query-cancellation.mdx | 2 +- .../2025-11-11-resize-sql-window.mdx | 2 +- .../2025-11-13-fixed-custom-date.mdx | 2 +- .../log-explorer/2025-11-13-new-datasets.mdx | 5 +- .../2026-03-11-ingest-field-selection.mdx | 20 +- .../logs/2024-10-08-new-gateway-fields.mdx | 2 +- .../logs/2026-03-09-log-fields-updated.mdx | 1 - ...26-04-20-pipelines-logpush-destination.mdx | 2 +- ...2026-04-21-logpush-subrequests-merging.mdx | 4 +- ...-03-24-interconnects-navigation-update.mdx | 2 +- .../pages/2025-05-30-pages-build-image-v3.mdx | 2 +- .../queues/2025-03-25-pause-purge-queues.mdx | 8 +- .../2025-04-17-pull-consumer-limits.mdx | 3 + .../2025-05-09-publish-to-queues-via-http.mdx | 2 +- .../queues/2025-08-19-event-subscriptions.mdx | 26 +- ...2025-09-25-announcing-r2-sql-open-beta.mdx | 2 +- ...ql-functions-expressions-complex-types.mdx | 1 - ...0-r2-sql-json-functions-explain-format.mdx | 2 + .../radar/2025-08-04-radar-ct-insights.mdx | 2 +- .../radar/2025-09-29-radar-regional-data.mdx | 2 +- .../radar/2026-02-25-radar-aspa-insights.mdx | 2 +- .../2026-04-01-radar-routing-section.mdx | 2 +- ...2026-05-28-realtimekit-track-recording.mdx | 36 + .../2026-1-15-crowdstrike-score.mdx | 1 + .../2025-10-30-tcp-rtt-and-tcp-fields.mdx | 8 +- .../rules/2026-01-12-dma-metro-code-field.mdx | 4 +- .../rules/2026-01-20-array-map-functions.mdx | 12 +- .../2026-01-27-body-buffering-settings.mdx | 26 +- .../rules/2026-03-18-worker-timing-field.mdx | 4 +- .../rules/2026-03-25-rfc9440-mtls-fields.mdx | 2 +- ...26-04-01-l4-transport-telemetry-fields.mdx | 12 +- ...20-cloudflare-typescript-v6.0.0-beta.1.mdx | 70 +- ...-02-13-cloudflare-python-v5.0.0-beta.1.mdx | 13 +- .../2025-07-18-brand-protection-api.mdx | 14 +- .../2025-10-27-RFI-Tokens-in-Dash.mdx | 2 +- ...protection-logo-dashboard-report-abuse.mdx | 4 +- ...Threat-Events-now-show-events-insights.mdx | 6 +- ...-01-14-Download-URL-Scanner-Report-PDF.mdx | 8 +- .../2026-02-19-threat-events-graphs.mdx | 1 + ...026-02-23-Saved-views-in-threat-events.mdx | 5 +- .../2026-04-08-threat-events-notification.mdx | 20 +- .../2026-05-07-CSV-export-for-RFIs.mdx | 1 + ...-12-URL-scanner-report-agent-readiness.mdx | 17 +- ...archive-and-audit-security-action-items.md | 5 +- .../2025-08-25-secrets-store-ai-gateway.mdx | 20 +- ...07-22-media-transformations-audio-mode.mdx | 2 +- .../2026-04-06-redesigned-support-portal.mdx | 1 + .../2026-04-28-direct-support-navigation.mdx | 4 +- .../2025-02-03-terraform-v5-provider.mdx | 6 +- .../2025-05-19-terraform-v5.5.0-provider.mdx | 13 +- .../2025-06-17-terraform-v5.6.0-provider.mdx | 3 +- .../2025-07-11-terraform-v5.7.0-provider.mdx | 3 +- .../2025-08-01-terraform-v5.8.2-provider.mdx | 6 +- .../2025-08-15-terraform-v5.8.4-provider.mdx | 6 +- .../2025-08-29-terrform-v5.9-provider.mdx | 3 +- .../2025-11-20-terraform-v5.13.0-provider.mdx | 63 +- .../2025-12-05-terraform-v5.14.0-provider.mdx | 22 +- .../2025-12-19-terraform-v5.15.0-provider.mdx | 36 +- .../2026-01-20-terraform-v5.16.0-provider.mdx | 55 +- .../2026-02-12-terraform-v5.17.0-provider.mdx | 91 +- .../2026-04-24-terraform-v5.19.0-provider.mdx | 1 + .../2026-04-24-tf-migrate-tool-released.mdx | 6 +- .../tunnel/2025-07-15-udp-improvements.mdx | 3 +- ...el-networks-list-endpoints-new-default.mdx | 28 +- .../2025-09-18-tunnel-hostname-routing.mdx | 3 +- ...2026-01-15-warp-connector-ping-support.mdx | 2 +- .../changelog/waf/2025-07-14-waf-release.mdx | 1 - .../changelog/waf/2025-07-21-emergency.mdx | 30 +- .../changelog/waf/2025-07-28-waf-release.mdx | 11 +- .../changelog/waf/2025-08-04-waf-release.mdx | 207 +-- .../waf/2025-08-07-emergency-waf-release.mdx | 75 +- .../changelog/waf/2025-08-11-waf-release.mdx | 460 ++++--- .../changelog/waf/2025-08-18-waf-release.mdx | 275 ++-- .../changelog/waf/2025-08-25-waf-release.mdx | 98 +- .../waf/2025-08-29-emergency-waf-release.mdx | 72 +- .../changelog/waf/2025-09-01-waf-release.mdx | 78 +- .../waf/2025-09-04-emergency-waf-release.mdx | 95 +- .../changelog/waf/2025-09-08-waf-release.mdx | 250 ++-- .../changelog/waf/2025-09-15-waf-release.mdx | 100 +- .../changelog/waf/2025-09-22-waf-release.mdx | 221 ++-- .../waf/2025-09-24-emergency-waf-release.mdx | 52 +- .../changelog/waf/2025-09-26-waf-release.mdx | 268 ++-- .../waf/2025-09-28-emergency-waf-release.mdx | 80 +- .../changelog/waf/2025-09-29-waf-release.mdx | 135 +- .../changelog/waf/2025-10-03-waf-release.mdx | 488 +++---- .../changelog/waf/2025-10-06-waf-release.mdx | 220 ++-- .../waf/2025-10-07-emergency-waf-release.mdx | 55 +- .../waf/2025-10-17-emergency-waf-release.mdx | 82 +- .../changelog/waf/2025-10-20-waf-release.mdx | 16 +- .../waf/2025-10-23-emergency-waf-release.mdx | 48 +- .../waf/2025-10-24-emergency-waf-release.mdx | 48 +- .../waf/2025-10-30-emergency-waf-release.mdx | 48 +- .../waf/2025-11-05-emergency-waf-release.mdx | 50 +- .../changelog/waf/2025-11-10-waf-release.mdx | 4 +- .../changelog/waf/2025-11-17-waf-release.mdx | 2 +- .../waf/2025-11-21-emergency-waf-release.mdx | 2 +- .../changelog/waf/2025-11-24-waf-release.mdx | 16 +- .../changelog/waf/2025-12-01-waf-release.mdx | 9 +- .../waf/2025-12-02-emergency-waf-release.mdx | 2 +- .../waf/2025-12-03-emergency-waf-release.mdx | 3 +- .../waf/2025-12-10-emergency-waf-release.mdx | 2 +- .../waf/2025-12-11-emergency-waf-release.mdx | 14 +- .../changelog/waf/2025-12-18-waf-release.mdx | 225 ++-- .../changelog/waf/2026-01-12-waf-release.mdx | 57 +- .../changelog/waf/2026-01-15-waf-release.mdx | 57 +- .../changelog/waf/2026-01-20-waf-release.mdx | 57 +- .../changelog/waf/2026-01-26-waf-release.mdx | 70 +- .../changelog/waf/2026-02-02-waf-release.mdx | 70 +- .../changelog/waf/2026-03-02-waf-release.mdx | 7 +- .../waf/2026-03-12-emergency-waf-release.mdx | 6 +- .../changelog/waf/2026-03-23-waf-release.mdx | 104 +- .../changelog/waf/2026-03-30-waf-release.mdx | 116 +- .../changelog/waf/2026-04-15-waf-release.mdx | 144 ++- .../changelog/waf/2026-04-21-waf-release.mdx | 339 +++-- .../changelog/waf/2026-04-27-waf-release.mdx | 343 ++--- .../waf/2026-05-07-emergency-waf-release.mdx | 12 +- .../changelog/waf/2026-05-11-waf-release.mdx | 9 +- .../waf/2026-05-15-emergency-waf-release.mdx | 16 +- .../changelog/waf/2026-05-20-waf-release.mdx | 12 +- .../2026-04-30-rum-navigation-types.mdx | 4 +- .../2025-08-05-openai-open-models.mdx | 5 +- .../workers-ai/2025-08-27-partner-models.mdx | 3 +- .../workers-ai/2025-09-05-embeddinggemma.mdx | 3 +- .../workers-vpc/2025-09-25-workers-vpc.mdx | 4 +- ...-07-new-ways-to-get-started-on-workers.mdx | 12 +- .../workers/2025-03-25-higher-cpu-limits.mdx | 2 +- ...2025-04-08-deploy-to-cloudflare-button.mdx | 18 +- .../workers/2025-04-09-qb-workers-logs-ga.mdx | 4 +- ...2025-04-22-python-worker-cron-triggers.mdx | 2 +- ...025-05-14-python-worker-durable-object.mdx | 2 +- .../workers/2025-06-05-open-next-size.mdx | 2 +- .../2025-07-23-workers-preview-urls.mdx | 12 +- .../2025-08-04-builds-increased-disk-size.mdx | 8 +- ...08-08-add-waituntil-cloudflare-workers.mdx | 2 +- ...port-long-branch-names-preview-aliases.mdx | 4 +- .../workers/2025-08-11-messagechannel.mdx | 16 +- .../2025-08-14-new-python-handlers.mdx | 2 +- ...workers-terraform-and-sdk-improvements.mdx | 39 +- .../2025-08-15-static-assets-redirect-url.mdx | 6 +- ...5-08-19-improved-wrangler-error-screen.mdx | 4 +- .../workers/2025-09-03-new-workers-api.mdx | 86 +- .../2025-09-07-builds-increased-cpu-paid.mdx | 17 +- ...2025-09-09-interactive-wrangler-assets.mdx | 5 +- ...025-09-10-built-with-cloudflare-button.mdx | 2 +- ...09-11-increased-version-rollback-limit.mdx | 9 +- .../2025-09-17-update-preview-url-setting.mdx | 6 +- .../2025-09-19-ratelimit-workers-ga.mdx | 4 +- ...dev-multi-config-cross-command-support.mdx | 19 +- ...9-26-analytics-engine-sql-enhancements.mdx | 21 +- .../workers/2025-09-26-ctx-exports.md | 16 +- .../workers/2025-10-09-assets-terraform.mdx | 10 +- .../2025-10-09-workflows-terraform.mdx | 8 +- ...025-10-23-preview-url-default-behavior.mdx | 7 +- ...-10-24-automatic-resource-provisioning.mdx | 2 +- .../workers/2025-10-30-builds-preview.mdx | 8 +- .../2025-11-09-cloudflare-env-variable.mdx | 1 + ...lytics-engine-further-sql-enhancements.mdx | 12 +- ...25-12-01-build-image-policies-dev-plat.mdx | 2 +- ...5-12-08-python-cold-start-improvements.mdx | 10 +- .../workers/2025-12-08-python-pywrangler.mdx | 1 - .../2025-12-08-vite-optional-config.mdx | 2 +- .../2025-12-08-vite-programmatic-config.mdx | 2 +- .../2025-12-16-vitest-ctx-exports-support.mdx | 10 +- ...2025-12-19-tanstack-start-prerendering.mdx | 20 +- .../2026-02-15-workers-best-practices.mdx | 1 + .../2026-03-27-rfc9440-mtls-fields.mdx | 45 +- ...26-04-01-l4-transport-telemetry-fields.mdx | 34 +- ...026-05-06-react-nextjs-vulnerabilities.mdx | 2 +- .../2025-01-15-workflows-more-steps.mdx | 6 +- .../workflows/2025-10-28-raising-limits.mdx | 6 +- .../2026-03-23-local-dev-instance-methods.mdx | 2 +- .../2026-05-01-dynamic-workflows.mdx | 6 +- .../compatibility-flags/allow-custom-ports.md | 1 + .../enable-nodejs-http-modules.md | 8 +- .../enable-nodejs-http-server-modules.md | 8 +- .../fetcher-no-get-put-delete.md | 1 - .../compatibility-flags/js-weak-refs.md | 3 +- .../new-url-parser-implementation.md | 8 +- .../compatibility-flags/nodejs-compat.md | 12 +- .../queue-consumer-no-wait-waituntil.md | 29 +- .../queues-json-messages.md | 2 +- .../compatibility-flags/request-signal.md | 2 +- .../streams-byob-reader-detaches-buffer.md | 12 +- .../compatibility-flags/strict-crypto.md | 1 + .../throw-on-unrecognized-import-assertion.md | 1 - .../compatibility-flags/to-string-tag.md | 2 +- .../urlsearchparams-deletehasvalue.md | 6 +- .../web-socket-auto-reply-to-close.md | 38 +- .../web-socket-compression.md | 2 +- .../websocket-standard-binary-type.md | 4 +- ...ws-preserve-non-retryable-error-message.md | 14 +- .../mpp/charge-for-http-content.mdx | 10 +- .../agents/agentic-payments/x402/index.mdx | 4 +- .../ai-crawl-control-with-bots.mdx | 2 +- .../ai-crawl-control-with-waf.mdx | 10 +- .../features/analyze-ai-traffic.mdx | 22 +- .../features/manage-ai-crawlers.mdx | 24 +- .../set-up-cloudflare-account.mdx | 2 +- .../features/track-robots-txt.mdx | 10 +- .../reference/redirects-for-ai-training.mdx | 16 +- .../configuration/authentication.mdx | 2 +- .../configuration/custom-providers.mdx | 69 +- .../evaluations/add-human-feedback.mdx | 1 + .../docs/ai-gateway/features/dlp/index.mdx | 10 +- .../features/dynamic-routing/usage.mdx | 3 +- .../integrations/aig-workers-ai-binding.mdx | 2 +- src/content/docs/ai-gateway/mcp-server.mdx | 2 +- .../observability/logging/index.mdx | 6 +- .../docs/ai-gateway/reference/audit-logs.mdx | 71 +- .../docs/ai-gateway/reference/limits.mdx | 13 +- .../ai-gateway/tutorials/pruna-p-video.mdx | 14 +- .../docs/ai-gateway/usage/chat-completion.mdx | 6 +- .../ai-gateway/usage/providers/anthropic.mdx | 17 +- .../usage/providers/azureopenai.mdx | 12 +- .../ai-gateway/usage/providers/baseten.mdx | 40 +- .../ai-gateway/usage/providers/bedrock.mdx | 10 +- .../docs/ai-gateway/usage/providers/fal.mdx | 26 +- .../usage/providers/google-ai-studio.mdx | 15 +- .../ai-gateway/usage/providers/ideogram.mdx | 20 +- .../docs/ai-gateway/usage/rest-api.mdx | 70 +- .../usage/websockets-api/non-realtime-api.mdx | 2 +- .../usage/websockets-api/realtime-api.mdx | 2 +- .../docs/ai-search/api/instances/rest-api.mdx | 4 +- .../docs/ai-search/api/items/rest-api.mdx | 4 +- .../ai-search/configuration/models/index.mdx | 2 - src/content/docs/ai-search/how-to/nlweb.mdx | 34 +- .../docs/ai-search/wrangler-commands.mdx | 2 +- .../docs/ai/related-products/ai-gateway.mdx | 2 +- .../account-analytics.mdx | 28 +- .../analytics-with-workers.mdx | 10 +- .../account-and-zone-analytics/index.mdx | 2 +- .../analytics/analytics-engine/grafana.mdx | 12 +- .../docs/analytics/analytics-engine/index.mdx | 14 +- .../analytics/analytics-engine/limits.mdx | 8 +- .../analytics/analytics-engine/pricing.mdx | 2 +- .../analytics-engine/recipes/index.mdx | 2 +- .../analytics/analytics-engine/sampling.mdx | 62 +- .../analytics/analytics-engine/sql-api.mdx | 10 +- .../sql-reference/aggregate-functions.mdx | 2 +- .../sql-reference/bit-functions.mdx | 2 +- .../sql-reference/date-time-functions.mdx | 2 +- .../sql-reference/encoding-functions.mdx | 2 +- .../analytics-engine/sql-reference/index.mdx | 2 +- .../sql-reference/mathematical-functions.mdx | 2 +- .../sql-reference/string-functions.mdx | 2 +- .../type-conversion-functions.mdx | 2 +- .../analytics-engine/worker-querying.mdx | 1 - .../analytics-integrations/datadog.mdx | 1 - .../analytics-integrations/index.mdx | 2 +- .../analytics-integrations/prometheus.mdx | 75 +- .../docs/analytics/custom-dashboards.mdx | 38 +- .../docs/analytics/faq/about-analytics.mdx | 16 +- src/content/docs/analytics/faq/index.mdx | 2 +- src/content/docs/analytics/faq/other-faqs.mdx | 12 +- src/content/docs/analytics/faq/wae-faqs.mdx | 9 +- .../docs/analytics/graphql-api/errors.mdx | 64 +- .../features/confidence-intervals.mdx | 102 +- .../graphql-api/features/discovery/index.mdx | 1 - .../analytics/graphql-api/features/index.mdx | 2 +- .../authentication/graphql-client-headers.mdx | 6 +- .../getting-started/authentication/index.mdx | 52 +- .../getting-started/compose-graphql-query.mdx | 15 - .../getting-started/execute-graphql-query.mdx | 4 +- .../explore-graphql-schema.mdx | 17 +- .../graphql-api/getting-started/index.mdx | 20 +- .../docs/analytics/graphql-api/limits.mdx | 18 +- .../docs/analytics/graphql-api/mcp-server.mdx | 2 +- .../graphql-api/migration-guides/index.mdx | 4 +- .../network-analytics-v2/schema-map.mdx | 1 - .../docs/analytics/graphql-api/sampling.mdx | 4 - .../tutorials/end-customer-analytics.mdx | 218 ++-- .../analytics/graphql-api/tutorials/index.mdx | 2 +- .../querying-access-login-events.mdx | 72 +- .../tutorials/querying-email-routing.mdx | 352 ++--- ...c-transit-endpoint-healthcheck-results.mdx | 5 +- ...gic-transit-tunnel-bandwidth-analytics.mdx | 8 +- ...gic-transit-tunnel-healthcheck-results.mdx | 5 +- src/content/docs/analytics/index.mdx | 36 +- .../network-analytics/configure/index.mdx | 2 +- .../configure/share-export.mdx | 2 +- .../configure/time-range.mdx | 2 +- .../analytics/network-analytics/index.mdx | 12 +- .../network-analytics/reference/index.mdx | 2 +- .../network-analytics/understand/index.mdx | 2 +- src/content/docs/analytics/sampling.mdx | 23 +- .../docs/analytics/types-of-analytics.mdx | 27 +- src/content/docs/api-shield/api-gateway.mdx | 1 - src/content/docs/api-shield/glossary.mdx | 3 +- src/content/docs/api-shield/index.mdx | 30 +- .../management-and-monitoring/index.mdx | 5 +- .../session-identifiers.mdx | 4 +- src/content/docs/api-shield/plans.mdx | 15 +- .../reference/classic-schema-validation.mdx | 14 +- .../docs/api-shield/reference/index.mdx | 5 +- .../docs/api-shield/reference/terraform.mdx | 11 +- .../security/graphql-protection/index.mdx | 1 - .../docs/api-shield/security/index.mdx | 45 +- .../security/jwt-validation/jwt-worker.mdx | 2 +- .../jwt-validation/transform-rules.mdx | 4 +- .../docs/api-shield/security/mtls/byo-ca.mdx | 1 - .../docs/api-shield/security/mtls/index.mdx | 1 - .../security/sequence-analytics.mdx | 3 +- .../security/sequence-mitigation/api.mdx | 23 +- .../sequence-mitigation/custom-rules.mdx | 21 +- .../security/sequence-mitigation/index.mdx | 8 +- .../security/volumetric-abuse-detection.mdx | 11 +- .../docs/argo-smart-routing/analytics.mdx | 9 +- .../argo-smart-routing/argo-for-packets.mdx | 1 - src/content/docs/artifacts/api/errors.mdx | 28 +- .../docs/artifacts/api/git-protocol.mdx | 6 +- .../docs/artifacts/concepts/repositories.mdx | 10 +- .../docs/artifacts/examples/git-client.mdx | 5 +- .../docs/artifacts/guides/authentication.mdx | 18 +- .../artifacts/guides/event-subscriptions.mdx | 1 + .../docs/artifacts/platform/limits.mdx | 4 +- .../docs/artifacts/platform/pricing.mdx | 8 +- .../about/index.mdx | 1 - .../about/plugin-compatibility.mdx | 50 +- .../about/test-current-speed.mdx | 1 - .../get-started/change-nameservers.mdx | 2 - .../get-started/index.mdx | 3 +- .../reference/cache-device-type.mdx | 8 +- .../reference/index.mdx | 3 +- .../reference/page-rule-integration.mdx | 17 +- .../reference/query-parameters.mdx | 80 +- .../reference/subdomain-subdirectories.mdx | 6 +- .../troubleshooting/index.mdx | 15 +- .../get-started/create-billing-profile.mdx | 4 +- .../get-started/update-billing-info.mdx | 22 +- .../docs/billing/manage/billable-usage.mdx | 15 +- .../docs/billing/manage/budget-alerts.mdx | 22 +- .../billing/manage/cancel-subscription.mdx | 6 +- src/content/docs/billing/manage/invoices.mdx | 26 +- .../docs/billing/manage/optimize-costs.mdx | 48 +- .../manage/pay-invoices-overdue-balances.mdx | 7 +- .../instant-bank-payments-link.mdx | 6 +- .../docs/billing/threshold-billing.mdx | 8 +- .../billing/troubleshoot/error-reference.mdx | 24 +- .../resolve-cannot-remove-payment-method.mdx | 37 +- ...ve-you-cannot-modify-this-subscription.mdx | 12 +- .../troubleshoot/troubleshoot-invoices.mdx | 2 +- .../understand/billing-permissions.mdx | 26 +- .../billing/understand/billing-policy.mdx | 18 +- .../billing/understand/how-charges-accrue.mdx | 72 +- .../billing/understand/preview-services.mdx | 2 +- .../understand/usage-based-billing.mdx | 36 +- .../docs/bots/account-abuse-protection.mdx | 75 +- .../block-ai-bots.mdx | 4 +- .../custom-rules.mdx | 22 +- .../detection-ids/additional-detections.mdx | 7 +- .../bots/additional-configurations/index.mdx | 5 +- .../ja3-ja4-fingerprint/index.mdx | 81 +- .../signals-intelligence.mdx | 2 +- .../javascript-detections.mdx | 2 +- src/content/docs/bots/concepts/bot-tags.mdx | 3 +- src/content/docs/bots/concepts/bot/index.mdx | 2 +- .../bots/concepts/bot/signed-agents/index.mdx | 3 +- .../concepts/bot/signed-agents/policy.mdx | 7 +- .../concepts/bot/verified-bots/policy.mdx | 7 +- src/content/docs/bots/concepts/index.mdx | 3 +- src/content/docs/bots/get-started/index.mdx | 3 +- src/content/docs/bots/glossary.mdx | 3 +- .../docs/bots/plans/bm-subscription.mdx | 22 +- src/content/docs/bots/reference/alerts.mdx | 9 +- .../reference/bot-management-variables.mdx | 12 +- .../bots/reference/bot-verification/index.mdx | 5 +- .../bot-verification/ip-validation.mdx | 9 +- src/content/docs/bots/reference/index.mdx | 3 +- .../reference/machine-learning-models.mdx | 5 +- .../docs/bots/reference/sample-terms.mdx | 6 +- .../troubleshooting/bot-management-skips.mdx | 3 +- .../bots/troubleshooting/false-positives.mdx | 3 +- .../docs/bots/troubleshooting/index.mdx | 4 +- .../docs/bots/workers-templates/index.mdx | 3 +- .../docs/browser-run/features/index.mdx | 2 +- .../docs/browser-run/how-to/deploy-worker.mdx | 2 +- src/content/docs/browser-run/mcp-server.mdx | 2 +- .../quick-actions/api-reference.mdx | 2 +- .../reference/browser-close-reasons.mdx | 54 +- src/content/docs/byoip/address-maps/setup.mdx | 26 +- src/content/docs/byoip/changelog.mdx | 2 +- src/content/docs/byoip/concepts/index.mdx | 2 +- .../byoip/concepts/prefix-delegations.mdx | 1 - src/content/docs/byoip/glossary.mdx | 2 +- .../docs/byoip/route-leak-detection.mdx | 3 +- .../docs/byoip/service-bindings/index.mdx | 3 +- .../docs/byoip/troubleshooting/index.mdx | 9 +- .../advanced-configuration/cache-reserve.mdx | 9 +- .../advanced-configuration/crawler-hints.mdx | 9 +- .../advanced-configuration/early-hints.mdx | 21 +- .../cache/advanced-configuration/index.mdx | 3 +- .../query-string-sort.mdx | 32 +- .../serve-tailored-content.mdx | 158 +-- .../vary-for-images.mdx | 74 +- .../cache-security/avoid-web-poisoning.mdx | 18 +- .../cache-security/cache-deception-armor.mdx | 6 +- .../docs/cache/cache-security/cors.mdx | 11 +- .../docs/cache/cache-security/index.mdx | 3 +- .../docs/cache/concepts/cache-behavior.mdx | 10 +- .../docs/cache/concepts/cache-responses.mdx | 9 +- .../docs/cache/concepts/cdn-cache-control.mdx | 178 +-- .../docs/cache/concepts/customize-cache.mdx | 13 +- .../cache/concepts/default-cache-behavior.mdx | 44 +- src/content/docs/cache/concepts/index.mdx | 3 +- .../cache/concepts/retention-vs-freshness.mdx | 5 +- .../docs/cache/concepts/revalidation.mdx | 1 - src/content/docs/cache/get-started.mdx | 58 +- src/content/docs/cache/glossary.mdx | 3 +- .../docs/cache/how-to/always-online.mdx | 5 +- src/content/docs/cache/how-to/cache-keys.mdx | 72 +- .../cache-response-rules/create-dashboard.mdx | 4 +- .../how-to/cache-rules/examples/index.mdx | 4 +- .../docs/cache/how-to/cache-rules/order.mdx | 3 +- .../cache-rules/page-rules-migration.mdx | 4 +- .../how-to/configure-cache-status-code.mdx | 14 +- .../how-to/edge-browser-cache-ttl/index.mdx | 14 +- .../set-browser-ttl.mdx | 7 +- src/content/docs/cache/how-to/index.mdx | 3 +- .../how-to/purge-cache/purge-by-hostname.mdx | 9 +- .../purge-cache/purge-by-single-file.mdx | 2 +- .../how-to/purge-cache/purge-by-tags.mdx | 26 +- .../how-to/purge-cache/purge-cache-key.mdx | 72 +- .../how-to/purge-cache/purge-everything.mdx | 3 +- .../purge-cache/purge-varied-images.mdx | 1 - .../purge-cache/purge-zone-versions.mdx | 81 +- .../how-to/purge-cache/purge_by_prefix.mdx | 39 +- .../docs/cache/how-to/set-caching-levels.mdx | 9 +- .../interaction-cloudflare-products/index.mdx | 5 +- .../interaction-cloudflare-products/r2.mdx | 1 - .../waf-snippets.mdx | 2 +- .../workers-cache-rules.mdx | 9 +- .../workers.mdx | 3 +- .../performance-review/cache-analytics.mdx | 5 +- .../performance-review/cache-performance.mdx | 5 +- .../docs/cache/performance-review/index.mdx | 3 +- src/content/docs/cache/plans.mdx | 5 +- .../reference/cdn-reference-architecture.mdx | 1 - .../docs/cache/reference/development-mode.mdx | 5 +- src/content/docs/cache/reference/index.mdx | 3 +- .../cache/troubleshooting/always-online.mdx | 3 - .../docs/cache/troubleshooting/index.mdx | 3 +- .../concepts/global-acceleration.mdx | 14 +- .../reference/available-products.mdx | 2 +- .../client-ip-geolocation/about/index.mdx | 4 +- .../docs/client-ip-geolocation/faq/index.mdx | 2 - .../client-ip-geolocation/get-started.mdx | 16 +- .../docs/client-ip-geolocation/index.mdx | 14 +- .../additional-configuration.mdx | 2 +- .../challenge-pages/detect-response.mdx | 2 +- .../challenge-types/challenge-pages/index.mdx | 2 +- .../challenge-pages/resolve-challenge.mdx | 2 +- .../challenge-types/index.mdx | 6 +- .../challenge-types/turnstile.mdx | 12 +- .../cloudflare-challenges/concepts/index.mdx | 4 +- .../docs/cloudflare-challenges/index.mdx | 3 +- .../cloudflare-challenges/reference/index.mdx | 6 +- .../reference/supported-browsers.mdx | 38 +- .../reference/supported-languages.mdx | 44 +- .../challenge-solve-issues.mdx | 5 +- .../hostname-validation/backoff-schedule.mdx | 5 +- .../hostname-validation/error-codes.mdx | 1 - .../hostname-validation/pre-validation.mdx | 59 +- .../migrating-custom-hostnames.mdx | 2 +- .../hostname-analytics.mdx | 16 +- .../performance/argo-for-saas.mdx | 1 - .../performance/cache-for-saas.mdx | 1 - .../performance/early-hints-for-saas.mdx | 66 +- .../cloudflare-for-saas/performance/index.mdx | 9 +- .../reference/certificate-authorities.mdx | 1 - .../reference/certificate-statuses.mdx | 1 - .../reference/dcv-validation-backoff.mdx | 1 - .../reference/hostname-priority.mdx | 1 - .../reference/status-codes/custom-csrs.mdx | 59 +- .../status-codes/custom-hostnames.mdx | 123 +- .../reference/token-validity-periods.mdx | 8 +- .../reference/versioning.mdx | 24 +- .../saas-customers/index.mdx | 3 +- .../saas-customers/product-compatibility.mdx | 4 +- .../provider-guides/webflow.mdx | 6 +- .../certificate-statuses.mdx | 1 - .../uploading-certificates.mdx | 5 +- .../validate-certificates/delegated-dcv.mdx | 5 +- .../validate-certificates/troubleshooting.mdx | 19 +- .../webhook-definitions.mdx | 755 +++++------ .../cloudflare-for-saas/security/index.mdx | 11 +- .../security/waf-for-saas/index.mdx | 48 +- .../regional-services-for-saas.mdx | 1 - .../advanced-settings/worker-as-origin.mdx | 6 +- .../configuration/bindings.mdx | 5 + .../configuration/observability.mdx | 2 +- .../reference/limits.mdx | 2 +- .../reference/platform-examples.mdx | 2 +- .../reference/worker-isolation.mdx | 21 +- .../best-practices/minimal-ruleset.mdx | 23 +- .../cloudflare-network-firewall/index.mdx | 4 +- .../packet-captures/collect-pcaps.mdx | 2 +- .../packet-captures/pcaps-bucket-setup.mdx | 4 +- .../diagnose-traffic-decisions.mdx | 8 +- .../access-controls/access-settings/index.mdx | 1 - .../require-access-protection.mdx | 10 +- .../access-settings/session-management.mdx | 1 + .../access-controls/ai-controls/index.mdx | 1 - .../ai-controls/mcp-portals.mdx | 16 +- .../application-token.mdx | 78 +- .../http-apps/authorization-cookie/cors.mdx | 7 +- .../applications/http-apps/managed-oauth.mdx | 14 +- .../http-apps/saas-apps/generic-oidc-saas.mdx | 11 +- .../saas-apps/grafana-cloud-saas-oidc.mdx | 2 +- .../http-apps/saas-apps/grafana-saas-oidc.mdx | 2 +- .../http-apps/saas-apps/index.mdx | 3 +- .../non-http/browser-rendering.mdx | 9 +- .../arbitrary-tcp.mdx | 4 +- .../automatic-cloudflared-authentication.mdx | 2 +- .../non-http/legacy-private-network-app.mdx | 5 +- .../non-http/self-hosted-private-app.mdx | 76 +- .../access-controls/event-subscriptions.mdx | 2 +- .../access-controls/policies/app-paths.mdx | 17 +- .../access-controls/policies/index.mdx | 46 +- .../policies/policy-management.mdx | 29 +- .../require-purpose-justification.mdx | 1 - .../policies/temporary-auth.mdx | 8 +- .../service-credentials/index.mdx | 1 - .../service-credentials/service-tokens.mdx | 4 +- .../docs/cloudflare-one/account-limits.mdx | 19 +- .../docs/cloudflare-one/changelog/tunnel.mdx | 5 +- .../data-classification/index.mdx | 12 +- .../configure-detection-entries.mdx | 20 +- .../predefined-detection-entries.mdx | 296 ++--- .../dlp-profiles/predefined-profiles.mdx | 15 +- .../email-security/investigation/index.mdx | 4 +- .../investigation/search-email.mdx | 4 +- .../email-security/reference/index.mdx | 4 +- .../reference/regional-processing.mdx | 2 +- .../email-security/settings/auto-moves.mdx | 4 +- .../detection-settings/best-practices.mdx | 6 +- .../settings/detection-settings/index.mdx | 4 +- .../settings/domain-management/domain.mdx | 2 +- .../settings/domain-management/index.mdx | 4 +- .../email-security/settings/index.mdx | 4 +- .../phish-submissions/phishnet-365.mdx | 2 +- .../phishnet-google-workspace.mdx | 2 +- .../submission-addresses.mdx | 2 +- .../email-security/setup/index.mdx | 18 +- .../email-security/setup/manage-domains.mdx | 2 +- .../bcc-setup/gmail-bcc-setup/index.mdx | 5 +- .../bcc-journaling/bcc-setup/index.mdx | 5 +- .../bcc-journaling/index.mdx | 2 +- .../bcc-journaling/journaling-setup/index.mdx | 5 +- .../journaling-setup/m365-journaling.mdx | 3 +- .../journaling-setup/manual-add.mdx | 1 - .../setup/post-delivery-deployment/index.mdx | 4 +- .../pre-delivery-deployment/egress-ips.mdx | 2 +- .../setup/pre-delivery-deployment/index.mdx | 6 +- .../partner-domain-tls.mdx | 2 +- .../prerequisites/index.mdx | 6 +- .../use-cases/index.mdx | 5 +- .../email-security/submissions/index.mdx | 2 +- .../submissions/invalid-submissions.mdx | 2 +- .../docs/cloudflare-one/faq/devices-faq.mdx | 11 +- .../insights/analytics-overview.mdx | 2 +- .../insights/analytics/ai-security.mdx | 26 +- .../insights/analytics/application-access.mdx | 36 +- .../insights/dex/mcp-server.mdx | 3 +- .../insights/dex/monitoring.mdx | 10 +- .../cloudflare-one/insights/dex/rules.mdx | 2 +- .../insights/dex/tests/index.mdx | 6 +- .../docs/cloudflare-one/insights/index.mdx | 18 +- .../dashboard-logs/admin-activity-logs.mdx | 24 +- .../dashboard-logs/gateway-logs/index.mdx | 63 +- .../insights/logs/dashboard-logs/index.mdx | 2 +- .../logs/dashboard-logs/posture-logs.mdx | 2 +- .../insights/logs/logpush/index.mdx | 32 +- .../diagnostics/buckets.mdx | 4 +- .../network-visibility/diagnostics/index.mdx | 5 +- .../integrations/cloud-and-saas/anthropic.mdx | 22 +- .../microsoft-365/m365-copilot-fedramp.mdx | 2 +- .../microsoft-365/m365-copilot.mdx | 2 +- .../identity-providers/aws-saml.mdx | 2 +- .../identity-providers/cloudflare.mdx | 4 +- .../identity-providers/facebook-login.mdx | 8 +- .../identity-providers/github.mdx | 4 +- .../integrations/identity-providers/index.mdx | 1 - .../integrations/identity-providers/okta.mdx | 4 +- .../identity-providers/pingone-saml.mdx | 1 - .../identity-providers/signed_authn.mdx | 2 - .../integrations/service-providers/index.mdx | 4 +- .../networks/connectivity-options.mdx | 22 +- .../connectors/cloudflare-mesh/routes.mdx | 1 + .../configure-tunnels/cipher-suites.mdx | 10 +- .../configure-tunnels/index.mdx | 2 +- .../configure-tunnels/origin-parameters.mdx | 16 +- .../remote-tunnel-permissions.mdx | 126 +- .../configure-tunnels/run-parameters.mdx | 28 +- .../system-requirements.mdx | 5 +- .../tunnel-with-firewall.mdx | 19 +- .../deployment-guides/index.mdx | 2 +- .../deployment-guides/terraform.mdx | 1 - .../tunnel-useful-commands.mdx | 14 +- .../downloads/copyrights.mdx | 57 +- .../cloudflare-tunnel/downloads/license.mdx | 1 - .../get-started/create-remote-tunnel-api.mdx | 117 +- .../get-started/create-remote-tunnel.mdx | 6 +- .../cloudflare-tunnel/get-started/index.mdx | 3 +- .../connectors/cloudflare-tunnel/index.mdx | 4 +- .../monitor-tunnels/index.mdx | 3 +- .../monitor-tunnels/notifications.mdx | 3 +- .../private-net/cloudflared/connect-cidr.mdx | 14 +- .../private-net/cloudflared/index.mdx | 3 +- .../private-net/cloudflared/private-dns.mdx | 23 +- .../routing-to-tunnel/dns.mdx | 13 +- .../routing-to-tunnel/protocols.mdx | 14 +- .../public-load-balancers.mdx | 41 +- .../troubleshoot-tunnels/common-errors.mdx | 1 - .../troubleshoot-tunnels/diag-logs.mdx | 59 +- .../troubleshoot-tunnels/index.mdx | 2 +- .../cloudflare-tunnel/use-cases/index.mdx | 9 +- .../cloudflare-tunnel/use-cases/rdp/index.mdx | 2 +- .../use-cases/rdp/rdp-device-client.mdx | 2 +- .../use-cases/vnc-browser-rendering.mdx | 214 ++-- .../cloudflare-wan/analytics/index.mdx | 23 +- .../analytics/netflow-analytics.mdx | 9 +- .../analytics/network-analytics.mdx | 5 +- .../analytics/packet-captures.mdx | 1 - .../analytics/query-bandwidth.mdx | 5 +- .../analytics/query-tunnel-health.mdx | 8 +- .../analytics/site-analytics.mdx | 16 +- .../configure-hardware-appliance/index.mdx | 84 +- .../sfp-port-information.mdx | 4 +- .../appliance/configure-virtual-appliance.mdx | 80 +- .../appliance/device-metrics.mdx | 3 +- .../configuration/appliance/index.mdx | 11 +- .../maintenance/activate-appliance.mdx | 9 +- .../maintenance/deactivate-appliance.mdx | 1 - .../appliance/maintenance/heartbeat.mdx | 1 - .../appliance/maintenance/index.mdx | 3 +- .../maintenance/interrupt-service-window.mdx | 1 - .../maintenance/remove-appliances.mdx | 2 +- .../breakout-traffic.mdx | 18 +- .../application-based-policies/index.mdx | 14 +- .../prioritized-traffic.mdx | 14 +- .../network-options/dhcp/dhcp-relay.mdx | 8 +- .../network-options/dhcp/dhcp-server.mdx | 5 +- .../dhcp/dhcp-static-address-reservation.mdx | 8 +- .../appliance/network-options/index.mdx | 5 +- .../network-options/link-aggregation.mdx | 14 +- .../appliance/network-options/nat-subnet.mdx | 15 +- .../network-options/network-segmentation.mdx | 14 +- .../network-options/routed-subnets.mdx | 18 +- .../configuration/appliance/reference.mdx | 33 +- .../appliance/troubleshooting.mdx | 9 +- .../check-tunnel-health-dashboard.mdx | 11 +- .../configure-tunnel-health-alerts.mdx | 6 +- .../common-settings/custom-ike-id-ipsec.mdx | 5 +- .../configuration/common-settings/sites.mdx | 12 +- .../update-tunnel-health-checks-frequency.mdx | 3 +- .../configure-cloudflare-source-ips.mdx | 13 +- .../configuration/how-to/configure-routes.mdx | 34 +- .../how-to/configure-tunnel-endpoints.mdx | 45 +- .../configuration/how-to/index.mdx | 5 +- .../configuration/how-to/traceroute.mdx | 11 +- .../cloudflare-wan/configuration/index.mdx | 3 +- .../third-party/alibaba-cloud.mdx | 19 +- .../third-party/aruba-edgeconnect.mdx | 15 +- .../configuration/third-party/aws.mdx | 17 +- .../third-party/azure/azure-virtual-wan.mdx | 22 +- .../third-party/azure/azure-vpn-gateway.mdx | 22 +- .../configuration/third-party/azure/index.mdx | 4 +- .../third-party/cisco-ios-xe.mdx | 5 +- .../third-party/cisco-meraki-static.mdx | 30 +- .../configuration/third-party/fitelnet.mdx | 19 +- .../configuration/third-party/fortinet.mdx | 25 +- .../configuration/third-party/google.mdx | 16 +- .../configuration/third-party/index.mdx | 5 +- .../configuration/third-party/juniper.mdx | 19 +- .../configuration/third-party/oracle.mdx | 16 +- .../configuration/third-party/palo-alto.mdx | 19 +- .../configuration/third-party/pfsense.mdx | 19 +- .../configuration/third-party/sonicwall.mdx | 22 +- .../third-party/sophos-firewall.mdx | 22 +- .../configuration/third-party/strongswan.mdx | 13 +- .../configuration/third-party/ubiquiti.mdx | 10 +- .../configuration/third-party/velocloud.mdx | 13 +- .../configuration/third-party/viptela.mdx | 19 +- .../configuration/third-party/vyos.mdx | 4 +- .../configuration/third-party/yamaha.mdx | 16 +- .../connectors/cloudflare-wan/get-started.mdx | 21 +- .../connectors/cloudflare-wan/index.mdx | 20 +- .../cloudflare-wan/legal/3rdparty.mdx | 1 - .../connectors/cloudflare-wan/legal/index.mdx | 3 +- .../cloudflare-wan/network-interconnect.mdx | 17 +- .../connectors/cloudflare-wan/on-ramps.mdx | 20 +- .../reference/anti-replay-protection.mdx | 3 +- .../reference/bandwidth-measurement.mdx | 3 +- .../reference/device-compatibility.mdx | 76 +- .../reference/gre-ipsec-tunnels.mdx | 10 +- ...dflare-calculates-tunnel-health-alerts.mdx | 10 +- .../cloudflare-wan/reference/index.mdx | 3 +- .../cloudflare-wan/reference/mtu-mss.mdx | 2 +- .../reference/traffic-steering.mdx | 28 +- .../reference/tunnel-health-checks.mdx | 12 +- .../connectors/cloudflare-wan/security.mdx | 9 +- .../troubleshooting/connectivity.mdx | 15 +- .../cloudflare-wan/troubleshooting/index.mdx | 3 +- .../troubleshooting/ipsec-troubleshoot.mdx | 17 +- .../troubleshooting/routing-and-bgp.mdx | 24 +- .../troubleshooting/tunnel-health.mdx | 33 +- .../cloudflare-wan/wan-transformation.mdx | 12 +- .../zero-trust/cloudflare-gateway.mdx | 45 +- .../zero-trust/cloudflare-one-client.mdx | 24 +- .../zero-trust/cloudflare-tunnel.mdx | 15 +- .../cloudflare-wan/zero-trust/index.mdx | 1 - .../zero-trust/security-services.mdx | 9 +- .../connectors/granular-permissions.mdx | 2 +- .../networks/connectors/index.mdx | 3 +- .../networks/routes/add-routes.mdx | 20 +- .../networks/routes/reserved-ips.mdx | 4 +- .../networks/virtual-networks.mdx | 12 +- .../accessibility.mdx | 2 +- .../remote-browser-isolation/index.mdx | 2 - .../known-limitations.mdx | 5 +- .../network-dependencies.mdx | 4 +- .../remote-browser-isolation/setup/index.mdx | 14 +- .../custom-pages/gateway-block-page.mdx | 2 +- .../custom-pages/index.mdx | 2 +- .../client-checks/antivirus.mdx | 31 +- .../client-checks/application-check.mdx | 4 +- .../client-checks/file-check.mdx | 3 +- .../posture-checks/client-checks/firewall.mdx | 11 +- .../posture-checks/client-checks/index.mdx | 41 +- .../client-checks/os-version.mdx | 3 +- .../client-checks/require-warp.mdx | 2 +- .../reusable-components/tags.mdx | 1 - .../configure/modes/index.mdx | 4 +- .../troubleshooting/common-issues.mdx | 15 + .../troubleshooting/connectivity-status.mdx | 36 +- .../troubleshooting/diagnostic-logs.mdx | 184 +-- .../devices/device-registration.mdx | 35 +- .../devices/user-side-certificates/index.mdx | 10 +- .../manual-deployment.mdx | 218 ++-- .../team-and-resources/users/risk-score.mdx | 19 +- .../team-and-resources/users/scim.mdx | 3 +- .../team-and-resources/users/users.mdx | 10 +- .../traffic-policies/global-policies.mdx | 18 +- .../network-policies/protocol-detection.mdx | 18 +- .../best-practices/magic-transit-egress.mdx | 6 +- .../tiered-policies/index.mdx | 12 +- .../tiered-policies/tenant-api.mdx | 1 - .../cloudflare-one/troubleshooting/access.mdx | 2 +- .../troubleshooting/browser-isolation.mdx | 2 +- .../cloudflare-one/troubleshooting/casb.mdx | 2 +- .../troubleshooting/contact-support.mdx | 4 + .../cloudflare-one/troubleshooting/dex.mdx | 2 +- .../troubleshooting/email-security.mdx | 2 +- .../troubleshooting/gateway.mdx | 2 +- .../cloudflare-one/troubleshooting/tunnel.mdx | 33 +- .../troubleshooting/wan/connectivity.mdx | 17 +- .../troubleshooting/wan/index.mdx | 2 +- .../troubleshooting/wan/ipsec.mdx | 19 +- .../troubleshooting/wan/routing-bgp.mdx | 26 +- .../troubleshooting/wan/tunnel-health.mdx | 35 +- .../troubleshooting/warp-client.mdx | 2 +- .../tutorials/entra-id-risky-users.mdx | 40 +- .../docs/cloudflare-wan/analytics/index.mdx | 7 +- .../analytics/netflow-analytics.mdx | 5 +- .../analytics/network-analytics.mdx | 7 +- .../analytics/packet-captures.mdx | 1 - .../analytics/query-bandwidth.mdx | 6 +- .../analytics/query-tunnel-health.mdx | 9 +- .../analytics/site-analytics.mdx | 19 +- src/content/docs/cloudflare-wan/changelog.mdx | 7 +- .../configure-hardware-appliance/index.mdx | 79 +- .../sfp-port-information.mdx | 4 +- .../appliance/device-metrics.mdx | 3 +- .../configuration/appliance/index.mdx | 9 +- .../maintenance/activate-appliance.mdx | 9 +- .../appliance/maintenance/index.mdx | 5 +- .../maintenance/register-appliance.mdx | 2 +- .../maintenance/remove-appliances.mdx | 2 +- .../breakout-traffic.mdx | 27 +- .../prioritized-traffic.mdx | 14 +- .../network-options/dhcp/dhcp-options.mdx | 42 +- .../network-options/dhcp/dhcp-relay.mdx | 8 +- .../network-options/dhcp/dhcp-server.mdx | 7 +- .../dhcp/dhcp-static-address-reservation.mdx | 8 +- .../appliance/network-options/index.mdx | 5 +- .../network-options/link-aggregation.mdx | 14 +- .../appliance/network-options/nat-subnet.mdx | 15 +- .../network-options/network-segmentation.mdx | 11 +- .../network-options/routed-subnets.mdx | 18 +- .../appliance/troubleshooting.mdx | 9 +- .../common-settings/custom-ike-id-ipsec.mdx | 5 +- .../configuration/common-settings/sites.mdx | 8 +- .../configure-cloudflare-source-ips.mdx | 13 +- .../configuration/how-to/configure-routes.mdx | 25 +- .../how-to/configure-tunnel-endpoints.mdx | 32 +- .../configuration/how-to/index.mdx | 5 +- .../configuration/how-to/traceroute.mdx | 7 +- .../cloudflare-wan/configuration/index.mdx | 3 +- .../configuration/multi-cloud-networking.mdx | 3 +- .../third-party/alibaba-cloud.mdx | 20 +- .../configuration/third-party/aws.mdx | 17 +- .../third-party/azure/azure-virtual-wan.mdx | 21 +- .../third-party/azure/azure-vpn-gateway.mdx | 21 +- .../configuration/third-party/azure/index.mdx | 4 +- .../third-party/cisco-ios-xe.mdx | 6 +- .../third-party/cisco-meraki-static.mdx | 21 +- .../configuration/third-party/fitelnet.mdx | 20 +- .../configuration/third-party/fortinet.mdx | 25 +- .../configuration/third-party/google.mdx | 17 +- .../configuration/third-party/index.mdx | 5 +- .../configuration/third-party/juniper.mdx | 18 +- .../configuration/third-party/oracle.mdx | 17 +- .../configuration/third-party/palo-alto.mdx | 18 +- .../configuration/third-party/pfsense.mdx | 20 +- .../configuration/third-party/sonicwall.mdx | 23 +- .../third-party/sophos-firewall.mdx | 23 +- .../configuration/third-party/strongswan.mdx | 14 +- .../configuration/third-party/ubiquiti.mdx | 10 +- .../configuration/third-party/velocloud.mdx | 14 +- .../configuration/third-party/viptela.mdx | 19 +- .../configuration/third-party/vyos.mdx | 4 +- .../configuration/third-party/yamaha.mdx | 16 +- .../docs/cloudflare-wan/get-started.mdx | 11 +- src/content/docs/cloudflare-wan/glossary.mdx | 3 +- src/content/docs/cloudflare-wan/index.mdx | 5 +- .../docs/cloudflare-wan/legal/3rdparty.mdx | 3 +- .../docs/cloudflare-wan/legal/index.mdx | 5 +- .../cloudflare-wan/network-interconnect.mdx | 16 +- src/content/docs/cloudflare-wan/on-ramps.mdx | 4 +- .../reference/anti-replay-protection.mdx | 3 +- .../reference/bandwidth-measurement.mdx | 4 +- .../reference/device-compatibility.mdx | 58 +- .../reference/gre-ipsec-tunnels.mdx | 4 +- ...dflare-calculates-tunnel-health-alerts.mdx | 9 +- .../docs/cloudflare-wan/reference/index.mdx | 5 +- .../docs/cloudflare-wan/reference/mtu-mss.mdx | 6 +- .../reference/traffic-steering.mdx | 3 +- .../reference/tunnel-health-checks.mdx | 9 +- .../reference/virtual-networks.mdx | 9 +- src/content/docs/cloudflare-wan/security.mdx | 8 +- .../troubleshooting/connectivity.mdx | 5 +- .../cloudflare-wan/troubleshooting/index.mdx | 3 +- .../troubleshooting/ipsec-troubleshoot.mdx | 10 +- .../troubleshooting/routing-and-bgp.mdx | 22 +- .../troubleshooting/tunnel-health.mdx | 30 +- .../zero-trust/cloudflare-tunnel.mdx | 12 +- .../zero-trust/connectivity-options.mdx | 19 +- .../docs/cloudflare-wan/zero-trust/index.mdx | 4 +- .../docs/constellation/platform/index.mdx | 2 +- src/content/docs/containers/examples/cron.mdx | 41 +- .../examples/durable-object-interface.mdx | 1 - .../docs/containers/examples/index.mdx | 1 - .../containers/platform-details/placement.mdx | 8 +- src/content/docs/containers/pricing.mdx | 2 +- src/content/docs/containers/ssh.mdx | 2 +- .../d1/best-practices/local-development.mdx | 2 - .../docs/d1/best-practices/query-d1.mdx | 50 +- .../d1/best-practices/remote-development.mdx | 15 +- .../docs/d1/best-practices/retry-queries.mdx | 26 +- .../d1/best-practices/use-d1-from-pages.mdx | 2 +- .../docs/d1/best-practices/use-indexes.mdx | 26 +- .../docs/d1/configuration/environments.mdx | 60 +- src/content/docs/d1/get-started.mdx | 12 +- src/content/docs/d1/observability/billing.mdx | 4 +- src/content/docs/d1/platform/limits.mdx | 34 +- .../docs/d1/reference/community-projects.mdx | 40 +- .../docs/d1/reference/data-security.mdx | 6 +- src/content/docs/d1/reference/faq.mdx | 4 +- .../docs/d1/reference/generated-columns.mdx | 24 +- src/content/docs/d1/reference/glossary.mdx | 2 +- src/content/docs/d1/reference/migrations.mdx | 6 +- src/content/docs/d1/sql-api/foreign-keys.mdx | 28 +- src/content/docs/d1/sql-api/query-json.mdx | 82 +- .../tutorials/build-an-api-to-access-d1.mdx | 8 +- .../docs/d1/tutorials/d1-and-prisma-orm.mdx | 2 +- .../docs/data-localization/compatibility.mdx | 68 +- .../data-localization/geo-key-manager.mdx | 5 +- .../docs/ddos-protection/about/components.mdx | 3 +- .../about/how-ddos-protection-works.mdx | 17 +- .../docs/ddos-protection/about/index.mdx | 5 +- .../api/dns-protection/index.mdx | 17 +- .../api/dns-protection/json-objects.mdx | 21 +- .../advanced-ddos-systems/api/index.mdx | 3 +- .../programmable-flow-protection/examples.mdx | 209 ++- .../programmable-flow-protection/index.mdx | 37 +- .../json-objects.mdx | 61 +- .../api/tcp-protection/examples.mdx | 217 ++-- .../api/tcp-protection/index.mdx | 103 +- .../api/tcp-protection/json-objects.mdx | 51 +- .../how-to/add-prefix.mdx | 6 +- .../how-to/exclude-prefix.mdx | 5 +- .../advanced-ddos-systems/how-to/index.mdx | 5 +- .../advanced-ddos-systems/index.mdx | 4 +- .../advanced-ddos-systems/overview/index.mdx | 16 +- .../overview/programmable-flow-protection.mdx | 92 +- .../advanced-ddos-systems/troubleshooting.mdx | 13 +- .../ddos-protection/best-practices/index.mdx | 3 +- .../best-practices/proactive-defense.mdx | 4 +- .../best-practices/third-party.mdx | 2 +- .../ddos-protection/botnet-threat-feed.mdx | 58 +- .../docs/ddos-protection/get-started.mdx | 3 +- .../managed-rulesets/http/index.mdx | 2 +- .../managed-rulesets/index.mdx | 1 - .../managed-rulesets/network/index.mdx | 2 +- .../network-overrides/override-examples.mdx | 12 +- .../docs/ddos-protection/reference/alerts.mdx | 2 +- .../docs/ddos-protection/reference/index.mdx | 3 +- .../docs/ddos-protection/reference/logs.mdx | 3 +- .../reference/simulate-ddos-attack.mdx | 3 +- src/content/docs/dmarc-management/enable.mdx | 3 +- .../dmarc-management/security-records.mdx | 2 +- .../docs/dmarc-management/statistics.mdx | 1 - .../docs/dns/additional-options/index.mdx | 2 +- src/content/docs/dns/changelog.mdx | 8 +- .../docs/dns/cname-flattening/index.mdx | 2 +- .../set-up-cname-flattening.mdx | 8 +- .../random-prefix-attacks/setup.mdx | 11 +- src/content/docs/dns/dnssec/dnssec-states.mdx | 13 +- src/content/docs/dns/dnssec/enable-nsec3.mdx | 4 +- src/content/docs/dns/dnssec/index.mdx | 19 +- .../dns/dnssec/multi-signer-dnssec/about.mdx | 4 +- .../dns/dnssec/multi-signer-dnssec/setup.mdx | 2 +- .../dnssec/validation-and-key-management.mdx | 8 +- .../docs/dns/foundation-dns/dnssec-keys.mdx | 3 +- src/content/docs/dns/foundation-dns/index.mdx | 23 +- src/content/docs/dns/glossary.mdx | 2 +- .../docs/dns/internal-dns/analytics.mdx | 2 +- .../how-to/create-subdomain.mdx | 3 +- .../how-to/email-records.mdx | 15 +- .../dns/manage-dns-records/how-to/index.mdx | 3 +- .../how-to/managing-dynamic-ip-addresses.mdx | 3 +- .../how-to/round-robin-dns.mdx | 1 - .../how-to/subdomains-outside-cloudflare.mdx | 17 +- .../manage-dns-records/reference/index.mdx | 3 +- .../reference/record-attributes.mdx | 17 +- .../dns/manage-dns-records/reference/ttl.mdx | 3 +- .../troubleshooting/exposed-ip-address.mdx | 3 +- .../troubleshooting/index.mdx | 5 +- .../dns/nameservers/advanced-nameservers.mdx | 1 - .../zone-custom-nameservers.mdx | 1 + .../docs/dns/private-origins/index.mdx | 3 +- .../docs/dns/reference/all-features.mdx | 3 +- .../dns/reference/analytics-mcp-server.mdx | 3 +- .../docs/dns/reference/best-practices.mdx | 3 +- .../docs/dns/reference/domain-connect.mdx | 18 +- src/content/docs/dns/reference/index.mdx | 2 +- .../recommended-third-party-tools.mdx | 9 +- .../docs/dns/troubleshooting/email-issues.mdx | 12 +- .../docs/dns/troubleshooting/index.mdx | 9 +- .../conversions/convert-full-to-secondary.mdx | 34 +- .../conversions/convert-partial-to-full.mdx | 2 +- .../dns/zone-setups/conversions/index.mdx | 2 +- .../docs/dns/zone-setups/full-setup/index.mdx | 2 +- .../partial-setup/dns-resolution.mdx | 7 +- .../dns/zone-setups/partial-setup/setup.mdx | 11 +- .../zone-setups/reference/domain-status.mdx | 10 +- .../docs/dns/zone-setups/reference/index.mdx | 3 +- .../subdomain-setup/move-to-new-account.mdx | 1 - .../zone-setups/subdomain-setup/rollback.mdx | 5 +- .../subdomain-setup/setup/parent-on-full.mdx | 3 - .../setup/parent-on-partial.mdx | 3 +- .../dns/zone-setups/troubleshooting/index.mdx | 3 +- .../cloudflare-as-primary/index.mdx | 2 +- .../transfer-criteria.mdx | 3 +- .../cloudflare-as-secondary/alerts.mdx | 3 +- .../cloudflare-as-secondary/index.mdx | 4 +- .../cloudflare-as-secondary/proxy-traffic.mdx | 2 +- .../docs/durable-objects/api/alarms.mdx | 77 +- .../api/legacy-kv-storage-api.mdx | 13 +- .../api/sqlite-storage-api.mdx | 24 +- .../access-durable-objects-storage.mdx | 3 + .../concepts/durable-object-lifecycle.mdx | 2 +- .../docs/durable-objects/examples/agents.mdx | 2 +- .../docs/durable-objects/examples/index.mdx | 5 +- .../examples/websocket-server.mdx | 8 +- .../observability/data-studio.mdx | 2 +- .../durable-objects/platform/known-issues.mdx | 2 +- .../docs/durable-objects/platform/limits.mdx | 1 - .../reference/data-location.mdx | 16 +- .../reference/data-security.mdx | 6 +- .../reference/environments.mdx | 7 +- .../docs/durable-objects/reference/faq.mdx | 6 +- .../durable-objects/reference/glossary.mdx | 2 +- .../reference/in-memory-state.mdx | 30 +- .../docs/durable-objects/video-tutorials.mdx | 12 +- .../docs/dynamic-workers/usage/bindings.mdx | 140 +- .../email-workers/local-development.mdx | 95 +- .../email-workers/reply-email-workers.mdx | 60 +- .../email-routing/get-started/audit-logs.mdx | 8 +- .../docs/email-routing/get-started/index.mdx | 2 +- .../docs/email-routing/graphql-example.mdx | 2 +- src/content/docs/email-routing/limits.mdx | 2 +- src/content/docs/email-routing/postmaster.mdx | 3 +- .../setup/email-routing-dns-records.mdx | 8 +- .../docs/email-routing/setup/index.mdx | 2 +- .../email-routing/troubleshooting/index.mdx | 2 +- .../email-security/account-setup/index.mdx | 2 +- .../gsuite-bcc-setup/create-project-gcp.mdx | 4 +- .../deployment/inline/reference/index.mdx | 2 +- .../deployment/inline/setup/index.mdx | 2 +- .../domains-and-routing/alert-webhooks.mdx | 10 +- .../domains-and-routing/index.mdx | 2 +- .../email-policies/index.mdx | 2 +- .../enhanced-detections/index.mdx | 2 +- .../email-configuration/lists/index.mdx | 2 +- .../migrate-to-email-security.mdx | 26 +- .../docs/email-security/reference/index.mdx | 2 +- src/content/docs/email-service/api/index.mdx | 2 +- .../api/route-emails/email-handler.mdx | 2 +- .../email-service/api/route-emails/index.mdx | 2 +- .../api/send-emails/rest-api.mdx | 52 +- .../api/send-emails/workers-api.mdx | 40 +- .../docs/email-service/concepts/index.mdx | 2 +- .../email-service/configuration/index.mdx | 2 +- .../email-routing/hard-bounce-handling.mdx | 241 ++-- .../examples/email-routing/spam-filtering.mdx | 33 +- .../email-service/get-started/send-emails.mdx | 34 +- .../email-service/local-development/index.mdx | 2 +- .../local-development/routing.mdx | 44 +- .../docs/email-service/platform/index.mdx | 2 +- .../docs/email-service/platform/pricing.mdx | 8 +- .../docs/email-service/reference/index.mdx | 5 +- .../email-service/reference/postmaster.mdx | 1 - .../docs/firewall/api/cf-filters/delete.mdx | 38 +- .../docs/firewall/api/cf-filters/get.mdx | 100 +- .../docs/firewall/api/cf-filters/post.mdx | 68 +- .../docs/firewall/api/cf-filters/put.mdx | 52 +- .../firewall/api/cf-filters/validation.mdx | 34 +- .../api/cf-filters/what-is-a-filter.mdx | 10 +- .../firewall/api/cf-firewall-rules/get.mdx | 160 +-- .../firewall/api/cf-firewall-rules/post.mdx | 116 +- .../cf-firewall-rules/order-priority.mdx | 1 - .../account-security/cloudflare-access.mdx | 4 +- .../account/account-security/index.mdx | 2 +- .../leaked-password-notifications.mdx | 2 - .../manage-active-sessions.mdx | 2 +- .../account/account-security/zone-holds.mdx | 4 +- .../fundamentals/account/create-account.mdx | 11 +- .../account/find-account-and-zone-ids.mdx | 12 +- .../docs/fundamentals/account/index.mdx | 2 +- .../api/how-to/control-api-access.mdx | 6 +- .../api/how-to/create-via-api.mdx | 32 +- .../api/how-to/restrict-tokens.mdx | 7 +- src/content/docs/fundamentals/api/index.mdx | 2 +- .../docs/fundamentals/api/reference/index.mdx | 2 +- .../fundamentals/api/reference/limits.mdx | 6 +- .../docs/fundamentals/api/troubleshooting.mdx | 18 +- .../concepts/how-cloudflare-works.mdx | 8 +- .../docs/fundamentals/concepts/index.mdx | 2 +- .../concepts/traffic-flow-cloudflare.mdx | 22 +- src/content/docs/fundamentals/index.mdx | 4 +- .../fundamentals/manage-domains/add-site.mdx | 11 +- .../manage-domains/domain-version.mdx | 12 +- .../manage-domains/move-domain.mdx | 2 - .../manage-domains/pause-cloudflare.mdx | 4 +- .../fundamentals/manage-members/index.mdx | 2 +- .../fundamentals/manage-members/policies.mdx | 5 +- .../fundamentals/manage-members/roles.mdx | 2 +- .../fundamentals/manage-members/scope.mdx | 52 +- .../manage-members/user-groups.mdx | 23 +- .../docs/fundamentals/new-features/index.mdx | 4 +- .../organizations/limitations.mdx | 4 +- .../docs/fundamentals/organizations/setup.mdx | 16 +- .../fundamentals/performance/improve-seo.mdx | 16 +- .../docs/fundamentals/performance/index.mdx | 2 +- .../fundamentals/performance/test-speed.mdx | 16 +- .../fundamentals/reference/best-practices.mdx | 6 +- .../reference/cdn-cgi-endpoint.mdx | 12 +- .../reference/cloudflare-ray-id.mdx | 3 +- .../reference/connection-limits.mdx | 22 +- .../reference/cryptographic-personhood.mdx | 44 +- .../docs/fundamentals/reference/glossary.mdx | 2 +- .../reference/google-analytics.mdx | 4 - .../docs/fundamentals/reference/index.mdx | 2 +- .../scim-virtual-groups-migration.mdx | 17 +- .../docs/fundamentals/reference/partners.mdx | 2 +- .../delivering-videos-with-cloudflare.mdx | 18 +- .../reference/policies-compliances/index.mdx | 2 +- .../docs/fundamentals/reference/redirects.mdx | 2 +- .../report-abuse/abuse-report-obligations.mdx | 6 +- .../report-abuse/complaint-types.mdx | 26 +- .../reference/report-abuse/index.mdx | 8 +- .../reference/report-abuse/submit-report.mdx | 12 +- .../sdk-ecosystem-support-policy.mdx | 14 +- .../reference/tcp-connections.mdx | 4 +- .../reference/troubleshooting.mdx | 44 +- .../docs/fundamentals/security/index.mdx | 2 +- .../docs/fundamentals/security/pci-scans.mdx | 6 +- .../security/under-ddos-attack.mdx | 8 +- .../docs/fundamentals/user-profiles/2fa.mdx | 34 +- .../user-profiles/account-recovery.mdx | 10 +- .../change-password-or-email.mdx | 2 +- .../user-profiles/customize-account.mdx | 6 +- .../user-profiles/delete-account.mdx | 5 +- .../docs/fundamentals/user-profiles/login.mdx | 7 +- .../multi-factor-email-authentication.mdx | 6 +- .../user-profiles/verify-email-address.mdx | 6 +- src/content/docs/google-tag-gateway/index.mdx | 6 +- .../concepts/health-checks-regions.mdx | 1 - .../docs/health-checks/concepts/index.mdx | 3 +- .../health-checks/health-checks-analytics.mdx | 3 +- .../how-to/health-checks-notifications.mdx | 5 +- .../docs/health-checks/how-to/index.mdx | 3 +- .../health-checks/how-to/zone-lockdown.mdx | 3 +- .../drizzle-orm.mdx | 4 +- .../prisma-postgres.mdx | 15 +- .../postgres-database-providers/supabase.mdx | 2 +- .../observability/troubleshooting.mdx | 78 +- .../docs/hyperdrive/platform/limits.mdx | 28 +- .../hyperdrive/platform/storage-options.mdx | 2 +- .../reference/wrangler-commands.mdx | 2 +- .../docs/hyperdrive/tutorials/index.mdx | 2 +- ...rverless-timeseries-api-with-timescale.mdx | 2 +- .../optimization/make-responsive-images.mdx | 17 +- .../optimization/transformations/flows.mdx | 19 +- .../optimization/transformations/overview.mdx | 3 +- .../docs/key-transparency/api/epochs.mdx | 2 +- .../docs/key-transparency/api/index.mdx | 4 +- .../docs/key-transparency/api/namespaces.mdx | 8 +- .../docs/kv/api/delete-key-value-pairs.mdx | 37 +- src/content/docs/kv/concepts/kv-bindings.mdx | 32 +- .../docs/kv/concepts/kv-namespaces.mdx | 17 +- src/content/docs/kv/get-started.mdx | 15 +- src/content/docs/kv/glossary.mdx | 2 +- src/content/docs/kv/observability/index.mdx | 2 +- .../kv/observability/metrics-analytics.mdx | 1 + src/content/docs/kv/platform/pricing.mdx | 2 +- .../docs/kv/reference/data-security.mdx | 6 +- .../docs/kv/reference/environments.mdx | 2 - src/content/docs/kv/reference/kv-commands.mdx | 4 +- .../account-security/audit-logs.mdx | 2 +- .../account-security/index.mdx | 6 +- .../review-active-sessions.mdx | 2 +- .../account-security/review-audit-logs.mdx | 2 +- .../account-security/set-up-2fa.mdx | 4 +- .../browser-integrity.mdx | 2 +- .../default-traffic-security/ddos.mdx | 4 +- .../default-traffic-security/dnssec.mdx | 2 +- .../default-traffic-security/index.mdx | 2 +- .../default-traffic-security/mtls.mdx | 2 +- .../application-security/firewall/index.mdx | 4 +- .../lists/configuration.mdx | 2 +- .../application-security/lists/features.mdx | 2 +- .../application-security/lists/index.mdx | 8 +- .../application-security/lists/use-cases.mdx | 2 +- .../rate-limiting/configurations.mdx | 16 +- .../rate-limiting/features.mdx | 2 +- .../rate-limiting/index.mdx | 4 +- .../rate-limiting/use-cases.mdx | 2 +- .../security-center/brand-protection.mdx | 2 +- .../security-center/index.mdx | 6 +- .../access-application/index.mdx | 8 +- .../advanced-workflows/index.mdx | 8 +- .../alternative-onramps/clientless-rbi.mdx | 6 +- .../alternative-onramps/index.mdx | 4 +- .../clientless-access/concepts/index.mdx | 2 +- .../concepts/what-is-clientless-access.mdx | 2 +- .../best-practices.mdx | 6 +- .../create-tunnel.mdx | 11 +- .../connect-private-applications/index.mdx | 4 +- .../customize-ux/app-launcher.mdx | 2 +- .../customize-ux/block-page.mdx | 2 +- .../customize-ux/bookmarks.mdx | 2 +- .../clientless-access/customize-ux/index.mdx | 8 +- .../customize-ux/login-page.mdx | 2 +- .../clientless-access/customize-ux/tags.mdx | 2 +- .../clientless-access/initial-setup/index.mdx | 8 +- .../migrate-applications/best-practices.mdx | 14 +- .../migrate-applications/index.mdx | 6 +- .../migrate-applications/integrated-sso.mdx | 12 +- .../clientless-access/terraform/index.mdx | 2 +- .../create-zero-trust-org.mdx | 2 +- .../cybersafe/account-creation/index.mdx | 6 +- .../cybersafe/concepts/index.mdx | 8 +- .../concepts/what-is-dns-filtering.mdx | 18 +- .../gateway-verify-local-connectivity.mdx | 8 +- .../advertise-prefixes.mdx | 2 +- .../data-center-protection/concepts/index.mdx | 2 +- .../data-center-protection/configure-ddos.mdx | 14 +- .../configure-routes.mdx | 18 +- .../configure-tunnels.mdx | 29 +- .../configure-tunnels-routes/index.mdx | 2 +- .../enable-notifications.mdx | 5 +- .../data-center-protection/get-started.mdx | 8 +- .../run-pre-flight-checks.mdx | 1 + .../dns-best-practices/concepts/index.mdx | 8 +- .../dns-best-practices/concepts/phase-1.mdx | 52 +- .../dns-best-practices/concepts/phase-2.mdx | 42 +- .../dns-best-practices/concepts/phase-3.mdx | 31 +- .../dns-best-practices/concepts/phase-4.mdx | 38 +- .../concepts/summary-considerations.mdx | 20 +- .../holistic-ai-security/appendix/index.mdx | 1 - .../holistic-ai-security/concepts/index.mdx | 1 - .../holistic-ai-security/concepts/mcp.mdx | 1 - .../concepts/shadow-ai.mdx | 1 - .../get-started/additional-setup.mdx | 2 +- .../get-started/define-ai-risk-tolerance.mdx | 1 + .../get-started/index.mdx | 2 +- .../monitor-ai-use/index.mdx | 1 - .../monitor-prompts-responses.mdx | 3 +- .../monitor-ai-use/review-inline-ai-use.mdx | 3 +- .../load-balancing/concepts/health-checks.mdx | 2 +- .../load-balancing/concepts/index.mdx | 8 +- .../concepts/load-balancer-components.mdx | 12 +- .../load-balancing/concepts/routing.mdx | 8 +- .../load-balancing/planning/custom-rules.mdx | 2 +- .../load-balancing/planning/index.mdx | 8 +- .../planning/multiple-zones.mdx | 2 - .../planning/origin-steering-policies.mdx | 6 +- .../planning/session-affinity.mdx | 2 +- .../planning/traffic-steering.mdx | 4 +- .../planning/types-load-balancers.mdx | 16 +- .../setup/check-pool-health.mdx | 2 +- .../setup/hostname-preparation.mdx | 8 +- .../load-balancing/setup/index.mdx | 14 +- .../load-balancing/setup/next-steps.mdx | 2 +- .../setup/production-traffic.mdx | 2 +- .../mtls/concepts/mtls-cloudflare.mdx | 12 +- .../mtls/mtls-implementation/index.mdx | 2 +- .../advanced/improve-analytics.mdx | 2 +- .../prevent-ddos-attacks/advanced/index.mdx | 8 +- .../prevent-ddos-attacks/baseline/index.mdx | 6 +- .../baseline/proxy-dns-records.mdx | 2 +- .../baseline/set-up-alerts.mdx | 2 +- .../baseline/tls-versions.mdx | 4 +- .../prevent-ddos-attacks/concepts/index.mdx | 4 +- .../replace-vpn/build-policies/index.mdx | 8 +- .../build-policies/policy-design.mdx | 10 +- .../build-policies/session-timeouts.mdx | 2 +- .../test-your-first-application.mdx | 7 +- .../replace-vpn/concepts/index.mdx | 6 +- .../concepts/what-is-cloudflare.mdx | 2 +- .../connect-private-network/cloudflared.mdx | 19 +- .../connection-methods.mdx | 22 +- .../connect-private-network/index.mdx | 6 +- .../overlapping-ips.mdx | 2 +- .../tunnel-capacity.mdx | 2 +- .../replace-vpn/get-started/prerequisites.mdx | 8 +- .../replace-vpn/troubleshooting/index.mdx | 4 +- .../troubleshoot-private-networks.mdx | 2 +- .../build-dns-policies/index.mdx | 6 +- .../build-egress-policies/index.mdx | 8 +- .../build-http-policies/index.mdx | 8 +- .../concepts/index.mdx | 4 +- .../choose-on-ramp.mdx | 12 +- .../initial-setup/prerequisites.mdx | 4 +- .../secure-saas-applications/index.mdx | 6 +- .../sso-front-door.mdx | 10 +- .../understand-policies/index.mdx | 6 +- .../understand-policies/indicator-feeds.mdx | 4 +- .../order-of-enforcement.mdx | 2 +- .../secure-your-email/concepts/index.mdx | 2 +- .../protect-from-phishing-attacks.mdx | 2 +- .../concepts/what-is-cloudflare.mdx | 4 +- .../concepts/what-is-email-security.mdx | 2 +- .../concepts/what-is-phishing-attack.mdx | 2 +- .../active-directory-sync.mdx | 2 +- .../configure-email-security/audit-logs.mdx | 3 +- .../impersonation-registry.mdx | 2 +- .../configure-email-security/index.mdx | 2 +- .../configure-email-security/report-phish.mdx | 2 +- .../enable-auto-moves/index.mdx | 2 +- .../get-started/deployment-models.mdx | 4 +- .../get-started/prerequisites.mdx | 2 +- .../recommended-deployment-model.mdx | 2 +- .../get-started/setup-google-workspace.mdx | 2 +- .../get-started/setup-ms-graph-api.mdx | 4 +- .../monitor-your-inbox/phish-submissions.mdx | 2 +- .../surge-readiness/concepts/index.mdx | 12 +- .../surge-readiness/performance/analytics.mdx | 4 +- .../surge-readiness/performance/caching.mdx | 22 +- .../surge-readiness/performance/index.mdx | 2 +- .../surge-readiness/performance/logs.mdx | 7 +- .../security/block-agents-lock-zones.mdx | 1 - .../security/confirm-account-security.mdx | 2 +- .../security/control-domain-access.mdx | 12 +- .../surge-readiness/security/enable-iaum.mdx | 4 +- .../surge-readiness/security/index.mdx | 2 +- .../surge-readiness/support/index.mdx | 2 +- .../surge-readiness/support/resources.mdx | 15 +- .../workers/concepts/cloudflare-intro.mdx | 30 +- .../learning-paths/workers/concepts/index.mdx | 6 +- .../workers/concepts/serverless-computing.mdx | 6 +- .../learning-paths/workers/devplat/index.mdx | 4 +- .../workers/devplat/intro-to-devplat.mdx | 2 +- .../workers/get-started/c3-and-wrangler.mdx | 8 +- .../workers/get-started/first-application.mdx | 23 +- .../workers/get-started/index.mdx | 6 +- .../additional-dns-records.mdx | 5 +- .../additional-options/cloudflare-tunnel.mdx | 1 - .../additional-options/index.mdx | 13 +- .../load-balancing-china.mdx | 1 - .../load-balancing-rules/expressions.mdx | 13 +- .../override-http-host-headers.mdx | 30 +- .../pagerduty-integration.mdx | 1 - .../planned-maintenance.mdx | 12 +- .../docs/load-balancing/api-reference.mdx | 1 - .../get-started/enable-load-balancing.mdx | 3 +- .../docs/load-balancing/get-started/index.mdx | 5 +- .../load-balancers/common-configurations.mdx | 7 +- .../docs/load-balancing/monitors/index.mdx | 4 +- .../monitors/monitor-groups.mdx | 1 - .../private-network/cloudflare-wan.mdx | 6 +- .../reference-architecture-external-link.mdx | 1 - .../docs/load-balancing/reference/index.mdx | 3 +- .../load-balancing/reference/limitations.mdx | 15 +- .../reference/migration-guides/index.mdx | 3 +- .../troubleshooting/common-error-codes.mdx | 53 +- .../load-balancing/troubleshooting/index.mdx | 3 +- .../troubleshooting/load-balancing-faq.mdx | 37 +- .../understand-basics/adaptive-routing.mdx | 3 +- .../understand-basics/index.mdx | 3 +- .../traffic-steering/index.mdx | 1 - .../hash-origin-steering.mdx | 4 - .../least-outstanding-requests-pools.mdx | 7 +- .../random-origin-steering.mdx | 1 - .../steering-policies/dynamic-steering.mdx | 1 - .../steering-policies/index.mdx | 1 + .../least-outstanding-requests.mdx | 3 +- .../steering-policies/proximity-steering.mdx | 9 +- .../steering-policies/standard-options.mdx | 1 - src/content/docs/log-explorer/api.mdx | 6 +- src/content/docs/log-explorer/changelog.mdx | 2 +- .../docs/log-explorer/example-queries.mdx | 2 +- src/content/docs/log-explorer/index.mdx | 42 +- .../docs/logs/auditlogs-mcp-server.mdx | 2 +- .../docs/logs/changelog/audit-logs.mdx | 2 +- src/content/docs/logs/changelog/index.mdx | 2 +- src/content/docs/logs/changelog/logs.mdx | 2 - .../docs/logs/faq/common-calculations.mdx | 2 - src/content/docs/logs/faq/general-faq.mdx | 3 - src/content/docs/logs/faq/instant-logs.mdx | 3 - src/content/docs/logs/faq/logpull-api.mdx | 5 - .../docs/logs/faq/worker-subrequests.mdx | 14 +- src/content/docs/logs/glossary.mdx | 2 +- src/content/docs/logs/logpull/index.mdx | 4 +- .../docs/logs/logpull/requesting-logs.mdx | 22 +- .../logs/logpull/understanding-the-basics.mdx | 24 +- src/content/docs/logs/logpush-mcp-server.mdx | 2 +- .../examples/example-logpush-python.mdx | 2 - .../docs/logs/logpush/examples/index.mdx | 2 +- src/content/docs/logs/logpush/index.mdx | 4 +- .../docs/logs/logpush/logpush-health.mdx | 72 +- .../logpush/logpush-job/api-configuration.mdx | 140 +- .../logpush-job/datasets/account/index.mdx | 2 +- .../logs/logpush/logpush-job/datasets/cmb.mdx | 4 +- .../logpush/logpush-job/datasets/index.mdx | 16 +- .../logpush-job/datasets/zone/dns_logs.md | 2 +- .../logpush-job/datasets/zone/index.mdx | 2 +- .../logpush/logpush-job/edge-log-delivery.mdx | 3 +- .../enable-destinations/aws-s3.mdx | 6 +- .../logpush-job/enable-destinations/azure.mdx | 1 + .../enable-destinations/egress-ip.mdx | 26 +- .../enable-destinations/elastic.mdx | 33 +- .../google-cloud-storage.mdx | 6 +- .../enable-destinations/ibm-qradar.mdx | 150 ++- .../enable-destinations/kinesis.mdx | 2 +- .../third-party/exabeam.mdx | 2 +- .../third-party/sekoia.mdx | 2 +- .../third-party/taegis.mdx | 2 +- .../docs/logs/logpush/logpush-job/filters.mdx | 5 +- .../docs/logs/logpush/logpush-job/index.mdx | 2 +- .../logpush-ownership-challenge.mdx | 22 +- .../2023-02-01-security-fields-updates.mdx | 66 +- .../logs/reference/change-notices/index.mdx | 2 +- .../logs/reference/clientrequestsource.mdx | 3 - src/content/docs/logs/reference/index.mdx | 2 +- .../docs/logs/reference/security-fields.mdx | 8 +- .../docs/logs/reference/waf-fields.mdx | 8 +- src/content/docs/magic-transit/about.mdx | 3 +- src/content/docs/magic-transit/alerts.mdx | 3 +- .../docs/magic-transit/analytics/index.mdx | 9 +- .../analytics/network-analytics.mdx | 6 +- .../analytics/packet-captures.mdx | 1 - .../analytics/query-bandwidth.mdx | 5 +- .../analytics/query-tunnel-health.mdx | 8 +- src/content/docs/magic-transit/changelog.mdx | 5 +- .../docs/magic-transit/cloudflare-ips.mdx | 17 +- .../docs/magic-transit/get-started.mdx | 8 +- src/content/docs/magic-transit/glossary.mdx | 3 +- .../how-to/advertise-prefixes.mdx | 56 +- .../magic-transit/how-to/configure-routes.mdx | 18 +- .../how-to/configure-tunnel-endpoints.mdx | 28 +- .../how-to/enable-magic-roles.mdx | 2 +- .../docs/magic-transit/how-to/index.mdx | 5 +- .../how-to/safely-withdraw-byoip-prefix.mdx | 7 +- .../docs/magic-transit/network-flow.mdx | 5 +- .../check-tunnel-health-dashboard.mdx | 12 +- .../configure-tunnel-health-alerts.mdx | 5 +- .../magic-transit/network-health/index.mdx | 16 +- .../run-endpoint-health-checks.mdx | 75 +- .../update-tunnel-health-checks-frequency.mdx | 7 +- .../magic-transit/network-interconnect.mdx | 2 +- src/content/docs/magic-transit/on-demand.mdx | 1 - .../docs/magic-transit/partners/index.mdx | 5 +- .../reference/anti-replay-protection.mdx | 3 +- .../reference/gre-ipsec-tunnels.mdx | 3 +- ...dflare-calculates-tunnel-health-alerts.mdx | 9 +- .../docs/magic-transit/reference/index.mdx | 5 +- .../docs/magic-transit/reference/mtu-mss.mdx | 4 +- .../reference/traffic-steering.mdx | 3 +- .../reference/tunnel-health-checks.mdx | 5 +- .../troubleshooting/connectivity.mdx | 5 +- .../magic-transit/troubleshooting/index.mdx | 2 +- .../troubleshooting/ipsec-troubleshoot.mdx | 12 +- .../troubleshooting/routing-and-bgp.mdx | 21 +- .../troubleshooting/tunnel-health.mdx | 29 +- src/content/docs/moq/feature-matrix.mdx | 121 +- src/content/docs/moq/index.mdx | 15 +- .../docs/multi-cloud-networking/changelog.mdx | 5 +- .../multi-cloud-networking/cloud-on-ramps.mdx | 11 +- .../multi-cloud-networking/get-started.mdx | 74 +- .../manage-resources.mdx | 7 +- .../docs/multi-cloud-networking/reference.mdx | 1 - .../network-error-logging/get-started.mdx | 3 +- .../docs/network-error-logging/how-to.mdx | 11 +- .../docs/network-error-logging/index.mdx | 45 +- src/content/docs/network-flow/api.mdx | 5 +- src/content/docs/network-flow/changelog.mdx | 5 +- .../docs/network-flow/cloud-flow-logs.mdx | 2 +- src/content/docs/network-flow/faq.mdx | 4 +- src/content/docs/network-flow/get-started.mdx | 2 +- src/content/docs/network-flow/glossary.mdx | 3 +- .../magic-transit-integration.mdx | 5 +- .../docs/network-flow/network-flow-free.mdx | 2 +- .../docs/network-flow/routers/index.mdx | 5 +- .../routers/netflow-ipfix-config.mdx | 3 +- .../routers/recommended-sampling-rate.mdx | 3 +- .../network-flow/routers/sflow-config.mdx | 5 +- .../routers/supported-routers.mdx | 5 +- src/content/docs/network-flow/rules/index.mdx | 1 - .../network-flow/rules/rule-notifications.mdx | 2 +- .../network-flow/rules/s-flow-ddos-attack.mdx | 2 +- .../network-flow/rules/static-threshold.mdx | 2 +- .../tutorials/ddos-testing-guide.mdx | 2 +- .../tutorials/encrypt-network-flow-data.mdx | 5 +- .../tutorials/graphql-analytics.mdx | 2 +- .../docs/network-flow/tutorials/index.mdx | 5 +- .../docs/network-interconnect/changelog.mdx | 5 +- .../docs/network-interconnect/get-started.mdx | 49 +- .../docs/network-interconnect/index.mdx | 38 +- .../monitoring-and-alerts.mdx | 10 +- .../operational-guidance.mdx | 2 +- src/content/docs/network/index.mdx | 36 +- src/content/docs/network/websockets.mdx | 1 - .../get-started/configure-pagerduty.mdx | 14 +- .../docs/notifications/get-started/index.mdx | 27 +- src/content/docs/notifications/index.mdx | 5 +- .../notifications/notification-available.mdx | 2 +- .../notifications/notification-history.mdx | 2 +- .../docs/notifications/reference/index.mdx | 2 +- .../reference/traffic-alerts.mdx | 2 +- src/content/docs/pages/configuration/api.mdx | 1 + .../pages/configuration/build-caching.mdx | 18 +- .../docs/pages/configuration/build-image.mdx | 6 +- .../docs/pages/configuration/deploy-hooks.mdx | 1 + .../deploy-a-vite3-project.mdx | 1 + .../docs/pages/functions/api-reference.mdx | 8 - src/content/docs/pages/functions/bindings.mdx | 22 +- .../pages/functions/examples/ab-testing.mdx | 1 - .../pages/functions/examples/cors-headers.mdx | 1 - .../docs/pages/functions/examples/index.mdx | 1 - src/content/docs/pages/functions/metrics.mdx | 1 + .../functions/plugins/community-plugins.mdx | 1 - src/content/docs/pages/get-started/c3.mdx | 23 - .../docs/pages/get-started/direct-upload.mdx | 2 +- .../pages/get-started/git-integration.mdx | 1 - src/content/docs/pages/get-started/index.mdx | 1 - .../pages/how-to/add-custom-http-headers.mdx | 1 - .../pages/how-to/build-commands-branches.mdx | 2 +- .../pages/how-to/custom-branch-aliases.mdx | 2 +- .../docs/pages/how-to/enable-zaraz.mdx | 1 - src/content/docs/pages/how-to/index.mdx | 2 - .../pages/how-to/npm-private-registry.mdx | 1 - .../how-to/preview-with-cloudflare-tunnel.mdx | 1 - .../refactor-a-worker-to-pages-functions.mdx | 1 - ...ect-upload-with-continuous-integration.mdx | 4 +- .../use-worker-for-ab-testing-in-pages.mdx | 2 +- .../docs/pages/how-to/web-analytics.mdx | 2 +- src/content/docs/pages/migrations/index.mdx | 2 - src/content/docs/pages/platform/index.mdx | 1 - .../docs/pages/platform/known-issues.mdx | 3 +- src/content/docs/pages/platform/limits.mdx | 7 +- .../add-a-react-form-with-formspree.mdx | 2 +- .../build-a-blog-using-nuxt-and-sanity.mdx | 1 + .../pipelines/reference/wrangler-commands.mdx | 3 +- .../docs/pipelines/sinks/manage-sinks.mdx | 2 +- .../sql-reference/scalar-functions/string.mdx | 1 - .../docs/privacy-gateway/get-started.mdx | 32 +- .../docs/privacy-gateway/reference/index.mdx | 2 +- .../docs/privacy-gateway/reference/legal.mdx | 4 +- .../privacy-gateway/reference/metrics.mdx | 132 +- .../reference/product-compatibility.mdx | 6 +- .../privacy-proxy/concepts/authentication.mdx | 12 +- .../concepts/deployment-models.mdx | 26 +- .../privacy-proxy/concepts/geolocation.mdx | 12 +- .../privacy-proxy/concepts/how-it-works.mdx | 17 +- .../docs/privacy-proxy/get-started.mdx | 2 +- .../privacy-proxy/reference/http-headers.mdx | 32 +- .../privacy-proxy/reference/proxy-status.mdx | 52 +- src/content/docs/pulumi/tutorial/index.mdx | 3 - .../queues/configuration/configure-queues.mdx | 82 +- .../configuration/consumer-concurrency.mdx | 2 +- .../docs/queues/configuration/index.mdx | 2 +- .../queues/configuration/javascript-apis.mdx | 243 ++-- .../configuration/local-development.mdx | 7 +- .../docs/queues/configuration/pause-purge.mdx | 6 + .../docs/queues/event-subscriptions/index.mdx | 4 +- .../manage-event-subscriptions.mdx | 8 +- .../examples/publish-to-a-queue-via-http.mdx | 1 - .../publish-to-a-queue-via-workers.mdx | 5 +- .../queues/examples/send-errors-to-r2.mdx | 50 +- .../examples/send-messages-from-dash.mdx | 6 +- .../use-queues-with-durable-objects.mdx | 68 +- src/content/docs/queues/glossary.mdx | 2 +- .../docs/queues/observability/index.mdx | 2 +- .../docs/queues/observability/metrics.mdx | 8 +- src/content/docs/queues/platform/index.mdx | 2 +- src/content/docs/queues/platform/limits.mdx | 57 +- src/content/docs/queues/platform/pricing.mdx | 9 +- .../queues/reference/delivery-guarantees.mdx | 6 +- .../docs/queues/reference/error-codes.mdx | 52 +- .../queues/reference/how-queues-works.mdx | 148 ++- src/content/docs/queues/reference/index.mdx | 2 +- .../reference/limitations-best-practices.mdx | 68 +- .../r2-sql/reference/wrangler-commands.mdx | 2 +- .../docs/r2-sql/sql-reference/index.mdx | 18 +- src/content/docs/r2/api/error-codes.mdx | 88 +- src/content/docs/r2/api/index.mdx | 2 +- src/content/docs/r2/api/s3/extensions.mdx | 18 +- src/content/docs/r2/api/s3/presigned-urls.mdx | 11 +- .../docs/r2/api/s3/temporary-credentials.mdx | 54 +- .../r2/api/workers/workers-api-reference.mdx | 78 +- .../docs/r2/api/workers/workers-api-usage.mdx | 1 + src/content/docs/r2/buckets/bucket-locks.mdx | 3 + src/content/docs/r2/buckets/cors.mdx | 45 +- .../docs/r2/buckets/delete-buckets.mdx | 26 +- .../docs/r2/buckets/event-notifications.mdx | 33 +- src/content/docs/r2/buckets/index.mdx | 2 +- .../docs/r2/buckets/object-lifecycles.mdx | 2 + .../docs/r2/buckets/storage-classes.mdx | 32 +- src/content/docs/r2/data-migration/index.mdx | 2 +- .../data-migration/migration-strategies.mdx | 2 +- src/content/docs/r2/data-migration/sippy.mdx | 18 +- .../docs/r2/data-migration/super-slurper.mdx | 7 +- .../examples/authenticate-r2-auth-tokens.mdx | 2 +- .../authenticate-r2-temp-credentials.mdx | 174 +-- .../docs/r2/examples/aws/aws-sdk-js-v3.mdx | 19 +- .../docs/r2/examples/aws/aws-sdk-js.mdx | 25 +- .../docs/r2/examples/aws/aws-sdk-kotlin.mdx | 1 - .../docs/r2/examples/aws/aws4fetch.mdx | 15 +- src/content/docs/r2/examples/aws/boto3.mdx | 15 +- .../docs/r2/examples/aws/custom-header.mdx | 95 +- src/content/docs/r2/examples/cache-api.mdx | 109 +- src/content/docs/r2/examples/terraform.mdx | 7 +- src/content/docs/r2/get-started/cli.mdx | 9 +- src/content/docs/r2/get-started/index.mdx | 1 + src/content/docs/r2/get-started/s3.mdx | 9 +- .../docs/r2/get-started/workers-api.mdx | 2 +- .../docs/r2/objects/delete-objects.mdx | 19 +- .../docs/r2/objects/download-objects.mdx | 3 +- src/content/docs/r2/objects/index.mdx | 4 +- src/content/docs/r2/platform/audit-logs.mdx | 59 +- .../docs/r2/platform/metrics-analytics.mdx | 7 +- .../docs/r2/platform/troubleshooting.mdx | 5 +- src/content/docs/r2/pricing.mdx | 52 +- src/content/docs/r2/r2-sql.mdx | 2 +- .../docs/r2/reference/data-location.mdx | 2 + .../docs/r2/reference/data-security.mdx | 2 - src/content/docs/r2/reference/durability.mdx | 10 +- .../r2/reference/unicode-interoperability.mdx | 6 +- .../docs/r2/tutorials/cloudflare-access.mdx | 2 +- src/content/docs/r2/tutorials/mastodon.mdx | 3 +- src/content/docs/r2/tutorials/postman.mdx | 12 +- src/content/docs/r2/video-tutorials.mdx | 10 +- src/content/docs/radar/concepts/index.mdx | 2 +- .../docs/radar/concepts/normalization.mdx | 2 +- .../radar/get-started/configure-alerts.mdx | 2 +- src/content/docs/radar/get-started/embed.mdx | 4 +- src/content/docs/radar/get-started/index.mdx | 2 +- .../radar/get-started/making-comparisons.mdx | 78 +- .../investigate/application-layer-attacks.mdx | 84 +- src/content/docs/radar/investigate/dns.mdx | 26 +- .../investigate/domain-ranking-datasets.mdx | 37 +- .../docs/radar/investigate/http-requests.mdx | 76 +- src/content/docs/radar/investigate/index.mdx | 2 +- .../docs/radar/investigate/netflows.mdx | 18 +- .../investigate/network-layer-attacks.mdx | 86 +- .../docs/radar/investigate/outages.mdx | 14 +- .../docs/radar/investigate/url-scanner.mdx | 88 +- src/content/docs/radar/mcp-server.mdx | 2 +- src/content/docs/radar/reference/index.mdx | 2 +- .../reference/quarterly-ddos-reports.mdx | 6 +- .../randomness-beacon/about/background.mdx | 2 +- .../docs/randomness-beacon/about/future.mdx | 6 +- .../cryptographic-background/index.mdx | 6 +- .../randomness-generation.mdx | 6 +- .../cryptographic-background/setup-phase.mdx | 4 +- src/content/docs/realtime/agents/index.mdx | 4 +- .../docs/realtime/realtimekit/ai/index.mdx | 2 +- .../docs/realtime/realtimekit/ai/summary.mdx | 69 +- .../realtime/realtimekit/ai/transcription.mdx | 2 +- .../realtimekit/core/api-reference/RTKAi.md | 40 +- .../realtimekit/core/api-reference/RTKChat.md | 329 ++--- .../api-reference/RTKConnectedMeetings.md | 81 +- .../core/api-reference/RTKLivestream.md | 46 +- .../realtimekit/core/api-reference/RTKMeta.md | 68 +- .../core/api-reference/RTKParticipant.md | 188 +-- .../core/api-reference/RTKParticipantMap.md | 56 +- .../core/api-reference/RTKParticipants.md | 240 ++-- .../api-reference/RTKPermissionsPreset.md | 143 ++- .../realtimekit/core/api-reference/RTKPip.md | 72 +- .../core/api-reference/RTKPlugin.md | 122 +- .../core/api-reference/RTKPlugins.md | 21 +- .../core/api-reference/RTKPolls.md | 33 +- .../core/api-reference/RTKRecording.md | 20 +- .../realtimekit/core/api-reference/RTKSelf.md | 109 +- .../core/api-reference/RTKSelfMedia.md | 77 +- .../core/api-reference/RTKStage.md | 63 +- .../core/api-reference/RTKStore.md | 167 +-- .../core/api-reference/RTKThemePreset.md | 89 +- .../core/api-reference/RealtimeKitClient.md | 129 +- .../realtime/realtimekit/legal/3rdparty.mdx | 99 +- .../recording-guide/add-watermark.mdx | 20 +- .../recording-guide/configure-codecs.mdx | 6 +- .../recording-guide/monitor-status.mdx | 12 +- .../recording-guide/track-recording.mdx | 69 +- .../ui-kit/api-reference/angular/index.mdx | 2 +- .../api-reference/angular/rtk-ai-toggle.mdx | 24 +- .../angular/rtk-ai-transcriptions.mdx | 16 +- .../ui-kit/api-reference/angular/rtk-ai.mdx | 26 +- .../api-reference/angular/rtk-audio-grid.mdx | 27 +- .../api-reference/angular/rtk-audio-tile.mdx | 27 +- .../angular/rtk-audio-visualizer.mdx | 29 +- .../api-reference/angular/rtk-avatar.mdx | 22 +- .../angular/rtk-breakout-room-manager.mdx | 33 +- .../rtk-breakout-room-participants.mdx | 25 +- .../angular/rtk-breakout-rooms-manager.mdx | 18 +- .../angular/rtk-breakout-rooms-toggle.mdx | 27 +- .../angular/rtk-broadcast-message-modal.mdx | 18 +- .../api-reference/angular/rtk-button.mdx | 23 +- .../angular/rtk-camera-selector.mdx | 40 +- .../angular/rtk-camera-toggle.mdx | 21 +- .../angular/rtk-caption-toggle.mdx | 25 +- .../angular/rtk-chat-composer-ui.mdx | 25 +- .../angular/rtk-chat-composer-view.mdx | 35 +- .../api-reference/angular/rtk-chat-header.mdx | 4 +- .../angular/rtk-chat-message.mdx | 45 +- .../rtk-chat-messages-ui-paginated.mdx | 23 +- .../angular/rtk-chat-messages-ui.mdx | 27 +- .../angular/rtk-chat-search-results.mdx | 23 +- .../angular/rtk-chat-selector-ui.mdx | 25 +- .../angular/rtk-chat-selector.mdx | 25 +- .../api-reference/angular/rtk-chat-toggle.mdx | 37 +- .../ui-kit/api-reference/angular/rtk-chat.mdx | 23 +- .../api-reference/angular/rtk-clock.mdx | 17 +- .../angular/rtk-confirmation-modal.mdx | 18 +- .../angular/rtk-controlbar-button.mdx | 29 +- .../api-reference/angular/rtk-controlbar.mdx | 27 +- .../api-reference/angular/rtk-counter.mdx | 22 +- .../angular/rtk-debugger-audio.mdx | 21 +- .../angular/rtk-debugger-screenshare.mdx | 20 +- .../angular/rtk-debugger-system.mdx | 21 +- .../angular/rtk-debugger-toggle.mdx | 23 +- .../angular/rtk-debugger-video.mdx | 21 +- .../api-reference/angular/rtk-debugger.mdx | 21 +- .../angular/rtk-dialog-manager.mdx | 36 +- .../api-reference/angular/rtk-dialog.mdx | 31 +- .../angular/rtk-emoji-picker-button.mdx | 16 +- .../angular/rtk-emoji-picker.mdx | 16 +- .../angular/rtk-ended-screen.mdx | 23 +- .../angular/rtk-file-dropzone.mdx | 16 +- .../angular/rtk-file-message-view.mdx | 19 +- .../angular/rtk-file-message.mdx | 25 +- .../angular/rtk-file-picker-button.mdx | 23 +- .../angular/rtk-fullscreen-toggle.mdx | 25 +- .../angular/rtk-grid-pagination.mdx | 27 +- .../ui-kit/api-reference/angular/rtk-grid.mdx | 34 +- .../api-reference/angular/rtk-header.mdx | 28 +- .../ui-kit/api-reference/angular/rtk-icon.mdx | 18 +- .../api-reference/angular/rtk-idle-screen.mdx | 20 +- .../angular/rtk-image-message-view.mdx | 16 +- .../angular/rtk-image-message.mdx | 25 +- .../angular/rtk-image-viewer.mdx | 19 +- .../angular/rtk-information-tooltip.mdx | 11 +- .../api-reference/angular/rtk-join-stage.mdx | 25 +- .../angular/rtk-leave-button.mdx | 19 +- .../angular/rtk-leave-meeting.mdx | 20 +- .../angular/rtk-livestream-indicator.mdx | 18 +- .../angular/rtk-livestream-player.mdx | 19 +- .../angular/rtk-livestream-toggle.mdx | 21 +- .../ui-kit/api-reference/angular/rtk-logo.mdx | 19 +- .../angular/rtk-markdown-view.mdx | 15 +- .../angular/rtk-meeting-title.mdx | 16 +- .../api-reference/angular/rtk-meeting.mdx | 43 +- .../api-reference/angular/rtk-menu-item.mdx | 18 +- .../api-reference/angular/rtk-menu-list.mdx | 16 +- .../ui-kit/api-reference/angular/rtk-menu.mdx | 22 +- .../angular/rtk-message-list-view.mdx | 25 +- .../angular/rtk-message-view.mdx | 39 +- .../api-reference/angular/rtk-mic-toggle.mdx | 21 +- .../angular/rtk-microphone-selector.mdx | 40 +- .../api-reference/angular/rtk-mixed-grid.mdx | 40 +- .../api-reference/angular/rtk-more-toggle.mdx | 29 +- .../angular/rtk-mute-all-button.mdx | 21 +- .../angular/rtk-mute-all-confirmation.mdx | 18 +- .../api-reference/angular/rtk-name-tag.mdx | 27 +- .../angular/rtk-network-indicator.mdx | 23 +- .../angular/rtk-notification.mdx | 25 +- .../angular/rtk-notifications.mdx | 27 +- .../angular/rtk-overlay-modal.mdx | 18 +- .../angular/rtk-paginated-list.mdx | 33 +- .../angular/rtk-participant-count.mdx | 19 +- .../angular/rtk-participant-setup.mdx | 31 +- .../angular/rtk-participant-tile.mdx | 37 +- .../api-reference/angular/rtk-participant.mdx | 31 +- .../angular/rtk-participants-audio.mdx | 19 +- .../angular/rtk-participants-stage-list.mdx | 33 +- .../angular/rtk-participants-stage-queue.mdx | 25 +- .../angular/rtk-participants-toggle.mdx | 35 +- .../angular/rtk-participants-viewer-list.mdx | 29 +- .../angular/rtk-participants-waiting-list.mdx | 25 +- .../angular/rtk-participants.mdx | 29 +- .../angular/rtk-permissions-message.mdx | 20 +- .../angular/rtk-pinned-message-selector.mdx | 16 +- .../api-reference/angular/rtk-pip-toggle.mdx | 25 +- .../api-reference/angular/rtk-plugin-main.mdx | 19 +- .../angular/rtk-plugins-toggle.mdx | 35 +- .../api-reference/angular/rtk-plugins.mdx | 23 +- .../api-reference/angular/rtk-poll-form.mdx | 15 +- .../ui-kit/api-reference/angular/rtk-poll.mdx | 23 +- .../angular/rtk-polls-toggle.mdx | 37 +- .../api-reference/angular/rtk-polls.mdx | 23 +- .../angular/rtk-recording-indicator.mdx | 20 +- .../angular/rtk-recording-toggle.mdx | 29 +- .../angular/rtk-screen-share-toggle.mdx | 23 +- .../angular/rtk-screenshare-view.mdx | 35 +- .../angular/rtk-settings-audio.mdx | 38 +- .../angular/rtk-settings-toggle.mdx | 32 +- .../angular/rtk-settings-video.mdx | 38 +- .../api-reference/angular/rtk-settings.mdx | 23 +- .../angular/rtk-setup-screen.mdx | 25 +- .../api-reference/angular/rtk-sidebar-ui.mdx | 29 +- .../api-reference/angular/rtk-sidebar.mdx | 33 +- .../api-reference/angular/rtk-simple-grid.mdx | 29 +- .../angular/rtk-speaker-selector.mdx | 42 +- .../api-reference/angular/rtk-spinner.mdx | 14 +- .../angular/rtk-spotlight-grid.mdx | 42 +- .../angular/rtk-spotlight-indicator.mdx | 18 +- .../angular/rtk-stage-toggle.mdx | 23 +- .../api-reference/angular/rtk-stage.mdx | 17 +- .../api-reference/angular/rtk-switch.mdx | 22 +- .../api-reference/angular/rtk-tab-bar.mdx | 29 +- .../angular/rtk-text-composer-view.mdx | 31 +- .../angular/rtk-text-message-view.mdx | 14 +- .../angular/rtk-text-message.mdx | 25 +- .../api-reference/angular/rtk-tooltip.mdx | 28 +- .../api-reference/angular/rtk-transcript.mdx | 19 +- .../api-reference/angular/rtk-transcripts.mdx | 22 +- .../api-reference/angular/rtk-ui-provider.mdx | 27 +- .../angular/rtk-viewer-count.mdx | 19 +- .../rtk-virtualized-participant-list.mdx | 23 +- .../angular/rtk-waiting-screen.mdx | 18 +- .../ui-kit/api-reference/core/index.mdx | 2 +- .../core/rtk-ai-transcriptions.mdx | 21 +- .../ui-kit/api-reference/core/rtk-ai.mdx | 28 +- .../api-reference/core/rtk-audio-grid.mdx | 31 +- .../api-reference/core/rtk-audio-tile.mdx | 31 +- .../core/rtk-audio-visualizer.mdx | 33 +- .../ui-kit/api-reference/core/rtk-avatar.mdx | 26 +- .../core/rtk-breakout-room-manager.mdx | 37 +- .../core/rtk-breakout-room-participants.mdx | 31 +- .../core/rtk-breakout-rooms-manager.mdx | 21 +- .../core/rtk-breakout-rooms-toggle.mdx | 30 +- .../core/rtk-broadcast-message-modal.mdx | 21 +- .../ui-kit/api-reference/core/rtk-button.mdx | 27 +- .../core/rtk-camera-selector.mdx | 41 +- .../core/rtk-chat-composer-ui.mdx | 28 +- .../core/rtk-chat-composer-view.mdx | 37 +- .../api-reference/core/rtk-chat-header.mdx | 4 +- .../api-reference/core/rtk-chat-message.mdx | 51 +- .../core/rtk-chat-messages-ui-paginated.mdx | 24 +- .../core/rtk-chat-messages-ui.mdx | 30 +- .../core/rtk-chat-search-results.mdx | 24 +- .../core/rtk-chat-selector-ui.mdx | 26 +- .../api-reference/core/rtk-chat-selector.mdx | 28 +- .../ui-kit/api-reference/core/rtk-chat.mdx | 26 +- .../ui-kit/api-reference/core/rtk-clock.mdx | 20 +- .../core/rtk-confirmation-modal.mdx | 21 +- .../core/rtk-controlbar-button.mdx | 34 +- .../api-reference/core/rtk-controlbar.mdx | 32 +- .../ui-kit/api-reference/core/rtk-counter.mdx | 26 +- .../api-reference/core/rtk-debugger-audio.mdx | 24 +- .../core/rtk-debugger-screenshare.mdx | 24 +- .../core/rtk-debugger-system.mdx | 24 +- .../api-reference/core/rtk-debugger-video.mdx | 24 +- .../api-reference/core/rtk-debugger.mdx | 24 +- .../api-reference/core/rtk-dialog-manager.mdx | 39 +- .../ui-kit/api-reference/core/rtk-dialog.mdx | 35 +- .../core/rtk-draft-attachment-view.mdx | 19 +- .../core/rtk-emoji-picker-button.mdx | 19 +- .../api-reference/core/rtk-emoji-picker.mdx | 19 +- .../api-reference/core/rtk-ended-screen.mdx | 26 +- .../api-reference/core/rtk-file-dropzone.mdx | 18 +- .../core/rtk-file-message-view.mdx | 23 +- .../api-reference/core/rtk-file-message.mdx | 27 +- .../core/rtk-file-picker-button.mdx | 24 +- .../core/rtk-grid-pagination.mdx | 28 +- .../ui-kit/api-reference/core/rtk-grid.mdx | 37 +- .../ui-kit/api-reference/core/rtk-header.mdx | 32 +- .../ui-kit/api-reference/core/rtk-icon.mdx | 21 +- .../api-reference/core/rtk-idle-screen.mdx | 23 +- .../core/rtk-image-message-view.mdx | 19 +- .../api-reference/core/rtk-image-message.mdx | 27 +- .../api-reference/core/rtk-image-viewer.mdx | 21 +- .../core/rtk-information-tooltip.mdx | 15 +- .../api-reference/core/rtk-join-stage.mdx | 28 +- .../api-reference/core/rtk-leave-meeting.mdx | 23 +- .../core/rtk-livestream-indicator.mdx | 22 +- .../core/rtk-livestream-player.mdx | 22 +- .../ui-kit/api-reference/core/rtk-logo.mdx | 22 +- .../api-reference/core/rtk-markdown-view.mdx | 18 +- .../api-reference/core/rtk-meeting-title.mdx | 19 +- .../ui-kit/api-reference/core/rtk-meeting.mdx | 45 +- .../api-reference/core/rtk-menu-item.mdx | 21 +- .../api-reference/core/rtk-menu-list.mdx | 18 +- .../ui-kit/api-reference/core/rtk-menu.mdx | 24 +- .../core/rtk-message-list-view.mdx | 27 +- .../api-reference/core/rtk-message-view.mdx | 43 +- .../core/rtk-microphone-selector.mdx | 41 +- .../api-reference/core/rtk-mixed-grid.mdx | 43 +- .../api-reference/core/rtk-more-toggle.mdx | 32 +- .../core/rtk-mute-all-confirmation.mdx | 21 +- .../api-reference/core/rtk-name-tag.mdx | 31 +- .../core/rtk-network-indicator.mdx | 27 +- .../api-reference/core/rtk-notification.mdx | 28 +- .../api-reference/core/rtk-notifications.mdx | 30 +- .../api-reference/core/rtk-overlay-modal.mdx | 21 +- .../api-reference/core/rtk-paginated-list.mdx | 36 +- .../core/rtk-participant-count.mdx | 22 +- .../core/rtk-participant-setup.mdx | 33 +- .../core/rtk-participant-tile.mdx | 37 +- .../api-reference/core/rtk-participant.mdx | 33 +- .../core/rtk-participants-audio.mdx | 21 +- .../core/rtk-participants-stage-list.mdx | 36 +- .../core/rtk-participants-stage-queue.mdx | 26 +- .../core/rtk-participants-viewer-list.mdx | 32 +- .../core/rtk-participants-waiting-list.mdx | 26 +- .../api-reference/core/rtk-participants.mdx | 30 +- .../core/rtk-permissions-message.mdx | 23 +- .../core/rtk-pinned-message-selector.mdx | 19 +- .../api-reference/core/rtk-plugin-main.mdx | 21 +- .../ui-kit/api-reference/core/rtk-plugins.mdx | 26 +- .../api-reference/core/rtk-poll-form.mdx | 17 +- .../ui-kit/api-reference/core/rtk-poll.mdx | 25 +- .../ui-kit/api-reference/core/rtk-polls.mdx | 26 +- .../core/rtk-recording-indicator.mdx | 24 +- .../core/rtk-recording-toggle.mdx | 34 +- .../core/rtk-screenshare-view.mdx | 35 +- .../api-reference/core/rtk-settings-audio.mdx | 41 +- .../api-reference/core/rtk-settings-video.mdx | 41 +- .../api-reference/core/rtk-settings.mdx | 26 +- .../api-reference/core/rtk-setup-screen.mdx | 28 +- .../api-reference/core/rtk-sidebar-ui.mdx | 32 +- .../ui-kit/api-reference/core/rtk-sidebar.mdx | 35 +- .../api-reference/core/rtk-simple-grid.mdx | 34 +- .../core/rtk-speaker-selector.mdx | 43 +- .../ui-kit/api-reference/core/rtk-spinner.mdx | 17 +- .../api-reference/core/rtk-spotlight-grid.mdx | 46 +- .../core/rtk-spotlight-indicator.mdx | 22 +- .../ui-kit/api-reference/core/rtk-stage.mdx | 19 +- .../ui-kit/api-reference/core/rtk-switch.mdx | 27 +- .../ui-kit/api-reference/core/rtk-tab-bar.mdx | 31 +- .../core/rtk-text-composer-view.mdx | 33 +- .../core/rtk-text-message-view.mdx | 18 +- .../api-reference/core/rtk-text-message.mdx | 27 +- .../ui-kit/api-reference/core/rtk-tooltip.mdx | 31 +- .../api-reference/core/rtk-transcript.mdx | 22 +- .../api-reference/core/rtk-transcripts.mdx | 25 +- .../api-reference/core/rtk-ui-provider.mdx | 31 +- .../api-reference/core/rtk-viewer-count.mdx | 22 +- .../core/rtk-virtualized-participant-list.mdx | 25 +- .../api-reference/core/rtk-waiting-screen.mdx | 21 +- .../react-native/RtkMenuItem.mdx | 10 +- .../ui-kit/api-reference/react/RtkAi.mdx | 34 +- .../api-reference/react/RtkAiToggle.mdx | 32 +- .../react/RtkAiTranscriptions.mdx | 25 +- .../api-reference/react/RtkAudioGrid.mdx | 36 +- .../api-reference/react/RtkAudioTile.mdx | 40 +- .../react/RtkAudioVisualizer.mdx | 42 +- .../ui-kit/api-reference/react/RtkAvatar.mdx | 30 +- .../react/RtkBreakoutRoomManager.mdx | 46 +- .../react/RtkBreakoutRoomParticipants.mdx | 38 +- .../react/RtkBreakoutRoomsManager.mdx | 26 +- .../react/RtkBreakoutRoomsToggle.mdx | 40 +- .../react/RtkBroadcastMessageModal.mdx | 26 +- .../ui-kit/api-reference/react/RtkButton.mdx | 32 +- .../api-reference/react/RtkCameraSelector.mdx | 53 +- .../api-reference/react/RtkCameraToggle.mdx | 30 +- .../api-reference/react/RtkCaptionToggle.mdx | 34 +- .../ui-kit/api-reference/react/RtkChat.mdx | 31 +- .../api-reference/react/RtkChatComposerUi.mdx | 38 +- .../react/RtkChatComposerView.mdx | 48 +- .../api-reference/react/RtkChatHeader.mdx | 8 +- .../api-reference/react/RtkChatMessage.mdx | 54 +- .../api-reference/react/RtkChatMessagesUi.mdx | 40 +- .../react/RtkChatMessagesUiPaginated.mdx | 36 +- .../react/RtkChatSearchResults.mdx | 36 +- .../api-reference/react/RtkChatSelector.mdx | 33 +- .../api-reference/react/RtkChatSelectorUi.mdx | 38 +- .../api-reference/react/RtkChatToggle.mdx | 46 +- .../ui-kit/api-reference/react/RtkClock.mdx | 25 +- .../react/RtkConfirmationModal.mdx | 26 +- .../api-reference/react/RtkControlbar.mdx | 36 +- .../react/RtkControlbarButton.mdx | 40 +- .../ui-kit/api-reference/react/RtkCounter.mdx | 30 +- .../api-reference/react/RtkDebugger.mdx | 29 +- .../api-reference/react/RtkDebuggerAudio.mdx | 29 +- .../react/RtkDebuggerScreenshare.mdx | 29 +- .../api-reference/react/RtkDebuggerSystem.mdx | 29 +- .../api-reference/react/RtkDebuggerToggle.mdx | 32 +- .../api-reference/react/RtkDebuggerVideo.mdx | 29 +- .../ui-kit/api-reference/react/RtkDialog.mdx | 44 +- .../api-reference/react/RtkDialogManager.mdx | 44 +- .../react/RtkDraftAttachmentView.mdx | 24 +- .../api-reference/react/RtkEmojiPicker.mdx | 24 +- .../react/RtkEmojiPickerButton.mdx | 24 +- .../api-reference/react/RtkEndedScreen.mdx | 31 +- .../api-reference/react/RtkFileDropzone.mdx | 24 +- .../api-reference/react/RtkFileMessage.mdx | 34 +- .../react/RtkFileMessageView.mdx | 28 +- .../react/RtkFilePickerButton.mdx | 36 +- .../react/RtkFullscreenToggle.mdx | 40 +- .../ui-kit/api-reference/react/RtkGrid.mdx | 42 +- .../api-reference/react/RtkGridPagination.mdx | 40 +- .../ui-kit/api-reference/react/RtkHeader.mdx | 36 +- .../ui-kit/api-reference/react/RtkIcon.mdx | 26 +- .../api-reference/react/RtkIdleScreen.mdx | 28 +- .../api-reference/react/RtkImageMessage.mdx | 36 +- .../react/RtkImageMessageView.mdx | 24 +- .../api-reference/react/RtkImageViewer.mdx | 27 +- .../react/RtkInformationTooltip.mdx | 20 +- .../api-reference/react/RtkJoinStage.mdx | 36 +- .../api-reference/react/RtkLeaveButton.mdx | 27 +- .../api-reference/react/RtkLeaveMeeting.mdx | 28 +- .../react/RtkLivestreamIndicator.mdx | 27 +- .../react/RtkLivestreamPlayer.mdx | 27 +- .../react/RtkLivestreamToggle.mdx | 30 +- .../ui-kit/api-reference/react/RtkLogo.mdx | 27 +- .../api-reference/react/RtkMarkdownView.mdx | 23 +- .../ui-kit/api-reference/react/RtkMeeting.mdx | 56 +- .../api-reference/react/RtkMeetingTitle.mdx | 24 +- .../ui-kit/api-reference/react/RtkMenu.mdx | 30 +- .../api-reference/react/RtkMenuItem.mdx | 27 +- .../api-reference/react/RtkMenuList.mdx | 24 +- .../api-reference/react/RtkMessageView.mdx | 50 +- .../api-reference/react/RtkMicToggle.mdx | 30 +- .../react/RtkMicrophoneSelector.mdx | 53 +- .../api-reference/react/RtkMixedGrid.mdx | 48 +- .../api-reference/react/RtkMoreToggle.mdx | 37 +- .../api-reference/react/RtkMuteAllButton.mdx | 30 +- .../react/RtkMuteAllConfirmation.mdx | 26 +- .../ui-kit/api-reference/react/RtkNameTag.mdx | 40 +- .../react/RtkNetworkIndicator.mdx | 36 +- .../api-reference/react/RtkNotification.mdx | 36 +- .../api-reference/react/RtkNotifications.mdx | 35 +- .../api-reference/react/RtkOverlayModal.mdx | 26 +- .../api-reference/react/RtkPaginatedList.mdx | 46 +- .../api-reference/react/RtkParticipant.mdx | 44 +- .../react/RtkParticipantCount.mdx | 27 +- .../api-reference/react/RtkParticipants.mdx | 42 +- .../react/RtkParticipantsAudio.mdx | 32 +- .../react/RtkParticipantsStageList.mdx | 46 +- .../react/RtkParticipantsStageQueue.mdx | 38 +- .../react/RtkParticipantsToggle.mdx | 44 +- .../react/RtkParticipantsViewerList.mdx | 42 +- .../react/RtkParticipantsWaitingList.mdx | 38 +- .../react/RtkPermissionsMessage.mdx | 28 +- .../react/RtkPinnedMessageSelector.mdx | 24 +- .../api-reference/react/RtkPipToggle.mdx | 34 +- .../api-reference/react/RtkPluginMain.mdx | 27 +- .../ui-kit/api-reference/react/RtkPlugins.mdx | 31 +- .../api-reference/react/RtkPluginsToggle.mdx | 44 +- .../ui-kit/api-reference/react/RtkPoll.mdx | 34 +- .../api-reference/react/RtkPollForm.mdx | 23 +- .../ui-kit/api-reference/react/RtkPolls.mdx | 31 +- .../api-reference/react/RtkPollsToggle.mdx | 46 +- .../react/RtkRecordingIndicator.mdx | 29 +- .../react/RtkRecordingToggle.mdx | 38 +- .../react/RtkScreenShareToggle.mdx | 32 +- .../api-reference/react/RtkSettings.mdx | 31 +- .../api-reference/react/RtkSettingsAudio.mdx | 46 +- .../api-reference/react/RtkSettingsToggle.mdx | 40 +- .../api-reference/react/RtkSettingsVideo.mdx | 46 +- .../api-reference/react/RtkSetupScreen.mdx | 33 +- .../ui-kit/api-reference/react/RtkSidebar.mdx | 46 +- .../api-reference/react/RtkSidebarUi.mdx | 42 +- .../api-reference/react/RtkSimpleGrid.mdx | 38 +- .../react/RtkSpeakerSelector.mdx | 55 +- .../ui-kit/api-reference/react/RtkSpinner.mdx | 22 +- .../api-reference/react/RtkSpotlightGrid.mdx | 51 +- .../react/RtkSpotlightIndicator.mdx | 27 +- .../ui-kit/api-reference/react/RtkStage.mdx | 25 +- .../api-reference/react/RtkStageToggle.mdx | 32 +- .../ui-kit/api-reference/react/RtkSwitch.mdx | 30 +- .../ui-kit/api-reference/react/RtkTabBar.mdx | 38 +- .../api-reference/react/RtkTextMessage.mdx | 34 +- .../react/RtkTextMessageView.mdx | 23 +- .../ui-kit/api-reference/react/RtkTooltip.mdx | 36 +- .../api-reference/react/RtkTranscript.mdx | 27 +- .../api-reference/react/RtkTranscripts.mdx | 30 +- .../api-reference/react/RtkUiProvider.mdx | 40 +- .../api-reference/react/RtkViewerCount.mdx | 27 +- .../react/RtkVirtualizedParticipantList.mdx | 36 +- .../api-reference/react/RtkWaitingScreen.mdx | 26 +- .../ui-kit/api-reference/react/index.mdx | 2 +- .../docs/realtime/sfu/calls-vs-sfus.mdx | 7 +- src/content/docs/realtime/sfu/changelog.mdx | 2 +- .../docs/realtime/sfu/datachannels.mdx | 2 +- src/content/docs/realtime/sfu/get-started.mdx | 6 +- src/content/docs/realtime/sfu/limits.mdx | 33 +- .../sfu/media-transport-adapters/index.mdx | 1 + .../websocket-adapter.mdx | 25 +- .../docs/realtime/sfu/sessions-tracks.mdx | 20 +- .../docs/realtime/turn/custom-domains.mdx | 10 +- .../realtime/turn/generate-credentials.mdx | 35 +- .../docs/realtime/turn/replacing-existing.mdx | 20 +- src/content/docs/realtime/turn/rfc-matrix.mdx | 30 +- .../architectures/sase.mdx | 18 +- .../architectures/security.mdx | 2 +- .../designing-ztna-access-policies.mdx | 18 +- ...nefits-to-saas-providers-end-customers.mdx | 16 +- .../diagrams/ai/index.mdx | 2 +- .../diagrams/content-delivery/index.mdx | 2 +- ...uring-connected-transportation-systems.mdx | 17 +- .../diagrams/network/index.mdx | 2 +- .../diagrams/sase/index.mdx | 2 +- .../diagrams/security/index.mdx | 2 +- .../serverless/fullstack-application.mdx | 27 +- .../diagrams/serverless/index.mdx | 2 +- .../serverless/programmable-platforms.mdx | 1 - .../diagrams/storage/index.mdx | 2 +- .../implementation-guides/index.mdx | 2 +- .../zero-trust/index.mdx | 2 +- .../domain-contact-updates.mdx | 26 +- .../account-options/domain-management.mdx | 18 +- .../account-options/icloud-domains.mdx | 24 +- .../docs/registrar/account-options/index.mdx | 2 +- .../inter-account-transfer.mdx | 31 +- .../account-options/renew-domains.mdx | 22 +- .../transfer-out-from-cloudflare.mdx | 12 +- .../account-options/whois-redaction.mdx | 4 +- .../registrar/custom-domain-protection.mdx | 6 +- .../docs/registrar/get-started/index.mdx | 2 +- .../registrar/get-started/register-domain.mdx | 15 +- .../top-level-domains/uk-domains.mdx | 12 +- src/content/docs/registrar/whoisrequests.mdx | 4 +- .../docs/resource-tagging/get-started.mdx | 14 +- .../docs/resource-tagging/how-to/index.mdx | 2 +- .../resource-tagging/how-to/manage-tags.mdx | 6 +- .../reference/error-codes.mdx | 26 +- .../docs/resource-tagging/reference/index.mdx | 2 +- .../resource-tagging/reference/limits.mdx | 37 +- .../reference/resource-types.mdx | 80 +- .../docs/rules/normalization/settings.mdx | 4 +- .../docs/rules/snippets/when-to-use.mdx | 2 +- .../managed-transforms/reference.mdx | 1 - .../docs/ruleset-engine/about/index.mdx | 9 +- ...ink-override-ddos-l34-rule-sensitivity.mdx | 1 - .../ruleset-engine/rulesets-api/endpoints.mdx | 405 +++--- src/content/docs/sandbox/bridge/http-api.mdx | 148 +-- .../docs/sandbox/concepts/containers.mdx | 23 +- .../docs/sandbox/concepts/preview-urls.mdx | 6 +- .../docs/sandbox/concepts/sandboxes.mdx | 4 +- .../docs/sandbox/concepts/security.mdx | 65 +- .../docs/sandbox/concepts/sessions.mdx | 77 +- .../configuration/environment-variables.mdx | 32 +- .../docs/sandbox/configuration/transport.mdx | 5 +- .../sandbox/guides/production-deployment.mdx | 9 +- src/content/docs/sandbox/platform/pricing.mdx | 2 + .../sandbox/tutorials/ai-code-executor.mdx | 76 +- .../tutorials/analyze-data-with-ai.mdx | 29 +- .../tutorials/automated-testing-pipeline.mdx | 116 +- .../tutorials/claude-managed-agents.mdx | 29 +- .../sandbox/tutorials/code-review-bot.mdx | 4 +- src/content/docs/secrets-store/audit-logs.mdx | 2 +- src/content/docs/secrets-store/index.mdx | 3 +- .../secrets-store/integrations/ai-gateway.mdx | 2 +- .../docs/secrets-store/integrations/index.mdx | 2 +- .../secrets-store/manage-secrets/how-to.mdx | 2 +- .../secrets-store/manage-secrets/index.mdx | 2 +- .../docs/security-center/brand-protection.mdx | 2 +- .../docs/security-center/changelog.mdx | 10 +- .../cloudforce-one/cloudforce-one.mdx | 1 - .../cloudforce-one/open-port-scanning.mdx | 170 +-- .../investigate/change-categorization.mdx | 1 - .../security-center/investigate/index.mdx | 1 - .../investigate/investigate-threats.mdx | 5 +- .../investigate/scan-limits.mdx | 4 - src/content/docs/security/overview.mdx | 43 +- .../docs/smart-shield/concepts/index.mdx | 2 +- .../smart-shield/concepts/network-diagram.mdx | 2 +- .../docs/smart-shield/configuration/argo.mdx | 2 +- .../configuration/cache-reserve/analytics.mdx | 6 +- .../configuration/cache-reserve/index.mdx | 2 +- .../cache-reserve/operations.mdx | 5 +- .../how-it-works/connection-forwarding.mdx | 6 +- .../how-it-works/index.mdx | 2 +- .../dedicated-egress-ips/index.mdx | 8 +- .../dedicated-egress-ips/ips-utilization.mdx | 202 +-- .../dedicated-egress-ips/other-products.mdx | 2 +- .../configuration/health-checks/analytics.mdx | 5 +- .../configuration/health-checks/index.mdx | 2 +- .../configuration/health-checks/setup.mdx | 4 +- .../health-checks/zone-lockdown.mdx | 2 +- .../docs/smart-shield/configuration/index.mdx | 2 +- .../configuration/regional-tiered-cache.mdx | 2 +- .../configuration/smart-tiered-cache.mdx | 2 +- src/content/docs/spectrum/about/byoip.mdx | 75 +- .../docs/spectrum/about/ddos-for-spectrum.mdx | 1 - src/content/docs/spectrum/about/ftp.mdx | 16 +- src/content/docs/spectrum/about/index.mdx | 3 +- src/content/docs/spectrum/about/static-ip.mdx | 46 +- src/content/docs/spectrum/glossary.mdx | 3 +- .../spectrum/how-to/enable-proxy-protocol.mdx | 3 - src/content/docs/spectrum/how-to/index.mdx | 3 +- .../docs/spectrum/protocols-per-plan.mdx | 3 +- .../docs/spectrum/reference/analytics.mdx | 46 +- src/content/docs/spectrum/reference/index.mdx | 3 +- .../spectrum/reference/layer-7-analytics.mdx | 4 +- src/content/docs/spectrum/reference/logs.mdx | 3 - .../spectrum/reference/settings-by-plan.mdx | 14 +- src/content/docs/speed/aim.mdx | 33 +- src/content/docs/speed/glossary.mdx | 3 +- .../docs/speed/observatory/dashboard.mdx | 11 +- .../docs/speed/observatory/rum-beacon.mdx | 46 +- .../docs/speed/observatory/run-speed-test.mdx | 21 +- .../docs/speed/observatory/test-results.mdx | 23 +- .../docs/speed/optimization/content/apo.mdx | 1 - .../optimization/content/compression.mdx | 6 +- .../optimization/content/early-hints.mdx | 1 - .../content/fonts/troubleshooting.mdx | 5 +- .../docs/speed/optimization/content/index.mdx | 3 +- .../rocket-loader/ignore-javascripts.mdx | 10 +- .../content/shared-dictionaries.mdx | 8 +- .../optimization/content/smart-hints.mdx | 1 - .../optimization/content/speed-brain.mdx | 9 +- .../content/troubleshooting/index.mdx | 3 +- .../optimization/images/image-resizing.mdx | 1 - .../docs/speed/optimization/images/index.mdx | 3 +- .../docs/speed/optimization/images/polish.mdx | 1 - .../images/troubleshooting/index.mdx | 3 +- .../multiple-optimizations.mdx | 1 - .../images/troubleshooting/polish.mdx | 1 - .../troubleshooting-missing-images.mdx | 6 +- src/content/docs/speed/optimization/index.mdx | 3 +- .../docs/speed/optimization/measurement.mdx | 1 - .../speed/optimization/protocol/http2.mdx | 4 +- .../speed/optimization/protocol/index.mdx | 3 +- ...hanced-http2-prioritization-ios-safari.mdx | 3 - .../protocol/troubleshooting/index.mdx | 3 +- .../speed/optimization/recommendations.mdx | 1 - src/content/docs/speed/smart-shield.mdx | 3 +- src/content/docs/speed/troubleshooting.mdx | 11 +- src/content/docs/ssl/changelog.mdx | 4 +- .../forward-a-client-certificate.mdx | 2 +- .../revoke-client-certificate.mdx | 3 - src/content/docs/ssl/concepts.mdx | 6 +- .../customize-cipher-suites/index.mdx | 8 +- .../cipher-suites/supported-cipher-suites.mdx | 50 +- .../additional-options/index.mdx | 3 +- .../additional-options/minimum-tls.mdx | 22 +- .../additional-options/tls-13.mdx | 9 +- .../api-commands.mdx | 14 +- .../manage-certificates.mdx | 8 +- .../edge-certificates/backup-certificates.mdx | 3 +- .../ssl/edge-certificates/caa-records.mdx | 1 - .../bundling-methodologies.mdx | 3 +- .../custom-certificates/renewing.mdx | 3 +- .../docs/ssl/edge-certificates/ech.mdx | 4 +- .../geokey-manager/supported-options.mdx | 4 +- .../docs/ssl/edge-certificates/index.mdx | 2 +- .../edge-certificates/staging-environment.mdx | 23 +- .../universal-ssl/alerts.mdx | 8 +- .../universal-ssl/disable-universal-ssl.mdx | 2 - .../universal-ssl/troubleshooting.mdx | 8 +- .../ssl/keyless-ssl/configuration/index.mdx | 3 +- src/content/docs/ssl/keyless-ssl/glossary.mdx | 1 - .../azure-managed-hsm.mdx | 1 - .../fortanix-dsm.mdx | 2 +- .../hardware-security-modules/index.mdx | 7 +- .../reference/high-availability.mdx | 1 - .../docs/ssl/keyless-ssl/reference/index.mdx | 3 +- .../reference/keyless-delegation.mdx | 1 - .../ssl/keyless-ssl/reference/metrics.mdx | 184 ++- .../reference/scaling-and-benchmarking.mdx | 5 +- .../keyless-ssl/upgrading-your-key-server.mdx | 3 - .../set-up/global.mdx | 5 +- .../set-up/index.mdx | 5 +- .../origin-configuration/cipher-suites.mdx | 28 +- .../docs/ssl/origin-configuration/index.mdx | 3 +- .../origin-ca/troubleshooting.mdx | 2 +- .../origin-configuration/ssl-modes/full.mdx | 6 +- .../origin-configuration/ssl-modes/index.mdx | 2 +- .../ssl-modes/ssl-only-origin-pull.mdx | 7 +- .../docs/ssl/reference/all-features.mdx | 5 +- .../ssl/reference/browser-compatibility.mdx | 9 +- .../certificate-and-hostname-priority.mdx | 17 +- .../ssl/reference/certificate-authorities.mdx | 2 +- .../ssl/reference/certificate-pinning.mdx | 1 - .../cloudflare-and-cve-2019-1559.mdx | 7 +- .../compliance-and-vulnerabilities.mdx | 42 +- src/content/docs/ssl/reference/index.mdx | 3 +- .../migration-guides/entrust-distrust.mdx | 15 +- .../ssl/reference/migration-guides/index.mdx | 3 +- src/content/docs/ssl/reference/protocols.mdx | 18 +- src/content/docs/ssl/saas.mdx | 1 - .../troubleshooting/general-ssl-errors.mdx | 2 +- .../docs/ssl/troubleshooting/index.mdx | 10 +- .../troubleshooting/mixed-content-errors.mdx | 19 +- .../version-cipher-mismatch.mdx | 6 +- .../stream/edit-videos/adding-captions.mdx | 91 +- .../edit-videos/player-enhancements.mdx | 16 +- src/content/docs/stream/examples/dash-js.mdx | 1 - src/content/docs/stream/examples/hls-js.mdx | 5 +- src/content/docs/stream/examples/index.mdx | 1 - .../examples/obs-from-scratch/index.mdx | 1 - .../docs/stream/examples/rtmps_playback.mdx | 3 +- .../docs/stream/examples/srt_playback.mdx | 3 +- .../docs/stream/examples/stream-player.mdx | 13 +- src/content/docs/stream/examples/video-js.mdx | 3 +- src/content/docs/stream/examples/vidstack.mdx | 15 +- .../fetching-bulk-analytics.mdx | 1 + .../docs/stream/getting-analytics/index.mdx | 11 +- .../getting-analytics/live-viewer-count.mdx | 1 - .../stream/manage-video-library/index.mdx | 1 - .../stream/manage-video-library/searching.mdx | 1 - src/content/docs/stream/stream-api.mdx | 1 - .../stream/stream-live/custom-domains.mdx | 3 +- .../download-stream-live-videos.mdx | 4 +- .../docs/stream/stream-live/dvr-for-live.mdx | 16 +- src/content/docs/stream/stream-live/index.mdx | 7 +- .../stream-live/live-instant-clipping.mdx | 91 +- .../docs/stream/stream-live/simulcasting.mdx | 40 +- .../stream/stream-live/start-stream-live.mdx | 1 + .../stream/stream-live/troubleshooting.mdx | 73 +- .../docs/stream/stream-live/webhooks.mdx | 64 +- .../docs/stream/transform-videos/bindings.mdx | 36 +- .../docs/stream/transform-videos/index.mdx | 4 +- .../docs/stream/uploading-videos/index.mdx | 14 +- .../stream/uploading-videos/player-api.mdx | 227 ++-- .../uploading-videos/resumable-uploads.mdx | 6 - .../uploading-videos/upload-via-link.mdx | 80 +- .../viewing-videos/displaying-thumbnails.mdx | 56 +- .../using-the-player-api.mdx | 260 ++-- .../api-content-types/deprecated-apis.mdx | 4 +- .../api-content-types/endpoints.mdx | 18 +- .../api-content-types/index.mdx | 2 +- .../api-content-types/parameters.mdx | 2 +- .../guidelines-for-curl-commands.mdx | 50 +- .../style-guide/components/anchor-heading.mdx | 11 +- .../components/available-notifications.mdx | 15 +- .../style-guide/components/description.mdx | 8 +- .../docs/style-guide/components/example.mdx | 18 +- .../style-guide/components/feature-table.mdx | 4 +- .../docs/style-guide/components/feature.mdx | 8 +- .../components/glossary-definition.mdx | 12 +- .../components/glossary-tooltip.mdx | 12 +- .../docs/style-guide/components/glossary.mdx | 12 +- .../style-guide/components/inline-badge.mdx | 35 +- .../style-guide/components/link-cards.mdx | 24 +- .../style-guide/components/list-tutorials.mdx | 2 +- .../components/package-managers.mdx | 4 +- .../components/pages-build-preset.mdx | 4 +- .../docs/style-guide/components/plan.mdx | 5 +- .../components/product-availability-text.mdx | 8 +- .../components/product-features.mdx | 5 +- .../components/related-product.mdx | 7 +- .../docs/style-guide/components/rule-id.mdx | 4 +- .../docs/style-guide/components/steps.mdx | 2 +- .../components/subtract-ip-calculator.mdx | 6 +- .../components/type-highlighting.mdx | 2 +- .../docs/style-guide/components/usage.mdx | 2 +- .../components/wrangler-namespace.mdx | 2 +- .../docs/style-guide/components/youtube.mdx | 6 +- .../docs/style-guide/contributions.mdx | 78 +- .../component-attributes/dynamic-lists.mdx | 8 +- .../component-attributes/examples.mdx | 8 +- .../component-attributes/glossary-entry.mdx | 10 - .../component-attributes/index.mdx | 2 +- .../intended-audience.mdx | 14 +- .../component-attributes/links.mdx | 18 +- .../mathematical-operations.mdx | 6 +- .../component-attributes/next-steps.mdx | 6 +- .../notes-tips-warnings.mdx | 8 +- .../information-architecture.mdx | 14 +- .../code-conventions-and-format.mdx | 62 +- .../formatting/dates-and-times.mdx | 6 +- .../formatting/external-references.mdx | 6 +- .../formatting/file-types-and-extensions.mdx | 12 +- .../docs/style-guide/formatting/index.mdx | 2 +- .../style-guide/formatting/keyboard-keys.mdx | 24 +- .../notes-and-other-notation-types.mdx | 1 + .../numbers-and-units-of-measurement.mdx | 18 +- .../product-name-and-pluralization.mdx | 4 +- .../formatting/structure/index.mdx | 2 +- .../formatting/structure/lists.mdx | 79 +- .../formatting/structure/tables.mdx | 79 +- .../docs/style-guide/frontmatter/sidebar.mdx | 4 +- .../docs/style-guide/grammar/index.mdx | 2 +- .../grammar/parts-of-speech/abbreviations.mdx | 46 +- .../grammar/parts-of-speech/acronyms.mdx | 8 +- .../parts-of-speech/capitalization.mdx | 160 ++- .../parts-of-speech/compound-words.mdx | 53 +- .../grammar/parts-of-speech/contractions.mdx | 2 +- .../grammar/parts-of-speech/index.mdx | 2 +- .../parts-of-speech/nouns-and-pronouns.mdx | 2 +- .../grammar/parts-of-speech/possessives.mdx | 2 +- .../grammar/parts-of-speech/prepositions.mdx | 2 +- .../punctuation-marks-and-symbols/commas.mdx | 2 +- .../punctuation-marks-and-symbols/dashes.mdx | 16 +- .../punctuation-marks-and-symbols/index.mdx | 2 +- .../docs/style-guide/how-we-docs/our-site.mdx | 1 - .../docs/style-guide/how-we-docs/reviews.mdx | 21 +- .../support/contacting-cloudflare-support.mdx | 46 +- src/content/docs/support/index.mdx | 2 +- ...ress-plugin-automatic-cache-management.mdx | 16 +- ...-enable-http2-server-push-in-wordpress.mdx | 6 +- ...tent-management-systems-like-wordpress.mdx | 38 +- .../content-management-system-cms/index.mdx | 2 +- ...dpress-in-cloudflares-wordpress-plugin.mdx | 26 +- .../forum-software/index.mdx | 2 +- ...-various-forums-vbulletin-xenforo-mybb.mdx | 10 +- .../support/third-party-software/index.mdx | 2 +- .../third-party-software/others/index.mdx | 2 +- ...ess-costs-between-azure-and-cloudflare.mdx | 8 +- .../cannot-locate-dashboard-account.mdx | 8 +- ...-information-for-troubleshooting-sites.mdx | 26 +- .../geographic-traffic-routing.mdx | 2 +- .../general-troubleshooting/index.mdx | 2 +- .../not-receiving-cloudflare-emails.mdx | 14 +- .../service-disruption.mdx | 8 +- .../third-party-load-balancers.mdx | 12 +- .../troubleshooting-crawl-errors.mdx | 40 +- .../4xx-client-error/error-400.mdx | 2 +- .../4xx-client-error/error-401.mdx | 2 +- .../4xx-client-error/error-406.mdx | 2 +- .../4xx-client-error/error-407.mdx | 2 +- .../4xx-client-error/error-408.mdx | 2 +- .../4xx-client-error/error-409.mdx | 2 +- .../4xx-client-error/error-410.mdx | 2 +- .../4xx-client-error/error-411.mdx | 2 +- .../4xx-client-error/error-412.mdx | 2 +- .../4xx-client-error/error-413.mdx | 2 +- .../4xx-client-error/error-414.mdx | 2 +- .../4xx-client-error/error-416.mdx | 2 +- .../4xx-client-error/error-417.mdx | 2 +- .../4xx-client-error/error-429.mdx | 1 - .../4xx-client-error/error-451.mdx | 2 +- .../4xx-client-error/index.mdx | 4 +- .../cloudflare-10xxx-errors/error-10028.mdx | 2 +- .../cloudflare-10xxx-errors/error-10043.mdx | 2 +- .../cloudflare-10xxx-errors/error-10044.mdx | 2 +- .../cloudflare-10xxx-errors/error-10045.mdx | 2 +- .../cloudflare-10xxx-errors/error-10046.mdx | 2 +- .../cloudflare-10xxx-errors/error-10047.mdx | 2 +- .../cloudflare-10xxx-errors/error-10048.mdx | 2 +- .../cloudflare-10xxx-errors/error-10049.mdx | 2 +- .../cloudflare-10xxx-errors/error-10050.mdx | 2 +- .../cloudflare-10xxx-errors/error-10051.mdx | 2 +- .../cloudflare-10xxx-errors/error-10052.mdx | 2 +- .../cloudflare-10xxx-errors/error-10055.mdx | 2 +- .../cloudflare-10xxx-errors/error-10056.mdx | 2 +- .../cloudflare-10xxx-errors/error-10058.mdx | 2 +- .../cloudflare-10xxx-errors/error-10059.mdx | 2 +- .../cloudflare-10xxx-errors/error-10060.mdx | 2 +- .../cloudflare-10xxx-errors/index.md | 2 +- .../cloudflare-1xxx-errors/error-1000.mdx | 2 +- .../cloudflare-1xxx-errors/error-1002.mdx | 4 +- .../cloudflare-1xxx-errors/error-1004.mdx | 1 - .../cloudflare-1xxx-errors/error-1009.mdx | 1 - .../cloudflare-1xxx-errors/error-1014.mdx | 1 - .../cloudflare-1xxx-errors/error-1035.mdx | 2 +- .../cloudflare-1xxx-errors/error-1040.mdx | 1 - .../cloudflare-1xxx-errors/error-1102.mdx | 1 - .../cloudflare-1xxx-errors/index.mdx | 4 - .../cloudflare-5xx-errors/error-501.mdx | 2 +- .../cloudflare-5xx-errors/error-503.mdx | 9 +- .../cloudflare-5xx-errors/error-520.mdx | 1 - .../cloudflare-5xx-errors/error-522.mdx | 4 +- .../cloudflare-5xx-errors/error-524.mdx | 5 +- .../cloudflare-5xx-errors/error-525.mdx | 2 +- .../cloudflare-5xx-errors/index.mdx | 6 +- .../cloudflare-error-headers.mdx | 11 +- .../http-status-codes/index.mdx | 2 +- .../docs/support/troubleshooting/index.mdx | 2 +- .../restoring-visitor-ips/index.mdx | 2 +- .../restoring-original-visitor-ips.mdx | 5 +- src/content/docs/tenant/how-to/index.mdx | 2 +- src/content/docs/tenant/index.mdx | 8 +- src/content/docs/tenant/reference/index.mdx | 2 +- .../advanced-topics/best-practices.mdx | 2 - .../terraform/how-to/create-partial-zone.mdx | 3 +- .../how-to/create-secondary-zone.mdx | 4 +- .../authentication-error-dns-records.mdx | 2 +- src/content/docs/terraform/tutorial/index.mdx | 36 +- src/content/docs/time-services/index.mdx | 2 +- .../docs/time-services/roughtime/index.mdx | 2 +- .../docs/time-services/roughtime/recipes.mdx | 32 +- src/content/docs/time-services/tos.mdx | 2 +- .../tunnel/advanced/origin-parameters.mdx | 16 +- .../docs/tunnel/advanced/run-parameters.mdx | 24 +- src/content/docs/tunnel/changelog.mdx | 5 +- .../tunnel/deployment-guides/terraform.mdx | 1 - .../tunnel/downloads/system-requirements.mdx | 7 +- src/content/docs/tunnel/troubleshooting.mdx | 1 + .../hostname-management/any-hostname.mdx | 69 +- .../hostname-management/index.mdx | 5 +- .../hostname-management/pre-clearance.mdx | 17 +- .../additional-configuration/index.mdx | 3 +- .../pre-clearance-support.mdx | 3 +- .../docs/turnstile/concepts/challenges.mdx | 1 - src/content/docs/turnstile/concepts/index.mdx | 5 +- .../turnstile/extensions/google-firebase.mdx | 35 +- .../docs/turnstile/extensions/index.mdx | 3 +- .../turnstile/extensions/pages-plugin.mdx | 1 - .../turnstile/extensions/waiting-room.mdx | 1 - .../get-started/widget-management/api.mdx | 61 +- .../get-started/widget-management/index.mdx | 4 +- .../widget-management/terraform.mdx | 10 +- .../docs/turnstile/migration/hcaptcha.mdx | 2 +- .../docs/turnstile/reference/index.mdx | 3 +- .../reference/supported-browsers.mdx | 1 - .../reference/supported-languages.mdx | 1 - .../reference/turnstile-privacy-addendum.mdx | 1 - .../challenge-solve-issues.mdx | 1 - .../client-side-errors/index.mdx | 137 +- .../docs/turnstile/troubleshooting/index.mdx | 3 +- .../troubleshooting/rotate-secret-key.mdx | 3 +- .../turnstile/troubleshooting/testing.mdx | 67 +- .../turnstile/turnstile-analytics/index.mdx | 5 +- .../excluding-turnstile-from-e2e-tests.mdx | 54 +- .../fraud-detection-with-ephemeral-ids.mdx | 4 +- ...ating-turnstile-waf-and-bot-management.mdx | 8 +- .../docs/use-cases/e-commerce/performance.mdx | 2 +- .../encrypt-all-keep-site-secure.mdx | 27 +- .../protect-sensitive-forms-fraud-abuse.mdx | 77 +- .../stop-account-takeover-attacks.mdx | 42 +- .../solutions/stop-malicious-bots.mdx | 9 +- .../docs/use-cases/web-apps/performance.mdx | 3 +- .../docs/vectorize/best-practices/index.mdx | 2 +- .../vectorize/best-practices/list-vectors.mdx | 3 +- src/content/docs/vectorize/demos.mdx | 11 +- .../docs/vectorize/examples/agents.mdx | 2 +- src/content/docs/vectorize/examples/index.mdx | 2 +- .../docs/vectorize/get-started/index.mdx | 2 +- src/content/docs/vectorize/platform/index.mdx | 2 +- .../docs/vectorize/reference/index.mdx | 2 +- src/content/docs/version-management/about.mdx | 6 +- .../how-to/compare-versions.mdx | 2 +- .../how-to/environments.mdx | 33 +- .../docs/version-management/how-to/index.mdx | 4 +- .../version-management/how-to/versions.mdx | 4 +- .../reference/available-configurations.mdx | 14 +- .../version-management/reference/index.mdx | 4 +- .../reference/read-only-environments.mdx | 7 +- .../waf/custom-rules/create-dashboard.mdx | 1 - .../use-cases/sequence-custom-rules.mdx | 2 +- src/content/docs/waf/glossary.mdx | 3 +- src/content/docs/waf/managed-rules/index.mdx | 1 - src/content/docs/waf/tools/index.mdx | 1 - src/content/docs/waf/tools/privacy-pass.mdx | 9 +- src/content/docs/waf/troubleshooting/faq.mdx | 1 + src/content/docs/waiting-room/about.mdx | 6 +- .../additional-options/create-events.mdx | 33 +- .../waiting-room/additional-options/index.mdx | 3 +- .../additional-options/ssl-for-saas.mdx | 1 - .../waiting-room-rules/index.mdx | 3 +- .../docs/waiting-room/api-reference.mdx | 1 - src/content/docs/waiting-room/glossary.mdx | 3 +- .../how-to/control-user-session.mdx | 8 +- .../how-to/edit-delete-waiting-room.mdx | 41 +- .../docs/waiting-room/how-to/index.mdx | 3 +- .../waiting-room/how-to/json-response.mdx | 2 - .../how-to/monitor-waiting-room.mdx | 45 +- .../how-to/place-waiting-room.mdx | 5 +- .../how-to/waiting-room-dashboard.mdx | 3 +- src/content/docs/waiting-room/plans.mdx | 3 +- .../reference/configuration-settings.mdx | 11 +- .../docs/waiting-room/reference/index.mdx | 3 +- .../reference/waiting-room-api.mdx | 21 +- .../reference/waiting-room-cookie.mdx | 12 +- .../docs/waiting-room/troubleshooting.mdx | 50 +- .../docs/warp-client/get-started/linux.mdx | 21 +- .../docs/warp-client/known-issues-and-faq.mdx | 8 +- .../docs/warp-client/legal/3rdparty.mdx | 1139 +++++++---------- src/content/docs/warp-client/legal/index.mdx | 7 +- src/content/docs/warp-client/privacy.mdx | 1 - .../configuration-options/filters.mdx | 3 +- .../configuration-options/index.mdx | 3 +- .../data-metrics/core-web-vitals.mdx | 5 +- .../data-origin-and-collection.mdx | 2 +- .../web-analytics/data-metrics/dimensions.mdx | 21 +- .../data-metrics/high-level-metrics.mdx | 9 +- .../docs/web-analytics/data-metrics/index.mdx | 3 +- .../data-metrics/page-load-time-summary.mdx | 1 - src/content/docs/web-analytics/faq.mdx | 14 +- .../web-analytics/get-started/rum-beacon.mdx | 3 +- .../get-started/web-analytics-spa.mdx | 10 +- src/content/docs/web-analytics/limits.mdx | 1 - src/content/docs/web3/about.mdx | 2 +- src/content/docs/web3/api-reference.mdx | 1 - .../web3/ethereum-gateway/concepts/index.mdx | 3 +- .../web3/ethereum-gateway/reference/index.mdx | 3 +- .../reference/kill-switches.mdx | 7 +- .../reference/rinkeby-deprecation.mdx | 57 +- .../reference/supported-networks.mdx | 1 - src/content/docs/web3/how-to/index.mdx | 3 +- .../docs/web3/how-to/use-ipfs-gateway.mdx | 1 - .../web3/ipfs-gateway/concepts/dnslink.mdx | 1 - .../docs/web3/ipfs-gateway/concepts/index.mdx | 3 +- .../reference/automated-deployment.mdx | 7 +- .../web3/ipfs-gateway/reference/index.mdx | 3 +- .../peering-with-content-providers.mdx | 129 +- .../reference/updating-for-ipfs.mdx | 7 +- .../web3/ipfs-gateway/troubleshooting.mdx | 1 - .../web3/reference/gateway-dns-records.mdx | 5 +- .../docs/web3/reference/gateway-status.mdx | 1 - src/content/docs/web3/reference/index.mdx | 3 +- .../docs/web3/reference/migration-guide.mdx | 3 +- src/content/docs/workers-ai/agents.mdx | 13 +- src/content/docs/workers-ai/api-reference.mdx | 1 - .../workers-ai/configuration/bindings.mdx | 26 +- .../configuration/hugging-face-chat-ui.mdx | 34 +- .../embedded/examples/fetch.mdx | 36 +- .../function-calling/embedded/examples/kv.mdx | 1 + .../embedded/examples/openapi.mdx | 22 +- .../function-calling/embedded/index.mdx | 4 +- .../docs/workers-ai/get-started/dashboard.mdx | 5 +- .../docs/workers-ai/get-started/index.mdx | 4 +- .../docs/workers-ai/get-started/rest-api.mdx | 3 +- src/content/docs/workers-ai/guides/agents.mdx | 2 +- ...generation-using-deepseek-coder-models.mdx | 18 +- ...choose-the-right-text-generation-model.mdx | 72 +- .../docs/workers-ai/platform/data-usage.mdx | 8 +- .../docs/workers-ai/platform/pricing.mdx | 62 +- .../docs/workers-vpc/configuration/index.mdx | 2 +- .../configuration/vpc-services/terraform.mdx | 1 + .../docs/workers-vpc/examples/private-api.mdx | 4 +- .../examples/private-s3-bucket.mdx | 4 +- .../route-across-private-services.mdx | 15 +- .../workers/ci-cd/builds/automatic-prs.mdx | 1 + .../workers/ci-cd/builds/build-caching.mdx | 18 +- .../docs/workers/ci-cd/builds/build-image.mdx | 5 +- .../workers/ci-cd/builds/configuration.mdx | 12 +- .../docs/workers/ci-cd/builds/index.mdx | 10 +- .../ci-cd/builds/limits-and-pricing.mdx | 24 +- .../workers/ci-cd/builds/troubleshoot.mdx | 1 + .../ci-cd/external-cicd/github-actions.mdx | 2 + .../ci-cd/external-cicd/gitlab-cicd.mdx | 1 + .../configuration/integrations/index.mdx | 22 +- .../configuration/routing/custom-domains.mdx | 36 +- .../workers/configuration/routing/routes.mdx | 14 +- .../sites/start-from-existing.mdx | 36 +- .../sites/start-from-scratch.mdx | 50 +- .../configuration/sites/start-from-worker.mdx | 20 +- .../versions-and-deployments/index.mdx | 2 +- .../version-overrides.mdx | 24 +- .../configuration/workers-with-page-rules.mdx | 50 +- .../third-party-integrations/supabase.mdx | 4 +- .../third-party-integrations/turso.mdx | 6 +- .../third-party-integrations/upstash.mdx | 3 +- .../third-party-integrations/xata.mdx | 1 - .../development-testing/multi-workers.mdx | 44 +- .../workers/development-testing/testing.mdx | 2 +- .../development-testing/vite-plugin.mdx | 2 +- .../docs/workers/examples/103-early-hints.mdx | 2 +- .../docs/workers/examples/ab-testing.mdx | 1 - .../accessing-the-cloudflare-object.mdx | 1 - .../workers/examples/aggregate-requests.mdx | 1 - .../docs/workers/examples/alter-headers.mdx | 1 - .../workers/examples/auth-with-headers.mdx | 1 - .../docs/workers/examples/basic-auth.mdx | 1 - .../docs/workers/examples/block-on-tls.mdx | 1 - .../workers/examples/bulk-origin-proxy.mdx | 1 - .../docs/workers/examples/bulk-redirects.mdx | 1 - .../docs/workers/examples/cache-api.mdx | 1 - .../workers/examples/cache-post-request.mdx | 1 - .../docs/workers/examples/cache-tags.mdx | 1 - .../workers/examples/cache-using-fetch.mdx | 5 +- .../workers/examples/conditional-response.mdx | 1 - .../workers/examples/cors-header-proxy.mdx | 2 - .../examples/country-code-redirect.mdx | 1 - .../workers/examples/data-loss-prevention.mdx | 1 - .../docs/workers/examples/debugging-logs.mdx | 1 - .../workers/examples/extract-cookie-value.mdx | 1 - .../docs/workers/examples/fetch-json.mdx | 1 - .../examples/geolocation-app-weather.mdx | 1 - .../examples/geolocation-custom-styling.mdx | 1 - .../examples/geolocation-hello-world.mdx | 1 - .../workers/examples/hot-link-protection.mdx | 1 - .../examples/modify-request-property.mdx | 1 - .../docs/workers/examples/modify-response.mdx | 1 - .../examples/multiple-cron-triggers.mdx | 1 - .../workers/examples/openai-sdk-streaming.mdx | 1 - .../docs/workers/examples/post-json.mdx | 1 - .../protect-against-timing-attacks.mdx | 1 - .../docs/workers/examples/read-post.mdx | 1 - .../docs/workers/examples/return-html.mdx | 1 - .../docs/workers/examples/rewrite-links.mdx | 1 - .../workers/examples/signing-requests.mdx | 1 - .../examples/turnstile-html-rewriter.mdx | 1 - .../docs/workers/examples/websockets.mdx | 4 +- .../framework-guides/ai-and-agents/index.mdx | 13 +- .../workers/framework-guides/apis/index.mdx | 9 +- .../docs/workers/framework-guides/index.mdx | 9 +- .../framework-guides/mobile-apps/expo.mdx | 2 +- .../framework-guides/mobile-apps/index.mdx | 9 +- .../framework-guides/web-apps/astro.mdx | 24 +- .../framework-guides/web-apps/index.mdx | 9 +- .../web-apps/more-web-frameworks/analog.mdx | 18 +- .../web-apps/more-web-frameworks/angular.mdx | 6 +- .../more-web-frameworks/docusaurus.mdx | 2 - .../web-apps/more-web-frameworks/hono.mdx | 2 - .../web-apps/more-web-frameworks/index.mdx | 2 +- .../web-apps/more-web-frameworks/nuxt.mdx | 18 +- .../web-apps/more-web-frameworks/solid.mdx | 18 +- .../web-apps/more-web-frameworks/waku.mdx | 14 +- .../framework-guides/web-apps/nextjs.mdx | 48 +- .../framework-guides/web-apps/redwoodsdk.mdx | 2 +- .../framework-guides/web-apps/sveltekit.mdx | 24 +- .../framework-guides/web-apps/vike.mdx | 32 +- .../workers/framework-guides/web-apps/vue.mdx | 24 +- .../docs/workers/get-started/dashboard.mdx | 11 +- .../docs/workers/get-started/quickstarts.mdx | 1 - .../workers/languages/javascript/index.mdx | 13 +- .../docs/workers/observability/errors.mdx | 58 +- .../exporting-opentelemetry-data/axiom.mdx | 22 +- .../grafana-cloud.mdx | 31 +- .../honeycomb.mdx | 8 +- .../exporting-opentelemetry-data/index.mdx | 32 +- .../exporting-opentelemetry-data/posthog.mdx | 47 +- .../exporting-opentelemetry-data/sentry.mdx | 29 +- .../workers/observability/logs/logpush.mdx | 91 +- .../observability/logs/real-time-logs.mdx | 1 + .../observability/logs/workers-logs.mdx | 6 +- .../observability/metrics-and-analytics.mdx | 1 + .../workers/observability/source-maps.mdx | 15 +- src/content/docs/workers/platform/betas.mdx | 10 +- .../platform/built-with-cloudflare.mdx | 2 +- .../changelog/historical-changelog.mdx | 448 +++---- .../docs/workers/platform/changelog/index.mdx | 2 +- .../docs/workers/platform/known-issues.mdx | 10 +- src/content/docs/workers/platform/pricing.mdx | 6 +- .../workers/reference/how-the-cache-works.mdx | 4 - .../workers/reference/how-workers-works.mdx | 16 +- .../docs/workers/reference/protocols.mdx | 14 +- .../docs/workers/reference/security-model.mdx | 6 +- .../workers/runtime-apis/bindings/index.mdx | 55 +- .../runtime-apis/bindings/rate-limit.mdx | 54 +- .../bindings/service-bindings/http.mdx | 22 +- .../workers/runtime-apis/bindings/stream.mdx | 1 - .../bindings/version-metadata.mdx | 2 +- .../docs/workers/runtime-apis/cache.mdx | 105 +- .../docs/workers/runtime-apis/console.mdx | 44 +- .../docs/workers/runtime-apis/encoding.mdx | 44 +- .../docs/workers/runtime-apis/eventsource.mdx | 75 +- .../workers/runtime-apis/handlers/fetch.mdx | 27 +- .../workers/runtime-apis/handlers/index.mdx | 4 +- .../workers/runtime-apis/handlers/tail.mdx | 227 ++-- .../docs/workers/runtime-apis/headers.mdx | 19 +- .../workers/runtime-apis/messagechannel.mdx | 16 +- .../docs/workers/runtime-apis/nodejs/util.mdx | 6 +- .../docs/workers/runtime-apis/performance.mdx | 2 +- .../runtime-apis/rpc/error-handling.mdx | 6 +- .../runtime-apis/rpc/reserved-methods.mdx | 14 +- .../runtime-apis/streams/readablestream.mdx | 44 +- .../streams/readablestreambyobreader.mdx | 39 +- .../streams/readablestreamdefaultreader.mdx | 36 +- .../runtime-apis/streams/transformstream.mdx | 77 +- .../runtime-apis/streams/writablestream.mdx | 35 +- .../streams/writablestreamdefaultwriter.mdx | 58 +- .../docs/workers/runtime-apis/tcp-sockets.mdx | 183 ++- .../docs/workers/runtime-apis/web-crypto.mdx | 425 ++---- .../runtime-apis/webassembly/index.mdx | 16 +- .../docs/workers/runtime-apis/websockets.mdx | 177 +-- .../routing/full-stack-application.mdx | 5 +- .../testing/miniflare/storage/cache.md | 4 +- .../testing/vitest-integration/recipes.mdx | 2 +- .../docs/workers/vite-plugin/tutorial.mdx | 1 + src/content/docs/workers/wrangler/api.mdx | 52 +- .../docs/workers/wrangler/commands/r2.mdx | 1 - .../docs/workers/wrangler/configuration.mdx | 46 +- .../docs/workers/wrangler/custom-builds.mdx | 15 +- .../docs/workers/wrangler/deprecations.mdx | 122 +- .../wrangler/migration/update-v2-to-v3.mdx | 2 - .../v1-to-v2/wrangler-legacy/commands.mdx | 8 +- src/content/docs/workflows/build/index.mdx | 2 +- .../docs/workflows/build/test-workflows.mdx | 2 +- .../docs/workflows/examples/agents.mdx | 2 +- .../docs/workflows/examples/backup-d1.mdx | 1 - .../docs/workflows/examples/send-invoices.mdx | 1 - .../docs/workflows/examples/twilio.mdx | 1 - .../workflows/examples/wait-for-event.mdx | 13 +- .../docs/workflows/observability/index.mdx | 4 +- .../docs/workflows/python/bindings.mdx | 2 +- .../docs/workflows/reference/changelog.mdx | 4 +- .../docs/workflows/reference/glossary.mdx | 2 +- .../docs/workflows/reference/index.mdx | 2 +- .../docs/workflows/reference/pricing.mdx | 26 +- .../workflows/reference/wrangler-commands.mdx | 4 +- src/content/docs/workflows/videos.mdx | 10 +- .../advanced/datalayer-compatibility.mdx | 11 +- .../zaraz/advanced/domains-not-proxied.mdx | 1 - .../zaraz/advanced/google-consent-mode.mdx | 27 +- .../docs/zaraz/advanced/import-export.mdx | 9 +- src/content/docs/zaraz/advanced/index.mdx | 3 +- .../load-custom-managed-component.mdx | 3 +- .../docs/zaraz/advanced/load-selectively.mdx | 3 - .../zaraz/advanced/load-zaraz-manually.mdx | 15 +- .../docs/zaraz/advanced/using-jsonata.mdx | 37 +- .../docs/zaraz/consent-management/api.mdx | 182 +-- .../zaraz/consent-management/custom-css.mdx | 4 +- .../enable-consent-management.mdx | 9 +- .../consent-management/iab-tcf-compliance.mdx | 4 +- .../docs/zaraz/consent-management/index.mdx | 27 +- .../custom-actions/additional-fields.mdx | 7 +- .../zaraz/custom-actions/create-action.mdx | 3 +- .../zaraz/custom-actions/create-trigger.mdx | 3 +- .../custom-actions/edit-tools-and-actions.mdx | 15 +- .../zaraz/custom-actions/edit-triggers.mdx | 7 +- src/content/docs/zaraz/embeds.mdx | 9 +- src/content/docs/zaraz/get-started.mdx | 3 +- src/content/docs/zaraz/history/index.mdx | 3 +- src/content/docs/zaraz/history/versions.mdx | 16 +- src/content/docs/zaraz/http-events-api.mdx | 98 +- src/content/docs/zaraz/monitoring/index.mdx | 5 +- src/content/docs/zaraz/pricing-info.mdx | 7 +- src/content/docs/zaraz/reference/context.mdx | 9 - src/content/docs/zaraz/reference/index.mdx | 3 +- .../zaraz/reference/properties-reference.mdx | 84 +- src/content/docs/zaraz/reference/settings.mdx | 18 +- .../docs/zaraz/reference/supported-tools.mdx | 1 - .../docs/zaraz/variables/create-variables.mdx | 3 +- .../docs/zaraz/variables/edit-variables.mdx | 7 +- src/content/docs/zaraz/variables/index.mdx | 3 +- .../docs/zaraz/variables/worker-variables.mdx | 100 +- src/content/docs/zaraz/web-api/debug-mode.mdx | 6 +- src/content/docs/zaraz/web-api/ecommerce.mdx | 3 +- src/content/docs/zaraz/web-api/index.mdx | 3 +- src/content/docs/zaraz/web-api/set.mdx | 21 +- .../partials/1.1.1.1/captive-portals.mdx | 2 +- src/content/partials/agents/unique-agents.mdx | 3 +- .../ai-crawl-control/plan-comparison.mdx | 11 +- .../ai-gateway/analytics-dashboard.mdx | 1 - src/content/partials/ai-gateway/logging.mdx | 1 + .../ai-gateway/universal-gateway-example.mdx | 1 - .../partials/ai-search/rest-api-auth.mdx | 2 +- .../customer_metadata_boundary_error.mdx | 5 +- .../network-analytics-requirements.mdx | 7 +- .../network-analytics-v1-deprecation.mdx | 1 - .../partials/api-shield/label-methodology.mdx | 9 +- .../api-shield/mtls-api-shield-support.mdx | 1 - .../partials/api-shield/mtls-create-rule.mdx | 5 +- .../partials/api-shield/rate-limit-user.mdx | 1 - .../required-session-identifiers.mdx | 1 - .../sequence-mitigation-availability.mdx | 3 +- .../api-shield/session-identifiers.mdx | 5 +- .../partials/billing/two-payment-methods.mdx | 1 - .../bots/about-plan-considerations.mdx | 5 +- .../partials/bots/analytics-features.mdx | 1 - .../partials/bots/bfm-change-notice.mdx | 1 - .../partials/bots/bm-analytics-features.mdx | 9 +- .../bots/bot-settings-vs-custom-rules.mdx | 18 +- src/content/partials/bots/bots-ad.mdx | 1 - src/content/partials/bots/bots-cookie.mdx | 3 +- src/content/partials/bots/bots-heuristics.mdx | 3 +- src/content/partials/bots/bots-jsd.mdx | 1 - src/content/partials/bots/bots-ml.mdx | 5 +- .../partials/bots/buttons-plan-pages.mdx | 16 +- .../content-security-policy-limitation.mdx | 5 +- .../partials/bots/disable-cf-bm-cookie.mdx | 1 - .../partials/bots/endpoint-label-warning.mdx | 7 +- src/content/partials/bots/execution-order.mdx | 2 +- src/content/partials/bots/flexible-sbfm.mdx | 3 +- src/content/partials/bots/ja3-ja4-null.mdx | 3 +- .../partials/bots/jsd-availability.mdx | 3 +- .../partials/bots/plan-get-started.mdx | 1 - src/content/partials/bots/plan-intro.mdx | 1 - src/content/partials/bots/sequence-rules.mdx | 7 +- .../bots/signals-intelligence-and-ja4.mdx | 7 +- src/content/partials/bots/verified-bots.mdx | 1 - .../improve-blurry-screenshot-resolution.mdx | 15 +- .../partials/byoip/cloudflare-asn-callout.mdx | 2 +- src/content/partials/byoip/loa.mdx | 2 +- .../byoip/validate-prefix-endpoint.mdx | 1 - .../cache/cache-reserve-billing-note.mdx | 3 - .../cache/cache-reserve-eligibility.mdx | 2 +- .../partials/cache/cache-reserve-intro.mdx | 2 +- .../partials/cache/cache-reserve-limits.mdx | 2 +- .../cache/cache-reserve-operations.mdx | 2 +- src/content/partials/cache/edge-ttl.mdx | 2 +- .../partials/cache/regional-tiered-cache.mdx | 2 +- .../partials/cache/smart-tiered-cache.mdx | 2 +- .../cf-clearance-cookie.mdx | 3 +- .../create-challenge-page.mdx | 5 +- .../apex-proxying-process.mdx | 3 - .../cname-target-process.mdx | 1 - .../create-custom-hostname-api.mdx | 6 +- .../create-custom-hostname-limitations.mdx | 7 +- .../create-custom-hostname.mdx | 13 +- .../custom-origin-server-definition.mdx | 5 +- .../delete-custom-hostname-dash.mdx | 1 - .../get-started-initial-setup-preamble.mdx | 1 - .../get-started-per-hostname.mdx | 5 +- .../get-started-prereqs.mdx | 7 +- .../get-started-service-continuation.mdx | 1 - .../http-dcv-situation.mdx | 5 +- .../issue-certs-preamble.mdx | 1 - .../provider-guide-compatibility.mdx | 7 +- .../provider-guide-zone-hold.mdx | 2 +- .../regional-services.mdx | 1 - .../saas-customer-churn.mdx | 1 - .../same-name-as-zone.mdx | 3 +- .../ssl-for-saas-create-hostname.mdx | 1 - .../ssl-for-saas-definition.mdx | 1 - .../ssl-for-saas-plan-limitation.mdx | 3 - .../ssl-for-saas-validate-patch.mdx | 1 - .../txt-dcv-situation.mdx | 1 - .../txt-validation_api.mdx | 83 +- .../txt-validation_dashboard.mdx | 1 - .../txt-validation_post.mdx | 3 - .../txt-validation_preamble.mdx | 1 - .../update-dcv-method.mdx | 1 - .../wildcard-hostname-reqs.mdx | 1 - .../access/access-block-page.mdx | 7 +- .../cloudflare-one/access/add-mtls-cert.mdx | 21 +- .../cloudflare-one/access/add-target.mdx | 17 +- .../cloudflare-one/access/app-launcher.mdx | 4 +- .../cloudflare-one/access/bookmarks.mdx | 3 +- .../access/create-service-token.mdx | 3 +- .../access/enable-scim-on-dashboard.mdx | 14 +- .../access/entra-id-terraform.mdx | 1 - .../cloudflare-one/access/idp-integration.mdx | 4 +- .../access/isolation-prereqs.mdx | 1 - .../access/saas-apps/miro-sso.mdx | 5 +- .../access/saas-apps/saas-sessions.mdx | 2 +- .../access/saas-apps/salesforce-sso.mdx | 1 - .../access/scim-requires-login.mdx | 2 +- .../access/secure-tunnel-with-access.mdx | 1 - .../self-hosted-app/advanced-settings.mdx | 1 - .../browser-rendering-policies.mdx | 3 +- .../self-hosted-app/generic-public-app.mdx | 25 +- .../self-hosted-app/product-compatibility.mdx | 8 +- .../access/self-hosted-app/ssh-sessions.mdx | 2 +- .../access/session-duration.mdx | 1 - .../access/short-lived-certs-intro.mdx | 4 +- .../partials/cloudflare-one/access/tags.mdx | 1 - .../access/verify-scim-provisioning.mdx | 2 +- .../partials/cloudflare-one/aws-resolver.mdx | 3 +- .../casb/casb-dlp-integrations.mdx | 1 - .../casb/microsoft/m365-copilot-findings.mdx | 2 +- .../cloudflare-one/choose-team-name.mdx | 1 - .../clientless-browser-isolation.mdx | 3 +- .../dex/notifications-intro.mdx | 2 +- .../partials/cloudflare-one/dex/pcaps-run.mdx | 2 +- ...-use-case-1-3-create-quarantine-policy.mdx | 8 +- ...-use-case-2-4-create-quarantine-policy.mdx | 11 +- ...ase-configure-quarantine-notifications.mdx | 1 - .../deployment/set-up-mx-inline-step.mdx | 3 +- .../dispositions-and-attributes.mdx | 10 +- .../email-security/domain-information.mdx | 20 +- .../email-security/enable-logs.mdx | 3 +- .../onboarding-prerequisites.mdx | 3 +- .../cloudflare-one/gateway/add-logo-image.mdx | 1 - .../gateway/debugging-policies.mdx | 1 - .../gateway/egress-selector-cgnat-ips.mdx | 3 +- .../gateway/egress-selector-onramps.mdx | 14 +- .../gateway/egress-selector-split-tunnels.mdx | 4 +- .../gateway/enable-tls-decryption.mdx | 2 +- .../policies/do-not-inspect-applications.mdx | 3 +- .../policies/egress-destination-ip.mdx | 1 - ...trict-access-to-private-networks-allow.mdx | 8 +- ...trict-access-to-private-networks-block.mdx | 2 +- ...estrict-access-to-private-networks-dns.mdx | 8 +- .../gateway/resolver-policies-intro.mdx | 1 - .../gateway/selectors/category-options.mdx | 1 - .../gateway/selectors/destination-country.mdx | 7 +- .../gateway/selectors/device-posture.mdx | 1 - .../gateway/selectors/dns-resolver-ip.mdx | 1 - .../gateway/selectors/doh-subdomain.mdx | 1 - .../gateway/selectors/oidc-claims.mdx | 4 +- .../gateway/selectors/protocol.mdx | 1 - .../gateway/selectors/query-record-type.mdx | 1 - .../gateway/selectors/security-categories.mdx | 1 - .../gateway/selectors/source-country-dns.mdx | 7 +- .../gateway/selectors/source-country-http.mdx | 7 +- .../gateway/selectors/source-country.mdx | 7 +- .../gateway/selectors/source-ip-dns.mdx | 1 - .../gateway/selectors/source-ip-resolver.mdx | 1 - .../gateway/selectors/user-email.mdx | 4 +- .../gateway/selectors/user-group-email.mdx | 6 +- .../gateway/selectors/user-group-ids.mdx | 6 +- .../gateway/selectors/user-group-names.mdx | 6 +- .../gateway/selectors/user-name.mdx | 6 +- .../gateway/selectors/users-dns.mdx | 16 +- .../gateway/selectors/users-http.mdx | 16 +- .../gateway/selectors/users.mdx | 13 +- .../partials/cloudflare-one/gateway/value.mdx | 4 +- .../posture/configure-posture-check.mdx | 3 +- .../posture/prereqs-warp-is-deployed.mdx | 1 - .../cloudflare-one/ssh/decrypt-ssh-log.mdx | 8 +- .../cloudflare-one/ssh/public-key.mdx | 6 +- .../cloudflare-one/ssh/restart-server.mdx | 2 +- .../cloudflare-one/ssh/ssh-proxy-ca-note.mdx | 3 +- .../cloudflare-one/ssh/ssh-proxy-ca.mdx | 2 +- .../cloudflare-one/ssh/upload-ssh-key.mdx | 2 +- .../terraform/cloudflare-resources.mdx | 312 ++--- .../terraform/gcp-resources.mdx | 170 +-- .../cloudflare-one/terraform/providers-v5.mdx | 2 +- .../cloudflare-one/terraform/providers.mdx | 76 +- .../troubleshooting/browser-isolation.mdx | 18 +- .../cloudflare-one/troubleshooting/casb.mdx | 4 + .../cloudflare-one/troubleshooting/dex.mdx | 3 + .../troubleshooting/email-security.mdx | 23 +- .../troubleshooting/gateway.mdx | 13 +- .../cloudflare-one/tunnel/1033-error.mdx | 3 +- .../tunnel/account-scoped-roles.mdx | 5 +- .../tunnel/add-published-application.mdx | 13 +- .../cloudflared-replicas-diagram.mdx | 1 - .../load-balancer-tcp-monitors.mdx | 7 +- .../availability/tunnel-capacity-baseline.mdx | 7 +- .../availability/tunnel-capacity-intro.mdx | 1 - .../tunnel/catch-all-policy.mdx | 1 - .../tunnel/cgnat-split-tunnels.mdx | 1 - .../cloudflare-one/tunnel/create-tunnel.mdx | 3 +- .../deployment-guides/cloud-create-tunnel.mdx | 3 +- .../deployment-guides/cloud-private-ip.mdx | 22 +- .../cloud-public-hostname.mdx | 1 - .../tunnel/diagnostics/docker.mdx | 33 +- .../tunnel/diagnostics/tunnel-diag-file.mdx | 24 +- .../tunnel/dns-cloudflare-settings.mdx | 1 - .../tunnel/dns-records-intro.mdx | 1 - .../cloudflare-one/tunnel/grpc-support.mdx | 1 - .../tunnel/hostname-format-restrictions.mdx | 21 +- .../tunnel/install-and-run-tunnel.mdx | 3 +- .../locally-managed/tunnel-permissions.mdx | 20 +- .../tunnel/logs/filter-logs.mdx | 8 +- .../tunnel/logs/view-logs-dashboard.mdx | 1 - .../tunnel/logs/view-logs-on-server.mdx | 1 - .../tunnel/metrics/cloudflared.mdx | 2 +- .../tunnel/origin-parameters.mdx | 4 +- .../cloudflare-one/tunnel/package-manager.mdx | 3 +- .../cloudflare-one/tunnel/protocols-table.mdx | 26 +- .../cloudflare-one/tunnel/run-parameters.mdx | 6 +- .../cloudflare-one/tunnel/tunnel-status.mdx | 12 +- .../tunnel/warp-cli-target-list.mdx | 2 +- .../tunnel/warp-to-tunnel-route-ips.mdx | 66 +- .../warp/client-notification-lag.mdx | 3 +- .../warp/client-orchestration-ips.mdx | 1 - .../warp/device-enrollment-mtls.mdx | 7 +- .../warp/enroll-ios-android.mdx | 3 +- .../cloudflare-one/warp/ldf-best-practice.mdx | 2 +- .../warp/managed-networks-sha-256.mdx | 2 +- .../cloudflare-one/warp/manually-reauth.mdx | 2 +- .../cloudflare-one/warp/mdm-policy-file.mdx | 9 +- .../cloudflare-one/warp/os-version-semver.mdx | 3 +- .../warp/sha-256-fingerprint.mdx | 2 +- .../warp/support-ticket-best-practices.mdx | 4 +- .../warp/system-requirements/linux.mdx | 19 +- .../warp/system-requirements/macOS.mdx | 19 +- .../warp/system-requirements/windows.mdx | 19 +- .../cloudflare-one/warp/vpn-ip-traffic.mdx | 10 +- .../cloudflare-one/warp/warp-modes.mdx | 4 +- .../partials/containers/instance-types.mdx | 4 +- .../d1/d1-do-supported-sqlite-extensions.mdx | 4 +- .../partials/d1/generate-d1-api-token.mdx | 2 +- .../advanced-ddos/dns-protection-intro.mdx | 2 +- .../advanced-ddos/dns-setup.mdx | 2 +- .../mt-advanced-ddos-systems-onboarding.mdx | 2 +- .../advanced-ddos/tcp-protection-intro.mdx | 2 +- .../advanced-ddos/tcp-setup.mdx | 2 +- .../alerts-and-reports-independent.mdx | 1 - .../ddos-protection/allowlist-ip-spoofing.mdx | 5 +- .../ddos-protection/atp-filter-definition.mdx | 3 +- .../atp-filters-rules-precedence.mdx | 1 - .../ddos-protection/create-notification.mdx | 1 - .../ddos-protection/ddos-attack-coverage.mdx | 15 +- .../log-and-monitor-behavior-link.mdx | 2 +- .../managed-rulesets/create-override.mdx | 4 +- .../managed-rulesets/evaluation-behavior.mdx | 5 +- .../read-only-rules-description.mdx | 1 - .../managed-rulesets/read-only-rules-note.mdx | 1 - .../sensitivity-level-reference.mdx | 17 +- .../test-rules-description.mdx | 1 - .../ddos-protection/override-example.mdx | 25 +- .../ddos-protection/override-logic.mdx | 7 +- .../dmarc-management/domain-spoofing.mdx | 2 - .../partials/dns/a-aaaa-definition.mdx | 1 - src/content/partials/dns/acns-tcns-byoip.mdx | 3 +- .../partials/dns/acns-tcns-conditions.mdx | 7 +- src/content/partials/dns/acns-tcns-intro.mdx | 3 +- .../partials/dns/aname-alias-callout.mdx | 3 +- .../partials/dns/api-field-definitions.mdx | 1 - src/content/partials/dns/cname-definition.mdx | 1 - .../partials/dns/cname-flattening-callout.mdx | 1 - .../conversion-subdomain-setup-callout.mdx | 3 +- .../partials/dns/dns-errors-ts-action.mdx | 3 +- .../partials/dns/dns-errors-ts-intro.mdx | 5 +- .../partials/dns/dns-nxdomain-warning.mdx | 5 +- src/content/partials/dns/dns-record-steps.mdx | 10 +- src/content/partials/dns/dns-scan-intro.mdx | 1 - src/content/partials/dns/dns-scan-note.mdx | 2 +- src/content/partials/dns/dnssec-auto-add.mdx | 3 - .../partials/dns/dnssec-cloudflare-steps.mdx | 1 - .../partials/dns/dnssec-definition.mdx | 1 - .../partials/dns/dnssec-enabled-migration.mdx | 3 - .../partials/dns/dnssec-registrar-steps.mdx | 5 +- .../partials/dns/export-dns-records.mdx | 1 - .../partials/dns/internal-dns-beta-note.mdx | 1 - .../dns/internal-dns-view-conditions.mdx | 4 +- .../dns/internal-reference-zone-api.mdx | 15 +- .../dns/internal-reference-zone-intro.mdx | 11 +- .../dns/internal-zones-conditions.mdx | 4 +- .../partials/dns/linked-peers-limit.mdx | 1 - .../partials/dns/minimize-downtime-tip.mdx | 3 +- .../dns/mix-proxied-and-unproxied.mdx | 3 - .../partials/dns/nameserver-preamble.mdx | 1 - .../dns/nameservers-registrar-callout.mdx | 1 - .../partials/dns/ns-advanced-vs-custom.mdx | 1 - .../partials/dns/ns-set-omission-callout.mdx | 1 - src/content/partials/dns/ns-static-ips.mdx | 3 +- .../partials/dns/ns-update-providers.mdx | 71 +- src/content/partials/dns/onboard-warning.mdx | 1 - .../partials/dns/partial-setup-definition.mdx | 3 +- .../dns/random-prefix-attack-definition.mdx | 1 - .../partials/dns/records-name-field.mdx | 8 +- .../partials/dns/recover-deleted-domain.mdx | 1 - .../dns/secondary-conversion-unlink.mdx | 3 +- .../partials/dns/secondary-dns-override.mdx | 1 - .../partials/dns/ssltls-subdomains.mdx | 1 - .../partials/dns/subdomain-customization.mdx | 1 - .../partials/dns/third-party-caveat.mdx | 5 +- src/content/partials/dns/tsig-create-api.mdx | 1 - src/content/partials/dns/tsig-create-dash.mdx | 7 +- src/content/partials/dns/tsig-definition.mdx | 3 +- src/content/partials/dns/tsig-name-match.mdx | 1 - .../partials/dns/why-disable-dnssec.mdx | 1 - .../partials/dns/zone-defaults-exceptions.mdx | 1 - .../partials/dns/zone-file-size-limit.mdx | 1 - .../durable-objects/api-async-kv-legacy.mdx | 4 +- .../durable-objects/api-storage-alarms.mdx | 2 +- .../api-storage-other-methods.mdx | 2 +- .../partials/durable-objects/api-sync-kv.mdx | 2 +- .../do-faq-metrics-and-analytics.mdx | 4 +- .../durable-objects/do-plans-note.mdx | 2 +- .../durable-objects/durable-objects-sql.mdx | 122 +- .../durable-objects/recommend-sqlite-do.mdx | 2 +- .../what-are-durable-objects.mdx | 2 +- .../email-routing-definition.mdx | 1 - .../email-routing/enable-create-worker.mdx | 1 - .../send-emails-workers-intro.mdx | 3 +- .../partials/email-routing/types-bindings.mdx | 1 - .../partials/email-security/add-user.mdx | 3 +- .../email-security/auto-retraction.mdx | 18 +- .../bec-directory-guide-compromise-list.mdx | 1 - .../bec-directory-guide-secondary-email.mdx | 1 - .../email-security/contact-support.mdx | 3 +- .../bcc-table-geographic-locations.mdx | 11 +- .../deployment/mx-deployment-values.mdx | 1 - .../deployment/mx-geographic-locations.mdx | 19 +- .../email-security/deployment/o365-gcc.mdx | 1 - ...-use-case-1-3-create-quarantine-policy.mdx | 6 +- ...-use-case-2-4-create-quarantine-policy.mdx | 11 +- .../o365-use-case-configure-domain.mdx | 15 +- .../o365-use-case-transport-rules.mdx | 41 +- .../deployment/setup-api-overview.mdx | 21 +- .../deployment/setup-inline-overview.mdx | 13 +- .../deployment/setup-overview.mdx | 1 - .../email-security-description.mdx | 3 +- .../email-security/outbound-email.mdx | 1 - .../email-security/rename-area1-to-ces.mdx | 1 - .../partials/email-security/search.mdx | 9 +- .../email-security/service-addresses.mdx | 1 - .../email-security/sso-enforcement.mdx | 9 +- .../account-audit-logs-definition.mdx | 3 - .../account-manage-active-sessions.mdx | 3 - .../account-member-manage-limitation.mdx | 1 - .../fundamentals/api-change-api-key.mdx | 3 +- .../fundamentals/api-combine-filters.mdx | 9 +- .../fundamentals/api-filter-operators.mdx | 22 +- .../partials/fundamentals/api-rate-limits.mdx | 16 +- .../partials/fundamentals/api-using-api.mdx | 3 - .../partials/fundamentals/audit-log-api.mdx | 1 - .../create-account-best-practices.mdx | 1 - .../cybersafe-cipa-subcategories.mdx | 55 +- .../fundamentals/cybersafe-configuration.mdx | 1 - .../fundamentals/cybersafe-description.mdx | 1 - .../fundamentals/cybersafe-requirements.mdx | 1 - .../cybersafe-school-eligibility.mdx | 5 +- .../fundamentals/idp-group-deprecation.mdx | 5 - .../fundamentals/lists-import-notes.mdx | 7 +- .../fundamentals/new-token-warning.mdx | 3 - .../fundamentals/pseudo-ipv4-warning.mdx | 1 - .../fundamentals/revoke-active-sessions.mdx | 3 +- .../fundamentals/ubb-recommendation.mdx | 12 +- .../fundamentals/user-permissions-table.mdx | 19 +- .../partials/fundamentals/user-profiles.mdx | 3 +- .../partials/fundamentals/view-audit-log.mdx | 3 - .../fundamentals/what-is-cloudflare.mdx | 3 +- .../zero-downtime-failover-retry-on-error.mdx | 1 - .../hyperdrive/create-hyperdrive-binding.mdx | 7 +- .../hyperdrive/create-hyperdrive-config.mdx | 9 +- .../partials/hyperdrive/pooling-mode.mdx | 1 - .../use-postgres-js-to-make-query.mdx | 2 +- .../learning-paths/cache-basic-diagram.mdx | 1 - .../learning-paths/cache-optimization.mdx | 7 +- ...-network-overview-additional-resources.mdx | 3 +- .../china-network-overview-navigation.mdx | 27 +- .../cloudflare-tunnels-origin-description.mdx | 7 +- .../ddos-definition-and-diagram.mdx | 3 +- .../learning-paths/email-record-origin-ip.mdx | 1 - .../learning-paths/r2-series-navigation.mdx | 55 +- .../learning-paths/sase-series-navigation.mdx | 64 +- .../learning-paths/warp-series-navigation.mdx | 25 +- .../workflows-series-navigation.mdx | 35 +- .../zero-trust/blocklist-restricted-users.mdx | 3 +- .../blocklist-security-categories.mdx | 1 - .../configure-device-agent-description.mdx | 1 - .../configure-device-agent-objectives.mdx | 9 +- .../zero-trust/configure-idp.mdx | 3 +- .../zero-trust/connect-devices-objectives.mdx | 7 +- .../learning-paths/zero-trust/create-list.mdx | 3 +- .../device-enrollment-permissions.mdx | 3 +- .../zero-trust/email-dispositions.mdx | 15 +- .../zero-trust/enable-proxy-intro.mdx | 1 - .../zero-trust/initial-setup-objectives.mdx | 7 +- .../zero-trust/install-agent.mdx | 26 +- .../learning-paths/zero-trust/mdm.mdx | 3 +- .../zero-trust/split-tunnel-settings.mdx | 7 +- .../validate-traffic-in-gateway.mdx | 9 +- .../components-knowledge-callout.mdx | 1 - .../custom-rules-definition.mdx | 1 - .../dns-load-balancing-benefits.mdx | 1 - .../dns-load-balancing-definition.mdx | 1 - .../dns-load-balancing-limitations.mdx | 15 +- .../endpoints-introduction-callout.mdx | 1 - .../load-balancing/fallback-pools.mdx | 1 - .../load-balancing/health-check-diagram.mdx | 1 - .../load-balancing/health-check-regions.mdx | 1 - .../layer-4-load-balancing-definition.mdx | 3 - .../layer-7-load-balancing-benefits.mdx | 15 +- .../layer-7-load-balancing-definition.mdx | 1 - .../load-balancer-create-api.mdx | 149 ++- .../load-balancing/load-balancer-create.mdx | 53 +- .../load-balancer-definition.mdx | 1 - .../load-balancing/load-balancing-diagram.mdx | 1 - .../load-balancing/monitor-create-api.mdx | 105 +- .../load-balancing/monitor-create.mdx | 3 +- .../monitor-health-check-regions-options.mdx | 5 +- .../load-balancing/monitor-prepare-server.mdx | 3 - .../load-balancing/monitor-settings-basic.mdx | 11 +- .../monitor-settings-consecutive.mdx | 3 - .../origin-steering-definition.mdx | 7 +- .../origin-steering-policies.mdx | 1 - .../origin-steering-weights-definition.mdx | 1 - .../origin-steering-weights-limitations.mdx | 1 - .../partials/load-balancing/pool-create.mdx | 31 +- .../load-balancing/pool-health-threshold.mdx | 3 +- .../load-balancing/region-mapping.mdx | 1 - .../route-production-traffic.mdx | 7 +- .../session-affinity-by-cookie-process.mdx | 5 +- .../session-affinity-definition.mdx | 1 - .../spectrum-lb-limitations.mdx | 5 +- .../load-balancing/test-domain-setup.mdx | 1 - .../traffic-steering-definition.mdx | 1 - .../unexpected-health-statuses.mdx | 5 +- .../unhealthy-pool-traffic-distribution.mdx | 10 +- .../partials/logs/check-log-retention.mdx | 1 - .../partials/logs/disable-log-retention.mdx | 1 - .../partials/logs/enable-log-retention.mdx | 1 - .../partials/logs/enable-logpush-job.mdx | 5 +- .../partials/logs/enable-read-permissions.mdx | 1 - .../partials/logs/filtering-limitations.mdx | 1 - .../account-id-api-key.mdx | 20 +- .../analytics/set-thresholds-site-health.mdx | 2 +- .../analytics/site-analytics.mdx | 43 +- .../cloudflare-one-connectivity-options.mdx | 35 +- .../cloudflare-wan/custom-ike-id-ipsec.mdx | 13 +- .../cloudflare-wan/get-started.mdx | 12 +- .../cloudflare-wan/load-balancing.mdx | 2 +- .../reference/device-compatibility.mdx | 60 +- .../cloudflare-wan/security-filters.mdx | 2 +- .../cloudflare-wan/third-party/aws.mdx | 4 +- .../third-party/azure-virtual-wan.mdx | 18 +- .../cloudflare-wan/third-party/fitelnet.mdx | 1 - .../cloudflare-wan/third-party/fortinet.mdx | 2 - .../cloudflare-wan/third-party/juniper.mdx | 218 ++-- .../cloudflare-wan/third-party/oracle.mdx | 59 +- .../cloudflare-wan/third-party/palo-alto.mdx | 194 +-- .../third-party/sophos-firewall.mdx | 1 - .../cloudflare-wan/third-party/velocloud.mdx | 8 +- .../cloudflare-wan/third-party/viptela.mdx | 36 +- .../cloudflare-wan/third-party/yamaha.mdx | 24 +- .../cloudflare-wan/wan-transformation.mdx | 24 +- .../cloudflare-wan/zero-trust/gateway.mdx | 11 +- .../cloudflare-wan/zero-trust/overview.mdx | 6 +- .../zero-trust/security-services.mdx | 35 +- .../cloudflare-wan/zero-trust/tunnel.mdx | 24 +- .../cloudflare-wan/zero-trust/warp.mdx | 9 +- .../cni-product-use-cases.mdx | 15 +- .../query-magic-transit-bandwidth-graphql.mdx | 3 +- ...y-magic-transit-endpoint-health-checks.mdx | 126 +- .../query-magic-transit-health-checks.mdx | 2 +- .../ipsec-logs-troubleshooting.mdx | 8 +- .../magic-transit/advertise-prefixes.mdx | 3 +- .../magic-transit/cloudflare-ips.mdx | 8 +- .../mtu-mss/mss-clamping-gre.mdx | 2 - .../mtu-mss/mss-clamping-ipsec.mdx | 2 - .../safely-withdraw-byoip-prefix.mdx | 8 +- .../networking-services/magic-user-role.mdx | 2 +- .../mconn/device-metrics.mdx | 106 +- .../mconn/licence-keys.mdx | 4 +- .../mconn/maintenance/activate-connectors.mdx | 2 +- .../maintenance/deactivate-connector.mdx | 42 +- .../mconn/maintenance/default-password.mdx | 2 +- .../mconn/maintenance/edit-basic-info.mdx | 39 +- .../maintenance/edit-network-settings.mdx | 46 +- .../mconn/maintenance/edit-sites.mdx | 34 +- .../maintenance/edit-traffic-steering.mdx | 40 +- .../mconn/maintenance/heartbeat.mdx | 45 +- .../maintenance/interrupt-service-window.mdx | 47 +- .../register-hardware-appliance.mdx | 37 +- .../mconn/maintenance/remove-connectors.mdx | 75 +- .../mconn/mconn-reference.mdx | 17 +- .../breakout-prioritized.mdx | 262 ++-- .../app-aware-policies/netflow.mdx | 19 +- .../app-aware-policies/overview.mdx | 5 +- .../mconn/network-options/dhcp/dhcp-relay.mdx | 9 +- .../network-options/dhcp/dhcp-server.mdx | 9 +- .../mconn/network-options/nat-subnet.mdx | 1 - .../network-options/network-segmentation.mdx | 9 +- .../mconn/network-options/routed-subnets.mdx | 2 +- .../networking-services/mconn/overview.mdx | 2 +- .../mconn/troubleshooting/troubleshooting.mdx | 33 +- .../mconn/vlan-tagging.mdx | 2 +- .../mconn/wan-two-tunnels.mdx | 2 +- .../mnm-auto-advertisement-notifications.mdx | 2 +- .../mnm-magic-transit-integration.mdx | 10 +- .../partials/networking-services/mnm/faqs.mdx | 2 +- .../mnm/routers/sflow-config.mdx | 2 +- .../mnm/rules/dynamic-threshold.mdx | 16 +- .../mnm/rules/overview.mdx | 2 +- .../mnm/rules/rule-notifications.mdx | 21 +- .../mnm/rules/s-flow-ddos-attack.mdx | 16 +- .../mnm/rules/static-threshold.mdx | 32 +- .../mnm/tutorials/graphql-analytics.mdx | 1 - ...-vendor-guidelines-mss-settings-origin.mdx | 6 +- .../reference/longest-prefix-match.mdx | 2 +- .../traffic-steering-region-codes.mdx | 22 +- .../reference/tunnel-health-checks.mdx | 23 +- .../routing/anycast-warning.mdx | 2 +- .../routing/bgp-config-steps.mdx | 18 +- .../configure-cloudflare-source-ips.mdx | 2 + .../routing/mcn-cloudflare-wan-on-ramps.mdx | 18 +- .../networking-services/sites/sites-brief.mdx | 2 +- .../networking-services/sites/sites.mdx | 156 +-- .../troubleshoot-connectivity.mdx | 17 +- .../check-tunnel-healthchecks-dash.mdx | 121 +- .../health-checks-compatible-cmb-eu.mdx | 2 +- .../magic-tunnel-health-alerts.mdx | 33 +- .../tunnel-health/mconn-heartbeat-health.mdx | 2 +- .../troubleshoot-tunnel-health.mdx | 146 +-- .../virtual-networks-concept.mdx | 39 +- .../partials/notifications/get-started.mdx | 1 - src/content/partials/pages/c3-adapter.mdx | 3 - .../pages/c3-run-command-no-directory.mdx | 7 +- .../pages/cli-precedence-over-file.mdx | 3 - .../partials/pages/custom-domain-steps.mdx | 1 + .../pages/deploy-to-pages-steps-no-preset.mdx | 1 + .../deploy-to-pages-steps-with-preset.mdx | 1 + src/content/partials/pages/do-note.mdx | 1 - .../pages/framework-guides/create-gh-repo.mdx | 1 - .../create-github-repository-prefix.mdx | 1 - .../framework-guides/git-integration.mdx | 3 +- .../pages/framework-guides/learn-more.mdx | 3 +- .../pages/get-started-git-connect-pages.mdx | 5 +- .../pages/get-started-git-manage-site.mdx | 11 +- .../pages/git-integration-warning.mdx | 3 - .../partials/pages/prod-branch-update.mdx | 1 - .../pages/tutorials-before-you-start.mdx | 1 - .../partials/pages/web-analytics-setup.mdx | 2 +- src/content/partials/queues/enable-queues.mdx | 2 +- .../event-subscriptions/access-events.mdx | 58 +- .../event-subscriptions/artifacts-events.mdx | 366 +++--- .../queues/event-subscriptions/kv-events.mdx | 56 +- .../queues/event-subscriptions/r2-events.mdx | 60 +- .../super-slurper-events.mdx | 202 +-- .../event-subscriptions/vectorize-events.mdx | 62 +- .../event-subscriptions/workers-ai-events.mdx | 90 +- .../workers-builds-events.mdx | 264 ++-- .../event-subscriptions/workflows-events.mdx | 180 +-- .../partials/r2/custom-domain-steps.mdx | 1 + .../partials/r2/link-to-workers-r2-api.mdx | 2 +- .../partials/r2/migrator-etag-caveat.mdx | 3 +- .../common/create-your-own-ui-examples.mdx | 5 +- .../common/default-meeting-examples.mdx | 5 +- .../web/breakout-room-close-breakout.mdx | 13 +- .../web/breakout-room-creation-sdk-api.mdx | 17 +- .../breakout-room-fetch-meetings-sdk-api.mdx | 14 +- .../breakout-room-handle-breakout-events.mdx | 11 +- ...breakout-room-move-participant-sdk-api.mdx | 19 +- ...t-room-move-preset-participant-sdk-api.mdx | 15 +- .../web/breakout-room-permission-check.mdx | 16 +- .../realtimekit/web/language-pack-json.mdx | 822 ++++++------ .../description-of-design-guides.mdx | 1 - ...scription-of-ref-architecture-diagrams.mdx | 1 - .../description-of-ref-architectures.mdx | 1 - .../what-is-cloudflare-link.mdx | 3 +- .../partials/registrar/email-verification.mdx | 3 - .../partials/registrar/enable-dnssec.mdx | 3 +- .../registrar/icann-unverified-email.mdx | 3 +- .../partials/registrar/requirements.mdx | 1 - .../partials/registrar/restrictions.mdx | 12 +- .../partials/registrar/verify-dnssec.mdx | 1 - .../configuration-rule-link-to-examples.mdx | 1 - .../rules/configuration-rule-promotion.mdx | 3 - .../partials/rules/error-pages-list.mdx | 1 - .../partials/rules/page-rules-migration.mdx | 1 - .../rules/rules-creation-workflow.mdx | 1 - .../partials/rules/rules-templates.mdx | 6 +- .../rules/terraform-additional-resources.mdx | 5 +- .../rules/transform/header-valid-names.mdx | 5 +- .../rules/transform/header-valid-values.mdx | 5 +- .../ruleset-engine/max-expression-length.mdx | 1 - .../ruleset-engine/rule-position-values.mdx | 7 +- .../brand-protection-alerts.mdx | 1 - .../brand-protection-definition.mdx | 3 +- .../security-center/scan-frequency.mdx | 3 +- .../security-center/scan-properties.mdx | 9 +- .../security-insights-definition.mdx | 1 - .../partials/smart-shield/argo-analytics.mdx | 2 +- .../partials/smart-shield/argo-intro.mdx | 2 +- .../concurrent-connections-explainer.mdx | 2 +- .../smart-shield/dcei-pool-requirements.mdx | 2 +- .../smart-shield/health-checks-analytics.mdx | 2 +- .../smart-shield/health-checks-intro.mdx | 2 +- .../smart-shield/health-checks-regions.mdx | 4 +- .../smart-shield/smart-shield-callout.mdx | 2 +- .../partials/smart-shield/zone-lockdown.mdx | 2 +- .../spectrum-with-load-balancer-api.mdx | 63 +- .../spectrum-with-load-balancer-dash.mdx | 3 +- .../partials/speed/rocket-loader-csp.mdx | 3 +- src/content/partials/speed/user-agents.mdx | 10 +- .../ssl/acm-ca-hostnames-conditions.mdx | 1 - src/content/partials/ssl/acm-definition.mdx | 1 - .../partials/ssl/acm-validate-cert.mdx | 5 +- .../ssl/aop-per-hostname-upload-cert.mdx | 3 +- .../partials/ssl/caa-records-added-by-cf.mdx | 3 +- .../partials/ssl/caa-records-definition.mdx | 1 - .../ssl/change-encryption-mode-api.mdx | 1 - .../ssl/change-encryption-mode-dash.mdx | 1 - .../ssl/cipher-suites-api-linkout.mdx | 3 +- .../partials/ssl/cipher-suites-definition.mdx | 1 - .../ssl/cipher-suites-saas-linkout.mdx | 3 +- .../ssl/ciphers-api-general-notes.mdx | 2 +- .../partials/ssl/cname-cert-verification.mdx | 1 - src/content/partials/ssl/csr-definition.mdx | 1 - .../partials/ssl/custom-cert-ciphers.mdx | 7 +- .../ssl/custom-cert-openssl-commands.mdx | 1 - .../ssl/custom-certificates-definition.mdx | 1 - .../custom-origin-trust-store-definition.mdx | 1 - .../partials/ssl/dcv-certificate-renewal.mdx | 9 +- .../partials/ssl/dcv-conflicting-records.mdx | 3 +- src/content/partials/ssl/dcv-definition.mdx | 1 - .../ssl/dcv-invalid-token-situations.mdx | 1 - .../partials/ssl/dcv-path-security.mdx | 1 - .../partials/ssl/dcv-renewal-fallback.mdx | 1 - .../partials/ssl/dcv-validate-patch.mdx | 1 - .../ssl/encryption-mode-definition.mdx | 1 - .../ssl/enforce-https-recommendation.mdx | 1 - .../partials/ssl/error-rate-limiting.mdx | 1 - .../ssl/generic-validation-process.mdx | 1 - .../partials/ssl/geokey-manager-v1.mdx | 1 - .../ssl/get-started-additional-features.mdx | 7 +- .../ssl/http-cname-validation-process.mdx | 1 - .../partials/ssl/http-to-txt-schedule.mdx | 3 +- .../partials/ssl/keyless-ssl-definition.mdx | 1 - .../partials/ssl/keyless-tunnel-setup.mdx | 1 - .../partials/ssl/keyless-upload-preamble.mdx | 1 - .../partials/ssl/origin-ca-pause-error.mdx | 3 +- .../ssl/partial-zone-acm-dcv-nonwildcard.mdx | 8 +- .../ssl/partial-zone-acm-dcv-wildcard.mdx | 5 +- src/content/partials/ssl/ssl-mode-errors.mdx | 1 - src/content/partials/ssl/ssl-mode-no-aop.mdx | 1 - .../ssl/ssl-recommender-post-setup.mdx | 3 +- .../partials/ssl/ssl-recommender-prereqs.mdx | 7 +- src/content/partials/ssl/test-tls-version.mdx | 3 +- .../ssl/tls-1.3-cipher-limitations.mdx | 1 - .../ssl/total-tls-character-limitation.mdx | 3 +- .../partials/ssl/txt-validation-api.mdx | 53 +- .../partials/ssl/txt-validation-dashboard.mdx | 1 - .../ssl/txt-validation-definition.mdx | 1 - .../partials/ssl/txt-validation-preamble.mdx | 1 - .../ssl/universal-ssl-enable-full.mdx | 1 - .../partials/ssl/universal-ssl-validity.mdx | 3 +- .../ssl/ussl-limitations-solutions.mdx | 7 +- .../partials/ssl/ussl-limitations-table.mdx | 1 - .../partials/ssl/validation-level-note.mdx | 1 - .../stream/android_playback_code_snippet.mdx | 1 - .../stream/chromecast_limitations.mdx | 1 - .../stream/ios_playback_code_snippet.mdx | 1 - src/content/partials/stream/prereqs.mdx | 3 - .../prereqs_first_start_live_streaming.mdx | 3 - .../partials/stream/srt-supported-modes.mdx | 3 - .../directory-listing-definition.mdx | 2 +- src/content/partials/style-guide/icons.mdx | 2 +- .../style-guide/public-stats-definition.mdx | 2 +- .../partials/style-guide/tab-guidance.mdx | 4 +- .../partials/style-guide/table-guidelines.mdx | 2 +- src/content/partials/support/2fa-enable.mdx | 1 - src/content/partials/support/2fa-overview.mdx | 1 - .../partials/tenant/account-definition.mdx | 1 - .../tenant/account-details-preamble.mdx | 1 - .../partials/tenant/account-details.mdx | 23 +- .../partials/tenant/account-preamble.mdx | 1 - .../partials/tenant/create-account-api.mdx | 70 +- .../partials/tenant/create-account-dash.mdx | 1 - .../tenant/create-account-subscription.mdx | 20 +- .../tenant/create-zone-subscription.mdx | 24 +- .../partials/tenant/resource-definition.mdx | 1 - .../tenant/tenant-admin-definition.mdx | 1 - .../partials/tenant/tenant-definition.mdx | 1 - .../tenant/tenant-details-preamble.mdx | 1 - .../partials/tenant/tenant-details.mdx | 5 - .../partials/tenant/user-definition.mdx | 1 - .../partials/terraform/create-r2-buckets.mdx | 1 - .../terraform/find-ids-managed-rulesets.mdx | 5 +- src/content/partials/terraform/find-ids.mdx | 5 +- .../import-delete-existing-rulesets.mdx | 5 +- .../partials/terraform/v4-code-snippets.mdx | 3 +- .../partials/terraform/v5-code-snippets.mdx | 1 - .../partials/time-services/ntp-definition.mdx | 1 - .../partials/turnstile/challenge-behavior.mdx | 1 - .../partials/turnstile/privacy-policy.mdx | 2 +- .../partials/turnstile/proxied-hostnames.mdx | 1 - .../turnstile/security-requirements.mdx | 2 - .../partials/turnstile/siteverify-warning.mdx | 1 - src/content/partials/turnstile/siteverify.mdx | 3 +- .../partials/turnstile/test-secret-key.mdx | 3 +- .../partials/turnstile/test-sitekey.mdx | 3 +- .../turnstile/troubleshooting-steps.mdx | 21 +- .../partials/turnstile/widget-components.mdx | 11 +- .../partials/vectorize/vectorize-ga.mdx | 3 - .../partials/vectorize/vectorize-pricing.mdx | 8 +- .../create-environment-situation.mdx | 1 - .../version-management/edit-version.mdx | 7 +- .../enable-default-creation.mdx | 7 +- .../version-management/enable-versioning.mdx | 5 +- .../environment-defaults.mdx | 7 +- .../environment-definition.mdx | 1 - .../production-read-only-default.mdx | 1 - .../version-management/promote-version.mdx | 4 +- .../version-management/test-version.mdx | 3 +- .../version-management/version-definition.mdx | 1 - .../waf/api-create-ruleset-with-rule.mdx | 1 - src/content/partials/waf/list-advantages.mdx | 7 +- src/content/partials/waf/managed-lists.mdx | 4 +- .../waf/open-ports-blocked-traffic.mdx | 1 - .../waf/rate-limiting-best-practices.mdx | 11 +- .../waf/rate-limiting-rule-parameters.mdx | 15 +- .../partials/waf/rules-next-steps-table.mdx | 6 +- .../waiting-room/change-queueing-method.mdx | 7 +- .../partials/waiting-room/queue-all.mdx | 1 - .../partials/waiting-room/queue-some.mdx | 1 - .../partials/warp-client/modes-options.mdx | 13 +- .../web-analytics-definition.mdx | 1 - .../web-analytics-notifications.mdx | 1 - .../web-analytics-proxied-setup.mdx | 1 - .../web-analytics-troubleshooting.mdx | 3 - .../partials/web3/cloudflare-settings.mdx | 1 - .../partials/web3/create-gateway-api.mdx | 31 +- .../partials/web3/pricing-page-reference.mdx | 3 - .../workers-ai/custom_requirements.mdx | 3 - .../partials/workers-ai/file_issues.mdx | 3 - .../workers-ai/openai-compatibility.mdx | 1 - .../workers-vpc/create-tunnel-steps.mdx | 2 +- .../partials/workers-vpc/required-roles.mdx | 1 - .../workers/ai-local-usage-charges.mdx | 3 - .../partials/workers/c3-definition.mdx | 1 - .../partials/workers/compute-per-request.mdx | 3 +- .../workers/content_and_contentoptions.mdx | 3 - .../workers/dash-creation-next-steps.mdx | 1 + .../partials/workers/env_and_secrets.mdx | 1 - .../partials/workers/envvar-example.mdx | 1 - .../workers/fetch-html-example-js.mdx | 15 +- .../partials/workers/get-started-dash.mdx | 3 +- .../workers/isolate-cpu-flexibility.mdx | 1 - .../partials/workers/isolate-description.mdx | 1 - .../partials/workers/limits_increase.mdx | 3 - .../partials/workers/nodejs-compat-howto.mdx | 2 - .../partials/workers/playground-callout.mdx | 3 - src/content/partials/workers/prereqs.mdx | 8 +- .../partials/workers/redirect-example-js.mdx | 11 +- .../partials/workers/remote-binding-note.mdx | 2 +- .../workers/request-dot-clone-warning.mdx | 2 +- .../respond-another-site-example-js.mdx | 27 +- .../workers/return-html-example-js.mdx | 17 +- .../workers/return-json-example-js.mdx | 13 +- .../workers/service-binding-rpc-example.mdx | 1 - .../workers/storage-products-table.mdx | 22 +- .../workers/testing-pages-functions.mdx | 3 - .../workers/tutorials-before-you-start.mdx | 1 - .../partials/workers/workers_logs_pricing.mdx | 11 +- .../workers/wrangler-commands/containers.mdx | 16 +- .../workers/wrangler-commands/r2-sql.mdx | 11 +- .../partials/workers/wrangler-commands/r2.mdx | 98 +- .../workflows/workflows-type-parameters.mdx | 3 +- .../partials/zaraz/zaraz-definition.mdx | 1 - src/pages/agent-setup/index.astro | 49 +- src/pages/plans.astro | 4 +- 3654 files changed, 33884 insertions(+), 34114 deletions(-) create mode 100644 src/content/changelog/realtime/2026-05-28-realtimekit-track-recording.mdx diff --git a/.agents/references/procedures.md b/.agents/references/procedures.md index b335d124dc55fb0..04454ac541394b5 100644 --- a/.agents/references/procedures.md +++ b/.agents/references/procedures.md @@ -11,10 +11,7 @@ Wrap all multi-step procedures in the `Steps` component: ```mdx import { Steps } from "~/components"; - -1. Step one -2. Step two - +1. Step one 2. Step two ``` Single-step procedures: fold the step into the introductory sentence rather than making a one-item list. @@ -26,14 +23,17 @@ Sub-steps use lowercase letters (a, b, c). Sub-sub-steps use lowercase Roman num ## Writing rules **Order**: state location before action, purpose before action. + - "In the **DNS** section, select **Add record**." (location → action) - "To delete the rule, select **Delete**." (purpose → action) **First step**: consolidate login and navigation. Do not make "Log in" its own step if the next step is navigating somewhere. + - "Log in to the [Cloudflare dashboard](https://dash.cloudflare.com) and go to **DNS** > **Records**." - Write "log in to" (three words), not "log into". **Optional steps**: prefix with `(Optional)` as the first word. + - "(Optional) Enter a description for the rule." **Enter key**: if the user must press **Enter** after a step, include it in that step. @@ -62,10 +62,10 @@ Provide a screenshot when the UI element is genuinely hard to locate without one ## Terminology in procedures -| Use | Not | -| --- | --- | -| select | click | -| go to | navigate to | +| Use | Not | +| ------------------ | ---------------- | +| select | click | +| go to | navigate to | | turn on / turn off | enable / disable | -| log in to | log into | -| (Optional) | Optional: | +| log in to | log into | +| (Optional) | Optional: | diff --git a/.agents/skills/dependabot-review/SKILL.md b/.agents/skills/dependabot-review/SKILL.md index 9ad186440519dd9..1b684c642fe06e3 100644 --- a/.agents/skills/dependabot-review/SKILL.md +++ b/.agents/skills/dependabot-review/SKILL.md @@ -62,7 +62,7 @@ grep -r "require(['\"]['\"]" src/ worker/ bin/ -l grep '""' package.json # If transitive, who pulls it in? -node -e "const lock = require('./pnpm-lock.yaml'); ..." +node -e "const lock = require('./pnpm-lock.yaml'); ..." # or just: grep -A2 '""' pnpm-lock.yaml | grep -v "^--$" | head -20 ``` @@ -79,6 +79,7 @@ grep -r "\|" src/ worker/ bin/ --include="*.ts" --incl ``` For Astro/MDX source files under `src/content/docs/`, map them to their route: + - `src/content/docs/workers/get-started/index.mdx` → `/workers/get-started/` - `src/content/docs/pages/platform/limits.mdx` → `/pages/platform/limits/` @@ -88,13 +89,13 @@ If more than ~5 files use the changed API, list a representative sample (pick th Rate the probability that this bump causes a **visible change to the docs site**: -| Rating | Meaning | -|--------|---------| -| **None** | Package not used directly; transitive only; or only internal/type changes | -| **Very Low** | Direct dependency, but changed APIs are not called in this repo | -| **Low** | Changed APIs are called, but only in build tooling (not runtime or content rendering) | -| **Medium** | Changed APIs affect content rendering (Astro components, MDX processing, syntax highlighting) | -| **High** | Changed APIs affect output seen by users — rendered HTML, search index, Worker behavior | +| Rating | Meaning | +| ------------ | --------------------------------------------------------------------------------------------- | +| **None** | Package not used directly; transitive only; or only internal/type changes | +| **Very Low** | Direct dependency, but changed APIs are not called in this repo | +| **Low** | Changed APIs are called, but only in build tooling (not runtime or content rendering) | +| **Medium** | Changed APIs affect content rendering (Astro components, MDX processing, syntax highlighting) | +| **High** | Changed APIs affect output seen by users — rendered HTML, search index, Worker behavior | For **security fixes**: note what the vulnerability affects and whether our usage is in the vulnerable code path. @@ -142,5 +143,6 @@ For grouped PRs (non-major group), the PR body lists each package separately. Pr ### Packages with no public changelog If a package has no changelog and the upstream repo is private or unavailable: + 1. Check npm for version diff: `npm diff @ @` 2. If that also fails, note it explicitly and rate impact conservatively based on usage alone. diff --git a/.agents/skills/docs-review/SKILL.md b/.agents/skills/docs-review/SKILL.md index 4f37fbdb5b612a6..7ba37ceae99136b 100644 --- a/.agents/skills/docs-review/SKILL.md +++ b/.agents/skills/docs-review/SKILL.md @@ -150,19 +150,19 @@ Read full files for context — code that looks wrong in a diff may be correct i See `.agents/references/style-guide.md` for the full rules. Quick reference: -| Rule | Detail | -| ------------------------ | ---------------------------------------------------------------------------------------------------- | -| Unescaped MDX characters | `{`, `}`, `<`, `>` in prose must be escaped or in backticks | -| Component imports | Every component used must be imported from `~/components` | -| Workers code | Must use `TypeScriptExample`, not bare `js`/`ts` fences | -| Config blocks | Must use `WranglerConfig` with TOML input; use `$today` for `compatibility_date` | -| Package install commands | Must use `PackageManagers`, not bare `sh` fences | -| Code block languages | Lowercase, from the supported set — see `.agents/references/style-guide.md` | -| Internal links | Root-relative paths, trailing slash, no file extensions, no full `developers.cloudflare.com` URLs | -| Frontmatter | `title` and `description` required; `pcx_content_type` must be a valid value | -| Writing style | See `.agents/references/style-guide.md` — covers voice, contractions, terminology, headings, etc. | -| Code correctness | For type checking, API usage, and binding patterns, load the `code-review` skill | -| Accuracy | Claims must be substantiated — link to sources of truth, do not re-explain what other pages cover | +| Rule | Detail | +| ------------------------ | ------------------------------------------------------------------------------------------------- | +| Unescaped MDX characters | `{`, `}`, `<`, `>` in prose must be escaped or in backticks | +| Component imports | Every component used must be imported from `~/components` | +| Workers code | Must use `TypeScriptExample`, not bare `js`/`ts` fences | +| Config blocks | Must use `WranglerConfig` with TOML input; use `$today` for `compatibility_date` | +| Package install commands | Must use `PackageManagers`, not bare `sh` fences | +| Code block languages | Lowercase, from the supported set — see `.agents/references/style-guide.md` | +| Internal links | Root-relative paths, trailing slash, no file extensions, no full `developers.cloudflare.com` URLs | +| Frontmatter | `title` and `description` required; `pcx_content_type` must be a valid value | +| Writing style | See `.agents/references/style-guide.md` — covers voice, contractions, terminology, headings, etc. | +| Code correctness | For type checking, API usage, and binding patterns, load the `code-review` skill | +| Accuracy | Claims must be substantiated — link to sources of truth, do not re-explain what other pages cover | ### 3. Assess What to Flag diff --git a/.agents/skills/eli5/SKILL.md b/.agents/skills/eli5/SKILL.md index 47c5f5e78f0cc91..3158464814dc939 100644 --- a/.agents/skills/eli5/SKILL.md +++ b/.agents/skills/eli5/SKILL.md @@ -67,7 +67,7 @@ Use this skill for content that targets a broad or mixed audience — not every - **Developer-focused API and SDK references** (e.g. Workers, D1, R2, Durable Objects, KV) — the audience is developers who are expected to know programming concepts, database terminology, and API conventions - **Code-heavy tutorials targeting developers** — readers self-select into these and already have the prerequisite knowledge -- **Configuration references with purely technical audiences** — parameter tables, CLI references, and schema docs where jargon *is* the content +- **Configuration references with purely technical audiences** — parameter tables, CLI references, and schema docs where jargon _is_ the content **Use your judgment for everything else.** Ask: "Would a reasonable reader of this page already know these terms?" If yes, this skill adds little value. On the other hand, if the following are true, this skill could provide significant value. @@ -105,13 +105,13 @@ I read the file, detect sections, analyze organization, and identify the content After detection, I ask you to confirm the content type. Different types require different strategies: -| Type | Strategy | -|------|----------| -| Overview | Problem → Solution → Benefit | -| Concept | Analogy → Plain explanation → Technical details | -| How To | Context → Multi-path steps (Dashboard + API) | +| Type | Strategy | +| --------- | ------------------------------------------------ | +| Overview | Problem → Solution → Benefit | +| Concept | Analogy → Plain explanation → Technical details | +| How To | Context → Multi-path steps (Dashboard + API) | | Reference | Use-case organization with two-tier descriptions | -| Tutorial | Progressive complexity with code explanations | +| Tutorial | Progressive complexity with code explanations | **3. Apply Enhancement Constraints** @@ -225,7 +225,7 @@ These are the highest-risk categories when documentation has been simplified. Pr 1. **Simplified mechanism descriptions** — Any "how it works" explanation added during simplification that was not in the original. These carry the highest risk: a plausible-sounding explanation that describes the wrong mechanism is worse than the original jargon. Verify the actual mechanism against the source docs in this repository. -2. **Misleading nuance** — Statements that are not outright wrong but flatten important nuance, creating a wrong mental model. Example: "Cloudflare generates a `robots.txt` file that instructs AI crawlers to stay away from your content" is misleading — `robots.txt` is a per-path allow/disallow mechanism, not a blanket block. The sentence omits that it specifies *where* crawlers may and may not go. Flag any statement where the simplification loses a meaningful distinction. +2. **Misleading nuance** — Statements that are not outright wrong but flatten important nuance, creating a wrong mental model. Example: "Cloudflare generates a `robots.txt` file that instructs AI crawlers to stay away from your content" is misleading — `robots.txt` is a per-path allow/disallow mechanism, not a blanket block. The sentence omits that it specifies _where_ crawlers may and may not go. Flag any statement where the simplification loses a meaningful distinction. 3. **Net-new claims** — Any explanation, context, or framing added during simplification that was not present in the original document. Every piece of new information requires a citation. If the original said "zones pair with resolver policies" and the simplification adds "based on source IP, user identity, or domain," verify that all three of those selectors are actually supported. @@ -249,12 +249,12 @@ These are the highest-risk categories when documentation has been simplified. Pr - **low** — Claim is minor or widely accepted common knowledge. 5. **Report** — Present findings in this format: -| # | Claim (exact text) | Source | Status | -|---|---|---|---| -| 1 | "Workers KV supports keys up to 512 bytes" | `src/content/docs/kv/api/write-key-value-pairs.mdx` | ✅ sourced | -| 2 | "Latency is under 50 ms globally" | — | ❌ unsourced (high) | -| 3 | "instructs crawlers to stay away from your content" | `src/content/docs/bots/robots-txt.mdx` — source says per-path allow/disallow, not blanket block | ⚠️ misleading (critical) | -| 4 | "zones pair with resolver policies" | present in original — `path/to/file.mdx:34` | ✅ sourced (original) | +| # | Claim (exact text) | Source | Status | +| --- | --------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------ | +| 1 | "Workers KV supports keys up to 512 bytes" | `src/content/docs/kv/api/write-key-value-pairs.mdx` | ✅ sourced | +| 2 | "Latency is under 50 ms globally" | — | ❌ unsourced (high) | +| 3 | "instructs crawlers to stay away from your content" | `src/content/docs/bots/robots-txt.mdx` — source says per-path allow/disallow, not blanket block | ⚠️ misleading (critical) | +| 4 | "zones pair with resolver policies" | present in original — `path/to/file.mdx:34` | ✅ sourced (original) | ### Rules @@ -397,10 +397,12 @@ Produce output following this template exactly. All sections are required. ## Simplification Overview **What was confusing:** + - [Issue pattern 1] - [Issue pattern 2] **Approach taken:** + - [Strategy 1] - [Strategy 2] @@ -409,14 +411,17 @@ Produce output following this template exactly. All sections are required. ## Section: [Original Heading] ### Original Content + [Exact text from source, preserved] ### Issues Identified + **Jargon:** [terms and why problematic] **Assumptions:** [unstated prerequisites] **Unclear Logic:** [structural issues] ### Simplified Version + **In Plain Language:** [One-sentence distillation] **What It Is:** [2-3 paragraphs building from basics] **Why It Matters:** [Benefits and value] @@ -434,9 +439,9 @@ Produce output following this template exactly. All sections are required. ## Terminology Index -| Term | Line | Defined? | Suggested Action | -| ---- | ---- | -------- | ---------------- | -| [term] | [line number] | Yes/No | Add glossary tooltip / Add cross-link to [page] / Add inline definition | +| Term | Line | Defined? | Suggested Action | +| ------ | ------------- | -------- | ----------------------------------------------------------------------- | +| [term] | [line number] | Yes/No | Add glossary tooltip / Add cross-link to [page] / Add inline definition | --- @@ -449,9 +454,9 @@ Produce output following this template exactly. All sections are required. Line-numbered recommendations for further improvements: -| Line(s) | Current Approach | Suggested Enhancement | Why | Priority | -| ------- | ---------------- | --------------------- | --- | -------- | -| [lines] | [what exists] | [what to change] | [why it improves accessibility] | High/Medium/Low | +| Line(s) | Current Approach | Suggested Enhancement | Why | Priority | +| ------- | ---------------- | --------------------- | ------------------------------- | --------------- | +| [lines] | [what exists] | [what to change] | [why it improves accessibility] | High/Medium/Low | ``` ## References diff --git a/.agents/skills/eli5/recommendations/internal-dns/index.eli5.mdx b/.agents/skills/eli5/recommendations/internal-dns/index.eli5.mdx index 6d9e9f57671e88a..a81b5834b7aae6c 100644 --- a/.agents/skills/eli5/recommendations/internal-dns/index.eli5.mdx +++ b/.agents/skills/eli5/recommendations/internal-dns/index.eli5.mdx @@ -193,6 +193,7 @@ For detailed step-by-step setup instructions, see the [Get started guide](/dns/i This overview was enhanced with inline context explaining when you'd use Internal DNS, step-by-step query flow showing how views work, and three detailed use case examples with real-world scenarios. Added explanations of key concepts (views, zone referencing, privacy model) and a "Getting started" checklist. **What was added:** + - Opening context: When to use Internal DNS with concrete example (lines 34-36) - Architecture explanations: On-ramp options, why zones are private (lines 42-44, 48-50) - Views explanation: Why views matter and how they enable customization (lines 73-75) diff --git a/.agents/skills/eli5/references/EXAMPLES_REFERENCE.md b/.agents/skills/eli5/references/EXAMPLES_REFERENCE.md index 742a86dc6ee14df..4d1539a961ee745 100644 --- a/.agents/skills/eli5/references/EXAMPLES_REFERENCE.md +++ b/.agents/skills/eli5/references/EXAMPLES_REFERENCE.md @@ -26,6 +26,7 @@ Once content type is detected and validated, I apply type-specific simplificatio **Purpose:** Help users quickly understand what a product/feature is and decide if they need it. **Required Elements:** + - Opening benefit statement (what problem this solves) - Problem/Solution/Benefit structure - "Perfect for" self-identification section @@ -33,6 +34,7 @@ Once content type is detected and validated, I apply type-specific simplificatio - Technical architecture separated to bottom **Analysis Focus:** + - Does opening paragraph answer "what" and "why"? - Are features explained with benefits, not just descriptions? - Is there a clear call-to-action? @@ -49,32 +51,36 @@ Once content type is detected and validated, I apply type-specific simplificatio **Pattern Example:** ❌ **Before (Technical-first):** + ```markdown ## Product X -Product X is a distributed edge computing platform utilizing V8 -isolates for serverless code execution with sub-millisecond cold +Product X is a distributed edge computing platform utilizing V8 +isolates for serverless code execution with sub-millisecond cold start performance. Features: + - Global anycast network deployment - Automatic scaling and load distribution - Pay-per-request pricing model ``` ✅ **After (Benefit-first):** + ```markdown ## Product X -Run code worldwide without managing servers. Deploy in seconds, +Run code worldwide without managing servers. Deploy in seconds, scale automatically, pay only for what you use. **What problem it solves:** -Maintaining global infrastructure is expensive and complex. Product X -runs your code in 300+ cities automatically, handling all the +Maintaining global infrastructure is expensive and complex. Product X +runs your code in 300+ cities automatically, handling all the infrastructure for you. **Perfect for:** + - Applications needing fast global performance - Teams wanting to skip server management - Projects with variable traffic (scale from zero to millions) @@ -83,7 +89,7 @@ infrastructure for you. --- -**For technical users:** Built on V8 isolates with global anycast +**For technical users:** Built on V8 isolates with global anycast deployment. [Architecture details →] ``` @@ -94,6 +100,7 @@ deployment. [Architecture details →] **Purpose:** Build understanding of WHY something works the way it does. **Required Elements:** + - Opening analogy or visual (accessible to all) - Plain language definition - "Why it matters" business value @@ -102,6 +109,7 @@ deployment. [Architecture details →] - Technical details for advanced users (separated) **Analysis Focus:** + - Is there an analogy early in the content? - Does it explain WHY before HOW? - Are use cases concrete and realistic? @@ -118,47 +126,51 @@ deployment. [Architecture details →] **Pattern Example:** ❌ **Before (Technical-only):** + ```markdown ## Rate Limiting -Rate limiting implements token bucket algorithms to control request -throughput based on configurable parameters including burst size and +Rate limiting implements token bucket algorithms to control request +throughput based on configurable parameters including burst size and refill rate. Requests exceeding limits receive 429 status codes. ``` ✅ **After (Layered explanation):** + ```markdown ## Rate Limiting -**Think of it like:** A nightclub with maximum capacity. Even if -1,000 people want to enter at once, you only let a controlled number +**Think of it like:** A nightclub with maximum capacity. Even if +1,000 people want to enter at once, you only let a controlled number in at a time to keep things manageable. **What it is:** -Rate limiting controls how many requests can hit your website in a -given time period. Without it, a sudden spike—whether from real +Rate limiting controls how many requests can hit your website in a +given time period. Without it, a sudden spike—whether from real users or attackers—could overwhelm your server. **Why you need it:** + - Prevents DDoS attacks from taking your site down - Stops bots from scraping your content - Ensures fair usage across all users - Keeps infrastructure costs predictable **How it works:** -You set a rule like "100 requests per minute per IP address." When -someone exceeds this limit, we block additional requests until the +You set a rule like "100 requests per minute per IP address." When +someone exceeds this limit, we block additional requests until the time window resets. **Real scenarios:** + - E-commerce site during Black Friday preventing bot purchases - API preventing scraping of product catalog - Forum preventing spam post flooding --- -**For technical users:** Implements token bucket algorithm with -configurable burst size and refill rates. Returns 429 status with +**For technical users:** Implements token bucket algorithm with +configurable burst size and refill rates. Returns 429 status with Retry-After header. [Implementation details →] ``` @@ -169,6 +181,7 @@ Retry-After header. [Implementation details →] **Purpose:** Help users successfully accomplish specific tasks. **Required Elements:** + - Context (what this accomplishes, why you'd do it) - Prerequisites listed upfront - Expected outcome stated @@ -179,6 +192,7 @@ Retry-After header. [Implementation details →] - Common issues and troubleshooting **Analysis Focus:** + - Is context provided before steps? - Are prerequisites clearly stated? - Is there both a Dashboard and API path? @@ -197,6 +211,7 @@ Retry-After header. [Implementation details →] **Pattern Example:** ❌ **Before (Steps-only):** + ```markdown ## Enable Feature @@ -207,16 +222,17 @@ Retry-After header. [Implementation details →] ``` ✅ **After (Contextual multi-path):** -```markdown + +````markdown ## Enable Feature -**What this does:** Protects your site from [specific threat] by +**What this does:** Protects your site from [specific threat] by [specific mechanism]. **Time required:** ~2 minutes **Prerequisites:** Admin access to your account -**What happens:** After enabling, all incoming requests will be +**What happens:** After enabling, all incoming requests will be [specific behavior]. You'll see results in Analytics within 5 minutes. ### Via Dashboard @@ -227,7 +243,7 @@ Retry-After header. [Implementation details →] 4. Find **Feature Name** and toggle it **On** 5. Click **Save Changes** -💡 **Note:** Changes take effect immediately, but analytics may take +💡 **Note:** Changes take effect immediately, but analytics may take 5 minutes to update. ### Via API @@ -240,15 +256,17 @@ curl -X PATCH "https://api.example.com/v1/settings" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{"feature_enabled": true}' ``` +```` **Response:** + ```json { - "success": true, - "result": { - "feature_enabled": true, - "updated_at": "2026-02-09T10:30:00Z" - } + "success": true, + "result": { + "feature_enabled": true, + "updated_at": "2026-02-09T10:30:00Z" + } } ``` @@ -266,9 +284,10 @@ curl -X PATCH "https://api.example.com/v1/settings" \ ## Troubleshooting **Problem:** Feature doesn't seem to be active -**Solution:** Clear your browser cache and wait 5 minutes for +**Solution:** Clear your browser cache and wait 5 minutes for propagation. Still not working? Check that [prerequisite]. -``` + +```` --- @@ -304,19 +323,20 @@ propagation. Still not working? Check that [prerequisite]. ```markdown ## Cache Headers -**Cache-Control:** Controls caching. Values: public, private, +**Cache-Control:** Controls caching. Values: public, private, no-cache, max-age=seconds **Expires:** HTTP date for expiration **Pragma:** Legacy directive. Value: no-cache -``` +```` ✅ **After (Use-case organized with examples):** -```markdown + +````markdown ## Cache Headers Reference -**When to use:** Control how long content stays cached and who can +**When to use:** Control how long content stays cached and who can cache it. ### Common Scenarios @@ -335,17 +355,19 @@ cache it. **What it does:** Caches content for 1 year before checking for updates -**When to use:** Files that never change, like `logo-v2.png` or +**When to use:** Files that never change, like `logo-v2.png` or `style.abc123.css` with version hash in filename **Technical spec:** Integer, seconds. Range: 0-31536000 (1 year max) **Example:** + ```http Cache-Control: public, max-age=31536000, immutable ``` +```` -**Result:** First visitor downloads the file. For the next year, all +**Result:** First visitor downloads the file. For the next year, all visitors get the cached version with zero origin requests. --- @@ -354,17 +376,18 @@ visitors get the cached version with zero origin requests. **What it does:** Tells browsers this file will literally never change -**When to use:** Combine with `max-age` for versioned assets +**When to use:** Combine with `max-age` for versioned assets (filename includes hash/version number) **Technical spec:** No value. Presence activates directive. **Example:** + ```http Cache-Control: public, max-age=31536000, immutable ``` -**Result:** Browsers won't revalidate even on refresh. Perfect for +**Result:** Browsers won't revalidate even on refresh. Perfect for `style.abc123.css` where hash changes when content changes. --- @@ -375,17 +398,18 @@ Cache-Control: public, max-age=31536000, immutable **What it does:** Caches content for 1 hour -**When to use:** Content that updates occasionally but doesn't need +**When to use:** Content that updates occasionally but doesn't need to be real-time, like blog posts or product pages **Technical spec:** Integer, seconds **Example:** + ```http Cache-Control: public, max-age=3600 ``` -**Result:** Content stays cached for 1 hour. After expiration, next +**Result:** Content stays cached for 1 hour. After expiration, next request checks origin for updates. --- @@ -394,17 +418,18 @@ request checks origin for updates. **What it does:** Always check with origin before using cached version -**When to use:** Content that changes frequently but can still be +**When to use:** Content that changes frequently but can still be cached briefly (shopping cart, personalized pages) **Technical spec:** No value. Presence activates. **Example:** + ```http Cache-Control: no-cache ``` -**Result:** Every request checks origin via If-Modified-Since or +**Result:** Every request checks origin via If-Modified-Since or ETag. If nothing changed, serves cached version (304 response). --- @@ -415,19 +440,21 @@ ETag. If nothing changed, serves cached version (304 response). **What it does:** Prevents any caching -**When to use:** Sensitive data (account info, payment details) or +**When to use:** Sensitive data (account info, payment details) or highly dynamic content (real-time scores, live chat) **Technical spec:** Combine both directives **Example:** + ```http Cache-Control: private, no-store ``` -**Result:** Every request fetches fresh from origin. Nothing cached +**Result:** Every request fetches fresh from origin. Nothing cached anywhere. -``` + +```` --- @@ -473,8 +500,9 @@ const handler = async (req) => { return new Response('Hello') } addEventListener('fetch', e => e.respondWith(handler(e.request))) -``` -``` +```` + +```` ✅ **After (Explained progression):** ```markdown @@ -482,14 +510,14 @@ addEventListener('fetch', e => e.respondWith(handler(e.request))) ### What You'll Build -A working URL shortener that redirects short links to long URLs, +A working URL shortener that redirects short links to long URLs, stores mappings, and tracks click analytics. **Live example:** `short.example.com/github` → `github.com/cloudflare` ### Who This Is For -Developers comfortable with JavaScript. No prior experience with +Developers comfortable with JavaScript. No prior experience with Workers needed, but you should understand: - HTTP requests and responses - JSON data format @@ -510,7 +538,7 @@ Workers needed, but you should understand: ## Step 1: Create Your First Worker -Let's start with the absolute minimum—a Worker that responds to +Let's start with the absolute minimum—a Worker that responds to requests: ```javascript @@ -526,7 +554,7 @@ async function handleRequest(request) { headers: { 'content-type': 'text/plain' } }) } -``` +```` **What this code does:** @@ -550,15 +578,15 @@ Now let's make it recognize short codes in the URL: ```javascript async function handleRequest(request) { - // Extract the pathname from the URL - // Example: https://short.example.com/github → "/github" - const url = new URL(request.url) - const shortCode = url.pathname.slice(1) // Remove leading "/" - - // For now, just echo back the short code - return new Response(`You requested: ${shortCode}`, { - headers: { 'content-type': 'text/plain' } - }) + // Extract the pathname from the URL + // Example: https://short.example.com/github → "/github" + const url = new URL(request.url); + const shortCode = url.pathname.slice(1); // Remove leading "/" + + // For now, just echo back the short code + return new Response(`You requested: ${shortCode}`, { + headers: { "content-type": "text/plain" }, + }); } ``` @@ -590,15 +618,15 @@ Now we can detect what short code someone's requesting... **Cause:** Your Worker is doing too much computation in a single request -**Solution:** Workers have a 50ms CPU time limit. Move heavy processing +**Solution:** Workers have a 50ms CPU time limit. Move heavy processing to background tasks or use Durable Objects for longer operations. **Problem:** "KV data not updating" -**Cause:** KV is eventually consistent and may take 60 seconds to +**Cause:** KV is eventually consistent and may take 60 seconds to propagate globally -**Solution:** For testing, add a cache-busting parameter (`?v=2`) or +**Solution:** For testing, add a cache-busting parameter (`?v=2`) or wait 60 seconds between writes and reads. --- @@ -608,20 +636,24 @@ wait 60 seconds between writes and reads. Want to take this further? Here are some ideas: **Add Click Analytics** (Medium difficulty) + - Store click count in KV - Increment on each redirect - Create stats endpoint **Custom Short Codes** (Easy) + - Let users choose their short code - Check if code is already taken - Return error if unavailable **Expiring Links** (Medium) + - Store expiration timestamp - Check before redirecting - Return 404 if expired -``` + +```` --- @@ -642,7 +674,7 @@ Want to take this further? Here are some ideas: - Not: "Webhooks, which are HTTP callbacks, send notifications containing event data to your specified endpoint when certain events occur on the platform." ✅ **Active voice** over passive -- "The system sends a notification" +- "The system sends a notification" - Not: "A notification is sent by the system" ✅ **Concrete nouns** over abstract @@ -663,11 +695,12 @@ Want to take this further? Here are some ideas: **Always define on first use:** ```markdown -An API (Application Programming Interface) defines how programs +An API (Application Programming Interface) defines how programs can request and exchange data... -``` +```` **Expand acronyms:** + ```markdown CDN (Content Delivery Network) CI/CD (Continuous Integration/Continuous Deployment) @@ -675,9 +708,10 @@ HMAC (Hash-based Message Authentication Code) ``` **Provide context for technical terms:** + ```markdown Not: "Configure the webhook endpoint." -But: "A webhook endpoint is the URL where we'll send notifications. +But: "A webhook endpoint is the URL where we'll send notifications. Configure it to point to your server." ``` @@ -696,16 +730,16 @@ Configure it to point to your server." ```markdown **Think of It Like:** -An API is like a restaurant menu. The menu shows you what dishes -are available (endpoints), what customizations you can request -(parameters like "no onions" or "extra spicy"), and what you'll -receive (the response - your meal). You don't need to know how the -kitchen operates or what cooking techniques they use. You just order +An API is like a restaurant menu. The menu shows you what dishes +are available (endpoints), what customizations you can request +(parameters like "no onions" or "extra spicy"), and what you'll +receive (the response - your meal). You don't need to know how the +kitchen operates or what cooking techniques they use. You just order from the menu, and the kitchen handles the rest. **Where this breaks down:** -Unlike a restaurant where you wait for your food, API responses are -usually near-instantaneous. Also, APIs can fail (kitchen is out of +Unlike a restaurant where you wait for your food, API responses are +usually near-instantaneous. Also, APIs can fail (kitchen is out of ingredients), requiring error handling. ``` @@ -713,15 +747,15 @@ ingredients), requiring error handling. ```markdown **Think of It Like:** -Caching is like a library's reserve desk. Popular books are kept at -the front desk for quick access instead of requiring a trip to the -stacks. The first person requesting a book triggers the librarian to -fetch it from the stacks, but then it stays at the reserve desk so +Caching is like a library's reserve desk. Popular books are kept at +the front desk for quick access instead of requiring a trip to the +stacks. The first person requesting a book triggers the librarian to +fetch it from the stacks, but then it stays at the reserve desk so subsequent readers can grab it immediately. **Where this breaks down:** -Caches expire (books eventually return to the stacks), and cache -invalidation (deciding when to return books) is more complex than +Caches expire (books eventually return to the stacks), and cache +invalidation (deciding when to return books) is more complex than the metaphor suggests. ``` @@ -729,15 +763,15 @@ the metaphor suggests. ```markdown **Think of It Like:** -Load balancing is like grocery store checkout lanes. Instead of -everyone lining up at a single register (which would create a huge -wait), customers are distributed across multiple lanes. If one lane -gets too long or a register breaks down, the store can redirect +Load balancing is like grocery store checkout lanes. Instead of +everyone lining up at a single register (which would create a huge +wait), customers are distributed across multiple lanes. If one lane +gets too long or a register breaks down, the store can redirect people to other lanes. **Where this breaks down:** -Load balancers are more intelligent than checkout lane selection—they -know which servers are healthy, how busy they are, and can route +Load balancers are more intelligent than checkout lane selection—they +know which servers are healthy, how busy they are, and can route based on sophisticated algorithms. ``` @@ -745,14 +779,14 @@ based on sophisticated algorithms. ```markdown **Think of It Like:** -A webhook is like a doorbell notification. Instead of constantly -checking your front door to see if someone arrived (polling), the -doorbell alerts you the moment someone presses it (push notification). +A webhook is like a doorbell notification. Instead of constantly +checking your front door to see if someone arrived (polling), the +doorbell alerts you the moment someone presses it (push notification). You only respond when there's actually something to respond to. **Where this breaks down:** -Doorbells are instantaneous, while webhooks have some latency due to -network transmission. Also, webhooks can fail if your server is down +Doorbells are instantaneous, while webhooks have some latency due to +network transmission. Also, webhooks can fail if your server is down (like a broken doorbell). ``` @@ -760,15 +794,15 @@ network transmission. Also, webhooks can fail if your server is down ```markdown **Think of It Like:** -Authentication is like a building security badge system. You present -your badge (credentials) when entering. The system verifies you are -who you claim to be (authentication), then checks what floors you're -allowed to access (authorization). Different badges have different +Authentication is like a building security badge system. You present +your badge (credentials) when entering. The system verifies you are +who you claim to be (authentication), then checks what floors you're +allowed to access (authorization). Different badges have different access levels. **Where this breaks down:** -Digital authentication often uses time-limited tokens (like a badge -that expires), and can verify identity through multiple methods +Digital authentication often uses time-limited tokens (like a badge +that expires), and can verify identity through multiple methods (password + fingerprint), which isn't common with physical badges. ``` @@ -776,15 +810,15 @@ that expires), and can verify identity through multiple methods ```markdown **Think of It Like:** -Rate limiting is like freeway on-ramp metering lights. Instead of -letting everyone merge at once (causing congestion), the lights -control how many cars enter per minute. This keeps traffic flowing -smoothly on the main freeway. If you arrive too fast, you wait at +Rate limiting is like freeway on-ramp metering lights. Instead of +letting everyone merge at once (causing congestion), the lights +control how many cars enter per minute. This keeps traffic flowing +smoothly on the main freeway. If you arrive too fast, you wait at the red light. **Where this breaks down:** -Rate limits are often user-specific (you get your own limit), not -shared like a metering light. Also, rate limits reset on schedules +Rate limits are often user-specific (you get your own limit), not +shared like a metering light. Also, rate limits reset on schedules (every hour, every day), unlike continuous traffic flow. ``` @@ -792,14 +826,14 @@ shared like a metering light. Also, rate limits reset on schedules ```markdown **Think of It Like:** -A database index is like the index at the back of a textbook. Instead -of reading every page to find mentions of "webhooks," you check the -index, which tells you exactly which pages to look at. The index +A database index is like the index at the back of a textbook. Instead +of reading every page to find mentions of "webhooks," you check the +index, which tells you exactly which pages to look at. The index takes up extra space, but makes searching dramatically faster. **Where this breaks down:** -Database indexes need updating when data changes (like keeping a -book index current as you add pages), and choosing which fields to +Database indexes need updating when data changes (like keeping a +book index current as you add pages), and choosing which fields to index involves tradeoffs between search speed and write speed. ``` @@ -807,16 +841,16 @@ index involves tradeoffs between search speed and write speed. ```markdown **Think of It Like:** -A CDN (Content Delivery Network) is like having local warehouses -instead of shipping everything from one central warehouse. When -someone in California orders a product, it ships from the California -warehouse (faster delivery). When someone in New York orders, it +A CDN (Content Delivery Network) is like having local warehouses +instead of shipping everything from one central warehouse. When +someone in California orders a product, it ships from the California +warehouse (faster delivery). When someone in New York orders, it ships from New York. Same product, closer source. **Where this breaks down:** -Unlike physical warehouses with unique inventory, CDNs store copies -of the same content in many locations. Updates need to propagate to -all locations (cache invalidation), which has no physical warehouse +Unlike physical warehouses with unique inventory, CDNs store copies +of the same content in many locations. Updates need to propagate to +all locations (cache invalidation), which has no physical warehouse equivalent. ``` @@ -824,17 +858,17 @@ equivalent. ```markdown **Think of It Like:** -Software containers are like shipping containers. Before shipping -containers existed, moving goods required different methods for -different types of cargo. Shipping containers standardized this—put -anything inside a standard container, and it can go on any ship, -truck, or train. Software containers work the same way: package your +Software containers are like shipping containers. Before shipping +containers existed, moving goods required different methods for +different types of cargo. Shipping containers standardized this—put +anything inside a standard container, and it can go on any ship, +truck, or train. Software containers work the same way: package your application and its dependencies, and it runs anywhere. **Where this breaks down:** -Shipping containers physically isolate cargo, while software -containers share the same operating system kernel. Also, you can run -thousands of software containers on one machine, unlike physical +Shipping containers physically isolate cargo, while software +containers share the same operating system kernel. Also, you can run +thousands of software containers on one machine, unlike physical containers. ``` @@ -843,15 +877,15 @@ containers. ```markdown **Think of It Like:** Environment variables are like your application's settings panel— -configuration values that change behavior without modifying code. -Just like you might set your phone to dark mode or adjust notification -preferences, environment variables let you configure database URLs, +configuration values that change behavior without modifying code. +Just like you might set your phone to dark mode or adjust notification +preferences, environment variables let you configure database URLs, API keys, or feature flags without rewriting your application. **Where this breaks down:** -Environment variables are usually set before the application starts -(not changed while running), and they're text-based rather than UI -toggles. They're also specific to each deployment environment (dev, +Environment variables are usually set before the application starts +(not changed while running), and they're text-based rather than UI +toggles. They're also specific to each deployment environment (dev, staging, production). ``` @@ -870,22 +904,26 @@ When you encounter a concept not in this library, create a new metaphor by: **Always structure content in this order:** **1. The Problem (Why)** + ```markdown -When building applications, you often need to know when something -happens on another platform—like when a payment completes, a file -finishes uploading, or a deployment succeeds. Constantly checking +When building applications, you often need to know when something +happens on another platform—like when a payment completes, a file +finishes uploading, or a deployment succeeds. Constantly checking for updates (polling) wastes resources and creates delays. ``` **2. The Solution (What)** + ```markdown -Webhooks solve this by pushing notifications to you. When an event +Webhooks solve this by pushing notifications to you. When an event happens, we immediately send a message to your server with the details. ``` **3. The Value (Why It Matters)** + ```markdown This means: + - Your application responds in real-time instead of polling - You save resources (no constant checking) - Users get faster updates @@ -893,8 +931,10 @@ This means: ``` **4. The Use Cases (When)** + ```markdown Common scenarios: + - Triggering workflows when deployments complete - Updating your database when content changes - Sending notifications when payments are processed @@ -902,8 +942,10 @@ Common scenarios: ``` **5. The Implementation (How)** + ```markdown To set up a webhook: + 1. Create an endpoint URL where we'll send notifications 2. Configure which events you want to receive 3. Verify requests are from us (using signatures) @@ -945,7 +987,7 @@ Focus on outcomes, when to involve technical help, business impact **Example in Practice:** -```markdown +````markdown ## Webhook Signature Verification --- @@ -970,11 +1012,13 @@ When I simplify documentation, I create a `.eli5.md` file with this structure: ## 📋 Simplification Overview **What was confusing:** + - [Pattern 1 - e.g., Heavy acronym use without expansion] - [Pattern 2 - e.g., Assumed understanding of HTTP protocols] - [Pattern 3 - e.g., Jumped to implementation without explaining purpose] **Approach taken:** + - [Strategy 1 - e.g., Added one-sentence summaries for each concept] - [Strategy 2 - e.g., Expanded all acronyms on first use] - [Strategy 3 - e.g., Added "Why this matters" to each section] @@ -985,9 +1029,11 @@ When I simplify documentation, I create a `.eli5.md` file with this structure: ## Section: [Original Heading] ### 📄 Original Content - ``` +```` + [Exact text from source, formatting preserved] + ``` ### ⚠️ Issues Identified @@ -1006,21 +1052,21 @@ When I simplify documentation, I create a `.eli5.md` file with this structure: ### ✨ Simplified Version -**In Plain Language:** +**In Plain Language:** [One crisp sentence capturing the essence without jargon] -**What It Is:** -[2-3 paragraphs building understanding from basics. Define terms. +**What It Is:** +[2-3 paragraphs building understanding from basics. Define terms. Explain concepts. Build progressively. No jargon assumed.] -**Why It Matters:** +**Why It Matters:** [Value proposition and concrete benefits] - **Benefit 1:** [Specific, concrete impact] - **Benefit 2:** [Specific, concrete impact] - **Benefit 3:** [Specific, concrete impact] -**When You'd Use This:** +**When You'd Use This:** - **Scenario 1:** [Realistic use case with context] - Example: "When building a chat application that needs real-time message delivery..." @@ -1031,23 +1077,23 @@ Explain concepts. Build progressively. No jargon assumed.] - **Scenario 3:** [Realistic use case with context] - Example: "When triggering post-deployment tasks like cache clearing..." -**Think of It Like:** +**Think of It Like:** [Tech-adjacent metaphor with detailed explanation] [Full metaphor explanation, making connections explicit] -**Where this metaphor breaks down:** +**Where this metaphor breaks down:** [Acknowledge limitations honestly] -**Common Pitfalls:** +**Common Pitfalls:** -- **Pitfall:** [What people commonly misunderstand] +- **Pitfall:** [What people commonly misunderstand] **Reality:** [Correction with explanation] -- **Pitfall:** [Common mistake] +- **Pitfall:** [Common mistake] **Reality:** [How it actually works] -**Related Concepts:** +**Related Concepts:** [Connections to things readers might already know] - "If you've used [familiar concept], this works similarly..." @@ -1124,6 +1170,7 @@ After the main simplification and summary, I include a **"Suggestions for Enhanc **Format:** Each suggestion includes: + - **Line reference:** Specific location in the original document - **Section name:** What part of the doc this applies to - **Current approach:** What's there now @@ -1133,11 +1180,9 @@ Each suggestion includes: **Example:** -```markdown +````markdown --- - ## 📝 Suggestions for Enhancement - --- ## 4. Suggestions for Enhancement @@ -1154,11 +1199,13 @@ These suggestions show where additional patterns could improve accessibility: **Suggested enhancement:** Add API path for technical users who prefer code **Why this helps:** + - Serves both UI users and developers with their preferred method - Technical users can automate the process via API - Provides complete coverage for mixed audiences **Implementation:** + ```markdown ### Via API @@ -1167,18 +1214,18 @@ These suggestions show where additional patterns could improve accessibility: \`\`\`bash curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/always_use_https" \\ - -H "Authorization: Bearer {token}" \\ - -d '{"value":"on"}' +-H "Authorization: Bearer {token}" \\ +-d '{"value":"on"}' \`\`\` **Response:** \`\`\`json { - "success": true, - "result": { - "id": "always_use_https", - "value": "on" - } +"success": true, +"result": { +"id": "always_use_https", +"value": "on" +} } \`\`\` @@ -1195,6 +1242,7 @@ curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/alw **Suggested enhancement:** Move advanced technical details to collapsible section **Why this helps:** + - Beginners get the simple explanation without being overwhelmed - Experts can expand for full technical depth - Maintains clear progressive disclosure @@ -1202,15 +1250,17 @@ curl -X PATCH "https://api.cloudflare.com/client/v4/zones/{zone_id}/settings/alw **Implementation:** \`\`\`markdown + ## How TLS Encryption Works -Your connection is encrypted using industry-standard TLS 1.3 protocol, +Your connection is encrypted using industry-standard TLS 1.3 protocol, ensuring no one can intercept your data in transit.
For technical users: Cipher suite details We support TLS 1.3 with modern AEAD cipher suites including: + - TLS_AES_128_GCM_SHA256 - TLS_AES_256_GCM_SHA384 - TLS_CHACHA20_POLY1305_SHA256 @@ -1230,6 +1280,7 @@ Perfect forward secrecy via X25519 key exchange. [Full TLS configuration →] **Suggested enhancement:** Call out recommended default for most users **Why this helps:** + - Reduces decision paralysis for uncertain users - Provides a safe starting point - Guides users toward best security practices @@ -1237,22 +1288,23 @@ Perfect forward secrecy via X25519 key exchange. [Full TLS configuration →] **Implementation:** \`\`\`markdown + ### Encryption Modes **Recommended for most sites:** Full (Strict) -Provides maximum security by validating your origin server's -certificate. This is the best option if your server has a valid SSL +Provides maximum security by validating your origin server's +certificate. This is the best option if your server has a valid SSL certificate installed. #### Other Options - **Off:** No encryption (Not recommended - only use for testing) -- **Flexible:** Encrypts visitor-to-Cloudflare only (Use if your +- **Flexible:** Encrypts visitor-to-Cloudflare only (Use if your server doesn't have SSL) - **Full:** Encrypts entire path but doesn't validate certificate - **Full (Strict):** Maximum security with certificate validation ✅ -\`\`\` + \`\`\` --- @@ -1264,6 +1316,7 @@ certificate installed. **Suggested enhancement:** Add realistic use case showing feature in action **Why this helps:** + - Makes abstract benefits concrete and relatable - Helps users visualize how they'd use this - Provides "aha moment" of recognition @@ -1275,19 +1328,21 @@ certificate installed. Prevents attackers from overwhelming your site with fake traffic. **Real scenario:** -An e-commerce site during Black Friday gets hit by bots trying to -buy limited inventory. DDoS protection automatically filters out -the bot traffic, letting real customers complete their purchases +An e-commerce site during Black Friday gets hit by bots trying to +buy limited inventory. DDoS protection automatically filters out +the bot traffic, letting real customers complete their purchases while the attack is absorbed across Cloudflare's network. -Without protection, the site would crash within minutes, losing +Without protection, the site would crash within minutes, losing thousands in sales. \`\`\` ``` +```` **When to include suggestions:** Include this section when: + - Multi-path opportunities exist (Dashboard + API) - Technical details could be collapsed - Missing recommended defaults @@ -1298,6 +1353,7 @@ Include this section when: **Placement:** The Suggestions section appears: + - After the "Summary & Recommendations" section - Before the "Next Steps" section - Clearly separated with heading and explanation @@ -1335,7 +1391,7 @@ Before finalizing any simplified content, verify: ❌ "Clearly, this requires..." ❌ "As everyone knows..." ❌ "It's easy to..." -❌ "All you have to do is..." +❌ "All you have to do is..." **Use these respectful alternatives:** @@ -1344,34 +1400,38 @@ Before finalizing any simplified content, verify: ✅ "This requires..." ✅ "Here's how this works..." ✅ "This involves..." -✅ "The process is..." +✅ "The process is..." ### Accuracy Is Non-Negotiable **Good simplification:** + ```markdown -Webhooks send HTTP POST requests to your endpoint URL whenever -specified events occur. Think of it as a notification system where +Webhooks send HTTP POST requests to your endpoint URL whenever +specified events occur. Think of it as a notification system where we call your server instead of you constantly checking ours. ``` -*Accurate, clear, uses metaphor effectively* + +_Accurate, clear, uses metaphor effectively_ **Bad simplification:** + ```markdown Webhooks let programs talk to each other. ``` -*Too vague, loses important details, not actually helpful* + +_Too vague, loses important details, not actually helpful_ **When complex accuracy is needed:** Use progressive disclosure: ```markdown -**Simplified:** Rate limiting controls how many requests you can +**Simplified:** Rate limiting controls how many requests you can make in a time period, like 100 requests per minute. -**More precisely:** Rate limits apply per API key and reset on a -sliding window. If you hit the limit, you'll receive a 429 status +**More precisely:** Rate limits apply per API key and reset on a +sliding window. If you hit the limit, you'll receive a 429 status code with a Retry-After header indicating when you can try again. ``` @@ -1380,6 +1440,7 @@ code with a Retry-After header indicating when you can try again. #### API Documentation Focus on: + - What the endpoint does (purpose) - When you'd use it (scenarios) - What you send (parameters explained) @@ -1388,6 +1449,7 @@ Focus on: - Error handling (what can go wrong) **Add value through:** + - Explaining parameter purposes, not just types - Showing realistic request/response examples - Clarifying common misunderstandings @@ -1396,6 +1458,7 @@ Focus on: #### Architecture Documentation Focus on: + - Problem being solved - Why this approach was chosen - Tradeoffs made (what was gained/lost) @@ -1403,6 +1466,7 @@ Focus on: - Alternatives considered **Add value through:** + - Explaining decision rationale - Making tradeoffs explicit - Providing context for choices @@ -1411,12 +1475,14 @@ Focus on: #### Code Documentation Focus on: + - What the code accomplishes - Why it's structured this way - Key concepts or patterns used - What to watch out for **Add value through:** + - Plain-language "reading guides" - Explaining non-obvious choices - Clarifying complex logic @@ -1454,22 +1520,25 @@ Focus on: ## 📋 Simplification Overview **What was done well:** + - Clear section headings with logical flow - Terms defined on first use - Good use of examples - "Why" explained before "how" **Minor improvements suggested:** + - Could add a tech-adjacent metaphor for [concept] - Section 3 could benefit from a concrete use case - Consider adding "common pitfalls" to section 5 **Overall assessment:** -This documentation is already quite accessible. The suggestions above +This documentation is already quite accessible. The suggestions above are minor enhancements rather than necessary corrections. ``` **Avoid:** + - Adding unnecessary verbosity - Creating problems that don't exist - Over-explaining clear content @@ -1485,6 +1554,7 @@ are minor enhancements rather than necessary corrections. - Preserve necessary complexity 2. **Layer explanations** + ```markdown **High-level:** [What it accomplishes] **How it works:** [Simplified mechanism] @@ -1511,7 +1581,8 @@ are minor enhancements rather than necessary corrections. - Preserve technical correctness 2. **Add explanatory context** - ```markdown + + ````markdown **What this code does:** [Plain-language explanation] @@ -1519,12 +1590,17 @@ are minor enhancements rather than necessary corrections. [Architectural rationale] **Key points to understand:** + - [Important concept 1] - [Important concept 2] ```python [Original code, unchanged] ``` + ```` + + ``` + ``` 3. **Create "reading guides"** @@ -1541,9 +1617,10 @@ are minor enhancements rather than necessary corrections. - Leave component code unchanged 2. **Explain component purpose** + ```markdown **What this component does:** - The component displays syntax-highlighted code with + The component displays syntax-highlighted code with copy functionality, making it easier for readers to use the examples. ``` @@ -1554,7 +1631,7 @@ are minor enhancements rather than necessary corrections. ## Future Enhancements -*Documented for future implementation* +_Documented for future implementation_ ### Planned Features @@ -1567,19 +1644,21 @@ Support for code files with inline documentation: def process_webhook(payload, signature): """ Processes incoming webhook notifications. - + Verifies signature, parses payload, triggers handlers. """ # Implementation... ``` **Planned behavior:** + - Extract docstrings and comments - Simplify technical language in comments - Add explanatory prose for complex logic - Generate "code walkthrough" guides **Supported formats:** + - `.js`, `.ts`, `.tsx` (JavaScript/TypeScript) - `.py` (Python) - `.go` (Go) @@ -1605,6 +1684,7 @@ Quantitative analysis: - **Context gap analysis** - Identify missing "why" and "when" statements **Auto-prioritization:** + - Sort sections by complexity - Focus on highest-value simplifications - Generate complexity reports @@ -1646,63 +1726,65 @@ Returns a `webhook` object. ### ✨ Simplified Version **In Plain Language:** -Set up automatic notifications that we'll send to your server whenever +Set up automatic notifications that we'll send to your server whenever specific events occur. **What It Is:** -A webhook subscription tells our system to notify your application -when certain events happen (like a deployment completing or content -being published). Instead of your application constantly checking for +A webhook subscription tells our system to notify your application +when certain events happen (like a deployment completing or content +being published). Instead of your application constantly checking for updates (polling), we push notifications to you the moment events occur. **Why It Matters:** + - **Real-time updates** - Your application responds immediately - **Resource efficiency** - No wasted API calls checking for changes - **Reliability** - You never miss an event - **Automation** - Trigger workflows automatically **When You'd Use This:** + - **Deployment notifications:** Trigger post-deployment tasks when builds complete - **Content synchronization:** Update your CMS when content changes - **Monitoring:** Alert your team when errors occur - **Integration:** Connect multiple systems to respond to events **Think of It Like:** -A webhook is like setting up a doorbell notification on your phone. -Instead of constantly checking your front door camera to see if someone -arrived (polling), the doorbell alerts you the moment someone presses -it (push notification). You only respond when there's actually something +A webhook is like setting up a doorbell notification on your phone. +Instead of constantly checking your front door camera to see if someone +arrived (polling), the doorbell alerts you the moment someone presses +it (push notification). You only respond when there's actually something to respond to. **Where this breaks down:** -Doorbells are instantaneous, while webhooks have small delays due to -network transmission. Also, webhooks can fail if your server is down +Doorbells are instantaneous, while webhooks have small delays due to +network transmission. Also, webhooks can fail if your server is down (like a broken doorbell), so you need retry logic. **Parameters Explained:** -- **`endpoint`** - The URL where we'll send notifications (your server's +- **`endpoint`** - The URL where we'll send notifications (your server's address that listens for webhook events). Must use HTTPS for security. -- **`events`** - Which events you want to receive (like `deployment.succeeded` +- **`events`** - Which events you want to receive (like `deployment.succeeded` or `content.published`). You choose only the events you care about. -- **`secret`** - Optional security key for verifying notifications actually +- **`secret`** - Optional security key for verifying notifications actually come from us. We use this to create a signature you can verify. **Common Pitfalls:** - **Pitfall:** Thinking webhooks are 100% reliable - **Reality:** Network issues or server downtime can cause missed notifications. + **Reality:** Network issues or server downtime can cause missed notifications. Implement retry logic and consider periodic polling as a backup. - **Pitfall:** Not verifying signatures - **Reality:** Without signature verification, attackers could send fake + **Reality:** Without signature verification, attackers could send fake webhooks to trigger unauthorized actions. **Related Concepts:** -If you've used RSS feeds, webhooks work similarly—both push updates to -you. The difference is webhooks are programmable and work with any type +If you've used RSS feeds, webhooks work similarly—both push updates to +you. The difference is webhooks are programmable and work with any type of event, not just content updates. ``` @@ -1713,8 +1795,8 @@ of event, not just content updates. ```markdown ## Edge Deployment Architecture -We've implemented a globally distributed edge architecture utilizing -V8 isolates for multi-tenant execution with microsecond cold starts +We've implemented a globally distributed edge architecture utilizing +V8 isolates for multi-tenant execution with microsecond cold starts and automatic geographic distribution. ``` @@ -1724,40 +1806,42 @@ and automatic geographic distribution. ### ✨ Simplified Version **In Plain Language:** -We run your code on servers located around the world, close to your +We run your code on servers located around the world, close to your users, making responses nearly instant regardless of where users are. **What It Is:** -Traditional servers run in specific data centers—if your server is in -Virginia and your user is in Singapore, every request travels across -the world and back (adding hundreds of milliseconds). Our edge -architecture runs your code on servers in hundreds of cities worldwide, +Traditional servers run in specific data centers—if your server is in +Virginia and your user is in Singapore, every request travels across +the world and back (adding hundreds of milliseconds). Our edge +architecture runs your code on servers in hundreds of cities worldwide, so requests are handled by the nearest server. **Why It Matters:** + - **Speed:** Users get responses in 10-50ms instead of 200-500ms - **Reliability:** If one location fails, others continue serving traffic - **Scale:** Handles traffic spikes automatically across all locations - **Simplicity:** You deploy once; we handle global distribution **When You'd Use This:** + - **Global applications:** Users are distributed worldwide - **API endpoints:** Need fast response times everywhere - **Dynamic content:** Content that can't be cached must still be fast - **High availability:** Can't afford regional outages **Think of It Like:** -Instead of one central warehouse shipping products nationwide (slow -delivery to distant customers), you have local warehouses in every major -city. When someone orders, it ships from their nearest warehouse. Same +Instead of one central warehouse shipping products nationwide (slow +delivery to distant customers), you have local warehouses in every major +city. When someone orders, it ships from their nearest warehouse. Same product, faster delivery, handled automatically. **The Technical Approach:** -We use "V8 isolates"—lightweight execution environments that start in -microseconds (thousandths of a millisecond). Traditional "serverless" -functions use containers that take 50-500ms to start. Isolates are -fast enough that we don't need to keep them warm; they start on-demand +We use "V8 isolates"—lightweight execution environments that start in +microseconds (thousandths of a millisecond). Traditional "serverless" +functions use containers that take 50-500ms to start. Isolates are +fast enough that we don't need to keep them warm; they start on-demand for each request. **Why this architecture:** @@ -1768,11 +1852,12 @@ We evaluated three approaches: 3. **Isolate-based edge:** Global + fast (our choice) **Tradeoff made:** -Isolates have some limitations compared to full containers (no arbitrary -system libraries, limited execution time). We accepted these constraints +Isolates have some limitations compared to full containers (no arbitrary +system libraries, limited execution time). We accepted these constraints for the massive speed improvement. **Common Pitfalls:** + - **Pitfall:** Assuming it works like traditional servers **Reality:** Stateless execution—no persistent local storage, no background jobs @@ -1780,20 +1865,22 @@ for the massive speed improvement. **Reality:** Implements web standards, not full Node.js APIs **Related Concepts:** -If you've used CDNs (Content Delivery Networks), this is similar but -for code execution, not just static files. Like a CDN distributes +If you've used CDNs (Content Delivery Networks), this is similar but +for code execution, not just static files. Like a CDN distributes content globally, we distribute code execution globally. ``` ## Remember **Your mission:** + - Make technical concepts accessible - Maintain technical accuracy - Respect reader intelligence - Focus on understanding **Always include:** + - One-sentence plain language summary - Clear "why" and "when" explanations - Tech-adjacent metaphor with limitations @@ -1801,25 +1888,28 @@ content globally, we distribute code execution globally. - Use cases grounding abstract concepts **Quality standards:** + - Technical accuracy is non-negotiable - Metaphors must clarify, not confuse - Tone must be professional and respectful - No condescending language ever **Process:** + 1. Ask which sections to focus on 2. Identify specific issues (jargon, assumptions, logic, context) 3. Generate complete before/after comparison 4. Prompt for next steps **Output:** + - Create `.eli5.md` file in same directory - Include all required elements per section - Provide actionable recommendations - Offer clear next-step options **Philosophy:** -Technical expertise should never be a barrier to understanding. Every +Technical expertise should never be a barrier to understanding. Every person deserves clear, accurate, respectful documentation. --- @@ -1831,4 +1921,3 @@ person deserves clear, accurate, respectful documentation. **License:** MIT **Version:** 1.0 **Last Updated:** February 2026 - diff --git a/.agents/skills/eli5/references/content-type-guide.md b/.agents/skills/eli5/references/content-type-guide.md index 85d544a7c071296..1454cfea7242833 100644 --- a/.agents/skills/eli5/references/content-type-guide.md +++ b/.agents/skills/eli5/references/content-type-guide.md @@ -7,6 +7,7 @@ Operational guide for detecting and simplifying different documentation types. ## Purpose This guide provides: + - **Detection criteria** for identifying content types - **Required elements** checklist for each type - **Simplification patterns** specific to each type @@ -21,6 +22,7 @@ This guide provides: For each content type below, the enhancement patterns are designed to ADD MINIMAL CONTEXT AND EXAMPLES, not restructure or massively expand. **Universal constraints:** + - Maximum 1-2 examples per major concept - Each example: 5-15 lines - Inline "why" explanations: 1-2 sentences @@ -31,6 +33,7 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA - Minimal testing guidance (3-5 commands for tutorials) **When patterns below suggest "Add [section]":** + - Interpret as "enhance inline" not "create separate major section" - Keep additions brief and integrated - Target 1.5-2x expansion, not 5-10x @@ -39,13 +42,13 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA ## Content Type Overview -| Type | Purpose | Key Pattern | Example | -|------|---------|-------------|---------| -| **Overview** | Help users decide if they need this | Problem → Solution → Benefit | Product landing pages | -| **Concept** | Build understanding of "why" | Analogy → Plain → Technical | "What is rate limiting?" | -| **How To** | Enable task completion | Context → Multi-path steps | "Enable HTTPS" | -| **Reference** | Provide comprehensive specs | Use-case organization | API parameters, headers | -| **Tutorial** | Teach through application | Build → Enhance → Polish | "Build a URL shortener" | +| Type | Purpose | Key Pattern | Example | +| ------------- | ----------------------------------- | ---------------------------- | ------------------------ | +| **Overview** | Help users decide if they need this | Problem → Solution → Benefit | Product landing pages | +| **Concept** | Build understanding of "why" | Analogy → Plain → Technical | "What is rate limiting?" | +| **How To** | Enable task completion | Context → Multi-path steps | "Enable HTTPS" | +| **Reference** | Provide comprehensive specs | Use-case organization | API parameters, headers | +| **Tutorial** | Teach through application | Build → Enhance → Polish | "Build a URL shortener" | --- @@ -54,6 +57,7 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA ### Detection Criteria **Look for:** + - Product/feature name in title or H1 - Feature lists or capability descriptions - "What is [Product]" sections @@ -62,6 +66,7 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA - Lack of step-by-step instructions **Confidence signals:** + - Multiple features described briefly - High-level product description - Links to detailed documentation @@ -69,6 +74,7 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA - Pricing or plan information **Example titles:** + - "Cloudflare Workers" - "Introduction to Gateway" - "What is Workers KV?" @@ -77,7 +83,7 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA - [ ] Opening benefit statement (what problem solved) - [ ] Problem/Solution/Benefit structure -- [ ] "Perfect for" self-identification section +- [ ] "Perfect for" self-identification section - [ ] Clear call-to-action ("Get started" link) - [ ] Feature descriptions with benefits (not just specs) - [ ] Technical architecture separated/collapsed @@ -87,12 +93,14 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA **Target: 1.5-2x original length** **Minimal additions:** + 1. **Add 2-4 sentence problem statement** (if completely missing) at document start 2. **Add 1-2 use case examples inline** (5-10 lines each) showing who benefits 3. **Add inline "why"** (1 sentence) when introducing features 4. **Define jargon on first use** (brief inline definition) **Structure to preserve:** + - Keep original opening and headings - Don't reorganize sections - Don't move architecture (just add brief intro if it leads) @@ -100,41 +108,46 @@ For each content type below, the enhancement patterns are designed to ADD MINIMA **Example enhancement:** Original (8 lines): + ```markdown # Internal DNS Manage DNS records for your private network. -Internal DNS zones pair with Gateway resolver policies to control +Internal DNS zones pair with Gateway resolver policies to control DNS query responses. ## Features + - Create internal zones - Configure views - Link to Gateway ``` Enhanced (15 lines - 1.9x): + ```markdown # Internal DNS -Manage DNS records for your private network without running your own DNS +Manage DNS records for your private network without running your own DNS servers. This simplifies operations and integrates with Cloudflare Gateway. -Internal DNS zones pair with Gateway resolver policies to control DNS query +Internal DNS zones pair with Gateway resolver policies to control DNS query responses based on context (source IP, user identity, domain). -**Example use case:** A multi-region company creates separate views for London -and SF offices. Users query the same hostname (api.company.internal) but get +**Example use case:** A multi-region company creates separate views for London +and SF offices. Users query the same hostname (api.company.internal) but get different IP addresses based on location. ## Features + - Create internal zones - Private namespaces accessible only via Gateway - Configure views - Logical groupings that route different users to different resources - Link to Gateway - Resolver policies determine which view to use ``` What was added: + - 1 sentence "why" (without running own servers) - Brief context for zones (source IP, user identity) - 1 example (3 lines) @@ -156,6 +169,7 @@ What was added: ### Detection Criteria **Look for:** + - "What is..." or "Understanding..." titles - Explanatory content (not procedural) - "How it works" sections @@ -164,6 +178,7 @@ What was added: - Analogies or metaphors (sometimes) **Confidence signals:** + - Explains mechanisms, not steps - Educational tone - Links to related concepts @@ -171,6 +186,7 @@ What was added: - Multiple explanation approaches **Example titles:** + - "Understanding Rate Limiting" - "How Caching Works" - "What is Edge Computing?" @@ -188,6 +204,7 @@ What was added: ### Simplification Pattern **Structure:** + ```markdown # [Concept Name] @@ -196,6 +213,7 @@ What was added: **What it is:** [Plain English definition without jargon] **Why you need it:** + - [Benefit 1] - [Benefit 2] - [Benefit 3] @@ -203,6 +221,7 @@ What was added: **How it works:** [Simplified technical explanation] **Real scenarios:** + - [Use case 1 with context] - [Use case 2 with context] - [Use case 3 with context] @@ -228,6 +247,7 @@ What was added: ### Detection Criteria **Look for:** + - Action verbs in titles (Configure, Enable, Create, Set up) - Numbered steps or procedures - "Prerequisites" sections @@ -236,6 +256,7 @@ What was added: - Command examples or code blocks **Confidence signals:** + - Clear sequential structure - Specific actionable steps - Tool/UI references @@ -243,6 +264,7 @@ What was added: - Troubleshooting sections **Example titles:** + - "Enable Always Use HTTPS" - "Configure DNS Settings" - "Create a Worker" @@ -265,6 +287,7 @@ What was added: **For how-to guides, preserve existing steps and add minimal context:** **Minimal additions:** + 1. **Add 1-2 sentence "what this accomplishes"** at top (if missing) 2. **Add inline "why"** (1 sentence) for non-obvious steps 3. **Add 1 example** showing when you'd use this (3-5 lines) @@ -272,6 +295,7 @@ What was added: 5. **Add 1-2 troubleshooting notes** for critical failures only **Preserve:** + - Original step numbering and flow - Existing Dashboard/API paths (don't create new ones) - All screenshots and UI elements @@ -280,6 +304,7 @@ What was added: **Example enhancement:** Original (12 lines): + ```markdown # Create a DNS View @@ -297,10 +322,11 @@ Use the create view endpoint with zone IDs. ``` Enhanced (20 lines - 1.67x): + ```markdown # Create a DNS View -Create a logical grouping of zones that determines which DNS records users see. +Create a logical grouping of zones that determines which DNS records users see. Useful for multi-region setups or environment separation. **Example:** Create "London View" and "SF View" to route users to nearest datacenter. @@ -327,6 +353,7 @@ curl -X POST /api/views -d '{"name": "London View", "zone_ids": ["id1", "id2"]}' ``` What was added: + - 2-sentence purpose statement (2 lines) - 1 example (1 line) - Inline context for 2 steps (2 lines) @@ -336,11 +363,13 @@ What was added: - Total: 8 lines added to 12 original = 20 lines (1.67x) ✅ **What was NOT added:** + - Comprehensive troubleshooting section - Multiple examples - Separate "Understanding Views" section - Extensive testing procedures -``` + +```` ### Common Issues to Fix @@ -414,7 +443,7 @@ What was added: **Example:** ```[language] [Realistic usage example] -``` +```` **Result:** [What happens when this is used] @@ -423,7 +452,8 @@ What was added: ### [Next Option] [Same structure...] -``` + +```` ### Common Issues to Fix @@ -513,24 +543,25 @@ Add records to the zone. curl -X POST https://api.cloudflare.com/zones/ID/dns_records \\ -d '{"type": "A", "name": "app", "content": "192.168.1.100"}' \`\`\` -``` +```` Enhanced (35 lines - 1.75x): + ```markdown ## Step 1: Create the zone -Create an internal zone that will contain your DNS records. This zone is only +Create an internal zone that will contain your DNS records. This zone is only accessible via Gateway (not public DNS). \`\`\`bash curl -X POST https://api.cloudflare.com/zones \\ - -d '{ - "name": "company.internal", # Your internal domain - "type": "internal" # Marks as internal-only - }' +-d '{ +"name": "company.internal", # Your internal domain +"type": "internal" # Marks as internal-only +}' \`\`\` -**Example use:** A company creates company.internal for all internal apps +**Example use:** A company creates company.internal for all internal apps (app.company.internal, api.company.internal, db.company.internal). ## Step 2: Add DNS records @@ -539,24 +570,27 @@ Add records mapping hostnames to private IPs. \`\`\`bash curl -X POST https://api.cloudflare.com/zones/ZONE_ID/dns_records \\ - -d '{ - "type": "A", # Address record - "name": "app.company.internal", # Full hostname - "content": "192.168.1.100" # Private IP - }' +-d '{ +"type": "A", # Address record +"name": "app.company.internal", # Full hostname +"content": "192.168.1.100" # Private IP +}' \`\`\` -**Test:** +**Test:** \`\`\`bash nslookup app.company.internal + # Expected: Returns 192.168.1.100 + \`\`\` -**If it doesn't resolve:** Device must use Gateway as DNS resolver. Check WARP +**If it doesn't resolve:** Device must use Gateway as DNS resolver. Check WARP connection or DNS settings. ``` What was added: + - Brief "why" for each step (1 sentence) - Inline code comments (3-4 comments) - 1 example showing usage (2 lines) @@ -565,6 +599,7 @@ What was added: - Total: 15 lines added to 20 original = 35 lines (1.75x) ✅ **What was NOT added:** + - Separate "What you'll build" section - Multiple examples - Comprehensive troubleshooting section @@ -614,16 +649,19 @@ What was added: Sometimes documentation combines types: ### Overview + How To + **Pattern:** Product intro followed by quick start steps **Approach:** Treat first section as Overview, steps as How To **Example:** "Workers Overview" with "Deploy Your First Worker" steps ### Concept + Reference + **Pattern:** Conceptual explanation followed by parameter reference **Approach:** Layer explanation first, reference at bottom **Example:** "Understanding Caching" + "Cache Headers Reference" ### Tutorial + Reference + **Pattern:** Build project + API reference at end **Approach:** Keep tutorial progressive, move reference to appendix **Example:** "Build URL Shortener" + "Workers API Reference" @@ -635,6 +673,7 @@ Sometimes documentation combines types: ## Quick Reference Cards ### Overview Page Card + ``` ✓ Opens with benefit statement ✓ Problem/Solution structure @@ -644,6 +683,7 @@ Sometimes documentation combines types: ``` ### Concept Page Card + ``` ✓ Analogy in first paragraph ✓ Plain definition @@ -653,6 +693,7 @@ Sometimes documentation combines types: ``` ### How To Page Card + ``` ✓ Context before steps ✓ Prerequisites listed @@ -662,6 +703,7 @@ Sometimes documentation combines types: ``` ### Reference Page Card + ``` ✓ Opening context ✓ Use-case organized @@ -671,6 +713,7 @@ Sometimes documentation combines types: ``` ### Tutorial Page Card + ``` ✓ "What you'll build" ✓ Prerequisites + time diff --git a/.agents/skills/eli5/references/pattern-library.md b/.agents/skills/eli5/references/pattern-library.md index 3d7b91b310a8918..f7ebb468915de2c 100644 --- a/.agents/skills/eli5/references/pattern-library.md +++ b/.agents/skills/eli5/references/pattern-library.md @@ -7,6 +7,7 @@ A reference collection of reusable before/after patterns for simplifying technic ## Purpose This library provides: + - **Reusable patterns** for common simplification scenarios - **Jargon → Plain English** translations - **Before/after examples** demonstrating transformations @@ -19,6 +20,7 @@ This library provides: **All patterns below demonstrate minimal, integrated enhancements (1.5-2x growth)** When applying these patterns: + - ✅ Add inline, not as separate major sections - ✅ Integrate with existing content flow - ✅ Keep examples brief (5-15 lines each, max 1-2 examples) @@ -32,6 +34,7 @@ When applying these patterns: When a pattern shows "Add [section]" → Interpret as "add brief inline content" not "create major new section" **Example:** + - Pattern says: "Add use case example" - **Correct:** Add 5-10 line example inline with concept - **Incorrect:** Create separate "Use Case Examples" section with 4 detailed scenarios @@ -44,23 +47,23 @@ When a pattern shows "Add [section]" → Interpret as "add brief inline content" Common technical terms and their accessible alternatives: -| Technical Term | Plain English | Context Example | -|----------------|---------------|-----------------| -| **Implement** | Set up, turn on, use | "Set up two-factor authentication" not "Implement 2FA" | -| **Utilize** | Use | "Use the API" not "Utilize the API" | -| **Leverage** | Use, take advantage of | "Take advantage of caching" not "Leverage caching capabilities" | -| **Execute** | Run | "Run the command" not "Execute the command" | -| **Instantiate** | Create | "Create a new Worker" not "Instantiate a Worker" | -| **Terminate** | Stop, end | "Stop the process" not "Terminate the process" | -| **Subsequently** | Then, next | "Then, configure the settings" not "Subsequently, configure" | -| **Optimal** | Best | "Best performance" not "Optimal performance" | -| **Facilitate** | Help, enable | "This helps you deploy faster" not "Facilitates rapid deployment" | -| **Invoke** | Call, trigger | "Call the function" not "Invoke the function" | -| **Provision** | Set up, create | "Set up your server" not "Provision infrastructure" | -| **Egress** | Outgoing data | "Data leaving your network" not "Egress traffic" | -| **Ingress** | Incoming data | "Data entering your network" not "Ingress traffic" | -| **Anycast** | Routing to nearest server | "Automatically routes to the nearest location" not "Anycast routing" | -| **Propagation** | Spreading, updating | "Changes spread globally" not "Configuration propagates" | +| Technical Term | Plain English | Context Example | +| ---------------- | ------------------------- | -------------------------------------------------------------------- | +| **Implement** | Set up, turn on, use | "Set up two-factor authentication" not "Implement 2FA" | +| **Utilize** | Use | "Use the API" not "Utilize the API" | +| **Leverage** | Use, take advantage of | "Take advantage of caching" not "Leverage caching capabilities" | +| **Execute** | Run | "Run the command" not "Execute the command" | +| **Instantiate** | Create | "Create a new Worker" not "Instantiate a Worker" | +| **Terminate** | Stop, end | "Stop the process" not "Terminate the process" | +| **Subsequently** | Then, next | "Then, configure the settings" not "Subsequently, configure" | +| **Optimal** | Best | "Best performance" not "Optimal performance" | +| **Facilitate** | Help, enable | "This helps you deploy faster" not "Facilitates rapid deployment" | +| **Invoke** | Call, trigger | "Call the function" not "Invoke the function" | +| **Provision** | Set up, create | "Set up your server" not "Provision infrastructure" | +| **Egress** | Outgoing data | "Data leaving your network" not "Egress traffic" | +| **Ingress** | Incoming data | "Data entering your network" not "Ingress traffic" | +| **Anycast** | Routing to nearest server | "Automatically routes to the nearest location" not "Anycast routing" | +| **Propagation** | Spreading, updating | "Changes spread globally" not "Configuration propagates" | --- @@ -71,6 +74,7 @@ Common technical terms and their accessible alternatives: ### Example: Internal DNS Documentation **Before (Original - 15 lines):** + ```markdown # Internal DNS @@ -83,6 +87,7 @@ Internal DNS zones pair with Gateway resolver policies. Use the dashboard or API to create an internal zone. ### Dashboard + 1. Navigate to Internal DNS 2. Click Create Zone 3. Enter zone name @@ -90,25 +95,27 @@ Use the dashboard or API to create an internal zone. ``` **After (Enhanced - 26 lines, 1.73x growth):** + ```markdown # Internal DNS -Manage DNS records for your private network without running your own DNS +Manage DNS records for your private network without running your own DNS servers. This simplifies operations and integrates with Cloudflare Gateway. -Internal DNS zones pair with Gateway resolver policies to control DNS +Internal DNS zones pair with Gateway resolver policies to control DNS responses based on source IP, user identity, or domain. -**Example use case:** A multi-region company creates views for London and SF. -Users query api.company.internal but get different IPs based on location +**Example use case:** A multi-region company creates views for London and SF. +Users query api.company.internal but get different IPs based on location (London users → 10.0.1.100, SF users → 10.0.2.100). ## Create a Zone -Create an internal zone that will contain your DNS records. Zones are only +Create an internal zone that will contain your DNS records. Zones are only accessible via Gateway (not public DNS). ### Dashboard + 1. Navigate to Internal DNS → Zones 2. Click **Create Zone** 3. Enter zone name (e.g., company.internal) @@ -118,8 +125,9 @@ accessible via Gateway (not public DNS). ``` **What was added:** + - 1 sentence explaining "why" (without running own servers) - 1 line -- Brief context for resolver policies (source IP, user identity) - 1 line +- Brief context for resolver policies (source IP, user identity) - 1 line - 1 concrete example (3 lines) - Brief zone explanation (2 lines) - Inline step context (1 line each for 2 steps) - 2 lines @@ -127,6 +135,7 @@ accessible via Gateway (not public DNS). - **Total added: 11 lines to 15 original = 26 lines (1.73x)** ✅ **What was NOT added:** + - No "What Problem Does Internal DNS Solve?" section - No "How It Works (Conceptual)" section before content - No diagram annotations @@ -136,6 +145,7 @@ accessible via Gateway (not public DNS). - No separate "Understanding Zones" section **Why this works:** + - Preserves original structure completely - Adds context inline where readers need it - Provides 1 concrete example for grounding @@ -151,33 +161,37 @@ accessible via Gateway (not public DNS). ### Overview Pages **Before (Technical-first):** + ```markdown ## Product X -Product X is a distributed edge computing platform utilizing V8 isolates -for low-latency serverless code execution with sub-millisecond cold start +Product X is a distributed edge computing platform utilizing V8 isolates +for low-latency serverless code execution with sub-millisecond cold start performance and global anycast deployment. ``` **After (Benefit-first):** + ```markdown ## Product X -Run code worldwide without managing servers. Deploy in seconds, scale +Run code worldwide without managing servers. Deploy in seconds, scale automatically, and pay only for what you use. -**What problem it solves:** Maintaining global infrastructure is expensive +**What problem it solves:** Maintaining global infrastructure is expensive and complex. Product X runs your code in 300+ cities automatically. **Perfect for:** + - Applications needing fast global performance -- Teams wanting to skip server management +- Teams wanting to skip server management - Projects with variable traffic [Get started →] ``` **Why this works:** + - Opens with clear user value - Problem framing creates relevance - "Perfect for" helps self-identification @@ -190,35 +204,39 @@ and complex. Product X runs your code in 300+ cities automatically. ### Concept Pages **Before (Abstract):** + ```markdown ## Caching -Caching stores frequently accessed data in high-speed storage layers to -reduce origin server load and improve response times through data locality +Caching stores frequently accessed data in high-speed storage layers to +reduce origin server load and improve response times through data locality optimization. ``` **After (Concrete):** + ```markdown ## Caching -**Think of it like:** A library's reserve desk. Popular books stay at the +**Think of it like:** A library's reserve desk. Popular books stay at the front desk for quick access instead of requiring trips to the distant stacks. -**What it is:** Caching keeps copies of your frequently accessed files -(images, CSS, JavaScript) close to users, so they load instantly instead of +**What it is:** Caching keeps copies of your frequently accessed files +(images, CSS, JavaScript) close to users, so they load instantly instead of being fetched from your origin server every time. **Why it matters:** + - Pages load 10x faster (50ms vs 500ms) - Reduces server costs (fewer origin requests) - Handles traffic spikes (serves from cache, not origin) -**When to use:** Any content that doesn't change constantly—images, stylesheets, +**When to use:** Any content that doesn't change constantly—images, stylesheets, blog posts, product pages. ``` **Why this works:** + - Analogy creates immediate mental model - Plain language explanation builds understanding - Benefits are concrete and measurable @@ -231,6 +249,7 @@ blog posts, product pages. ### How To Pages **Before (Steps-only):** + ```markdown ## Enable Feature X @@ -241,7 +260,8 @@ blog posts, product pages. ``` **After (Contextual multi-path):** -```markdown + +````markdown ## Enable Feature X **What this does:** Protects your site from [specific threat] by [mechanism]. @@ -257,7 +277,7 @@ blog posts, product pages. 4. Find **Feature X** and toggle it **On** 5. Click **Save Changes** at the bottom -💡 **Note:** Changes take effect immediately. Check Analytics in 5 minutes +💡 **Note:** Changes take effect immediately. Check Analytics in 5 minutes to see it working. ### Via API @@ -270,12 +290,14 @@ curl -X PATCH "https://api.example.com/v1/settings" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{"feature_x_enabled": true}' ``` +```` **Response:** + ```json { - "success": true, - "result": {"feature_x_enabled": true} + "success": true, + "result": { "feature_x_enabled": true } } ``` @@ -287,7 +309,8 @@ curl -X PATCH "https://api.example.com/v1/settings" \ 2. Check browser DevTools → Network tab 3. Look for [specific indicator] 4. You should see [expected result] -``` + +```` **Why this works:** - Context explains purpose before steps @@ -310,15 +333,16 @@ curl -X PATCH "https://api.example.com/v1/settings" \ **Content-Type:** MIME type. Examples: text/html, application/json **Expires:** Cache expiration date. Format: HTTP-date -``` +```` **After (Use-case organized):** -```markdown + +````markdown ## Headers by Purpose ### Controlling Cache Behavior -**When to use:** Make your site faster by controlling what gets cached and +**When to use:** Make your site faster by controlling what gets cached and for how long. #### Long-Term Caching (Static Assets) @@ -327,15 +351,17 @@ for how long. **What it does:** Caches content for 1 year -**When to use:** Files that never change, like `logo-v2.png` or +**When to use:** Files that never change, like `logo-v2.png` or `style.abc123.css` with version hash in filename **Example:** + ```http Cache-Control: public, max-age=31536000, immutable ``` +```` -**Result:** First visitor downloads. Next year, everyone gets the cached +**Result:** First visitor downloads. Next year, everyone gets the cached version instantly. --- @@ -349,6 +375,7 @@ version instantly. **When to use:** Content that updates occasionally—blog posts, product pages **Example:** + ```http Cache-Control: public, max-age=3600 ``` @@ -362,7 +389,8 @@ Cache-Control: public, max-age=3600 **When to use:** Tell browsers what type of content they're receiving. [Continue pattern...] -``` + +```` **Why this works:** - Organized by task, not alphabet @@ -389,8 +417,9 @@ async function handleRequest(request) { const url = new URL(request.url) return new Response('Hello') } -``` -``` +```` + +```` **After (Explained progression):** ```markdown @@ -404,7 +433,7 @@ A working [specific thing] that [specific capability]. ### Who This Is For -Developers comfortable with JavaScript. No prior experience needed with +Developers comfortable with JavaScript. No prior experience needed with [platform], but you should understand HTTP requests and JSON. ### Time: 30 minutes @@ -428,14 +457,16 @@ async function handleRequest(request) { headers: { 'content-type': 'text/plain' } }) } -``` +```` **What this code does:** + - **Line 2:** Listens for HTTP requests to your Worker -- **Line 4:** Calls `handleRequest` to process each request +- **Line 4:** Calls `handleRequest` to process each request - **Line 8-12:** Returns a simple text response **Test it:** + 1. Deploy this code 2. Visit your Worker's URL 3. You should see: "Hello! It works!" @@ -445,7 +476,8 @@ Great! Your Worker is running. Now let's add real functionality... ## Step 2: Parse URLs [Continue building progressively with explanations...] -``` + +```` **Why this works:** - Sets clear expectations upfront @@ -465,11 +497,13 @@ Features: - Global anycast network - Automatic scaling - Pay-per-request pricing -``` +```` **After:** + ```markdown **What you get:** + - **Fast everywhere:** Code runs in 300+ cities, close to every user - **Auto-scaling:** Handles 10 requests or 10 million without configuration - **Cost-efficient:** Pay only when code runs, not for idle servers @@ -478,27 +512,29 @@ Features: ### Transform 2: Jargon Explanation → Layered Understanding **Before:** + ```markdown -DDoS mitigation employs anycast architecture to distribute volumetric attacks -across our edge network, utilizing L3/L4 packet inspection and L7 behavioral +DDoS mitigation employs anycast architecture to distribute volumetric attacks +across our edge network, utilizing L3/L4 packet inspection and L7 behavioral analysis. ``` **After:** + ```markdown **In plain language:** Stops attackers from overwhelming your site with fake traffic. -**How it protects you:** We have 300+ data centers. When an attack hits, we -spread it across all locations—like opening thousands of doors instead of one. +**How it protects you:** We have 300+ data centers. When an attack hits, we +spread it across all locations—like opening thousands of doors instead of one. We also identify and block fake visitors before they reach your site. -**What happens:** Your real visitors get through normally while attack traffic +**What happens:** Your real visitors get through normally while attack traffic is filtered out automatically.
For technical users -Anycast distributes L3/L4 volumetric attacks across the network. L7 protection +Anycast distributes L3/L4 volumetric attacks across the network. L7 protection uses JS challenges and behavioral fingerprinting. [Architecture details →]
@@ -507,21 +543,24 @@ uses JS challenges and behavioral fingerprinting. [Architecture details →] ### Transform 3: Assumed Knowledge → Explicit Prerequisites **Before:** + ```markdown Configure your A record to point to the anycast IP. ``` **After:** + ```markdown Update your DNS A record to point to Cloudflare's IP address. -**What's an A record?** It's the DNS entry that tells the internet where your +**What's an A record?** It's the DNS entry that tells the internet where your website lives (like an address in a phone book). -**Where to find it:** In your domain registrar's DNS settings (GoDaddy, Namecheap, +**Where to find it:** In your domain registrar's DNS settings (GoDaddy, Namecheap, etc.). Look for "DNS Management" or "DNS Settings." -**What to enter:** +**What to enter:** + - Type: A - Name: @ (means your root domain) - Value: 192.0.2.1 (our IP address) @@ -532,10 +571,12 @@ etc.). Look for "DNS Management" or "DNS Settings." ## Metaphor Templates ### Template: API Explanation + ```markdown **Think of it like:** [Familiar interface concept] An API is like a restaurant menu. It shows you: + - What's available to order (endpoints) - What details you need to provide (parameters: "no onions, extra cheese") - What you'll get back (response: your meal) @@ -543,11 +584,12 @@ An API is like a restaurant menu. It shows you: You don't need to know how the kitchen works. Just order from the menu. -**Where this breaks down:** Unlike restaurants where you wait, API responses +**Where this breaks down:** Unlike restaurants where you wait, API responses are usually instant. Also, APIs can return errors if your "order" is invalid. ``` ### Template: Security Feature Explanation + ```markdown **The threat:** [What attackers do] @@ -559,22 +601,26 @@ Think of it like [security analogy]: [Concrete comparison that shows the protection model] **What happens automatically:** + - [Protection 1] - [Protection 2] **What you control:** + - [Setting 1] - [Setting 2] ``` ### Template: Infrastructure Concept + ```markdown **What it is:** [One-sentence plain English definition] -**Real-world comparison:** +**Real-world comparison:** [Physical/familiar tech analog that maps 1:1 to key concepts] **Why it matters:** + - [Benefit 1 with measurable impact] - [Benefit 2 with measurable impact] @@ -590,24 +636,25 @@ Think of it like [security analogy]: ### When You See → Do This -| **Original** | **Transform To** | -|--------------|------------------| -| Technical architecture first | Problem → Solution → Benefit | -| Abstract concept | Analogy → Plain explanation → Technical | -| Steps without context | Context → Prerequisites → Multi-path steps | -| Alphabetical reference | Use-case groups → Two-tier descriptions | -| Unexplained code | What you'll build → Progressive steps → Explained blocks | -| Feature list | Problem/solution pairs with benefits | -| Jargon without definition | Define inline or use plain alternative | -| Missing "why" | Add value proposition upfront | -| No use cases | Add 3-5 realistic scenarios | -| Assumes knowledge | State prerequisites explicitly | +| **Original** | **Transform To** | +| ---------------------------- | -------------------------------------------------------- | +| Technical architecture first | Problem → Solution → Benefit | +| Abstract concept | Analogy → Plain explanation → Technical | +| Steps without context | Context → Prerequisites → Multi-path steps | +| Alphabetical reference | Use-case groups → Two-tier descriptions | +| Unexplained code | What you'll build → Progressive steps → Explained blocks | +| Feature list | Problem/solution pairs with benefits | +| Jargon without definition | Define inline or use plain alternative | +| Missing "why" | Add value proposition upfront | +| No use cases | Add 3-5 realistic scenarios | +| Assumes knowledge | State prerequisites explicitly | --- ## Best Practices Summary ### Do: + ✅ Lead with benefits and problems solved ✅ Use tech-adjacent metaphors with stated limitations ✅ Provide both Dashboard and API paths @@ -615,9 +662,10 @@ Think of it like [security analogy]: ✅ Explain every code block ✅ State prerequisites before steps ✅ Include verification/testing sections -✅ Add "For technical users" collapsible sections +✅ Add "For technical users" collapsible sections ### Don't: + ❌ Start with technical architecture ❌ Use condescending language ("simply," "just," "obviously") ❌ Assume prior knowledge without stating it @@ -625,7 +673,7 @@ Think of it like [security analogy]: ❌ Organize specs alphabetically without context ❌ Drop code without explanation ❌ Skip the "why" to get to "how" faster -❌ Sacrifice accuracy for brevity +❌ Sacrifice accuracy for brevity --- diff --git a/.github/review-template.md b/.github/review-template.md index 0e56cc03451cac7..4aee0df6e1cf7ed 100644 --- a/.github/review-template.md +++ b/.github/review-template.md @@ -1,8 +1,9 @@ ## Author self-review I've reviewed my PR for the following: + - [ ] Metadata in the frontmatter, including `pcx_content_type` and - for tutorials - `updated: YYYY-MM-DD`. - [ ] PCX content strategy overall. - [ ] PCX style guidelines (product names, capitalization, etc.). - [ ] Needed redirects (if deleting any existing pages). -- [ ] Code blocks && other formatting issues (bolding, italics, lists). \ No newline at end of file +- [ ] Code blocks && other formatting issues (bolding, italics, lists). diff --git a/.opencode/command/styleguide.md b/.opencode/command/styleguide.md index 085e070750f199c..fbacc3b8e40c886 100644 --- a/.opencode/command/styleguide.md +++ b/.opencode/command/styleguide.md @@ -49,6 +49,7 @@ Look at all the unstaged changes to markdown (.md, .mdx) files, pull out the lin ## Output Format For each issue found, report: + - The problematic text (quote it) - Which rule it violates - A suggested fix diff --git a/.windsurf/rules/general-rules.md b/.windsurf/rules/general-rules.md index e563c09c965c3cf..7efe2f90487c8d4 100644 --- a/.windsurf/rules/general-rules.md +++ b/.windsurf/rules/general-rules.md @@ -61,4 +61,4 @@ This code would only be rendered if the page has a magicWord variable set to "ha - Replace `sh` blocks using `npm commands` with our [`PackageManagers` component](https://developers.cloudflare.com/style-guide/components/package-managers/). - Replace in-text mentions of Cloudflare's number of data centers, network capacity, or network peers with our [`PublicStats` component](https://developers.cloudflare.com/style-guide/components/public-stats/). - Replace `toml` or `json` code blocks with [Wrangler configuration](https://developers.cloudflare.com/workers/wrangler/configuration/#sample-wrangler-configuration) information with our [`WranglerConfig` component](https://developers.cloudflare.com/style-guide/components/wrangler-config/). -- Replace `ts` or `typescript` code blocks with our [`TypeScriptExample` component](https://developers.cloudflare.com/style-guide/components/typescript-example/). Ignore this rule if the original code block is within a tutorial or other step-by-step guide that is specific to TypeScript. \ No newline at end of file +- Replace `ts` or `typescript` code blocks with our [`TypeScriptExample` component](https://developers.cloudflare.com/style-guide/components/typescript-example/). Ignore this rule if the original code block is within a tutorial or other step-by-step guide that is specific to TypeScript. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7d3e71c75126c9f..198fa9cdc3bf951 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,9 +1,10 @@ # Contributing to Cloudflare's developer documentation Everyone, including those who are not part of the Cloudflare organization, are encouraged to contribute. + - If you are not a Cloudflare employee, learn how to contribute in the [contribution page](https://developers.cloudflare.com/style-guide/contributions/) of the Cloudflare Style Guide. - If you are a Cloudflare employee, reach out via our Developer Docs space in Google chat. Consult the [Cloudflare Style Guide](https://developers.cloudflare.com/style-guide/) on everything from grammar, to formatting, to frontmatter requirements. Browse our [components](/style-guide/components/) to add additional formatting. -Thank you for helping us to maintain quality documentation. \ No newline at end of file +Thank you for helping us to maintain quality documentation. diff --git a/MIGRATION.md b/MIGRATION.md index 622c020aee16f4d..4ac50851fe0e52b 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -18,7 +18,7 @@ ## High-risk items and unknowns | Item | Risk | Status | -|-------------------------------------------------------|--------|---------------------------------------------------------------| +| ----------------------------------------------------- | ------ | ------------------------------------------------------------- | | **`Page.astro` Vite alias** | HIGH | Unknown — We're coupled to low-level private implementation | | **`patch-package` hunks against Starlight internals** | HIGH | Unknown — We're coupled to low-level private implementation | | **`starlight-links-validator` Zod 4 incompatibility** | HIGH | Confirmed broken upstream | @@ -42,7 +42,7 @@ Targets are determined by [withastro/docs#13230]. That is the north star. | Package | Current | Target | -| ------------------------------ | -------- |--------------------------------------------------------| +| ------------------------------ | -------- | ------------------------------------------------------ | | `astro` | `5.13.7` | `6.0.0-beta.8` | | `@astrojs/starlight` | `0.36.0` | `https://pkg.pr.new/@astrojs/starlight@3644` | | `@astrojs/starlight-docsearch` | `0.6.0` | `https://pkg.pr.new/@astrojs/starlight-docsearch@3644` | diff --git a/src/components/AutoconfigDiagram.astro b/src/components/AutoconfigDiagram.astro index dafb15f5e6c8c24..bc843cdd921273a 100644 --- a/src/components/AutoconfigDiagram.astro +++ b/src/components/AutoconfigDiagram.astro @@ -21,10 +21,15 @@ const { framework, configs } = Astro.props;
- - - - + + + +
@@ -43,15 +48,17 @@ const { framework, configs } = Astro.props;
Generated configuration
- {configs.map((config, i) => ( -
-
{config.file}
-
- {config.label}: - {config.value} + { + configs.map((config, i) => ( +
+
{config.file}
+
+ {config.label}: + {config.value} +
-
- ))} + )) + }
@@ -64,8 +71,12 @@ const { framework, configs } = Astro.props;
- - + +
@@ -79,7 +90,9 @@ const { framework, configs } = Astro.props;
- Wrangler handles configuration automatically + Wrangler handles configuration automatically
@@ -131,7 +144,9 @@ const { framework, configs } = Astro.props; padding: 0.75rem 1rem; border: 1px solid rgb(229 229 229); min-width: 120px; - transition: border-color 0.3s ease, box-shadow 0.3s ease; + transition: + border-color 0.3s ease, + box-shadow 0.3s ease; } :root[data-theme="dark"] .node-card { @@ -323,7 +338,8 @@ const { framework, configs } = Astro.props; .config-file { font-size: 0.625rem; - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-family: + ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; color: rgb(115 115 115); margin-bottom: 0.125rem; } @@ -334,7 +350,8 @@ const { framework, configs } = Astro.props; .config-detail { font-size: 0.6875rem; - font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-family: + ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; } .config-label { @@ -393,8 +410,13 @@ const { framework, configs } = Astro.props; } @keyframes pulse { - 0%, 100% { opacity: 1; } - 50% { opacity: 0.5; } + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0.5; + } } .status-text { @@ -415,10 +437,10 @@ const { framework, configs } = Astro.props; diff --git a/src/components/ComponentUsage.astro b/src/components/ComponentUsage.astro index 4a3bf2d7677a098..66ee88e6d14b810 100644 --- a/src/components/ComponentUsage.astro +++ b/src/components/ComponentUsage.astro @@ -18,7 +18,8 @@ const usage = await getComponentsUsage(component); <>

- The {component} component is used {usage.count} times on{" "} + The {component} component is used {usage.count} times + on{" "} {usage.pages.size} pages.

diff --git a/src/components/FeatureTable.astro b/src/components/FeatureTable.astro index 8af0f2ee817b163..e9dd6c485730d49 100644 --- a/src/components/FeatureTable.astro +++ b/src/components/FeatureTable.astro @@ -34,12 +34,44 @@ const markdown = (content: any) => { - - {hasFree && } - {hasPro && } - {hasBiz && } - {hasEnt && } - {hasEntPlus && } + + { + hasFree && ( + + ) + } + { + hasPro && ( + + ) + } + { + hasBiz && ( + + ) + } + { + hasEnt && ( + + ) + } + { + hasEntPlus && ( + + ) + } diff --git a/src/components/LayerCard.astro b/src/components/LayerCard.astro index f809ad95620577b..52528db54e544c5 100644 --- a/src/components/LayerCard.astro +++ b/src/components/LayerCard.astro @@ -8,17 +8,17 @@ const { header = "Next Steps", href } = Astro.props; ---
{header}
{ href && (
diff --git a/src/components/LlmsTxtDirective.astro b/src/components/LlmsTxtDirective.astro index f9ea644e578be8b..87d72771289a198 100644 --- a/src/components/LlmsTxtDirective.astro +++ b/src/components/LlmsTxtDirective.astro @@ -11,9 +11,9 @@ const llmsTxt = productPrefix --- -
- -{(!forceClient || forceClient === "openai-js") && modelOptions.map((option) => ( - - - -))} -{(!forceClient || forceClient === "openai-js") && modelOptions.map((option) => ( - - - -))} -{(!forceClient || forceClient === "aisdk") && modelOptions.map((option) => ( - - - -))} -{(!forceClient || forceClient === "aisdk") && modelOptions.map((option) => ( - - - -))} +
+ + { + (!forceClient || forceClient === "openai-js") && + modelOptions.map((option) => ( + + + + )) + } + { + (!forceClient || forceClient === "openai-js") && + modelOptions.map((option) => ( + + + + )) + } + { + (!forceClient || forceClient === "aisdk") && + modelOptions.map((option) => ( + + + + )) + } + { + (!forceClient || forceClient === "aisdk") && + modelOptions.map((option) => ( + + + + )) + } -{(!forceClient || forceClient === "aisdk") && modelOptions.map((option) => ( - - - -))} -{(!forceClient || forceClient === "aisdk") && modelOptions.map((option) => ( - - - -))} + { + (!forceClient || forceClient === "aisdk") && + modelOptions.map((option) => ( + + + + )) + } + { + (!forceClient || forceClient === "aisdk") && + modelOptions.map((option) => ( + + + + )) + } -{(!forceClient || forceClient === "curl") && modelOptions.map((option) => ( - - - -))} -{(!forceClient || forceClient === "curl") && modelOptions.map((option) => ( - - - -))} -
\ No newline at end of file + { + (!forceClient || forceClient === "curl") && + modelOptions.map((option) => ( + + + + )) + } + { + (!forceClient || forceClient === "curl") && + modelOptions.map((option) => ( + + + + )) + } +
diff --git a/src/components/changelog/Pagination.astro b/src/components/changelog/Pagination.astro index 33e8d73fe0001bd..633f1407b109d74 100644 --- a/src/components/changelog/Pagination.astro +++ b/src/components/changelog/Pagination.astro @@ -52,7 +52,10 @@ const nextUrl = currentPage < lastPage ? pageUrl(currentPage + 1) : null; { lastPage > 1 && ( -
- - + + - - + + - - - - - - + + + + + + - +
FreeProBusinessEnterprise{plan.ent_plus} + Free + + Pro + + Business + + Enterprise + + {plan.ent_plus} +
Comments
Cloudflare Managed Ruleset - + 100817 Microsoft SharePoint - Deserialization - CVE:CVE-2025-53770 N/A Block This is a New Detection
Cloudflare Managed Ruleset - - 100818Microsoft SharePoint - Deserialization - CVE:CVE-2025-53771N/ABlockThis is a New Detection + + 100818Microsoft SharePoint - Deserialization - CVE:CVE-2025-53771N/ABlockThis is a New Detection
-For more details, also refer to [our blog](https://blog.cloudflare.com/cloudflare-protects-against-critical-sharepoint-vulnerability-cve-2025-53770/). \ No newline at end of file +For more details, also refer to [our blog](https://blog.cloudflare.com/cloudflare-protects-against-critical-sharepoint-vulnerability-cve-2025-53770/). diff --git a/src/content/changelog/waf/2025-07-28-waf-release.mdx b/src/content/changelog/waf/2025-07-28-waf-release.mdx index 3374f46caf0c044..c04a253ad3d3a3e 100644 --- a/src/content/changelog/waf/2025-07-28-waf-release.mdx +++ b/src/content/changelog/waf/2025-07-28-waf-release.mdx @@ -8,7 +8,6 @@ import { RuleID } from "~/components"; This week’s update spotlights several vulnerabilities across Apache Tomcat, MongoDB, and Fortinet FortiWeb. Several flaws related with a memory leak in Apache Tomcat can lead to a denial-of-service attack. Additionally, a code injection flaw in MongoDB's Mongoose library allows attackers to bypass security controls to access restricted data. - **Key Findings** - Fortinet FortiWeb (CVE-2025-25257): An improper neutralization of special elements used in a SQL command vulnerability in Fortinet FortiWeb versions allows an unauthenticated attacker to execute unauthorized SQL code or commands. @@ -73,7 +72,9 @@ These vulnerabilities target user-facing components, web application servers, an 100815 - MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061 + + MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061 + Log Block This is a New Detection @@ -84,10 +85,12 @@ These vulnerabilities target user-facing components, web application servers, an 100816 - MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061 + + MongoDB - Remote Code Execution - CVE:CVE-2024-53900, CVE:CVE-2025-23061 + Log Block This is a New Detection - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-08-04-waf-release.mdx b/src/content/changelog/waf/2025-08-04-waf-release.mdx index f8f5bc852842740..b0e648fc90a3a62 100644 --- a/src/content/changelog/waf/2025-08-04-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-04-waf-release.mdx @@ -35,105 +35,110 @@ The Grafana cross-site scripting (XSS) flaw can be used to hijack authenticated Meanwhile, the information disclosure flaw in WordPress core provides attackers with valid user emails, fueling targeted phishing campaigns that aim to secure the same account access achievable through the other exploits. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100535ASitecore - Dangerous File Upload - CVE:CVE-2025-34510, CVE:CVE-2025-34511LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100535Sitecore - Information Disclosure - CVE:CVE-2025-34509LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100543Grafana - Directory Traversal - CVE:CVE-2025-4123LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100545WordPress - Information Disclosure - CVE:CVE-2023-5561LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100820CentOS WebPanel - Remote Code Execution - CVE:CVE-2025-48703LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100821LaRecipe - SSTI - CVE:CVE-2025-53833LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100822WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100823WordPress:Theme:Motors - Privilege Escalation - CVE:CVE-2025-4322LogBlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + 100535A + Sitecore - Dangerous File Upload - CVE:CVE-2025-34510, + CVE:CVE-2025-34511 + LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100535Sitecore - Information Disclosure - CVE:CVE-2025-34509LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100543Grafana - Directory Traversal - CVE:CVE-2025-4123LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100545WordPress - Information Disclosure - CVE:CVE-2023-5561LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100820CentOS WebPanel - Remote Code Execution - CVE:CVE-2025-48703LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100821LaRecipe - SSTI - CVE:CVE-2025-53833LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100822 + WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058 + LogBlockThis is a New Detection
Cloudflare Managed Ruleset + + 100823WordPress:Theme:Motors - Privilege Escalation - CVE:CVE-2025-4322LogBlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-08-07-emergency-waf-release.mdx b/src/content/changelog/waf/2025-08-07-emergency-waf-release.mdx index e7e5dad628ec2f1..e9deb9cfadebeca 100644 --- a/src/content/changelog/waf/2025-08-07-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-07-emergency-waf-release.mdx @@ -23,39 +23,42 @@ Adobe AEM’s remote code execution vulnerability enables attackers to run arbit These findings reinforce the urgency of updating to the patched versions — Squid 6.4 and Adobe AEM 6.5.24 or later — and reviewing configurations to prevent exploitation. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100844Adobe Experience Manager Forms - Remote Code Execution - CVE:CVE-2025-54253N/ABlockThis is a New Detection
Cloudflare Managed Ruleset - - 100840Squid - Buffer Overflow - CVE:CVE-2025-54574N/ABlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100844 + + Adobe Experience Manager Forms - Remote Code Execution - + CVE:CVE-2025-54253 + + N/A + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100840 + Squid - Buffer Overflow - CVE:CVE-2025-54574 + N/A + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-08-11-waf-release.mdx b/src/content/changelog/waf/2025-08-11-waf-release.mdx index 62764e4b09840a6..74a303e3d74c2fb 100644 --- a/src/content/changelog/waf/2025-08-11-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-11-waf-release.mdx @@ -8,26 +8,21 @@ import { RuleID } from "~/components"; This week's update focuses on a wide range of enterprise software, from network infrastructure and security platforms to content management systems and development frameworks. Flaws include unsafe deserialization, OS command injection, SSRF, authentication bypass, and arbitrary file upload — many of which allow unauthenticated remote code execution. Notable risks include Cisco Identity Services Engine and Ivanti EPMM, where successful exploitation could grant attackers full administrative control of core network infrastructure and popular web services such as WordPress, SharePoint, and Ingress-Nginx, where security bypasses and arbitrary file uploads could lead to complete site or server compromise. - **Key Findings** - Cisco Identity Services Engine (CVE-2025-20281): Insufficient input validation in a specific API of Cisco Identity Services Engine (ISE) and ISE-PIC allows an unauthenticated, remote attacker to execute arbitrary code with root privileges on an affected device. - Wazuh Server (CVE-2025-24016): An unsafe deserialization vulnerability in Wazuh Server (versions 4.4.0 to 4.9.0) allows for remote code execution and privilege escalation. By injecting unsanitized data, an attacker can trigger an exception to execute arbitrary code on the server. - - CrushFTP (CVE-2025-54309): A flaw in AS2 validation within CrushFTP allows remote attackers to gain administrative access via HTTPS on systems not using the DMZ proxy feature. This flaw can lead to unauthorized file access and potential system compromise. - - Kentico Xperience CMS (CVE-2025-2747, CVE-2025-2748): Vulnerabilities in Kentico Xperience CMS could enable cross-site scripting (XSS), allowing attackers to inject malicious scripts into web pages. Additionally, a flaw could allow unauthenticated attackers to bypass the Staging Sync Server's authentication, potentially leading to administrative control over the CMS. - - Node.js (CVE-2025-27210): An incomplete fix for a previous vulnerability (CVE-2025-23084) in Node.js affects the `path.join()` API method on Windows systems. The vulnerability can be triggered using reserved Windows device names such as `CON`, `PRN`, or `AUX`. -- WordPress:Plugin:Simple File List (CVE-2025-34085, CVE-2020-36847): -This vulnerability in the Simple File List plugin for WordPress allows an unauthenticated remote attacker to upload arbitrary files to a vulnerable site. This can be exploited to achieve remote code execution on the server.
-(Note: CVE-2025-34085 has been rejected as a duplicate.) - +- WordPress:Plugin:Simple File List (CVE-2025-34085, CVE-2020-36847): + This vulnerability in the Simple File List plugin for WordPress allows an unauthenticated remote attacker to upload arbitrary files to a vulnerable site. This can be exploited to achieve remote code execution on the server.
+ (Note: CVE-2025-34085 has been rejected as a duplicate.) - GeoServer (CVE-2024-29198): A Server-Side Request Forgery (SSRF) vulnerability exists in GeoServer's Demo request endpoint, which can be exploited where the Proxy Base URL has not been configured. @@ -37,240 +32,239 @@ This vulnerability in the Simple File List plugin for WordPress allows an unauth - Manager-IO (CVE-2025-54122): A critical unauthenticated full read Server-Side Request Forgery (SSRF) vulnerability is present in the proxy handler of both Manager Desktop and Server editions up to version 25.7.18.2519. This allows an unauthenticated attacker to bypass network isolation and access internal services. -- Ingress-Nginx (CVE-2025-1974): A vulnerability in the Ingress-Nginx controller for Kubernetes allows an attacker to bypass access control rules. An unauthenticated attacker with access to the pod network can achieve arbitrary code execution in the context of the ingress-nginx controller. +- Ingress-Nginx (CVE-2025-1974): A vulnerability in the Ingress-Nginx controller for Kubernetes allows an attacker to bypass access control rules. An unauthenticated attacker with access to the pod network can achieve arbitrary code execution in the context of the ingress-nginx controller. - PaperCut NG/MF (CVE-2023-2533): A Cross-Site Request Forgery (CSRF) vulnerability has been identified in PaperCut NG/MF. Under specific conditions, an attacker could exploit this to alter security settings or execute arbitrary code if they can deceive an administrator with an active login session into clicking a malicious link. - SonicWall SMA (CVE-2025-40598): This vulnerability could allow an unauthenticated attacker to bypass security controls. This allows a remote, unauthenticated attacker to potentially execute arbitrary JavaScript code. -- WordPress (CVE-2025-5394): The "Alone – Charity Multipurpose Non-profit WordPress Theme" for WordPress is vulnerable to arbitrary file uploads. A missing capability check allows unauthenticated attackers to upload ZIP files containing webshells disguised as plugins, leading to remote code execution. - +- WordPress (CVE-2025-5394): The "Alone – Charity Multipurpose Non-profit WordPress Theme" for WordPress is vulnerable to arbitrary file uploads. A missing capability check allows unauthenticated attackers to upload ZIP files containing webshells disguised as plugins, leading to remote code execution. **Impact** These vulnerabilities span a broad range of enterprise technologies, including network access control systems, monitoring platforms, web servers, CMS platforms, cloud services, and collaboration tools. Exploitation techniques range from remote code execution and command injection to authentication bypass, SQL injection, path traversal, and configuration weaknesses. -A critical flaw in perimeter devices like Ivanti EPMM or SonicWall SMA could allow an unauthenticated attacker to gain remote code execution, completely breaching the primary network defense. A separate vulnerability within Cisco's Identity Services Engine could then be exploited to bypass network segmentation, granting an attacker widespread internal access. Insecure deserialization issues in platforms like Wazuh Server and CrushFTP could then be used to run malicious payloads or steal sensitive files from administrative consoles. Weaknesses in web delivery controllers like Ingress-Nginx or popular content management systems such as WordPress, SharePoint, and Kentico Xperience create vectors to bypass security controls, exfiltrate confidential data, or fully compromise servers. +A critical flaw in perimeter devices like Ivanti EPMM or SonicWall SMA could allow an unauthenticated attacker to gain remote code execution, completely breaching the primary network defense. A separate vulnerability within Cisco's Identity Services Engine could then be exploited to bypass network segmentation, granting an attacker widespread internal access. Insecure deserialization issues in platforms like Wazuh Server and CrushFTP could then be used to run malicious payloads or steal sensitive files from administrative consoles. Weaknesses in web delivery controllers like Ingress-Nginx or popular content management systems such as WordPress, SharePoint, and Kentico Xperience create vectors to bypass security controls, exfiltrate confidential data, or fully compromise servers. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100538GeoServer - SSRF - CVE:CVE-2024-29198LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100548Ivanti EPMM - Remote Code Execution - CVE:CVE-2025-6771LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100550Microsoft SharePoint - Remote Code Execution - CVE:CVE-2024-38018LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100562Manager-IO - SSRF - CVE:CVE-2025-54122LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100565 - Cisco Identity Services Engine - Remote Code Execution - - CVE:CVE-2025-20281 - LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100567Ingress-Nginx - Remote Code Execution - CVE:CVE-2025-1974LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100569PaperCut NG/MF - Remote Code Execution - CVE:CVE-2023-2533LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100571SonicWall SMA - XSS - CVE:CVE-2025-40598LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100573WordPress - Dangerous File Upload - CVE:CVE-2025-5394LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100806Wazuh Server - Remote Code Execution - CVE:CVE-2025-24016LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100824CrushFTP - Remote Code Execution - CVE:CVE-2025-54309LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100824ACrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 2LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100825AMI MegaRAC - Auth Bypass - CVE:CVE-2024-54085LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100826Kentico Xperience CMS - Auth Bypass - CVE:CVE-2025-2747LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100827Kentico Xperience CMS - XSS - CVE:CVE-2025-2748LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100828Node.js - Directory Traversal - CVE:CVE-2025-27210LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100829 - WordPress:Plugin:Simple File List - Remote Code Execution - - CVE:CVE-2025-34085 - LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100829A - WordPress:Plugin:Simple File List - Remote Code Execution - - CVE:CVE-2025-34085 - 2 - LogDisabledThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100538 + GeoServer - SSRF - CVE:CVE-2024-29198 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100548 + Ivanti EPMM - Remote Code Execution - CVE:CVE-2025-6771 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100550 + Microsoft SharePoint - Remote Code Execution - CVE:CVE-2024-38018 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100562 + Manager-IO - SSRF - CVE:CVE-2025-54122 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100565 + + Cisco Identity Services Engine - Remote Code Execution - + CVE:CVE-2025-20281 + + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100567 + Ingress-Nginx - Remote Code Execution - CVE:CVE-2025-1974 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100569 + PaperCut NG/MF - Remote Code Execution - CVE:CVE-2023-2533 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100571 + SonicWall SMA - XSS - CVE:CVE-2025-40598 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100573 + WordPress - Dangerous File Upload - CVE:CVE-2025-5394 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100806 + Wazuh Server - Remote Code Execution - CVE:CVE-2025-24016 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100824 + CrushFTP - Remote Code Execution - CVE:CVE-2025-54309 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100824A + CrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 2 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100825 + AMI MegaRAC - Auth Bypass - CVE:CVE-2024-54085 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100826 + Kentico Xperience CMS - Auth Bypass - CVE:CVE-2025-2747 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100827 + Kentico Xperience CMS - XSS - CVE:CVE-2025-2748 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100828 + Node.js - Directory Traversal - CVE:CVE-2025-27210 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100829 + + WordPress:Plugin:Simple File List - Remote Code Execution - + CVE:CVE-2025-34085 + + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100829A + + WordPress:Plugin:Simple File List - Remote Code Execution - + CVE:CVE-2025-34085 - 2 + + Log + Disabled + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-08-18-waf-release.mdx b/src/content/changelog/waf/2025-08-18-waf-release.mdx index 78b79350ea882e6..8f05b2eb924b63f 100644 --- a/src/content/changelog/waf/2025-08-18-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-18-waf-release.mdx @@ -31,138 +31,143 @@ This week, a series of critical vulnerabilities were discovered impacting core e These vulnerabilities affect core infrastructure, from network security appliances like SonicWall to data platforms such as Apache Druid and ML frameworks like BentoML. The code execution and deserialization flaws are particularly severe, offering deep system access that allows attackers to steal data, disrupt services, and establish a foothold for broader intrusions. Simultaneously, SSRF and XXE vulnerabilities undermine network boundaries, exposing sensitive internal data and creating pathways for lateral movement. Beyond data-centric threats, flaws in edge devices like the Tenda router introduce the tangible risk of operational disruption, highlighting a multi-faceted threat to the security and stability of key enterprise systems. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100574SonicWall SMA - Remote Code Execution - CVE:CVE-2025-32819, CVE:CVE-2025-32820, CVE:CVE-2025-32821LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100576Ms-Swift Project - Remote Code Execution - CVE:CVE-2025-50460LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100585Apache Druid - Remote Code Execution - CVE:CVE-2023-25194LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100834Tenda AC8v4 - Auth Bypass - CVE:CVE-2025-51087, CVE:CVE-2025-51088LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100835Open WebUI - SSRF - CVE:CVE-2024-7959LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100837SQLi - OOBLogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100841BentoML - SSRF - CVE:CVE-2025-54381LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100841ABentoML - SSRF - CVE:CVE-2025-54381 - 2LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100841BBentoML - SSRF - CVE:CVE-2025-54381 - 3LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100845Adobe Experience Manager Forms - XSS - CVE:CVE-2025-54254LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100845AAdobe Experience Manager Forms - XSS - CVE:CVE-2025-54254 - 2LogBlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100574 + + SonicWall SMA - Remote Code Execution - CVE:CVE-2025-32819, + CVE:CVE-2025-32820, CVE:CVE-2025-32821 + + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100576 + Ms-Swift Project - Remote Code Execution - CVE:CVE-2025-50460 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100585 + Apache Druid - Remote Code Execution - CVE:CVE-2023-25194 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100834 + + Tenda AC8v4 - Auth Bypass - CVE:CVE-2025-51087, CVE:CVE-2025-51088 + + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100835 + Open WebUI - SSRF - CVE:CVE-2024-7959 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100837 + SQLi - OOB + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100841 + BentoML - SSRF - CVE:CVE-2025-54381 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100841A + BentoML - SSRF - CVE:CVE-2025-54381 - 2 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100841B + BentoML - SSRF - CVE:CVE-2025-54381 - 3 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100845 + Adobe Experience Manager Forms - XSS - CVE:CVE-2025-54254 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100845A + Adobe Experience Manager Forms - XSS - CVE:CVE-2025-54254 - 2 + Log + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-08-25-waf-release.mdx b/src/content/changelog/waf/2025-08-25-waf-release.mdx index f78810c3fd8e64b..42c73f310668c3c 100644 --- a/src/content/changelog/waf/2025-08-25-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-25-waf-release.mdx @@ -21,50 +21,56 @@ This week, critical vulnerabilities were disclosed that impact widely used open- These vulnerabilities pose severe risks to enterprise environments and open-source ecosystems. Remote code execution enables attackers to gain deep system access, steal data, disrupt services, and establish persistent footholds for broader intrusions. Given the widespread deployment of Apache HTTP Server and Laravel in production systems, timely patching and mitigation are critical. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100822_BETAWordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058N/ADisabledThis was merged in to the original rule "WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058" (ID: )
Cloudflare Managed Ruleset - - 100831Apache HTTP Server - Code Execution - CVE:CVE-2024-38474LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100846Laravel - Remote Code Execution - CVE:CVE-2024-55661LogDisabledThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + 100822_BETA + WordPress:Plugin:WPBookit - Remote Code Execution - CVE:CVE-2025-6058 + N/ADisabled + This was merged in to the original rule "WordPress:Plugin:WPBookit - + Remote Code Execution - CVE:CVE-2025-6058" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + 100831Apache HTTP Server - Code Execution - CVE:CVE-2024-38474LogDisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100846Laravel - Remote Code Execution - CVE:CVE-2024-55661LogDisabledThis is a New Detection
diff --git a/src/content/changelog/waf/2025-08-29-emergency-waf-release.mdx b/src/content/changelog/waf/2025-08-29-emergency-waf-release.mdx index e11552cfbac77e9..0d6fc5ee3b10133 100644 --- a/src/content/changelog/waf/2025-08-29-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-08-29-emergency-waf-release.mdx @@ -21,39 +21,39 @@ This week, new critical vulnerabilities were disclosed in Next.js’s image opti Exploitation could expose sensitive files, leak user or backend data, and undermine application trust. Given Next.js’s wide use, immediate patching and cache hardening are strongly advised. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100613Next.js - Dangerous File Download - CVE:CVE-2025-55173N/ABlockThis is a new detection
Cloudflare Managed Ruleset - - 100616Next.js - Information Disclosure - CVE:CVE-2025-57752N/ABlockThis is a new detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100613 + Next.js - Dangerous File Download - CVE:CVE-2025-55173 + N/A + Block + This is a new detection + + + Cloudflare Managed Ruleset + + + + 100616 + Next.js - Information Disclosure - CVE:CVE-2025-57752 + N/A + Block + This is a new detection + + + diff --git a/src/content/changelog/waf/2025-09-01-waf-release.mdx b/src/content/changelog/waf/2025-09-01-waf-release.mdx index 5470b675623f1e5..88aa80a7543ddf4 100644 --- a/src/content/changelog/waf/2025-09-01-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-01-waf-release.mdx @@ -10,50 +10,48 @@ import { RuleID } from "~/components"; This week, a critical vulnerability was disclosed in Fortinet FortiWeb (versions 7.6.3 and below, versions 7.4.7 and below, versions 7.2.10 and below, and versions 7.0.10 and below), linked to improper parameter handling that could allow unauthorized access. - **Key Findings** -* Fortinet FortiWeb (CVE-2025-52970): A vulnerability may allow an unauthenticated remote attacker with access to non-public information to log in as any existing user on the device via a specially crafted request. +- Fortinet FortiWeb (CVE-2025-52970): A vulnerability may allow an unauthenticated remote attacker with access to non-public information to log in as any existing user on the device via a specially crafted request. **Impact** -Exploitation could allow an unauthenticated attacker to impersonate any existing user on the device, potentially enabling them to modify system settings or exfiltrate sensitive information, posing a serious security risk. Upgrading to the latest vendor-released version is strongly recommended. - +Exploitation could allow an unauthenticated attacker to impersonate any existing user on the device, potentially enabling them to modify system settings or exfiltrate sensitive information, posing a serious security risk. Upgrading to the latest vendor-released version is strongly recommended. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100586Fortinet FortiWeb - Auth Bypass - CVE:CVE-2025-52970LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100136CXSS - JavaScript - Headers and BodyN/AN/ARule metadata description refined. Detection unchanged.
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100586 + Fortinet FortiWeb - Auth Bypass - CVE:CVE-2025-52970 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100136C + XSS - JavaScript - Headers and Body + N/A + N/A + Rule metadata description refined. Detection unchanged. + + + diff --git a/src/content/changelog/waf/2025-09-04-emergency-waf-release.mdx b/src/content/changelog/waf/2025-09-04-emergency-waf-release.mdx index 385a50fe802115e..5855b853f30db8a 100644 --- a/src/content/changelog/waf/2025-09-04-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-04-emergency-waf-release.mdx @@ -12,6 +12,7 @@ This week, new critical vulnerabilities were disclosed in Sitecore’s Sitecore These flaws are caused by unsafe data deserialization and code reflection, leaving affected systems at high risk of exploitation. **Key Findings** + - CVE-2025-53690: Remote Code Execution through Insecure Deserialization - CVE-2025-53691: Remote Code Execution through Insecure Deserialization - CVE-2025-53693: HTML Cache Poisoning through Unsafe Reflections @@ -21,50 +22,50 @@ These flaws are caused by unsafe data deserialization and code reflection, leavi Exploitation could allow attackers to execute arbitrary code remotely on the affected system and conduct cache poisoning attacks, potentially leading to further compromise. Applying the latest vendor-released solution without delay is strongly recommended. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100878Sitecore - Remote Code Execution - CVE:CVE-2025-53691N/ABlockThis is a new detection
Cloudflare Managed Ruleset - - 100631Sitecore - Cache Poisoning - CVE:CVE-2025-53693N/ABlockThis is a new detection
Cloudflare Managed Ruleset - - 100879Sitecore - Remote Code Execution - CVE:CVE-2025-53690N/ABlockThis is a new detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100878 + Sitecore - Remote Code Execution - CVE:CVE-2025-53691 + N/A + Block + This is a new detection + + + Cloudflare Managed Ruleset + + + + 100631 + Sitecore - Cache Poisoning - CVE:CVE-2025-53693 + N/A + Block + This is a new detection + + + Cloudflare Managed Ruleset + + + + 100879 + Sitecore - Remote Code Execution - CVE:CVE-2025-53690 + N/A + Block + This is a new detection + + + diff --git a/src/content/changelog/waf/2025-09-08-waf-release.mdx b/src/content/changelog/waf/2025-09-08-waf-release.mdx index 1784243e8d5d2af..ccc94cccb99a6c9 100644 --- a/src/content/changelog/waf/2025-09-08-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-08-waf-release.mdx @@ -6,21 +6,21 @@ date: 2025-09-08 import { RuleID } from "~/components"; -**This week's update** +**This week's update** This week’s focus highlights newly disclosed vulnerabilities in web frameworks, enterprise applications, and widely deployed CMS plugins. The vulnerabilities include SSRF, authentication bypass, arbitrary file upload, and remote code execution (RCE), exposing organizations to high-impact risks such as unauthorized access, system compromise, and potential data exposure. In addition, security rule enhancements have been deployed to cover general command injection and server-side injection attacks, further strengthening protections. **Key Findings** -* Next.js (CVE-2025-57822): Improper handling of redirects in custom middleware can lead to server-side request forgery (SSRF) when user-supplied headers are forwarded. Attackers could exploit this to access internal services or cloud metadata endpoints. The issue has been resolved in versions 14.2.32 and 15.4.7. Developers using custom middleware should upgrade and verify proper redirect handling in `next()` calls. +- Next.js (CVE-2025-57822): Improper handling of redirects in custom middleware can lead to server-side request forgery (SSRF) when user-supplied headers are forwarded. Attackers could exploit this to access internal services or cloud metadata endpoints. The issue has been resolved in versions 14.2.32 and 15.4.7. Developers using custom middleware should upgrade and verify proper redirect handling in `next()` calls. -* ScriptCase (CVE-2025-47227, CVE-2025-47228): In the Production Environment extension in Netmake ScriptCase through 9.12.006 (23), two vulnerabilities allow attackers to reset admin accounts and execute system commands, potentially leading to full compromise of affected deployments. +- ScriptCase (CVE-2025-47227, CVE-2025-47228): In the Production Environment extension in Netmake ScriptCase through 9.12.006 (23), two vulnerabilities allow attackers to reset admin accounts and execute system commands, potentially leading to full compromise of affected deployments. -* Sar2HTML (CVE-2025-34030): In Sar2HTML version 3.2.2 and earlier, insufficient input sanitization of the plot parameter allows remote, unauthenticated attackers to execute arbitrary system commands. Exploitation could compromise the underlying server and its data. +- Sar2HTML (CVE-2025-34030): In Sar2HTML version 3.2.2 and earlier, insufficient input sanitization of the plot parameter allows remote, unauthenticated attackers to execute arbitrary system commands. Exploitation could compromise the underlying server and its data. -* Zhiyuan OA (CVE-2025-34040): An arbitrary file upload vulnerability exists in the Zhiyuan OA platform. Improper validation in the `wpsAssistServlet` interface allows unauthenticated attackers to upload crafted files via path traversal, which can be executed on the web server, leading to remote code execution. +- Zhiyuan OA (CVE-2025-34040): An arbitrary file upload vulnerability exists in the Zhiyuan OA platform. Improper validation in the `wpsAssistServlet` interface allows unauthenticated attackers to upload crafted files via path traversal, which can be executed on the web server, leading to remote code execution. -* WordPress:Plugin:InfiniteWP Client (CVE-2020-8772): A vulnerability in the InfiniteWP Client plugin allows attackers to perform restricted actions and gain administrative control of connected WordPress sites. +- WordPress:Plugin:InfiniteWP Client (CVE-2020-8772): A vulnerability in the InfiniteWP Client plugin allows attackers to perform restricted actions and gain administrative control of connected WordPress sites. **Impact** @@ -29,116 +29,128 @@ These vulnerabilities could allow attackers to gain unauthorized access, execute Administrators are strongly advised to apply vendor patches immediately, remove unsupported software, and review authentication and access controls to mitigate these risks. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100007DCommand Injection - Common Attack Commands ArgsLogBlockThis rule has been merged into the original rule "Command Injection - Common Attack Commands" (ID: ) for New WAF customers only.
Cloudflare Managed Ruleset - - 100617Next.js - SSRF - CVE:CVE-2025-57822LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100659_BETACommon Payloads for Server-Side Template Injection - BetaLogBlockThis rule is merged into the original rule "Common Payloads for Server-Side Template Injection" (ID: )
Cloudflare Managed Ruleset - - 100824BCrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 3LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100848ScriptCase - Auth Bypass - CVE:CVE-2025-47227LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100849ScriptCase - Command Injection - CVE:CVE-2025-47228LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100872WordPress:Plugin:InfiniteWP Client - Missing Authorization - CVE:CVE-2020-8772LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100873Sar2HTML - Command Injection - CVE:CVE-2025-34030LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100875Zhiyuan OA - Remote Code Execution - CVE:CVE-2025-34040LogBlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100007D + Command Injection - Common Attack Commands Args + Log + Block + + This rule has been merged into the original rule "Command Injection - + Common Attack Commands" (ID:{" "} + ) for New WAF customers + only. + + + + Cloudflare Managed Ruleset + + + + 100617 + Next.js - SSRF - CVE:CVE-2025-57822 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100659_BETA + Common Payloads for Server-Side Template Injection - Beta + Log + Block + + This rule is merged into the original rule "Common Payloads for + Server-Side Template Injection" (ID:{" "} + ) + + + + Cloudflare Managed Ruleset + + + + 100824B + CrushFTP - Remote Code Execution - CVE:CVE-2025-54309 - 3 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100848 + ScriptCase - Auth Bypass - CVE:CVE-2025-47227 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100849 + ScriptCase - Command Injection - CVE:CVE-2025-47228 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100872 + + WordPress:Plugin:InfiniteWP Client - Missing Authorization - + CVE:CVE-2020-8772 + + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100873 + Sar2HTML - Command Injection - CVE:CVE-2025-34030 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100875 + Zhiyuan OA - Remote Code Execution - CVE:CVE-2025-34040 + Log + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-09-15-waf-release.mdx b/src/content/changelog/waf/2025-09-15-waf-release.mdx index d6bb571fc9be330..56e8dbc6e1051d7 100644 --- a/src/content/changelog/waf/2025-09-15-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-15-waf-release.mdx @@ -12,11 +12,11 @@ This week's focus highlights newly disclosed vulnerabilities in DevOps tooling, **Key Findings** -* Argo CD (CVE-2025-55190): Exposure of sensitive information could allow attackers to access credential data stored in configurations, potentially leading to compromise of Kubernetes workloads and secrets. +- Argo CD (CVE-2025-55190): Exposure of sensitive information could allow attackers to access credential data stored in configurations, potentially leading to compromise of Kubernetes workloads and secrets. -* DataEase (CVE-2025-57773): Insufficient input validation enables JNDI injection and insecure deserialization, resulting in remote code execution (RCE). Successful exploitation grants attackers control over the application server. +- DataEase (CVE-2025-57773): Insufficient input validation enables JNDI injection and insecure deserialization, resulting in remote code execution (RCE). Successful exploitation grants attackers control over the application server. -* Sitecore (CVE-2025-53694): A sensitive information disclosure flaw allows unauthorized access to confidential information stored in Sitecore deployments, raising the risk of data breaches and privilege escalation. +- Sitecore (CVE-2025-53694): A sensitive information disclosure flaw allows unauthorized access to confidential information stored in Sitecore deployments, raising the risk of data breaches and privilege escalation. **Impact** @@ -25,50 +25,50 @@ These vulnerabilities expose organizations to serious risks, including credentia Administrators are strongly advised to apply vendor patches immediately, rotate exposed credentials, and review access controls to mitigate these risks. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100646Argo CD - Information Disclosure - CVE:CVE-2025-55190sLogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100874DataEase - JNDI injection - CVE:CVE-2025-57773LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100880Sitecore - Information Disclosure - CVE:CVE-2025-53694LogBlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100646 + Argo CD - Information Disclosure - CVE:CVE-2025-55190s + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100874 + DataEase - JNDI injection - CVE:CVE-2025-57773 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100880 + Sitecore - Information Disclosure - CVE:CVE-2025-53694 + Log + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-09-22-waf-release.mdx b/src/content/changelog/waf/2025-09-22-waf-release.mdx index fd3fff204e42727..054a8348718a766 100644 --- a/src/content/changelog/waf/2025-09-22-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-22-waf-release.mdx @@ -10,124 +10,125 @@ This week emphasizes two critical vendor-specific vulnerabilities: a full elevat **Key Findings** +- Azure (CVE-2025-54914): Vulnerability in Azure Networking allowing elevation of privileges. -* Azure (CVE-2025-54914): Vulnerability in Azure Networking allowing elevation of privileges. +- Skyvern (CVE-2025-49619): Skyvern ≤ 0.1.85 has a server-side template injection (SSTI) vulnerability in its Prompt field (workflow blocks) via Jinja2. Authenticated users with low privileges can get remote code execution (blind). -* Skyvern (CVE-2025-49619): Skyvern ≤ 0.1.85 has a server-side template injection (SSTI) vulnerability in its Prompt field (workflow blocks) via Jinja2. Authenticated users with low privileges can get remote code execution (blind). - -* Generic SQLi / SSRF improvements: Expanded rule coverage to detect obfuscated SQL injection patterns and SSRF across host, local, and cloud contexts. +- Generic SQLi / SSRF improvements: Expanded rule coverage to detect obfuscated SQL injection patterns and SSRF across host, local, and cloud contexts. **Impact** These vulnerabilities allow attackers to escalate privileges or execute code under conditions where previously they could not: -* Azure CVE-2025-54914 enables an attacker from the network with no credentials to gain high-level access within Azure Networking; could lead to full compromise of networking components. - -* Skyvern CVE-2025-49619 allows authenticated users with minimal privilege to exploit SSTI for remote code execution, undermining isolation of workflow components. +- Azure CVE-2025-54914 enables an attacker from the network with no credentials to gain high-level access within Azure Networking; could lead to full compromise of networking components. -* The improvements for SQLi and SSRF reduce risk from common injection and request-based attacks. +- Skyvern CVE-2025-49619 allows authenticated users with minimal privilege to exploit SSTI for remote code execution, undermining isolation of workflow components. +- The improvements for SQLi and SSRF reduce risk from common injection and request-based attacks. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100146SSRF - Host - 2LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100146BSSRF - Local - 2LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100146CSSRF - Cloud - 2LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100714Azure - Auth Bypass - CVE:CVE-2025-54914LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100758Skyvern - Remote Code Execution - CVE:CVE-2025-49619LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100773Next.js - SSRFLogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100774Adobe Commerce - Remote Code Execution - CVE:CVE-2025-54236LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100800_BETASQLi - Obfuscated Boolean - BetaLogBlockThis rule has been merged into the original rule (ID: )
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100146 + SSRF - Host - 2 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100146B + SSRF - Local - 2 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100146C + SSRF - Cloud - 2 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100714 + Azure - Auth Bypass - CVE:CVE-2025-54914 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100758 + Skyvern - Remote Code Execution - CVE:CVE-2025-49619 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100773 + Next.js - SSRF + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100774 + Adobe Commerce - Remote Code Execution - CVE:CVE-2025-54236 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100800_BETA + SQLi - Obfuscated Boolean - Beta + Log + Block + + This rule has been merged into the original rule (ID:{" "} + ) + + + + diff --git a/src/content/changelog/waf/2025-09-24-emergency-waf-release.mdx b/src/content/changelog/waf/2025-09-24-emergency-waf-release.mdx index 2a09bf015de4913..05259d94a3946ba 100644 --- a/src/content/changelog/waf/2025-09-24-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-24-emergency-waf-release.mdx @@ -10,35 +10,35 @@ This week highlights a critical vendor-specific vulnerability: a deserialization **Key Findings** -* GoAnywhere MFT (CVE-2025-10035): Deserialization vulnerability in the License Servlet that allows attackers with a forged license response signature to deserialize arbitrary objects, potentially resulting in command injection. +- GoAnywhere MFT (CVE-2025-10035): Deserialization vulnerability in the License Servlet that allows attackers with a forged license response signature to deserialize arbitrary objects, potentially resulting in command injection. **Impact** GoAnywhere MFT (CVE-2025-10035): Exploitation enables attackers to escalate privileges or achieve remote code execution via command injection. - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100787Fortra GoAnywhere - Auth Bypass - CVE:CVE-2025-10035N/ABlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100787 + Fortra GoAnywhere - Auth Bypass - CVE:CVE-2025-10035 + N/A + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-09-26-waf-release.mdx b/src/content/changelog/waf/2025-09-26-waf-release.mdx index b7e0125e8fa0a1a..aeb564538854fe1 100644 --- a/src/content/changelog/waf/2025-09-26-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-26-waf-release.mdx @@ -11,138 +11,138 @@ import { RuleID } from "~/components"; This update introduces 11 new detections in the Cloudflare Managed Ruleset (all currently set to Disabled mode to preserve remediation logic and allow quick activation if needed). The rules cover a broad spectrum of threats - SQL injection techniques, command and code injection, information disclosure of common files, URL anomalies, and cross-site scripting. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100859ASQLi - UNION - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100889Command Injection - Generic 9N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100890Information Disclosure - Common Files - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100891Anomaly:URL - Relative PathsN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100894XSS - Inline FunctionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100895XSS - DOMN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100896SQLi - MSSQL Length EnumerationN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100897Generic Rules - Code Injection - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100898SQLi - EvasionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100899SQLi - Probing 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100900SQLi - ProbingN/ADisabledThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + 100859ASQLi - UNION - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100889Command Injection - Generic 9N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100890Information Disclosure - Common Files - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100891Anomaly:URL - Relative PathsN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100894XSS - Inline FunctionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100895XSS - DOMN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100896SQLi - MSSQL Length EnumerationN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100897Generic Rules - Code Injection - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100898SQLi - EvasionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100899SQLi - Probing 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100900SQLi - ProbingN/ADisabledThis is a New Detection
diff --git a/src/content/changelog/waf/2025-09-28-emergency-waf-release.mdx b/src/content/changelog/waf/2025-09-28-emergency-waf-release.mdx index 93fe72102454c07..73bca3b78f919ec 100644 --- a/src/content/changelog/waf/2025-09-28-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-28-emergency-waf-release.mdx @@ -10,46 +10,52 @@ This week highlights multiple critical Cisco vulnerabilities (CVE-2025-20363, CV **Key Findings** -* Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems. +- Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems. **Impact** Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Exploitation enables attackers to escalate privileges or achieve remote code execution via command injection. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100788Cisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100788ACisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363N/ADisabledThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100788 + + Cisco Secure Firewall Adaptive Security Appliance - Remote Code + Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363 + + N/A + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100788A + + Cisco Secure Firewall Adaptive Security Appliance - Remote Code + Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363 + + N/A + Disabled + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-09-29-waf-release.mdx b/src/content/changelog/waf/2025-09-29-waf-release.mdx index b48fadd2caabecb..e4a7094b34030a4 100644 --- a/src/content/changelog/waf/2025-09-29-waf-release.mdx +++ b/src/content/changelog/waf/2025-09-29-waf-release.mdx @@ -10,82 +10,85 @@ This week highlights four important vendor- and component-specific issues: an au **Key Findings** -* SimpleHelp (CVE-2024-57727): Authentication bypass in SimpleHelp that can allow unauthorized access to management interfaces or sessions. +- SimpleHelp (CVE-2024-57727): Authentication bypass in SimpleHelp that can allow unauthorized access to management interfaces or sessions. -* Flowise Cloud (CVE-2025-58434): Information-disclosure vulnerability in Flowise Cloud that may expose sensitive configuration or user data to unauthenticated or low-privileged actors. +- Flowise Cloud (CVE-2025-58434): Information-disclosure vulnerability in Flowise Cloud that may expose sensitive configuration or user data to unauthenticated or low-privileged actors. -* WordPress:Plugin: Ditty (CVE-2025-8085): SSRF in the Ditty WordPress plugin enabling server-side requests that could reach internal services or cloud metadata endpoints. +- WordPress:Plugin: Ditty (CVE-2025-8085): SSRF in the Ditty WordPress plugin enabling server-side requests that could reach internal services or cloud metadata endpoints. -* Vite (CVE-2025-30208): Directory-traversal vulnerability in Vite allowing access to filesystem paths outside the intended web root. +- Vite (CVE-2025-30208): Directory-traversal vulnerability in Vite allowing access to filesystem paths outside the intended web root. **Impact** These vulnerabilities allow attackers to gain access, escalate privileges, or execute actions that were previously unavailable: -* SimpleHelp (CVE-2024-57727): An authentication bypass that can let unauthenticated attackers access management interfaces or hijack sessions — enabling lateral movement, credential theft, or privilege escalation within affected environments. +- SimpleHelp (CVE-2024-57727): An authentication bypass that can let unauthenticated attackers access management interfaces or hijack sessions — enabling lateral movement, credential theft, or privilege escalation within affected environments. -* Flowise Cloud (CVE-2025-58434): Information-disclosure flaw that can expose sensitive configuration, tokens, or user data; leaked secrets may be chained into account takeover or privileged access to backend services. +- Flowise Cloud (CVE-2025-58434): Information-disclosure flaw that can expose sensitive configuration, tokens, or user data; leaked secrets may be chained into account takeover or privileged access to backend services. -* WordPress:Plugin: Ditty (CVE-2025-8085): SSRF that enables server-side requests to internal services or cloud metadata endpoints, potentially allowing attackers to retrieve credentials or reach otherwise inaccessible infrastructure, leading to privilege escalation or cloud resource compromise. +- WordPress:Plugin: Ditty (CVE-2025-8085): SSRF that enables server-side requests to internal services or cloud metadata endpoints, potentially allowing attackers to retrieve credentials or reach otherwise inaccessible infrastructure, leading to privilege escalation or cloud resource compromise. -* Vite (CVE-2025-30208): Directory-traversal vulnerability that can expose filesystem contents outside the web root (configuration files, keys, source code), which attackers can use to escalate privileges or further compromise systems. +- Vite (CVE-2025-30208): Directory-traversal vulnerability that can expose filesystem contents outside the web root (configuration files, keys, source code), which attackers can use to escalate privileges or further compromise systems. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100717SimpleHelp - Auth Bypass - CVE:CVE-2024-57727LogBlockThis rule is merged to 100717 in legacy WAF and in new WAF
Cloudflare Managed Ruleset - - 100775Flowise Cloud - Information Disclosure - CVE:CVE-2025-58434LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100881WordPress:Plugin:Ditty - SSRF - CVE:CVE-2025-8085LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100887Vite - Directory Traversal - CVE:CVE-2025-30208LogBlockThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100717 + SimpleHelp - Auth Bypass - CVE:CVE-2024-57727 + Log + Block + + This rule is merged to 100717 in legacy WAF and{" "} + in new WAF + + + + Cloudflare Managed Ruleset + + + + 100775 + Flowise Cloud - Information Disclosure - CVE:CVE-2025-58434 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100881 + WordPress:Plugin:Ditty - SSRF - CVE:CVE-2025-8085 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100887 + Vite - Directory Traversal - CVE:CVE-2025-30208 + Log + Block + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-10-03-waf-release.mdx b/src/content/changelog/waf/2025-10-03-waf-release.mdx index c01420c6f44b5c8..f868e1edd121f98 100644 --- a/src/content/changelog/waf/2025-10-03-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-03-waf-release.mdx @@ -11,248 +11,248 @@ import { RuleID } from "~/components"; This update introduces 21 new detections in the Cloudflare Managed Ruleset (all currently set to Disabled mode to preserve remediation logic and allow quick activation if needed). The rules cover a broad spectrum of threats - SQL injection techniques, command and code injection, information disclosure of common files, URL anomalies, and cross-site scripting. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100902Generic Rules - Command Execution - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100908Generic Rules - Command Execution - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100910Generic Rules - Command Execution - 4N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100915Generic Rules - Command Execution - 5N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100899Generic Rules - Content-Type AbuseN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100914Generic Rules - Content-Type InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100911Generic Rules - Cookie Header InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100905Generic Rules - NoSQL InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100913Generic Rules - NoSQL Injection - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100907Generic Rules - Parameter PollutionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100906Generic Rules - PHP Object InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100904Generic Rules - Prototype PollutionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100897Generic Rules - Prototype Pollution 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100903Generic Rules - Reverse ShellN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100909Generic Rules - Reverse Shell - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100898Generic Rules - SSJI NoSQLN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100896Generic Rules - SSRFN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100895Generic Rules - Template InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100895AGeneric Rules - Template Injection - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100912Generic Rules - XXEN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100900Relative Paths - Anomaly HeadersN/ADisabledThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + 100902Generic Rules - Command Execution - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100908Generic Rules - Command Execution - 3N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100910Generic Rules - Command Execution - 4N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100915Generic Rules - Command Execution - 5N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100899Generic Rules - Content-Type AbuseN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100914Generic Rules - Content-Type InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100911Generic Rules - Cookie Header InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100905Generic Rules - NoSQL InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100913Generic Rules - NoSQL Injection - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100907Generic Rules - Parameter PollutionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100906Generic Rules - PHP Object InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100904Generic Rules - Prototype PollutionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100897Generic Rules - Prototype Pollution 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100903Generic Rules - Reverse ShellN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100909Generic Rules - Reverse Shell - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100898Generic Rules - SSJI NoSQLN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100896Generic Rules - SSRFN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100895Generic Rules - Template InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100895AGeneric Rules - Template Injection - 2N/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100912Generic Rules - XXEN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset + + 100900Relative Paths - Anomaly HeadersN/ADisabledThis is a New Detection
diff --git a/src/content/changelog/waf/2025-10-06-waf-release.mdx b/src/content/changelog/waf/2025-10-06-waf-release.mdx index d4f1efa95c7512e..89c8ea1bc8db134 100644 --- a/src/content/changelog/waf/2025-10-06-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-06-waf-release.mdx @@ -10,122 +10,124 @@ This week’s highlights prioritise an emergency Oracle E-Business Suite RCE rul **Key Findings** -* New emergency rule released for Oracle E-Business Suite (CVE-2025-61882) addressing an actively exploited remote code execution vulnerability in core business application modules. Immediate mitigation deployed to protect enterprise workloads. +- New emergency rule released for Oracle E-Business Suite (CVE-2025-61882) addressing an actively exploited remote code execution vulnerability in core business application modules. Immediate mitigation deployed to protect enterprise workloads. -* Chaos Mesh (CVE-2025-59358,CVE-2025-59359,CVE-2025-59360,CVE-2025-59361): A GraphQL debug endpoint on the Chaos Controller Manager is exposed without authentication; several controller mutations (`cleanTcs`, `killProcesses`, `cleanIptables`) are vulnerable to OS command injection. +- Chaos Mesh (CVE-2025-59358,CVE-2025-59359,CVE-2025-59360,CVE-2025-59361): A GraphQL debug endpoint on the Chaos Controller Manager is exposed without authentication; several controller mutations (`cleanTcs`, `killProcesses`, `cleanIptables`) are vulnerable to OS command injection. -* Form-Data (CVE-2025-7783): Attackers who can observe `Math.random()` outputs and control request fields in form-data may exploit this flaw to perform HTTP parameter pollution, leading to request tampering or data manipulation. +- Form-Data (CVE-2025-7783): Attackers who can observe `Math.random()` outputs and control request fields in form-data may exploit this flaw to perform HTTP parameter pollution, leading to request tampering or data manipulation. -* Two new generic SQLi detections added to enhance baseline coverage against inline-comment obfuscation and information disclosure attempts. +- Two new generic SQLi detections added to enhance baseline coverage against inline-comment obfuscation and information disclosure attempts. **Impact** -* CVE-2025-61882 — Oracle E-Business Suite remote code execution (emergency detection): attacker-controlled input can yield full system compromise, data exfiltration, and operational outage; immediate blocking enforced. +- CVE-2025-61882 — Oracle E-Business Suite remote code execution (emergency detection): attacker-controlled input can yield full system compromise, data exfiltration, and operational outage; immediate blocking enforced. -* CVE-2025-59358 / CVE-2025-59359 / CVE-2025-59360 / CVE-2025-59361 — Unauthenticated command-injection in Chaos Mesh controllers allowing remote code execution, cluster compromise, and service disruption (high availability risk). +- CVE-2025-59358 / CVE-2025-59359 / CVE-2025-59360 / CVE-2025-59361 — Unauthenticated command-injection in Chaos Mesh controllers allowing remote code execution, cluster compromise, and service disruption (high availability risk). -* CVE-2025-7783 — Predictable multipart boundaries in form-data enabling HTTP Parameter Pollution; results include request tampering, parameter overwrite, and downstream data integrity loss. +- CVE-2025-7783 — Predictable multipart boundaries in form-data enabling HTTP Parameter Pollution; results include request tampering, parameter overwrite, and downstream data integrity loss. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100882Chaos Mesh - Missing Authentication - CVE:CVE-2025-59358LogDisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100883Chaos Mesh - Command Injection - CVE:CVE-2025-59359LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100884Chaos Mesh - Command Injection - CVE:CVE-2025-59361LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100886Form-Data - Parameter Pollution - CVE:CVE-2025-7783LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100888Chaos Mesh - Command Injection - CVE:CVE-2025-59360LogBlockThis is a New Detection
Cloudflare Managed Ruleset - - 100916Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882N/ABlockThis is a New Detection
Cloudflare Managed Ruleset - - 100917Generic Rules - SQLi - Inline Comment InjectionN/ADisabledThis is a New Detection
Cloudflare Managed Ruleset - - 100918Generic Rules - SQLi - Information DisclosureN/ADisabledThis is a New Detection
\ No newline at end of file + + + Ruleset + Rule ID + Legacy Rule ID + Description + Previous Action + New Action + Comments + + + + + Cloudflare Managed Ruleset + + + + 100882 + Chaos Mesh - Missing Authentication - CVE:CVE-2025-59358 + Log + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100883 + Chaos Mesh - Command Injection - CVE:CVE-2025-59359 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100884 + Chaos Mesh - Command Injection - CVE:CVE-2025-59361 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100886 + Form-Data - Parameter Pollution - CVE:CVE-2025-7783 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100888 + Chaos Mesh - Command Injection - CVE:CVE-2025-59360 + Log + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100916 + + Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882 + + N/A + Block + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100917 + Generic Rules - SQLi - Inline Comment Injection + N/A + Disabled + This is a New Detection + + + Cloudflare Managed Ruleset + + + + 100918 + Generic Rules - SQLi - Information Disclosure + N/A + Disabled + This is a New Detection + + + diff --git a/src/content/changelog/waf/2025-10-07-emergency-waf-release.mdx b/src/content/changelog/waf/2025-10-07-emergency-waf-release.mdx index fa9d65c7613c3e3..724fe2ad9d9bcae 100644 --- a/src/content/changelog/waf/2025-10-07-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-07-emergency-waf-release.mdx @@ -7,9 +7,9 @@ date: 2025-10-07 import { RuleID } from "~/components"; This week highlights multiple critical Cisco vulnerabilities (CVE-2025-20363, CVE-2025-20333, CVE-2025-20362). This flaw stems from improper input validation in HTTP(S) requests. An authenticated VPN user could send crafted requests to execute code as root, potentially compromising the device. -The initial two rules were made available on September 28, with a third rule added today, October 7, for more robust protection. +The initial two rules were made available on September 28, with a third rule added today, October 7, for more robust protection. -* Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems. +- Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Multiple vulnerabilities that could allow attackers to exploit unsafe deserialization and input validation flaws. Successful exploitation may result in arbitrary code execution, privilege escalation, or command injection on affected systems. **Impact** @@ -17,28 +17,31 @@ Cisco (CVE-2025-20333, CVE-2025-20362, CVE-2025-20363): Exploitation enables att Administrators are strongly advised to apply vendor updates immediately. - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - 100788BCisco Secure Firewall Adaptive Security Appliance - Remote Code Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363N/ABlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + 100788B + Cisco Secure Firewall Adaptive Security Appliance - Remote Code + Execution - CVE:CVE-2025-20333, CVE:CVE-2025-20362, CVE:CVE-2025-20363 + N/ABlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-10-17-emergency-waf-release.mdx b/src/content/changelog/waf/2025-10-17-emergency-waf-release.mdx index 3001df61385c0d0..fc5674015901639 100644 --- a/src/content/changelog/waf/2025-10-17-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-17-emergency-waf-release.mdx @@ -47,7 +47,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Anomaly:Header - name - CR, LF N/A @@ -56,7 +58,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - Reverse Shell - Body N/A @@ -65,7 +69,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - Reverse Shell - Header N/A @@ -74,7 +80,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - Reverse Shell - URI N/A @@ -83,7 +91,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - XXE - Body N/A @@ -92,7 +102,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - SQLi - Common Patterns - Header URI N/A @@ -101,7 +113,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - SQLi - Sleep Function - Header URI N/A @@ -110,7 +124,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - SQLi - String Function - Header URI N/A @@ -119,7 +135,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Generic Rules - SQLi - WaitFor Function - Header URI N/A @@ -128,7 +146,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSRF - Local - Beta N/A @@ -137,7 +157,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSRF - Local - 2 - Beta N/A @@ -146,7 +168,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSRF - Cloud - Beta N/A @@ -155,7 +179,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSRF - Cloud - 2 - Beta N/A @@ -164,7 +190,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSTI - Arithmetic Probe - URI N/A @@ -173,7 +201,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSTI - Arithmetic Probe - Header N/A @@ -182,7 +212,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A SSTI - Arithmetic Probe - Body N/A @@ -191,7 +223,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A PHP Wrapper Injection N/A @@ -200,7 +234,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A PHP Wrapper Injection N/A @@ -209,7 +245,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A HTTP parameter pollution N/A @@ -218,7 +256,9 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri Cloudflare Managed Ruleset - + + + N/A Prototype Pollution - Common Payloads - Beta N/A @@ -226,4 +266,4 @@ Prototype Pollution and HTTP parameter pollution rules address emerging JavaScri This is a New Detection - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-10-20-waf-release.mdx b/src/content/changelog/waf/2025-10-20-waf-release.mdx index b566732da2e8dad..3768829710eb921 100644 --- a/src/content/changelog/waf/2025-10-20-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-20-waf-release.mdx @@ -10,7 +10,7 @@ This week’s update introduces an enhanced rule that expands detection coverage **Key Findings** -New WAF rule deployed for Oracle E-Business Suite (CVE-2025-61882) to block unauthenticated attacker's network access via HTTP to compromise Oracle Concurrent Processing. If successfully exploited, this vulnerability may result in remote code execution. +New WAF rule deployed for Oracle E-Business Suite (CVE-2025-61882) to block unauthenticated attacker's network access via HTTP to compromise Oracle Concurrent Processing. If successfully exploited, this vulnerability may result in remote code execution. **Impact** @@ -38,15 +38,21 @@ New WAF rule deployed for Oracle E-Business Suite (CVE-2025-61882) to block una Remote Code Execution - Common Bash Bypass - Beta Log Block - This rule is merged into the original rule "Remote Code Execution - Common Bash Bypass" (ID: ) - + + This rule is merged into the original rule "Remote Code Execution - + Common Bash Bypass" (ID:{" "} + ) + + Cloudflare Managed Ruleset 100916A - Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882 - 2 + + Oracle E-Business Suite - Remote Code Execution - CVE:CVE-2025-61882 - 2 + Log Block This is a New Detection @@ -63,4 +69,4 @@ New WAF rule deployed for Oracle E-Business Suite (CVE-2025-61882) to block una This is a New Detection - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-10-23-emergency-waf-release.mdx b/src/content/changelog/waf/2025-10-23-emergency-waf-release.mdx index 968037a9f6bf67c..eff22509bb0f005 100644 --- a/src/content/changelog/waf/2025-10-23-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-23-emergency-waf-release.mdx @@ -17,28 +17,28 @@ This vulnerability allows unauthenticated attackers to take over customer accoun Adobe Commerce (CVE-2025-54236): Exploitation may allow attackers to hijack sessions, execute arbitrary commands, steal data, and disrupt storefronts, resulting in confidentiality and integrity risks for merchants. Administrators are strongly encouraged to apply vendor patches without delay. - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - N/AAdobe Commerce - Remote Code Execution - CVE:CVE-2025-54236N/ABlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + N/AAdobe Commerce - Remote Code Execution - CVE:CVE-2025-54236N/ABlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-10-24-emergency-waf-release.mdx b/src/content/changelog/waf/2025-10-24-emergency-waf-release.mdx index 4deb26e943c3254..ffa6cd0f4a1e7e6 100644 --- a/src/content/changelog/waf/2025-10-24-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-24-emergency-waf-release.mdx @@ -17,28 +17,28 @@ The vulnerability allows unauthenticated attackers to potentially achieve remote Successful exploitation of CVE-2025-59287 could enable attackers to hijack sessions, execute arbitrary commands, exfiltrate sensitive data, and disrupt storefront operations. These actions pose significant confidentiality and integrity risks to affected environments. Administrators should apply vendor patches immediately to mitigate exposure. - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - N/AWindows Server - Deserialization - CVE:CVE-2025-59287N/ABlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + N/AWindows Server - Deserialization - CVE:CVE-2025-59287N/ABlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-10-30-emergency-waf-release.mdx b/src/content/changelog/waf/2025-10-30-emergency-waf-release.mdx index 48b39ac6c7cfe22..a3359450691e99c 100644 --- a/src/content/changelog/waf/2025-10-30-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-10-30-emergency-waf-release.mdx @@ -17,28 +17,28 @@ The flaw is easily exploitable and allows an unauthenticated attacker with netwo Successful exploitation of CVE-2025-61884 may result in unauthorized access to critical business data or full exposure of information accessible through Oracle Configurator. Administrators are strongly advised to apply vendor's patches and recommended mitigations to reduce this exposure. - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - N/AOracle E-Business Suite - SSRF - CVE:CVE-2025-61884N/ABlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + N/AOracle E-Business Suite - SSRF - CVE:CVE-2025-61884N/ABlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-11-05-emergency-waf-release.mdx b/src/content/changelog/waf/2025-11-05-emergency-waf-release.mdx index c9584fd1902891f..65a2c278f87407e 100644 --- a/src/content/changelog/waf/2025-11-05-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-11-05-emergency-waf-release.mdx @@ -14,31 +14,31 @@ The Metro Development Server exposes an HTTP endpoint that is vulnerable to OS c **Impact** -Successful exploitation of CVE-2025-11953 may result in remote command execution on developer workstations or CI/build agents, leading to credential and secret exposure, source tampering, and potential lateral movement into internal networks. Administrators and developers are strongly advised to apply the vendor's patches and restrict Metro’s network exposure to reduce this risk. +Successful exploitation of CVE-2025-11953 may result in remote command execution on developer workstations or CI/build agents, leading to credential and secret exposure, source tampering, and potential lateral movement into internal networks. Administrators and developers are strongly advised to apply the vendor's patches and restrict Metro’s network exposure to reduce this risk. - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset - - N/AReact Native Metro - Command Injection - CVE:CVE-2025-11953N/ABlockThis is a New Detection
RulesetRule IDLegacy Rule IDDescriptionPrevious ActionNew ActionComments
Cloudflare Managed Ruleset + + N/AReact Native Metro - Command Injection - CVE:CVE-2025-11953N/ABlockThis is a New Detection
diff --git a/src/content/changelog/waf/2025-11-10-waf-release.mdx b/src/content/changelog/waf/2025-11-10-waf-release.mdx index c442f86894866c0..6f0e60f36daadeb 100644 --- a/src/content/changelog/waf/2025-11-10-waf-release.mdx +++ b/src/content/changelog/waf/2025-11-10-waf-release.mdx @@ -39,7 +39,7 @@ Exploitation may allow attackers to change internal logic or cause unexpected be Log Disabled This is a new detection - + Cloudflare Managed Ruleset @@ -61,6 +61,6 @@ Exploitation may allow attackers to change internal logic or cause unexpected be Log Disabled This is a new detection - + diff --git a/src/content/changelog/waf/2025-11-17-waf-release.mdx b/src/content/changelog/waf/2025-11-17-waf-release.mdx index 38a33ac01a0985b..f34a07d31022e1b 100644 --- a/src/content/changelog/waf/2025-11-17-waf-release.mdx +++ b/src/content/changelog/waf/2025-11-17-waf-release.mdx @@ -63,4 +63,4 @@ This vulnerability allows unauthenticated attackers to gain privileged access to Rule metadata description refined. Detection unchanged. - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-11-21-emergency-waf-release.mdx b/src/content/changelog/waf/2025-11-21-emergency-waf-release.mdx index 668d5120066318a..92ca15cf695904c 100644 --- a/src/content/changelog/waf/2025-11-21-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-11-21-emergency-waf-release.mdx @@ -41,4 +41,4 @@ Oracle Identity Manager (CVE-2025-61757): Exploitation could allow an unauthenti This is a new detection. - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-11-24-waf-release.mdx b/src/content/changelog/waf/2025-11-24-waf-release.mdx index 40fe7147867f34d..b7949e4310a105d 100644 --- a/src/content/changelog/waf/2025-11-24-waf-release.mdx +++ b/src/content/changelog/waf/2025-11-24-waf-release.mdx @@ -35,7 +35,9 @@ This vulnerability enables an unauthenticated attacker to bypass access controls N/A - FortiWeb - Authentication Bypass via CGIINFO Header - CVE:CVE-2025-64446 + + FortiWeb - Authentication Bypass via CGIINFO Header - CVE:CVE-2025-64446 + Log Block This is a new detection @@ -49,7 +51,11 @@ This vulnerability enables an unauthenticated attacker to bypass access controls PHP Wrapper Injection - Body - Beta Log Disabled - This rule has been merged into the original rule "PHP Wrapper Injection - Body" (ID:) + + This rule has been merged into the original rule "PHP Wrapper Injection + - Body" (ID: + ) + Cloudflare Managed Ruleset @@ -60,7 +66,11 @@ This vulnerability enables an unauthenticated attacker to bypass access controls PHP Wrapper Injection - URI - Beta Log Disabled - This rule has been merged into the original rule "PHP Wrapper Injection - URI" (ID:) + + This rule has been merged into the original rule "PHP Wrapper Injection + - URI" (ID: + ) + diff --git a/src/content/changelog/waf/2025-12-01-waf-release.mdx b/src/content/changelog/waf/2025-12-01-waf-release.mdx index 5c9725909eb48b5..bb91b0b857039b3 100644 --- a/src/content/changelog/waf/2025-12-01-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-01-waf-release.mdx @@ -39,7 +39,7 @@ If exploited, the vulnerability enables full remote command execution on the und Log Block This is a new detection - + Cloudflare Managed Ruleset @@ -49,7 +49,10 @@ If exploited, the vulnerability enables full remote command execution on the und XSS - JS Context Escape - Beta Log Block - This rule is merged into the original rule "XSS - JS Context Escape" (ID: ) - + + This rule is merged into the original rule "XSS - JS Context Escape" + (ID: ) + + diff --git a/src/content/changelog/waf/2025-12-02-emergency-waf-release.mdx b/src/content/changelog/waf/2025-12-02-emergency-waf-release.mdx index 1cdc563f6d10a45..ff06da00aab5c68 100644 --- a/src/content/changelog/waf/2025-12-02-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-02-emergency-waf-release.mdx @@ -52,4 +52,4 @@ New WAF rule deployed for RCE Generic Framework to block malicious POST requests This is a new detection. - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-12-03-emergency-waf-release.mdx b/src/content/changelog/waf/2025-12-03-emergency-waf-release.mdx index 317f93bc2050154..e22e9674a2f7a29 100644 --- a/src/content/changelog/waf/2025-12-03-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-03-emergency-waf-release.mdx @@ -15,6 +15,7 @@ Rule description updated to reference React – RCE – CVE-2025-55182 while ret **Impact** Improved classification and traceability with no change to coverage against remote code execution attempts. + @@ -51,4 +52,4 @@ Improved classification and traceability with no change to coverage against remo -
Rule metadata description changed. Detection unchanged.
\ No newline at end of file + diff --git a/src/content/changelog/waf/2025-12-10-emergency-waf-release.mdx b/src/content/changelog/waf/2025-12-10-emergency-waf-release.mdx index 3c6833f7416480d..25b82374c113154 100644 --- a/src/content/changelog/waf/2025-12-10-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-10-emergency-waf-release.mdx @@ -85,4 +85,4 @@ These updates strengthen protection against React RCE exploitation attempts and This is a new detection. - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-12-11-emergency-waf-release.mdx b/src/content/changelog/waf/2025-12-11-emergency-waf-release.mdx index 18c75f46429d216..35ce57a85250982 100644 --- a/src/content/changelog/waf/2025-12-11-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-11-emergency-waf-release.mdx @@ -38,7 +38,9 @@ These updates strengthen protection for server-function abuse techniques (CVE-20 React - Leaking Server Functions - CVE:CVE-2025-55183 N/A Block - This was labeled as Generic - Server Function Source Code Exposure. + + This was labeled as Generic - Server Function Source Code Exposure. + Cloudflare Free Ruleset @@ -49,7 +51,9 @@ These updates strengthen protection for server-function abuse techniques (CVE-20 React - Leaking Server Functions - CVE:CVE-2025-55183 N/A Block - This was labeled as Generic - Server Function Source Code Exposure. + + This was labeled as Generic - Server Function Source Code Exposure. + Cloudflare Managed Ruleset @@ -60,7 +64,9 @@ These updates strengthen protection for server-function abuse techniques (CVE-20 React - DoS - CVE:CVE-2025-55184 N/A Disabled - This was labeled as Generic – Server Function Resource Exhaustion. + + This was labeled as Generic – Server Function Resource Exhaustion. + - \ No newline at end of file + diff --git a/src/content/changelog/waf/2025-12-18-waf-release.mdx b/src/content/changelog/waf/2025-12-18-waf-release.mdx index 161f57af1c49b1b..1e89c7251d32210 100644 --- a/src/content/changelog/waf/2025-12-18-waf-release.mdx +++ b/src/content/changelog/waf/2025-12-18-waf-release.mdx @@ -12,10 +12,6 @@ This week's release focuses on improvements to existing detections to enhance co - Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage. - - - - @@ -28,105 +24,124 @@ This week's release focuses on improvements to existing detections to enhance co - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comments
Cloudflare Managed Ruleset - - N/AAtlassian Confluence - Code Injection - CVE:CVE-2021-26084 - BetaLogBlockThis rule is merged into the original rule "Atlassian Confluence - Code Injection - CVE:CVE-2021-26084" (ID: )
Cloudflare Managed Ruleset - - N/APostgreSQL - SQLi - Copy - BetaLogBlockThis rule is merged into the original rule "PostgreSQL - SQLi - COPY" (ID: )
Cloudflare Managed Ruleset - - N/AGeneric Rules - Command Execution - BodyLogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/AGeneric Rules - Command Execution - HeaderLogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/AGeneric Rules - Command Execution - URILogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/ASQLi - Tautology - URI - BetaLogBlockThis rule is merged into the original rule "SQLi - Tautology - URI" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - WaitFor Function - BetaLogBlockThis rule is merged into the original rule "SQLi - WaitFor Function" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - AND/OR Digit Operator Digit 2 - BetaLogBlockThis rule is merged into the original rule "SQLi - AND/OR Digit Operator Digit" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - Equation 2 - BetaLogBlockThis rule is merged into the original rule "SQLi - Equation" (ID: )
Cloudflare Managed Ruleset + + N/AAtlassian Confluence - Code Injection - CVE:CVE-2021-26084 - BetaLogBlock + This rule is merged into the original rule "Atlassian Confluence - Code + Injection - CVE:CVE-2021-26084" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + N/APostgreSQL - SQLi - Copy - BetaLogBlock + This rule is merged into the original rule "PostgreSQL - SQLi - COPY" + (ID: ) +
Cloudflare Managed Ruleset + + N/AGeneric Rules - Command Execution - BodyLogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/AGeneric Rules - Command Execution - HeaderLogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/AGeneric Rules - Command Execution - URILogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/ASQLi - Tautology - URI - BetaLogBlock + This rule is merged into the original rule "SQLi - Tautology - URI" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + N/ASQLi - WaitFor Function - BetaLogBlock + This rule is merged into the original rule "SQLi - WaitFor Function" + (ID: ) +
Cloudflare Managed Ruleset + + N/ASQLi - AND/OR Digit Operator Digit 2 - BetaLogBlock + This rule is merged into the original rule "SQLi - AND/OR Digit Operator + Digit" (ID: ) +
Cloudflare Managed Ruleset + + N/ASQLi - Equation 2 - BetaLogBlock + This rule is merged into the original rule "SQLi - Equation" (ID:{" "} + ) +
diff --git a/src/content/changelog/waf/2026-01-12-waf-release.mdx b/src/content/changelog/waf/2026-01-12-waf-release.mdx index f98c0a337960ed6..4c5e3ce6f9668d0 100644 --- a/src/content/changelog/waf/2026-01-12-waf-release.mdx +++ b/src/content/changelog/waf/2026-01-12-waf-release.mdx @@ -6,13 +6,12 @@ date: 2026-01-12 import { RuleID } from "~/components"; -This week's release focuses on improvements to existing detections to enhance coverage. +This week's release focuses on improvements to existing detections to enhance coverage. **Key Findings** - Existing rule enhancements have been deployed to improve detection resilience against SQL Injection. - @@ -25,28 +24,34 @@ This week's release focuses on improvements to existing detections to enhance co - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
Comments
Cloudflare Managed Ruleset - - N/ASQLi - AND/OR MAKE_SET/ELT - BetaLogBlockThis rule is merged into the original rule "SQLi - AND/OR MAKE_SET/ELT" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - Benchmark Function - BetaLogBlockThis rule is merged into the original rule "SQLi - Benchmark Function" (ID: )
Cloudflare Managed Ruleset + + N/ASQLi - AND/OR MAKE_SET/ELT - BetaLogBlock + This rule is merged into the original rule "SQLi - AND/OR MAKE_SET/ELT" + (ID: ) +
Cloudflare Managed Ruleset + + N/ASQLi - Benchmark Function - BetaLogBlock + This rule is merged into the original rule "SQLi - Benchmark Function" + (ID: ) +
diff --git a/src/content/changelog/waf/2026-01-15-waf-release.mdx b/src/content/changelog/waf/2026-01-15-waf-release.mdx index 63c93358717c0b5..884dea72d886e11 100644 --- a/src/content/changelog/waf/2026-01-15-waf-release.mdx +++ b/src/content/changelog/waf/2026-01-15-waf-release.mdx @@ -6,13 +6,12 @@ date: 2026-01-15 import { RuleID } from "~/components"; -This week's release focuses on improvements to existing detections to enhance coverage. +This week's release focuses on improvements to existing detections to enhance coverage. **Key Findings** - Existing rule enhancements have been deployed to improve detection resilience against SQL Injection. - @@ -25,28 +24,34 @@ This week's release focuses on improvements to existing detections to enhance co - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
Comments
Cloudflare Managed Ruleset - - N/ASQLi - String Function - BetaLogBlockThis rule is merged into the original rule "SQLi - String Function" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - Sub Query - BetaLogBlockThis rule is merged into the original rule "SQLi - Sub Query" (ID: )
Cloudflare Managed Ruleset + + N/ASQLi - String Function - BetaLogBlock + This rule is merged into the original rule "SQLi - String Function" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + N/ASQLi - Sub Query - BetaLogBlock + This rule is merged into the original rule "SQLi - Sub Query" (ID:{" "} + ) +
diff --git a/src/content/changelog/waf/2026-01-20-waf-release.mdx b/src/content/changelog/waf/2026-01-20-waf-release.mdx index 0da1e57c513f3ef..1b7ca4114286eb1 100644 --- a/src/content/changelog/waf/2026-01-20-waf-release.mdx +++ b/src/content/changelog/waf/2026-01-20-waf-release.mdx @@ -6,13 +6,12 @@ date: 2026-01-20 import { RuleID } from "~/components"; -This week's release focuses on improvements to existing detections to enhance coverage. +This week's release focuses on improvements to existing detections to enhance coverage. **Key Findings** - Existing rule enhancements have been deployed to improve detection resilience against SQL injection. - @@ -25,28 +24,34 @@ This week's release focuses on improvements to existing detections to enhance co - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
Comments
Cloudflare Managed Ruleset - - N/ASQLi - Comment - BetaLogBlockThis rule is merged into the original rule "SQLi - Comment" (ID: )
Cloudflare Managed Ruleset - - N/ASQLi - Comparison - BetaLogBlockThis rule is merged into the original rule "SQLi - Comparison" (ID: )
Cloudflare Managed Ruleset + + N/ASQLi - Comment - BetaLogBlock + This rule is merged into the original rule "SQLi - Comment" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + N/ASQLi - Comparison - BetaLogBlock + This rule is merged into the original rule "SQLi - Comparison" (ID:{" "} + ) +
diff --git a/src/content/changelog/waf/2026-01-26-waf-release.mdx b/src/content/changelog/waf/2026-01-26-waf-release.mdx index cfb420d9e2809ad..030699a9d584923 100644 --- a/src/content/changelog/waf/2026-01-26-waf-release.mdx +++ b/src/content/changelog/waf/2026-01-26-waf-release.mdx @@ -25,39 +25,39 @@ This week’s release introduces new detections for denial-of-service attempts t Comments - - - Cloudflare Managed Ruleset - - - - N/A - React Server - DOS - CVE:CVE-2026-23864 - 1 - N/A - Block - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - React Server - DOS - CVE:CVE-2026-23864 - 2 - N/A - Block - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - React Server - DOS - CVE:CVE-2026-23864 - 3 - N/A - Block - This is a new detection. - - + + + Cloudflare Managed Ruleset + + + + N/A + React Server - DOS - CVE:CVE-2026-23864 - 1 + N/A + Block + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + React Server - DOS - CVE:CVE-2026-23864 - 2 + N/A + Block + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + React Server - DOS - CVE:CVE-2026-23864 - 3 + N/A + Block + This is a new detection. + + diff --git a/src/content/changelog/waf/2026-02-02-waf-release.mdx b/src/content/changelog/waf/2026-02-02-waf-release.mdx index 00ed3826f072eeb..cb989e8324478d9 100644 --- a/src/content/changelog/waf/2026-02-02-waf-release.mdx +++ b/src/content/changelog/waf/2026-02-02-waf-release.mdx @@ -25,39 +25,39 @@ This week’s release introduces new detections for CVE-2025-64459 and CVE-2025- Comments - - - Cloudflare Managed Ruleset - - - - N/A - XWiki - Remote Code Execution - CVE:CVE-2025-24893 2 - Log - Block - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - Django SQLI - CVE:CVE-2025-64459 - Log - Block - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - NoSQL, MongoDB - SQLi - Comparison - 2 - Block - Block - Rule metadata description refined. Detection unchanged. - - + + + Cloudflare Managed Ruleset + + + + N/A + XWiki - Remote Code Execution - CVE:CVE-2025-24893 2 + Log + Block + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + Django SQLI - CVE:CVE-2025-64459 + Log + Block + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + NoSQL, MongoDB - SQLi - Comparison - 2 + Block + Block + Rule metadata description refined. Detection unchanged. + + diff --git a/src/content/changelog/waf/2026-03-02-waf-release.mdx b/src/content/changelog/waf/2026-03-02-waf-release.mdx index 5e417a5421f9c40..34e9cc77d392db9 100644 --- a/src/content/changelog/waf/2026-03-02-waf-release.mdx +++ b/src/content/changelog/waf/2026-03-02-waf-release.mdx @@ -8,7 +8,6 @@ import { RuleID } from "~/components"; This week's release introduces new detections for vulnerabilities in SmarterTools SmarterMail (CVE-2025-52691 and CVE-2026-23760), alongside improvements to an existing Command Injection (nslookup) detection to enhance coverage. - **Key Findings** - CVE-2025-52691: SmarterTools SmarterMail mail server is vulnerable to Arbitrary File Upload, allowing an unauthenticated attacker to upload files to any location on the mail server, potentially enabling remote code execution. @@ -62,8 +61,10 @@ Successful exploitation of these SmarterMail vulnerabilities could lead to full Command Injection - Nslookup - Beta Log Block - This rule is merged into the original rule "Command Injection - Nslookup" (ID: ) + + This rule is merged into the original rule "Command Injection - + Nslookup" (ID: ) + - diff --git a/src/content/changelog/waf/2026-03-12-emergency-waf-release.mdx b/src/content/changelog/waf/2026-03-12-emergency-waf-release.mdx index 37ee704eb668c95..82b11cdd62ca859 100644 --- a/src/content/changelog/waf/2026-03-12-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2026-03-12-emergency-waf-release.mdx @@ -36,11 +36,13 @@ Successful exploitation of Ivanti EPMM vulnerability allows unauthenticated remo N/A - Ivanti EPMM - Code Injection - CVE:CVE-2026-1281 CVE:CVE-2026-1340 + + Ivanti EPMM - Code Injection - CVE:CVE-2026-1281 CVE:CVE-2026-1340 + Log Block This is a new detection. - + Cloudflare Managed Ruleset diff --git a/src/content/changelog/waf/2026-03-23-waf-release.mdx b/src/content/changelog/waf/2026-03-23-waf-release.mdx index 4b55ee8e500a59b..ca8664ddf6e1b0f 100644 --- a/src/content/changelog/waf/2026-03-23-waf-release.mdx +++ b/src/content/changelog/waf/2026-03-23-waf-release.mdx @@ -12,10 +12,6 @@ This week's release focuses on new improvements to enhance coverage. - Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage. - - - - @@ -28,50 +24,58 @@ This week's release focuses on new improvements to enhance coverage. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Comments
Cloudflare Managed Ruleset - - N/ACommand Injection - Generic 9 - URI VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/ACommand Injection - Generic 9 - Header VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/ACommand Injection - Generic 9 - Body VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/APHP, vBulletin, jQuery File Upload - Code Injection, Dangerous File Upload - CVE:CVE-2018-9206, CVE:CVE-2019-17132 (beta)LogBlockThis rule has been merged into the original rule "PHP, vBulletin, jQuery File Upload - Code Injection, Dangerous File Upload - CVE:CVE-2018-9206, CVE:CVE-2019-17132" (ID: )
Cloudflare Managed Ruleset + + N/ACommand Injection - Generic 9 - URI VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/ACommand Injection - Generic 9 - Header VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/ACommand Injection - Generic 9 - Body VectorLogDisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/A + PHP, vBulletin, jQuery File Upload - Code Injection, Dangerous File + Upload - CVE:CVE-2018-9206, CVE:CVE-2019-17132 (beta) + LogBlock + This rule has been merged into the original rule "PHP, vBulletin, jQuery + File Upload - Code Injection, Dangerous File Upload - CVE:CVE-2018-9206, + CVE:CVE-2019-17132" (ID:{" "} + ) +
diff --git a/src/content/changelog/waf/2026-03-30-waf-release.mdx b/src/content/changelog/waf/2026-03-30-waf-release.mdx index 1bf0c23738bd886..7bb86d5b78461dc 100644 --- a/src/content/changelog/waf/2026-03-30-waf-release.mdx +++ b/src/content/changelog/waf/2026-03-30-waf-release.mdx @@ -30,61 +30,63 @@ Successful exploitation of the Fortinet and Magento vulnerabilities could allow Comments - - - Cloudflare Managed Ruleset - - - - N/A - Generic Rules - Parameter Pollution - Body - Log - Disabled - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - Generic Rules - Parameter Pollution - Header - Form - Log - Disabled - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - Generic Rules - Parameter Pollution - URI - Log - Disabled - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - Magento 2 - Unrestricted file upload - Log - Block - This is a new detection. - - - Cloudflare Managed Ruleset - - - - N/A - Fortinet FortiCloud SSO - Authentication Bypass - CVE:CVE-2025-59718 - Log - Block - This is a new detection. - - + + + Cloudflare Managed Ruleset + + + + N/A + Generic Rules - Parameter Pollution - Body + Log + Disabled + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + Generic Rules - Parameter Pollution - Header - Form + Log + Disabled + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + Generic Rules - Parameter Pollution - URI + Log + Disabled + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + Magento 2 - Unrestricted file upload + Log + Block + This is a new detection. + + + Cloudflare Managed Ruleset + + + + N/A + + Fortinet FortiCloud SSO - Authentication Bypass - CVE:CVE-2025-59718 + + Log + Block + This is a new detection. + + diff --git a/src/content/changelog/waf/2026-04-15-waf-release.mdx b/src/content/changelog/waf/2026-04-15-waf-release.mdx index 48b63b279a71a7e..8027bd3284ff60d 100644 --- a/src/content/changelog/waf/2026-04-15-waf-release.mdx +++ b/src/content/changelog/waf/2026-04-15-waf-release.mdx @@ -21,7 +21,7 @@ This week's release introduces a new detection for a critical Remote Code Execut Successful exploitation of these vulnerabilities could allow unauthenticated attackers to execute arbitrary code, gain administrative control over network management infrastructure, or trigger server-side resource exhaustion. Administrators are strongly encouraged to apply official vendor updates. - + @@ -31,73 +31,81 @@ Successful exploitation of these vulnerabilities could allow unauthenticated att - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + +
Ruleset Rule IDNew Action Comments
Cloudflare Managed Ruleset - - N/ACisco Secure FMC - RCE via upgradeReadinessCall - CVE:CVE-2026-20079LogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/AFortiClient EMS - Pre-Auth SQL Injection - CVE:CVE-2026-21643LogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/AMesop - Remote Code Execution - Base64 Payload - CVE:CVE-2026-33057LogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/AReact Server - DOS - CVE:CVE-2026-23864 - 1 - BetaLogBlockThis rule has been merged into the original rule "React Server - DOS - CVE:CVE-2026-23864 - 1" (ID: )
Cloudflare Managed Ruleset - - N/A
Cloudflare Managed Ruleset + + N/A + Cisco Secure FMC - RCE via upgradeReadinessCall - CVE:CVE-2026-20079 + LogBlockThis is a new detection.
Cloudflare Managed Ruleset + + N/AFortiClient EMS - Pre-Auth SQL Injection - CVE:CVE-2026-21643LogBlockThis is a new detection.
Cloudflare Managed Ruleset + + N/A + Mesop - Remote Code Execution - Base64 Payload - CVE:CVE-2026-33057 + LogBlockThis is a new detection.
Cloudflare Managed Ruleset + + N/AReact Server - DOS - CVE:CVE-2026-23864 - 1 - BetaLogBlock + This rule has been merged into the original rule "React Server - DOS - + CVE:CVE-2026-23864 - 1" (ID:{" "} + ) +
Cloudflare Managed Ruleset + + N/A XSS, HTML Injection - Link Tag - URI (beta)N/ADisabledThis is a new detection.
Cloudflare Managed Ruleset - - N/AXSS, HTML Injection - Embed Tag - URI (beta) N/ADisabledThis is a new detection.
DisabledThis is a new detection.
Cloudflare Managed Ruleset + + N/AXSS, HTML Injection - Embed Tag - URI (beta)N/ADisabledThis is a new detection.
diff --git a/src/content/changelog/waf/2026-04-21-waf-release.mdx b/src/content/changelog/waf/2026-04-21-waf-release.mdx index d31b75ad221a27b..5a538a69976bfd7 100644 --- a/src/content/changelog/waf/2026-04-21-waf-release.mdx +++ b/src/content/changelog/waf/2026-04-21-waf-release.mdx @@ -23,7 +23,7 @@ Successful exploitation of these vulnerabilities could allow unauthenticated att We are continuously refining our managed rules to provide more resilient protection and deeper insights into attack patterns. To ensure an optimal security posture, we recommend consistently monitoring the Security Events dashboard and adjusting rule actions as these enhancements are deployed. - + @@ -33,285 +33,266 @@ We are continuously refining our managed rules to provide more resilient protect - - - - + + + + - + - - - - - - + + + + + + - + - - + + - - - + + + - + - - + + - - - + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - + + - - - + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - - - - - + + + + + + - + - - + + - - - + + + - + - - - - - - + + + + + + - + - - + + - - - + + + - + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - + - - - - - - + + + + + + - - - - + - - - + + + + + + - + - - - - - - + + + + + + - + - - - - - + + + + +
Ruleset Rule IDNew Action Comments
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A Command Injection - Generic 8 - uriLogBlockThis is a new detection. Previous description was "Command Injection - Generic 8 - uri - Beta"
Cloudflare Managed RulesetLogBlock + This is a new detection. Previous description was "Command Injection - + Generic 8 - uri - Beta" +
Cloudflare Managed Ruleset N/AN/A Command Injection - Generic 8 - body - BetaDisabledDisabledDisabledDisabled This is a new detection. This rule is merged into the original rule "Command Injection - Generic 8 - body" (ID:{" "} - ). The rule previously known as "Command Injection - Generic 8" is now renamed to "Command Injection - Generic 8 - body". + + ). The rule previously known as "Command Injection - Generic 8" is now + renamed to "Command Injection - Generic 8 - body".
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A MySQL - SQLi - Executable Comment - BetaLogBlockLogBlock This is a new detection. This rule is merged into the original rule "MySQL - SQLi - Executable Comment - Body" (ID:{" "} - ) The rule previously known as "MySQL - SQLi - Executable Comment" is now renamed to "MySQL - SQLi - Executable Comment - Body". + ) The rule previously + known as "MySQL - SQLi - Executable Comment" is now renamed to "MySQL - + SQLi - Executable Comment - Body".
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A MySQL - SQLi - Executable Comment - HeadersLogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A MySQL - SQLi - Executable Comment - URILogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A Magento 2 - Unrestricted file upload - 2LogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A Apache ActiveMQ - Remote Code Execution - CVE:CVE-2026-34197LogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A SQLi - Sleep Function - BetaLogBlockLogBlock This is a new detection. This rule is merged into the original rule "SQLi - Sleep Function" (ID:{" "} )
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A SQLi - Sleep Function - HeadersLogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A SQLi - Sleep Function - URILogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A SQLi - Probing - uriLogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A SQLi - Probing - headerLogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AN/A SQLi - Probing - bodyDisabledDisabledDisabledDisabled This is a new detection. This rule is merged into the original rule "SQLi - Probing" (ID: )
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A SQLi - Probing 2 DisabledDisabled - This rule had duplicate detection logic and has been deprecated. -
Cloudflare Managed RulesetDisabledDisabledThis rule had duplicate detection logic and has been deprecated.
Cloudflare Managed Ruleset N/AN/A SQLi - UNION in MSSQL - BodyDisabledDisabledDisabledDisabled - This rule has been renamed to differentiate from "SQLi - UNION in MSSQL" (ID: ) and contains updated rule logic. + This rule has been renamed to differentiate from "SQLi - UNION in MSSQL" + (ID: ) and contains + updated rule logic.
Cloudflare Managed Ruleset
Cloudflare Managed Ruleset N/AN/A SQLi - UNION - 3DisabledDisabled - This rule had duplicate detection logic and has been deprecated. -
Cloudflare Managed RulesetDisabledDisabledThis rule had duplicate detection logic and has been deprecated.
Cloudflare Managed Ruleset N/AXSS, HTML Injection - Embed Tag - URIDisabledDisabled - This is a new detection. -
Cloudflare Managed RulesetN/AXSS, HTML Injection - Embed Tag - URIDisabledDisabledThis is a new detection.
Cloudflare Managed Ruleset N/AN/A XSS, HTML Injection - Embed Tag - HeadersLogBlock - This is a new detection. -
Cloudflare Managed RulesetLogBlockThis is a new detection.
Cloudflare Managed Ruleset N/AXSS, HTML Injection - IFrame Tag - Src and Srcdoc Attributes - HeadersLogDisabledN/A - This is a new detection. + XSS, HTML Injection - IFrame Tag - Src and Srcdoc Attributes - Headers
Cloudflare Managed RulesetLogDisabledThis is a new detection.
Cloudflare Managed Ruleset N/AN/A XSS, HTML Injection - Link Tag - HeadersLogDisabled - This is a new detection. -
Cloudflare Managed RulesetLogDisabledThis is a new detection.
Cloudflare Managed Ruleset N/AN/A XSS, HTML Injection - Link Tag - URIDisabledDisabled - This is a new detection. -
DisabledDisabledThis is a new detection.
diff --git a/src/content/changelog/waf/2026-04-27-waf-release.mdx b/src/content/changelog/waf/2026-04-27-waf-release.mdx index 0693afdefc19da2..cff93d4886276d7 100644 --- a/src/content/changelog/waf/2026-04-27-waf-release.mdx +++ b/src/content/changelog/waf/2026-04-27-waf-release.mdx @@ -12,14 +12,12 @@ This week's release focuses on new improvements to enhance coverage. - Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage. - **Continuous Rule Improvements** We are continuously refining our managed rules to provide more resilient protection and deeper insights into attack patterns. To ensure an optimal security posture, we recommend consistently monitoring the Security Events dashboard and adjusting rule actions as these enhancements are deployed. - - + @@ -29,7 +27,7 @@ We are continuously refining our managed rules to provide more resilient protect - + @@ -39,188 +37,198 @@ We are continuously refining our managed rules to provide more resilient protect - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - - + + @@ -228,22 +236,24 @@ We are continuously refining our managed rules to provide more resilient protect - + - + - + - + @@ -254,7 +264,7 @@ We are continuously refining our managed rules to provide more resilient protect - + @@ -265,151 +275,166 @@ We are continuously refining our managed rules to provide more resilient protect - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + ). The rule previously known as "SQLi - Comparison" is now renamed to + "SQLi - Comparison - Body". + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + - - + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -
Ruleset Rule IDNew Action Comments
Cloudflare Managed RulesetN/A PostgreSQL - SQLi - COPY - Beta LogBlockBlock - This is a new detection. This rule is merged into the original rule + This is a new detection. This rule is merged into the original rule "PostgreSQL - SQLi - COPY - Body (ID:{" "} - ). The rule previously known as "PostgreSQL - SQLi - COPY" is now renamed to "PostgreSQL - SQLi - COPY - Body". + + ). The rule previously known as "PostgreSQL - SQLi - COPY" is now + renamed to "PostgreSQL - SQLi - COPY - Body".
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A PostgreSQL - SQLi - COPY - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A PostgreSQL - SQLi - COPY - URI LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/AN/A SQLi - AND/OR MAKE_SET/ELT - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - AND/OR MAKE_SET/ELT - Body" (ID:{" "} - ). The rule previously known as "SQLi - AND/OR MAKE_SET/ELT" is now renamed to "SQLi - AND/OR MAKE_SET/ELT - Body". + + ). The rule previously known as "SQLi - AND/OR MAKE_SET/ELT" is now + renamed to "SQLi - AND/OR MAKE_SET/ELT - Body".
Cloudflare Managed RulesetCloudflare Managed Ruleset N/AN/A SQLi - AND/OR MAKE_SET/ELT - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - AND/OR MAKE_SET/ELT - URI LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Common Patterns - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - Common Patterns - Body" (ID:{" "} - ). The rule previously known as "SQLi - Common Patterns" is now renamed to "SQLi - Common Patterns - Body". + + ). The rule previously known as "SQLi - Common Patterns" is now renamed + to "SQLi - Common Patterns - Body".
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Common Patterns - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Common Patterns - URI LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Equation - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - Equation - Body" (ID:{" "} - ). The rule previously known as "SQLi - Equation" is now renamed to "SQLi - Equation - Body". + + ). The rule previously known as "SQLi - Equation" is now renamed to + "SQLi - Equation - Body".
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Equation - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Equation - URI LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - AND/OR Digit Operator Digit - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - AND/OR Digit Operator Digit - Body" (ID:{" "} - ). The rule previously known as "SQLi - AND/OR Digit Operator Digit" is now renamed to "SQLi - AND/OR Digit Operator Digit - Body". + + ). The rule previously known as "SQLi - AND/OR Digit Operator Digit" is + now renamed to "SQLi - AND/OR Digit Operator Digit - Body".
Cloudflare Managed Ruleset - - N/ASQLi - AND/OR Digit Operator Digit - HeadersLogBlockThis is a new detection.
Cloudflare Managed Ruleset + + N/ASQLi - AND/OR Digit Operator Digit - HeadersLogBlockThis is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - AND/OR Digit Operator Digit - URI LogBlockBlock This is a new detection.
Cloudflare Managed Ruleset - - Cloudflare Managed Ruleset + + N/A SQLi - Benchmark Function - Beta Log This is a new detection. This rule is merged into the original rule "SQLi - Benchmark Function - Body" (ID:{" "} - ). The rule previously known as "SQLi - Benchmark Function" is now renamed to "SQLi - Benchmark Function - Body". + + ). The rule previously known as "SQLi - Benchmark Function" is now + renamed to "SQLi - Benchmark Function - Body".
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Benchmark Function - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset This is a new detection. This rule is merged into the original rule "SQLi - Comparison - Body" (ID:{" "} - ). The rule previously known as "SQLi - Comparison" is now renamed to "SQLi - Comparison - Body". -
Cloudflare Managed Ruleset - - N/ASQLi - Comparison - HeadersLogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/ASQLi - Comparison - URILogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/ASQLi - String Concatenation - Body - BetaLogBlockThis is a new detection. This rule is merged into the original rule "SQLi - String Concatenation - Headers" (ID:{" "} - ).The rule previously known as "SQLi - String Concatenation - Headers" is now renamed to "SQLi - String Concatenation - Body".
Cloudflare Managed Ruleset + + N/ASQLi - Comparison - HeadersLogBlockThis is a new detection.
Cloudflare Managed Ruleset - - N/A + + N/ASQLi - Comparison - URILogBlockThis is a new detection.
Cloudflare Managed Ruleset + + N/ASQLi - String Concatenation - Body - BetaLogBlock + This is a new detection. This rule is merged into the original rule + "SQLi - String Concatenation - Headers" (ID:{" "} + + ).The rule previously known as "SQLi - String Concatenation - Headers" + is now renamed to "SQLi - String Concatenation - Body".{" "} +
Cloudflare Managed Ruleset + + N/A SQLi - String Concatenation - Headers LogBlockThis is a new detection.(Former Id was{" "} - )
Cloudflare Managed Ruleset - - N/ASQLi - String Concatenation - URILogBlockThis is a new detection. (Former Id was{" "} - )
Block + This is a new detection.(Former Id was{" "} + ) +
Cloudflare Managed Ruleset - - N/A + + N/ASQLi - String Concatenation - URILogBlock + This is a new detection. (Former Id was{" "} + ) +
Cloudflare Managed Ruleset + + N/A SQLi - SELECT Expression - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - SELECT Expression - Body" (ID:{" "} - ). The rule previously known as "SQLi - SELECT Expression" is now renamed to "SQLi - SELECT Expression - Body". + + ). The rule previously known as "SQLi - SELECT Expression" is now + renamed to "SQLi - SELECT Expression - Body".
Cloudflare Managed Ruleset - - + + N/A SQLi - SELECT Expression - Headers LogBlockBlock This is a new detection.
Cloudflare Managed Ruleset - - + + N/A SQLi - SELECT Expression - URI LogBlockBlock This is a new detection.
Cloudflare Managed Ruleset - - + + N/A SQLi - ORD and ASCII - Beta LogBlockBlock This is a new detection. This rule is merged into the original rule "SQLi - ORD and ASCII- Body" (ID:{" "} - ). The rule previously known as "SQLi - ORD and ASCII" is now renamed to "SQLi - ORD and ASCII- Body". + + ). The rule previously known as "SQLi - ORD and ASCII" is now renamed to + "SQLi - ORD and ASCII- Body".
Cloudflare Managed Ruleset - - + + N/A SQLi - ORD and ASCII - URI LogBlockBlock This is a new detection.
Cloudflare Managed Ruleset - - + + N/A SQLi - ORD and ASCII - Headers LogBlockBlock This is a new detection.
Cloudflare Managed RulesetCloudflare Managed Ruleset N/A SQLi - Destructive Operations LogBlockBlock This is a new detection.
\ No newline at end of file + diff --git a/src/content/changelog/waf/2026-05-07-emergency-waf-release.mdx b/src/content/changelog/waf/2026-05-07-emergency-waf-release.mdx index 8e8330ad016a2e7..a13aa934882650b 100644 --- a/src/content/changelog/waf/2026-05-07-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2026-05-07-emergency-waf-release.mdx @@ -17,7 +17,7 @@ Successful exploitation allows unauthenticated attackers to bypass middleware or We strongly recommend upgrading to Next.js 15.5.16 or 16.2.5 (or later) immediately to address the underlying vulnerability. If you cannot upgrade immediately, enforce authorization in the underlying route or page logic instead of relying solely on middleware. - + @@ -27,7 +27,7 @@ We strongly recommend upgrading to Next.js 15.5.16 or 16.2.5 (or later) immediat - + @@ -35,12 +35,12 @@ We strongly recommend upgrading to Next.js 15.5.16 or 16.2.5 (or later) immediat - - - + + +
Ruleset Rule IDNew Action Comments
Cloudflare Managed RulesetN/ANext.js - Middleware Bypass via Invalid RSC Header - CVE:CVE-2026-44575N/ADisabled - This is a new detection. + Next.js - Middleware Bypass via Invalid RSC Header - CVE:CVE-2026-44575 N/ADisabledThis is a new detection.
diff --git a/src/content/changelog/waf/2026-05-11-waf-release.mdx b/src/content/changelog/waf/2026-05-11-waf-release.mdx index 043c71508d1a2ef..ab5ae2ac0485b0a 100644 --- a/src/content/changelog/waf/2026-05-11-waf-release.mdx +++ b/src/content/changelog/waf/2026-05-11-waf-release.mdx @@ -10,14 +10,12 @@ import { RuleID } from "~/components"; - Existing rule enhancements have been deployed to improve detection resilience against broad classes of web attacks and strengthen behavioral coverage. - **Continuous Rule Improvements** We are continuously refining our managed rules to provide more resilient protection and deeper insights into attack patterns. To ensure an optimal security posture, we recommend consistently monitoring the Security Events dashboard and adjusting rule actions as these enhancements are deployed. - - + @@ -27,7 +25,7 @@ We are continuously refining our managed rules to provide more resilient protect - + @@ -41,7 +39,8 @@ We are continuously refining our managed rules to provide more resilient protect diff --git a/src/content/changelog/waf/2026-05-15-emergency-waf-release.mdx b/src/content/changelog/waf/2026-05-15-emergency-waf-release.mdx index 6699189c3e6941d..044ad5768701d6e 100644 --- a/src/content/changelog/waf/2026-05-15-emergency-waf-release.mdx +++ b/src/content/changelog/waf/2026-05-15-emergency-waf-release.mdx @@ -17,7 +17,7 @@ Successful exploitation allows remote attackers to trigger a heap buffer overflo We strongly recommend upgrading to nginx 1.30.1 (or later) immediately to address the underlying vulnerability. If you cannot upgrade immediately, avoid `rewrite` directives with `?` in the replacement string followed by `set` or `if` referencing capture groups.
Ruleset Rule IDNew Action Comments
Cloudflare Managed Ruleset This is a new detection. This rule is merged into the original rule "Remote Code Execution - Java Deserialization" (ID:{" "} - ). + + ).
- + @@ -27,7 +27,7 @@ We strongly recommend upgrading to nginx 1.30.1 (or later) immediately to addres - + @@ -35,12 +35,12 @@ We strongly recommend upgrading to nginx 1.30.1 (or later) immediately to addres - - - + + + @@ -51,9 +51,7 @@ We strongly recommend upgrading to nginx 1.30.1 (or later) immediately to addres - +
Ruleset Rule IDNew Action Comments
Cloudflare Managed RulesetN/Anginx - Remote Code Execution - Buffer Overread - CVE:CVE-2026-42945N/ABlock - This is a new detection. + nginx - Remote Code Execution - Buffer Overread - CVE:CVE-2026-42945 N/ABlockThis is a new detection.
Cloudflare Managed Rulesetnginx - Remote Code Execution - Heap Spray - CVE:CVE-2026-42945 N/A Block - This is a new detection. - This is a new detection.
diff --git a/src/content/changelog/waf/2026-05-20-waf-release.mdx b/src/content/changelog/waf/2026-05-20-waf-release.mdx index f6bd07a5a23d740..e26381409165dae 100644 --- a/src/content/changelog/waf/2026-05-20-waf-release.mdx +++ b/src/content/changelog/waf/2026-05-20-waf-release.mdx @@ -15,7 +15,7 @@ import { RuleID } from "~/components"; We are continuously refining our managed rules to provide more resilient protection and deeper insights into attack patterns. To ensure an optimal security posture, we recommend consistently monitoring the Security Events dashboard and adjusting rule actions as these enhancements are deployed. - + @@ -25,7 +25,7 @@ We are continuously refining our managed rules to provide more resilient protect - + @@ -37,9 +37,11 @@ We are continuously refining our managed rules to provide more resilient protect -
Ruleset Rule IDNew Action Comments
Cloudflare Managed RulesetN/A Block - This rule is merged into the original rule "Sitecore - Cache Poisoning - CVE:CVE-2025-53693" (ID:{" "} - ). + This rule is merged into the original rule "Sitecore - Cache Poisoning - + CVE:CVE-2025-53693" (ID:{" "} + + ).
\ No newline at end of file + diff --git a/src/content/changelog/web-analytics/2026-04-30-rum-navigation-types.mdx b/src/content/changelog/web-analytics/2026-04-30-rum-navigation-types.mdx index c086c1b5689e944..e6847cc885baddb 100644 --- a/src/content/changelog/web-analytics/2026-04-30-rum-navigation-types.mdx +++ b/src/content/changelog/web-analytics/2026-04-30-rum-navigation-types.mdx @@ -22,8 +22,8 @@ For more information, refer to [Navigation Types](/web-analytics/data-metrics/di ### Key benefits -* **Monitor Cache Effectiveness:** See how often your site is served from the HTTP cache or bfcache. -* **Identify Performance Bottlenecks:** Filter by the different types to understand performance opportunity of improving browser cache hit ratio. +- **Monitor Cache Effectiveness:** See how often your site is served from the HTTP cache or bfcache. +- **Identify Performance Bottlenecks:** Filter by the different types to understand performance opportunity of improving browser cache hit ratio. ### Analyze navigation types in the Cloudflare dashboard diff --git a/src/content/changelog/workers-ai/2025-08-05-openai-open-models.mdx b/src/content/changelog/workers-ai/2025-08-05-openai-open-models.mdx index 1dbfdc154f12e70..023c0a2b71c0c0c 100644 --- a/src/content/changelog/workers-ai/2025-08-05-openai-open-models.mdx +++ b/src/content/changelog/workers-ai/2025-08-05-openai-open-models.mdx @@ -13,13 +13,14 @@ Get started with the new models at `@cf/openai/gpt-oss-120b` and `@cf/openai/gpt Check out the [blog](https://blog.cloudflare.com/openai-gpt-oss-on-workers-ai) for more details about the new models, and the [`gpt-oss-120b`](/workers-ai/models/gpt-oss-120b) and [`gpt-oss-20b`](/workers-ai/models/gpt-oss-20b) model pages for more information about pricing and context windows. ## Responses API + If you call the model through: + - Workers Binding, it will accept/return Responses API – `env.AI.run(“@cf/openai/gpt-oss-120b”)` - REST API on `/run` endpoint, it will accept/return Responses API – `https://api.cloudflare.com/client/v4/accounts//ai/run/@cf/openai/gpt-oss-120b` - REST API on new `/responses` endpoint, it will accept/return Responses API – `https://api.cloudflare.com/client/v4/accounts//ai/v1/responses` - REST API for OpenAI Compatible endpoint, it will return Chat Completions (coming soon) – `https://api.cloudflare.com/client/v4/accounts//ai/v1/chat/completions` - ``` curl https://api.cloudflare.com/client/v4/accounts//ai/v1/responses \ -H "Content-Type: application/json" \ @@ -39,7 +40,9 @@ curl https://api.cloudflare.com/client/v4/accounts//ai/v1/responses ``` ## Code Interpreter + The model is natively trained to support stateful code execution, and we've implemented support for this feature using our [Sandbox SDK](https://github.com/cloudflare/sandbox-sdk) and [Containers](https://blog.cloudflare.com/containers-are-available-in-public-beta-for-simple-global-and-programmable/). Cloudflare's Developer Platform is uniquely positioned to support this feature, so we're very excited to bring our products together to support this new use case. ## Web Search (coming soon) + We are working to implement Web Search for the model, where users can bring their own Exa API Key so the model can browse the Internet. diff --git a/src/content/changelog/workers-ai/2025-08-27-partner-models.mdx b/src/content/changelog/workers-ai/2025-08-27-partner-models.mdx index 21359bd2975b689..4a63321c26bcb30 100644 --- a/src/content/changelog/workers-ai/2025-08-27-partner-models.mdx +++ b/src/content/changelog/workers-ai/2025-08-27-partner-models.mdx @@ -11,6 +11,7 @@ New state-of-the-art models have landed on Workers AI! This time, we're introduc As well, we're introuding a new turn detection model that enables you to detect when someone is done speaking — useful for building voice agents! Read the [blog](https://blog.cloudflare.com/workers-ai-partner-models) for more details and check out some of the new models on our platform: + - [`@cf/deepgram/aura-1`](/workers-ai/models/aura-1) is a text-to-speech model that allows you to input text and have it come to life in a customizable voice - [`@cf/deepgram/nova-3`](/workers-ai/models/nova-3) is speech-to-text model that transcribes multilingual audio at a blazingly fast speed - [`@cf/pipecat-ai/smart-turn-v2`](/workers-ai/models/smart-turn-v2) helps you detect when someone is done speaking @@ -54,4 +55,4 @@ async def text_to_speech(): if __name__ == "__main__": asyncio.run(text_to_speech()) -``` \ No newline at end of file +``` diff --git a/src/content/changelog/workers-ai/2025-09-05-embeddinggemma.mdx b/src/content/changelog/workers-ai/2025-09-05-embeddinggemma.mdx index 27cdbf6ba1773e1..f19b116401280e9 100644 --- a/src/content/changelog/workers-ai/2025-09-05-embeddinggemma.mdx +++ b/src/content/changelog/workers-ai/2025-09-05-embeddinggemma.mdx @@ -12,9 +12,10 @@ We're excited to be a launch partner alongside [Google](https://developers.googl Now you can leverage EmbeddingGemma directly through AI Search for your RAG pipelines. EmbeddingGemma's multilingual capabilities make it perfect for global applications that need to understand and retrieve content across different languages with exceptional accuracy. To use EmbeddingGemma for your AI Search projects: + 1. Go to **Create** in the [AI Search dashboard](https://dash.cloudflare.com/?to=/:account/ai/ai-search) 2. Follow the setup flow for your new RAG instance 3. In the **Generate Index** step, open up **More embedding models** and select `@cf/google/embeddinggemma-300m` as your embedding model 4. Complete the setup to create an AI Search -Try it out and let us know what you think! \ No newline at end of file +Try it out and let us know what you think! diff --git a/src/content/changelog/workers-vpc/2025-09-25-workers-vpc.mdx b/src/content/changelog/workers-vpc/2025-09-25-workers-vpc.mdx index 479a67c4a458f78..0f6f06d216ab8ea 100644 --- a/src/content/changelog/workers-vpc/2025-09-25-workers-vpc.mdx +++ b/src/content/changelog/workers-vpc/2025-09-25-workers-vpc.mdx @@ -17,7 +17,9 @@ export default { // Perform application logic in Workers here // Sample call to an internal API running on ECS in AWS using the binding - const response = await env.AWS_VPC_ECS_API.fetch("https://internal-host.example.com"); + const response = await env.AWS_VPC_ECS_API.fetch( + "https://internal-host.example.com", + ); // Additional application logic in Workers return new Response(); diff --git a/src/content/changelog/workers/2025-02-07-new-ways-to-get-started-on-workers.mdx b/src/content/changelog/workers/2025-02-07-new-ways-to-get-started-on-workers.mdx index ad672d1184483df..cd1650bd65edb75 100644 --- a/src/content/changelog/workers/2025-02-07-new-ways-to-get-started-on-workers.mdx +++ b/src/content/changelog/workers/2025-02-07-new-ways-to-get-started-on-workers.mdx @@ -8,13 +8,13 @@ date: 2025-02-07 00:00:00 UTC ![Import repo or choose template](~/assets/images/workers/choose-template-import-repo.png) -You can now create a Worker by: -* **Importing a Git repository**: Choose an existing Git repo on your GitHub/GitLab account and set up [Workers Builds](/workers/ci-cd/builds/configuration/) to deploy your Worker. -* **Deploying a template with Git**: Choose from a brand new selection of production ready [examples](https://github.com/cloudflare/templates) to help you get started with popular frameworks like [Astro](https://astro.build/), [Remix](https://remix.run/) and [Next](https://nextjs.org/) or build stateful applications with Cloudflare resources like [D1 databases](/d1/), [Workers AI](/workers-ai/) or [Durable Objects](/durable-objects/)! When you're ready to deploy, Cloudflare will set up your project by cloning the template to your GitHub/GitLab account, provisioning any required [resources](/workers/runtime-apis/bindings/) and deploying your Worker. +You can now create a Worker by: -With every push to your chosen branch, Cloudflare will automatically build and deploy your Worker. +- **Importing a Git repository**: Choose an existing Git repo on your GitHub/GitLab account and set up [Workers Builds](/workers/ci-cd/builds/configuration/) to deploy your Worker. +- **Deploying a template with Git**: Choose from a brand new selection of production ready [examples](https://github.com/cloudflare/templates) to help you get started with popular frameworks like [Astro](https://astro.build/), [Remix](https://remix.run/) and [Next](https://nextjs.org/) or build stateful applications with Cloudflare resources like [D1 databases](/d1/), [Workers AI](/workers-ai/) or [Durable Objects](/durable-objects/)! When you're ready to deploy, Cloudflare will set up your project by cloning the template to your GitHub/GitLab account, provisioning any required [resources](/workers/runtime-apis/bindings/) and deploying your Worker. -To get started, go to the [Workers dashboard](https://dash.cloudflare.com/?to=/:account/workers-and-pages/create). +With every push to your chosen branch, Cloudflare will automatically build and deploy your Worker. -These new features are available today in the Cloudflare dashboard to a subset of Cloudflare customers, and will be coming to all customers in the next few weeks. Don't see it in your dashboard, but want early access? Add your Cloudflare Account ID to [this form](https://forms.gle/U1qhkF2snNJDGJJa9). +To get started, go to the [Workers dashboard](https://dash.cloudflare.com/?to=/:account/workers-and-pages/create). +These new features are available today in the Cloudflare dashboard to a subset of Cloudflare customers, and will be coming to all customers in the next few weeks. Don't see it in your dashboard, but want early access? Add your Cloudflare Account ID to [this form](https://forms.gle/U1qhkF2snNJDGJJa9). diff --git a/src/content/changelog/workers/2025-03-25-higher-cpu-limits.mdx b/src/content/changelog/workers/2025-03-25-higher-cpu-limits.mdx index f651164ee14bfd0..5b44d0f80ee3d23 100644 --- a/src/content/changelog/workers/2025-03-25-higher-cpu-limits.mdx +++ b/src/content/changelog/workers/2025-03-25-higher-cpu-limits.mdx @@ -47,4 +47,4 @@ CPU time was limited. For more information on the updates limits, see the documentation on [Wrangler configuration for `cpu_ms`](/workers/wrangler/configuration/#limits) and on [Workers CPU time limits](/workers/platform/limits/#cpu-time). -For building long-running tasks on Cloudflare, we also recommend checking out [Workflows](/workflows/) and [Queues](/queues/). \ No newline at end of file +For building long-running tasks on Cloudflare, we also recommend checking out [Workflows](/workflows/) and [Queues](/queues/). diff --git a/src/content/changelog/workers/2025-04-08-deploy-to-cloudflare-button.mdx b/src/content/changelog/workers/2025-04-08-deploy-to-cloudflare-button.mdx index d24d77883df382f..2b8b4d848965a55 100644 --- a/src/content/changelog/workers/2025-04-08-deploy-to-cloudflare-button.mdx +++ b/src/content/changelog/workers/2025-04-08-deploy-to-cloudflare-button.mdx @@ -1,28 +1,28 @@ --- title: Deploy a Workers application in seconds with one-click -description: You can now add a Deploy to Cloudflare button to your repository's README to help other developers set up and deploy your project. +description: You can now add a Deploy to Cloudflare button to your repository's README to help other developers set up and deploy your project. products: - workers date: 2025-04-08 00:00:00 UTC --- -You can now add a [Deploy to Cloudflare](/workers/platform/deploy-buttons/) button to the README of your Git repository containing a Workers application — making it simple for other developers to quickly set up and deploy your project! + +You can now add a [Deploy to Cloudflare](/workers/platform/deploy-buttons/) button to the README of your Git repository containing a Workers application — making it simple for other developers to quickly set up and deploy your project! [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=https://github.com/cloudflare/templates/tree/main/saas-admin-template) +The Deploy to Cloudflare button: -The Deploy to Cloudflare button: -1. **Creates a new Git repository on your GitHub/ GitLab account**: Cloudflare will automatically clone and create a new repository on your account, so you can continue developing. -2. **Automatically provisions resources the app needs**: If your repository requires Cloudflare primitives like a [Workers KV namespace](/kv/), a [D1 database](/d1/), or an [R2 bucket](/r2/), Cloudflare will automatically provision them on your account and bind them to your Worker upon deployment. +1. **Creates a new Git repository on your GitHub/ GitLab account**: Cloudflare will automatically clone and create a new repository on your account, so you can continue developing. +2. **Automatically provisions resources the app needs**: If your repository requires Cloudflare primitives like a [Workers KV namespace](/kv/), a [D1 database](/d1/), or an [R2 bucket](/r2/), Cloudflare will automatically provision them on your account and bind them to your Worker upon deployment. 3. **Configures Workers Builds (CI/CD)**: Every new push to your production branch on your newly created repository will automatically build and deploy courtesy of [Workers Builds](/workers/ci-cd/builds/). -4. **Adds preview URLs to each pull request**: If you'd like to test your changes before deploying, you can push changes to a [non-production branch](/workers/ci-cd/builds/build-branches/#configure-non-production-branch-builds) and [preview URLs](/workers/configuration/previews/) will be generated and [posted back to GitHub as a comment](/workers/ci-cd/builds/git-integration/github-integration/#pull-request-comment). +4. **Adds preview URLs to each pull request**: If you'd like to test your changes before deploying, you can push changes to a [non-production branch](/workers/ci-cd/builds/build-branches/#configure-non-production-branch-builds) and [preview URLs](/workers/configuration/previews/) will be generated and [posted back to GitHub as a comment](/workers/ci-cd/builds/git-integration/github-integration/#pull-request-comment). ![Import repo or choose template](~/assets/images/workers/dtw-user-flow.png) - -To create a Deploy to Cloudflare button in your README, you can add the following snippet, including your Git repository URL: +To create a Deploy to Cloudflare button in your README, you can add the following snippet, including your Git repository URL: ```md [![Deploy to Cloudflare](https://deploy.workers.cloudflare.com/button)](https://deploy.workers.cloudflare.com/?url=) ``` -Check out our [documentation](/workers/platform/deploy-buttons/) for more information on how to set up a deploy button for your application and best practices to ensure a successful deployment for other developers. +Check out our [documentation](/workers/platform/deploy-buttons/) for more information on how to set up a deploy button for your application and best practices to ensure a successful deployment for other developers. diff --git a/src/content/changelog/workers/2025-04-09-qb-workers-logs-ga.mdx b/src/content/changelog/workers/2025-04-09-qb-workers-logs-ga.mdx index b0b15c17427b454..a03418408567548 100644 --- a/src/content/changelog/workers/2025-04-09-qb-workers-logs-ga.mdx +++ b/src/content/changelog/workers/2025-04-09-qb-workers-logs-ga.mdx @@ -7,7 +7,7 @@ date: 2025-04-09 hidden: false --- -import { WranglerConfig } from "~/components" +import { WranglerConfig } from "~/components"; The [Workers Observability dashboard](https://dash.cloudflare.com/?to=/:account/workers-and-pages/observability/) offers a single place to investigate and explore your [Workers Logs](/workers/observability/logs/workers-logs). @@ -16,6 +16,7 @@ The **Overview** tab shows logs from all your Workers in one place. The **Invoca ![Workers Observability Overview Tab](src/assets/images/changelog/workers/observability/2025-04-09-workers-observability-overview.png) The **Investigate** tab presents a Query Builder, which helps you write structured queries to investigate and visualize your logs. The Query Builder can help answer questions such as: + - Which paths are experiencing the most 5XX errors? - What is the wall time distribution by status code for my Worker? - What are the slowest requests, and where are they coming from? @@ -30,6 +31,7 @@ The Query Builder can use any field that you store in your logs as a key to visu [Workers Logs](/workers/observability/logs/workers-logs) is now Generally Available. With a [small change](/workers/observability/logs/workers-logs/#enable-workers-logs) to your Wrangler configuration, Workers Logs ingests, indexes, and stores all logs emitted from your Workers for up to 7 days. We've introduced a number of changes during our beta period, including: + - Dashboard enhancements with customizable fields as columns in the Logs view and support for invocation-based grouping - Performance improvements to ensure no adverse impact - Public [API endpoints](https://developers.cloudflare.com/api/resources/workers/subresources/observability/) for broader consumption diff --git a/src/content/changelog/workers/2025-04-22-python-worker-cron-triggers.mdx b/src/content/changelog/workers/2025-04-22-python-worker-cron-triggers.mdx index 9361cb8dd0b783c..b452371c6b814cf 100644 --- a/src/content/changelog/workers/2025-04-22-python-worker-cron-triggers.mdx +++ b/src/content/changelog/workers/2025-04-22-python-worker-cron-triggers.mdx @@ -52,4 +52,4 @@ npx wrangler dev --test-scheduled curl "http://localhost:8787/cdn-cgi/handler/scheduled?cron=*+*+*+*+*" ``` -Consult the [Workers Cron Triggers page](/workers/configuration/cron-triggers/) for full details on cron triggers in Workers. \ No newline at end of file +Consult the [Workers Cron Triggers page](/workers/configuration/cron-triggers/) for full details on cron triggers in Workers. diff --git a/src/content/changelog/workers/2025-05-14-python-worker-durable-object.mdx b/src/content/changelog/workers/2025-05-14-python-worker-durable-object.mdx index 1adf754ef15b998..66b3abe85c67f76 100644 --- a/src/content/changelog/workers/2025-05-14-python-worker-durable-object.mdx +++ b/src/content/changelog/workers/2025-05-14-python-worker-durable-object.mdx @@ -84,4 +84,4 @@ Then test your new Durable Object locally by running `wrangler dev`: npx wrangler dev ``` -Consult the [Durable Objects documentation](/durable-objects/) for more details. \ No newline at end of file +Consult the [Durable Objects documentation](/durable-objects/) for more details. diff --git a/src/content/changelog/workers/2025-06-05-open-next-size.mdx b/src/content/changelog/workers/2025-06-05-open-next-size.mdx index dc09195d36386df..f812ab669e4ae81 100644 --- a/src/content/changelog/workers/2025-06-05-open-next-size.mdx +++ b/src/content/changelog/workers/2025-06-05-open-next-size.mdx @@ -15,4 +15,4 @@ This means that users will now see a decrease from 14 to 8MiB (2.3 to 1.6MiB gzi Users only need to update to the latest version of `@opennextjs/cloudflare` to automatically benefit from these improvements. Note that we published [CVE-2005-6087](https://github.com/opennextjs/opennextjs-cloudflare/security/advisories/GHSA-rvpw-p7vw-wj3m) for a SSRF vulnerability in the `@opennextjs/cloudflare` package. -The vulnerability has been fixed from `@opennextjs/cloudflare` v1.3.0 onwards. Please update to any version after this one. +The vulnerability has been fixed from `@opennextjs/cloudflare` v1.3.0 onwards. Please update to any version after this one. diff --git a/src/content/changelog/workers/2025-07-23-workers-preview-urls.mdx b/src/content/changelog/workers/2025-07-23-workers-preview-urls.mdx index cdfb5847ef6dfaf..09e28a32e4a37af 100644 --- a/src/content/changelog/workers/2025-07-23-workers-preview-urls.mdx +++ b/src/content/changelog/workers/2025-07-23-workers-preview-urls.mdx @@ -17,8 +17,8 @@ These preview URLs are named after your branch and are posted as a comment to ea Each comment includes **two preview URLs** as shown above: -* **Commit Preview URL**: Unique to the specific version/commit (e.g., `-..workers.dev`) -* **Branch Preview URL**: A stable alias based on the branch name (e.g., `-..workers.dev`) +- **Commit Preview URL**: Unique to the specific version/commit (e.g., `-..workers.dev`) +- **Branch Preview URL**: A stable alias based on the branch name (e.g., `-..workers.dev`) ## How it works @@ -39,7 +39,7 @@ wrangler versions upload --preview-alias staging ## Limitations while in beta -* Only available on the **workers.dev** subdomain (custom domains not yet supported) -* Requires **Wrangler v4.21.0+** -* Preview URLs are not generated for Workers that use [Durable Objects](/durable-objects/) -* Not yet supported for [Workers for Platforms](/cloudflare-for-platforms/workers-for-platforms/) +- Only available on the **workers.dev** subdomain (custom domains not yet supported) +- Requires **Wrangler v4.21.0+** +- Preview URLs are not generated for Workers that use [Durable Objects](/durable-objects/) +- Not yet supported for [Workers for Platforms](/cloudflare-for-platforms/workers-for-platforms/) diff --git a/src/content/changelog/workers/2025-08-04-builds-increased-disk-size.mdx b/src/content/changelog/workers/2025-08-04-builds-increased-disk-size.mdx index 69b92f1517e3f97..62563705d8ffbf1 100644 --- a/src/content/changelog/workers/2025-08-04-builds-increased-disk-size.mdx +++ b/src/content/changelog/workers/2025-08-04-builds-increased-disk-size.mdx @@ -1,15 +1,17 @@ --- title: Increased disk space for Workers Builds -description: Increased the available disk space for Workers Builds from 8 GB to 20 GB for all plans during the ongoing open beta. +description: + Increased the available disk space for Workers Builds from 8 GB to 20 GB for all plans during the ongoing open beta. - workers date: 2025-08-04T01:00:00Z --- -As part of the ongoing open beta for [Workers Builds](/workers/ci-cd/builds/), we’ve increased the available disk space for builds from **8 GB** to **20 GB** for both Free and Paid plans. + +As part of the ongoing open beta for [Workers Builds](/workers/ci-cd/builds/), we’ve increased the available disk space for builds from **8 GB** to **20 GB** for both Free and Paid plans. This provides more space for larger projects, dependencies, and build artifacts while improving overall build reliability. | Metric | Free Plan | Paid Plans | -|------------|-----------|------------| +| ---------- | --------- | ---------- | | Disk Space | 20 GB | 20 GB | All other [build limits](/workers/ci-cd/builds/limits-and-pricing/) — including CPU, memory, build minutes, and timeout remain unchanged. diff --git a/src/content/changelog/workers/2025-08-08-add-waituntil-cloudflare-workers.mdx b/src/content/changelog/workers/2025-08-08-add-waituntil-cloudflare-workers.mdx index ec55122dca6b4e3..38902472bf8ef79 100644 --- a/src/content/changelog/workers/2025-08-08-add-waituntil-cloudflare-workers.mdx +++ b/src/content/changelog/workers/2025-08-08-add-waituntil-cloudflare-workers.mdx @@ -40,7 +40,7 @@ export default { // Background task that should complete even after response is sent cleanupTempData(env.KV_NAMESPACE); return new Response("Hello, World!"); - } + }, }; function cleanupTempData(kvNamespace) { diff --git a/src/content/changelog/workers/2025-08-08-support-long-branch-names-preview-aliases.mdx b/src/content/changelog/workers/2025-08-08-support-long-branch-names-preview-aliases.mdx index 4b869cc6a72861c..ac79e16b37b4196 100644 --- a/src/content/changelog/workers/2025-08-08-support-long-branch-names-preview-aliases.mdx +++ b/src/content/changelog/workers/2025-08-08-support-long-branch-names-preview-aliases.mdx @@ -19,7 +19,7 @@ Now, Cloudflare automatically truncates long branch names and appends a unique h - **Hash generation**: The hash is derived from the full branch name to ensure uniqueness - **Stable URLs**: The same branch always generates the same hash across all commits -## Requirements and compatibility +## Requirements and compatibility - **Wrangler 4.30.0 or later**: This feature requires updating to wrangler@4.30.0+ -- **No configuration needed**: Works automatically with existing preview URL setups \ No newline at end of file +- **No configuration needed**: Works automatically with existing preview URL setups diff --git a/src/content/changelog/workers/2025-08-11-messagechannel.mdx b/src/content/changelog/workers/2025-08-11-messagechannel.mdx index b73740d15413afb..c6fc102f02133c4 100644 --- a/src/content/changelog/workers/2025-08-11-messagechannel.mdx +++ b/src/content/changelog/workers/2025-08-11-messagechannel.mdx @@ -17,10 +17,10 @@ using the `no_expose_global_message_channel` compatibility flag. const { port1, port2 } = new MessageChannel(); port2.onmessage = (event) => { - console.log('Received message:', event.data); + console.log("Received message:", event.data); }; -port2.postMessage('Hello from port2!'); +port2.postMessage("Hello from port2!"); ``` Any value that can be used with the `structuredClone(...)` API can be sent over the port. @@ -29,13 +29,13 @@ Any value that can be used with the `structuredClone(...)` API can be sent over There are a number of key limitations to the `MessageChannel` API in Workers: -* Transfer lists are currently not supported. This means that you will not be able to transfer +- Transfer lists are currently not supported. This means that you will not be able to transfer ownership of objects like `ArrayBuffer` or `MessagePort` between ports. -* The `MessagePort` is not yet serializable. This means that you cannot send a `MessagePort` object +- The `MessagePort` is not yet serializable. This means that you cannot send a `MessagePort` object through the `postMessage` method or via JSRPC calls. -* The `'messageerror'` event is only partially supported. If the `'onmessage'` handler throws an +- The `'messageerror'` event is only partially supported. If the `'onmessage'` handler throws an error, the `'messageerror'` event will be triggered, however, it will not be triggered when there - are errors serializing or deserializing the message data. Instead, the error will be thrown when - the `postMessage` method is called on the sending port. -* The `'close'` event will be emitted on both ports when one of the ports is closed, however it + are errors serializing or deserializing the message data. Instead, the error will be thrown when + the `postMessage` method is called on the sending port. +- The `'close'` event will be emitted on both ports when one of the ports is closed, however it will not be emitted when the Worker is terminated or when one of the ports is garbage collected. diff --git a/src/content/changelog/workers/2025-08-14-new-python-handlers.mdx b/src/content/changelog/workers/2025-08-14-new-python-handlers.mdx index c3da28c859aaa68..63d4feab2b544fb 100644 --- a/src/content/changelog/workers/2025-08-14-new-python-handlers.mdx +++ b/src/content/changelog/workers/2025-08-14-new-python-handlers.mdx @@ -34,4 +34,4 @@ To keep using the old-style handlers, you can specify the `disable_python_no_glo -Consult the [Python Workers documentation](/workers/languages/python/) for more details. \ No newline at end of file +Consult the [Python Workers documentation](/workers/languages/python/) for more details. diff --git a/src/content/changelog/workers/2025-08-14-workers-terraform-and-sdk-improvements.mdx b/src/content/changelog/workers/2025-08-14-workers-terraform-and-sdk-improvements.mdx index 71100f87446e32c..0665a23c274b592 100644 --- a/src/content/changelog/workers/2025-08-14-workers-terraform-and-sdk-improvements.mdx +++ b/src/content/changelog/workers/2025-08-14-workers-terraform-and-sdk-improvements.mdx @@ -90,20 +90,16 @@ const scriptContent = ` }; `; -client.workers.scripts.versions.create('my-worker', { - account_id: '123456789', - metadata: { - main_module: 'my-worker.mjs', - }, - files: [ - await toFile( - Buffer.from(scriptContent), - 'my-worker.mjs', - { - type: "application/javascript+module", - } - ) - ] +client.workers.scripts.versions.create("my-worker", { + account_id: "123456789", + metadata: { + main_module: "my-worker.mjs", + }, + files: [ + await toFile(Buffer.from(scriptContent), "my-worker.mjs", { + type: "application/javascript+module", + }), + ], }); ``` @@ -115,19 +111,20 @@ Previously when creating a KV value like this: ```js await cf.kv.namespaces.values.update("my-kv-namespace", "key1", { - account_id: "123456789", - metadata: "my metadata", - value: JSON.stringify({ - hello: "world" - }) + account_id: "123456789", + metadata: "my metadata", + value: JSON.stringify({ + hello: "world", + }), }); ``` ...and recalling it in your Worker like this: + ```ts -const value = await c.env.KV.get<{hello: string}>("key1", "json"); +const value = await c.env.KV.get<{ hello: string }>("key1", "json"); ``` -You'd get back this: `{metadata:'my metadata', value:"{'hello':'world'}"}` instead of the correct value of `{hello: 'world'}` +You'd get back this: `{metadata:'my metadata', value:"{'hello':'world'}"}` instead of the correct value of `{hello: 'world'}` This is fixed in cloudflare-typescript 4.5.0 and will be fixed in cloudflare-python 4.4.0. diff --git a/src/content/changelog/workers/2025-08-15-static-assets-redirect-url.mdx b/src/content/changelog/workers/2025-08-15-static-assets-redirect-url.mdx index 26a69c93645b1c1..edafaed88b57a69 100644 --- a/src/content/changelog/workers/2025-08-15-static-assets-redirect-url.mdx +++ b/src/content/changelog/workers/2025-08-15-static-assets-redirect-url.mdx @@ -1,9 +1,9 @@ --- -title: 'Workers Static Assets: Corrected handling of double slashes in redirect rule paths' +title: "Workers Static Assets: Corrected handling of double slashes in redirect rule paths" description: Corrected handling of double slashes in redirect rule paths date: 2025-08-15 --- - -[Static Assets](/workers/static-assets/): Fixed a bug in how [redirect rules](https://developers.cloudflare.com/workers/static-assets/redirects/) defined in your Worker's `_redirects` file are processed. + +[Static Assets](/workers/static-assets/): Fixed a bug in how [redirect rules](https://developers.cloudflare.com/workers/static-assets/redirects/) defined in your Worker's `_redirects` file are processed. If you're serving Static Assets with a `_redirects` file containing a rule like `/ja/* /:splat`, paths with double slashes were previously misinterpreted as external URLs. For example, visiting `/ja//example.com` would incorrectly redirect to `https://example.com` instead of `/example.com` on your domain. This has been fixed and double slashes now correctly resolve as local paths. Note: [Cloudflare Pages](/pages/) was not affected by this issue. diff --git a/src/content/changelog/workers/2025-08-19-improved-wrangler-error-screen.mdx b/src/content/changelog/workers/2025-08-19-improved-wrangler-error-screen.mdx index 607ca9dbee7a667..bf358c54fd5a98d 100644 --- a/src/content/changelog/workers/2025-08-19-improved-wrangler-error-screen.mdx +++ b/src/content/changelog/workers/2025-08-19-improved-wrangler-error-screen.mdx @@ -10,8 +10,8 @@ Wrangler's error screen has received several improvements to enhance your debugg The error screen now features a refreshed design thanks to [youch](https://www.npmjs.com/package/youch), with support for both light and dark themes, improved source map resolution logic that handles missing source files more reliably, and better error cause display. -| Before | After (Light) | After (Dark) | -|--------|---------------|--------------| +| Before | After (Light) | After (Dark) | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | ![Old error screen](../../../assets/images/workers/changelog/old-error-screen.png) | ![New light theme error screen](../../../assets/images/workers/changelog/new-error-screen-light.png) | ![New dark theme error screen](../../../assets/images/workers/changelog/new-error-screen-dark.png) | Try it out now with `npx wrangler@latest dev` in your Workers project. diff --git a/src/content/changelog/workers/2025-09-03-new-workers-api.mdx b/src/content/changelog/workers/2025-09-03-new-workers-api.mdx index d5f72b78d505a8f..383e128922da73e 100644 --- a/src/content/changelog/workers/2025-09-03-new-workers-api.mdx +++ b/src/content/changelog/workers/2025-09-03-new-workers-api.mdx @@ -3,21 +3,22 @@ title: A new, simpler REST API for Cloudflare Workers (Beta) description: Simpler Workers API, SDK methods, and Terraform resources for directly managing Workers, Versions, and Deployments date: 2025-09-04 --- -You can now manage [**Workers**](/api/resources/workers/subresources/beta/subresources/workers/methods/create/), [**Versions**](/api/resources/workers/subresources/beta/subresources/workers/models/worker/#(schema)), and [**Deployments**](/api/resources/workers/subresources/scripts/subresources/content/methods/update/) as separate resources with a new, resource-oriented API (Beta). + +You can now manage [**Workers**](/api/resources/workers/subresources/beta/subresources/workers/methods/create/), [**Versions**](), and [**Deployments**](/api/resources/workers/subresources/scripts/subresources/content/methods/update/) as separate resources with a new, resource-oriented API (Beta). This new API is supported in the [Cloudflare Terraform provider](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs) and the [Cloudflare Typescript SDK](https://github.com/cloudflare/cloudflare-typescript), allowing platform teams to manage a Worker's infrastructure in Terraform, while development teams handle code deployments from a separate repository or workflow. We also designed this API with AI agents in mind, as a clear, predictable structure is essential for them to reliably build, test, and deploy applications. ### Try it out + - [**New beta API endpoints**](/api/resources/workers/subresources/beta/) - [**Cloudflare TypeScript SDK v5.0.0**](https://github.com/cloudflare/cloudflare-typescript) - [**Cloudflare Go SDK v6.0.0**](https://github.com/cloudflare/cloudflare-go) - [**Terraform provider v5.9.0**](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs): [`cloudflare_worker`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker) , [`cloudflare_worker_version`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version), and [`cloudflare_workers_deployments`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_deployment) resources. - See full examples in our [Infrastructure as Code (IaC) guide](/workers/platform/infrastructure-as-code) - ## Before: Eight+ endpoints with mixed responsibilities -![**Before**](~/assets/images/workers/platform/api-before.png) +![**Before**](~/assets/images/workers/platform/api-before.png) The existing API was originally designed for simple, one-shot script uploads: @@ -40,15 +41,17 @@ This API worked for creating a basic Worker, uploading all of its code, and depl - **Several endpoints implicitly created deployments**: Simple updates like adding a secret or changing a script's content would implicitly create a new version and immediately deploy it. -- **Updating a setting was confusing**: Configuration was scattered across eight endpoints with overlapping responsibilities. This ambiguity made it difficult for human developers (and even more so for AI agents) to reliably update a Worker via API. +- **Updating a setting was confusing**: Configuration was scattered across eight endpoints with overlapping responsibilities. This ambiguity made it difficult for human developers (and even more so for AI agents) to reliably update a Worker via API. - **Scripts used names as primary identifiers**: This meant simple renames could turn into a risky migration, requiring you to create a brand new Worker and update every reference. If you were using Terraform, this could inadvertently destroy your Worker altogether. ## After: Three resources with clear boundaries + ![**After**](~/assets/images/workers/platform/api-after.png) -The new API introduces cleaner resource management with three core resources: [**Worker**](/api/resources/workers/subresources/beta/subresources/workers/methods/create/), [**Versions**](/api/resources/workers/subresources/beta/subresources/workers/models/worker/#(schema)), and [**Deployment**](/api/resources/workers/subresources/scripts/subresources/content/methods/update/). +The new API introduces cleaner resource management with three core resources: [**Worker**](/api/resources/workers/subresources/beta/subresources/workers/methods/create/), [**Versions**](), and [**Deployment**](/api/resources/workers/subresources/scripts/subresources/content/methods/update/). All endpoints now use simple JSON payloads, with script content embedded as `base64`-encoded strings -- a more consistent and reliable approach than the previous `multipart/form-data` format. + - **Worker**: The parent resource representing your application. It has a stable UUID and holds persistent settings like `name`, `tags`, and `logpush`. You can now create a Worker to establish its identity and settings **before** any code is uploaded. - **Version**: An immutable snapshot of your code and its specific configuration, like bindings and `compatibility_date`. Creating a new version is a safe action that doesn't affect live traffic. @@ -66,44 +69,52 @@ All endpoints now use simple JSON payloads, with script content embedded as `bas Workers are now standalone resources that can be created and configured without any code. Platform teams can provision Workers with the right settings, then hand them off to development teams for implementation. #### Example: Typescript SDK + ```ts // Step 1: Platform team creates the Worker resource (no code needed) const worker = await client.workers.beta.workers.create({ - name: "payment-service", - account_id: "...", - observability: { - enabled: true, - }, + name: "payment-service", + account_id: "...", + observability: { + enabled: true, + }, }); // Step 2: Development team adds code and creates a version later const version = await client.workers.beta.workers.versions.create(worker.id, { - account_id: "...", - main_module: "worker.js", - compatibility_date: "$today", - bindings: [ /*...*/ ], - modules: [ - { - name: "worker.js", - content_type: "application/javascript+module", - content_base64: Buffer.from(scriptContent).toString("base64"), - }, - ], + account_id: "...", + main_module: "worker.js", + compatibility_date: "$today", + bindings: [ + /*...*/ + ], + modules: [ + { + name: "worker.js", + content_type: "application/javascript+module", + content_base64: Buffer.from(scriptContent).toString("base64"), + }, + ], }); // Step 3: Deploy explicitly when ready -const deployment = await client.workers.scripts.deployments.create(worker.name, { - account_id: "...", - strategy: "percentage", - versions: [ - { - percentage: 100, - version_id: version.id, - }, - ], -}); -```` +const deployment = await client.workers.scripts.deployments.create( + worker.name, + { + account_id: "...", + strategy: "percentage", + versions: [ + { + percentage: 100, + version_id: version.id, + }, + ], + }, +); +``` + #### Example: Terraform + If you use Terraform, you can now declare the Worker in your Terraform configuration and manage configuration outside of Terraform in your Worker's [`wrangler.jsonc` file](/workers/wrangler/configuration/) and deploy code changes using [Wrangler](/workers/wrangler/). ```tf @@ -149,6 +160,7 @@ POST /workers/scripts/{script_name}/deployments ``` ### Settings are clearly organized by scope + Configuration is now logically divided: [**Worker settings**](/api/resources/workers/subresources/beta/subresources/workers/) (like `name` and `tags`) persist across all versions, while [**Version settings**](/api/resources/workers/subresources/beta/subresources/workers/subresources/versions/) (like `bindings` and `compatibility_date`) are specific to each code snapshot. ```sh @@ -180,13 +192,15 @@ The `/workers/workers/` path now supports addressing a Worker by both its immuta GET /workers/workers/29494978e03748669e8effb243cf2515 # UUID (stable for automation) GET /workers/workers/payment-service # Name (convenient for humans) ``` + This dual approach means: - - Developers can use readable names for debugging. - - Automation can rely on stable UUIDs to prevent errors when Workers are renamed. - - Terraform can rename Workers without destroying and recreating them. +- Developers can use readable names for debugging. +- Automation can rely on stable UUIDs to prevent errors when Workers are renamed. +- Terraform can rename Workers without destroying and recreating them. ## Learn more + - [Infrastructure as Code (IaC) guide](/workers/platform/infrastructure-as-code) - [API documentation](/api/resources/workers/subresources/beta/) - [Versions and Deployments overview](/workers/configuration/versions-and-deployments/) @@ -195,4 +209,4 @@ This dual approach means: - The pre-existing Workers REST API remains fully supported. Once the new API exits beta, we'll provide a migration timeline with ample notice and comprehensive migration guides. - Existing Terraform resources and SDK methods will continue to be fully supported through the current major version. -- While the Deployments API currently remains on the `/scripts/` endpoint, we plan to introduce a new Deployments endpoint under `/workers/` to match the new API structure. \ No newline at end of file +- While the Deployments API currently remains on the `/scripts/` endpoint, we plan to introduce a new Deployments endpoint under `/workers/` to match the new API structure. diff --git a/src/content/changelog/workers/2025-09-07-builds-increased-cpu-paid.mdx b/src/content/changelog/workers/2025-09-07-builds-increased-cpu-paid.mdx index 8226df15cb8f922..08db5550e9f1847 100644 --- a/src/content/changelog/workers/2025-09-07-builds-increased-cpu-paid.mdx +++ b/src/content/changelog/workers/2025-09-07-builds-increased-cpu-paid.mdx @@ -1,19 +1,22 @@ --- title: Increased vCPU for Workers Builds on paid plans -description: Increased the available vCPU for Workers Builds from 2 to 4 vCPUs for paid plans, improving build performance and parallel processing capabilities. +description: + Increased the available vCPU for Workers Builds from 2 to 4 vCPUs for paid plans, improving build performance and parallel processing capabilities. - workers date: 2025-09-18 --- -We recently [increased the available disk space](/changelog/2025-08-04-builds-increased-disk-size/) from 8 GB to 20 GB for **all** plans. Building on that improvement, we’re now doubling the CPU power available for paid plans — from 2 vCPU to **4 vCPU**. + +We recently [increased the available disk space](/changelog/2025-08-04-builds-increased-disk-size/) from 8 GB to 20 GB for **all** plans. Building on that improvement, we’re now doubling the CPU power available for paid plans — from 2 vCPU to **4 vCPU**. These changes continue our focus on making [Workers Builds](/workers/ci-cd/builds/) faster and more reliable. -| Metric | Free Plan | Paid Plans | -|------------|-----------|------------| -| CPU | 2 vCPU | **4 vCPU** | +| Metric | Free Plan | Paid Plans | +| ------ | --------- | ---------- | +| CPU | 2 vCPU | **4 vCPU** | ## Performance Improvements -- **Fast build times**: Even single-threaded workloads benefit from having more vCPUs + +- **Fast build times**: Even single-threaded workloads benefit from having more vCPUs - **2x faster multi-threaded builds**: Tools like [esbuild](https://esbuild.github.io/) and [webpack](https://webpack.js.org/) can now utilize additional cores, delivering near-linear performance scaling -All other [build limits](/workers/ci-cd/builds/limits-and-pricing/) — including memory, build minutes, and timeout remain unchanged. \ No newline at end of file +All other [build limits](/workers/ci-cd/builds/limits-and-pricing/) — including memory, build minutes, and timeout remain unchanged. diff --git a/src/content/changelog/workers/2025-09-09-interactive-wrangler-assets.mdx b/src/content/changelog/workers/2025-09-09-interactive-wrangler-assets.mdx index ca46348805446ca..52947b26e2a263c 100644 --- a/src/content/changelog/workers/2025-09-09-interactive-wrangler-assets.mdx +++ b/src/content/changelog/workers/2025-09-09-interactive-wrangler-assets.mdx @@ -11,11 +11,13 @@ Deploying static site to Workers is now easier. When you run `wrangler deploy [d ## Before and after **Before:** Required remembering multiple flags and parameters + ```bash wrangler deploy --assets ./dist --compatibility-date 2025-09-09 --name my-project ``` **After:** Simple directory deployment with guided setup + ```bash wrangler deploy dist # Interactive prompts handle the rest as shown in the example flow below @@ -24,12 +26,14 @@ wrangler deploy dist ## What's new **Interactive prompts for missing configuration:** + - Wrangler detects when you're trying to deploy a directory of static assets - Prompts you to confirm the deployment type - Asks for a project name (with smart defaults) - Automatically sets the compatibility date to today **Automatic configuration generation:** + - Creates a `wrangler.jsonc` file with your deployment settings - Stores your choices for future deployments - Eliminates the need to remember complex command-line flags @@ -60,4 +64,3 @@ wrangler deploy ## Requirements - You must use Wrangler version 4.24.4 or later in order to use this feature - diff --git a/src/content/changelog/workers/2025-09-10-built-with-cloudflare-button.mdx b/src/content/changelog/workers/2025-09-10-built-with-cloudflare-button.mdx index 50813da8dd6bb74..8dc771049e2038d 100644 --- a/src/content/changelog/workers/2025-09-10-built-with-cloudflare-button.mdx +++ b/src/content/changelog/workers/2025-09-10-built-with-cloudflare-button.mdx @@ -10,4 +10,4 @@ We've updated our "Built with Cloudflare" button to make it easier to share that ![Built with Cloudflare](https://workers.cloudflare.com/built-with-cloudflare.svg) -Check out the [documentation](/workers/platform/built-with-cloudflare) for usage information. \ No newline at end of file +Check out the [documentation](/workers/platform/built-with-cloudflare) for usage information. diff --git a/src/content/changelog/workers/2025-09-11-increased-version-rollback-limit.mdx b/src/content/changelog/workers/2025-09-11-increased-version-rollback-limit.mdx index ad92d184dcdbf29..b36f8560a42c020 100644 --- a/src/content/changelog/workers/2025-09-11-increased-version-rollback-limit.mdx +++ b/src/content/changelog/workers/2025-09-11-increased-version-rollback-limit.mdx @@ -5,14 +5,15 @@ products: - workers date: 2025-09-11 --- + The number of recent versions available for a Worker rollback has been increased from 10 to 100. -This allows you to: +This allows you to: -* Promote any of the 100 most recent versions to be the active deployment. +- Promote any of the 100 most recent versions to be the active deployment. -* Split traffic using [gradual deployments](/workers/configuration/versions-and-deployments/gradual-deployments/) between your latest code and any of the 100 most recent versions. +- Split traffic using [gradual deployments](/workers/configuration/versions-and-deployments/gradual-deployments/) between your latest code and any of the 100 most recent versions. You can do this through the Cloudflare dashboard or with [Wrangler's rollback command](/workers/wrangler/commands/general/#rollback) -Learn more about [versioned deployments](/workers/configuration/versions-and-deployments/) and [rollbacks](/workers/configuration/versions-and-deployments/rollbacks/). +Learn more about [versioned deployments](/workers/configuration/versions-and-deployments/) and [rollbacks](/workers/configuration/versions-and-deployments/rollbacks/). diff --git a/src/content/changelog/workers/2025-09-17-update-preview-url-setting.mdx b/src/content/changelog/workers/2025-09-17-update-preview-url-setting.mdx index b43c774dfedb8db..36d8857e5b5101a 100644 --- a/src/content/changelog/workers/2025-09-17-update-preview-url-setting.mdx +++ b/src/content/changelog/workers/2025-09-17-update-preview-url-setting.mdx @@ -1,13 +1,15 @@ --- title: Preview URLs now default to opt-in -description: We performed a one-time update to disable preview URLs on Workers with workers.dev disabled to require an explicit opt-in. +description: We performed a one-time update to disable preview URLs on Workers with workers.dev disabled to require an explicit opt-in. date: 2025-09-17 --- + import { WranglerConfig, Aside } from "~/components"; -To prevent the accidental exposure of applications, we've updated how [Worker preview URLs](/workers/configuration/previews/) (`-..workers.dev`) are handled. We made this change to ensure preview URLs are only active when intentionally configured, improving the default security posture of your Workers. +To prevent the accidental exposure of applications, we've updated how [Worker preview URLs](/workers/configuration/previews/) (`-..workers.dev`) are handled. We made this change to ensure preview URLs are only active when intentionally configured, improving the default security posture of your Workers. ## One-Time Update for Workers with workers.dev Disabled + We performed a one-time update to disable preview URLs for existing Workers where the [workers.dev subdomain](/workers/configuration/routing/workers-dev/) was also disabled. Because preview URLs were historically enabled by default, users who had intentionally disabled their workers.dev route may not have realized their Worker was still accessible at a separate preview URL. This update was performed to ensure that using a preview URL is always an intentional, opt-in choice. diff --git a/src/content/changelog/workers/2025-09-19-ratelimit-workers-ga.mdx b/src/content/changelog/workers/2025-09-19-ratelimit-workers-ga.mdx index f4d8ebd421fb775..2e03e6d00a562e1 100644 --- a/src/content/changelog/workers/2025-09-19-ratelimit-workers-ga.mdx +++ b/src/content/changelog/workers/2025-09-19-ratelimit-workers-ga.mdx @@ -5,8 +5,8 @@ products: - workers date: 2025-09-19 --- - -[Rate Limiting within Cloudflare Workers](/workers/runtime-apis/bindings/rate-limit/) is now Generally Available (GA). + +[Rate Limiting within Cloudflare Workers](/workers/runtime-apis/bindings/rate-limit/) is now Generally Available (GA). The `ratelimit` binding is now stable and recommended for all production workloads. Existing deployments using the unsafe binding will continue to function to allow for a smooth transition. diff --git a/src/content/changelog/workers/2025-09-23-wrangler-dev-multi-config-cross-command-support.mdx b/src/content/changelog/workers/2025-09-23-wrangler-dev-multi-config-cross-command-support.mdx index 0af736a78a816cc..ae4a4020187a762 100644 --- a/src/content/changelog/workers/2025-09-23-wrangler-dev-multi-config-cross-command-support.mdx +++ b/src/content/changelog/workers/2025-09-23-wrangler-dev-multi-config-cross-command-support.mdx @@ -13,7 +13,6 @@ wrangler dev --config ./web/wrangler.jsonc --config ./api/wrangler.jsonc ``` Previously, if you ran the command above and then also ran wrangler dev for a different Worker, the Workers running in separate wrangler dev sessions could not communicate with each other. This prevented you from being able to use [Service Bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/) and [Tail Workers](https://developers.cloudflare.com/workers/observability/logs/tail-workers/) in local development, when running separate wrangler dev sessions. - Now, the following works as expected: ```sh @@ -28,17 +27,17 @@ These Workers can now communicate with each other across separate dev commands, ```js title="./api/src/index.ts" export default { - async fetch(request, env) { - // This service binding call now works across dev commands - const authorized = await env.AUTH.isAuthorized(request); + async fetch(request, env) { + // This service binding call now works across dev commands + const authorized = await env.AUTH.isAuthorized(request); - if (!authorized) { - return new Response('Unauthorized', { status: 401 }); - } + if (!authorized) { + return new Response("Unauthorized", { status: 401 }); + } - return new Response('Hello from API Worker!', { status: 200 }); - }, + return new Response("Hello from API Worker!", { status: 200 }); + }, }; ``` -Check out the [Developing with multiple Workers](/workers/development-testing/multi-workers) guide to learn more about the different approaches and when to use each one. \ No newline at end of file +Check out the [Developing with multiple Workers](/workers/development-testing/multi-workers) guide to learn more about the different approaches and when to use each one. diff --git a/src/content/changelog/workers/2025-09-26-analytics-engine-sql-enhancements.mdx b/src/content/changelog/workers/2025-09-26-analytics-engine-sql-enhancements.mdx index 811b7c54cb413df..efbdbc961f780a8 100644 --- a/src/content/changelog/workers/2025-09-26-analytics-engine-sql-enhancements.mdx +++ b/src/content/changelog/workers/2025-09-26-analytics-engine-sql-enhancements.mdx @@ -1,17 +1,19 @@ --- title: Workers Analytics Engine adds supports for new SQL functions -description: Workers Analytics Engine now supports additional SQL functions including new mathematical operations, aggregate functions, and bit functions! +description: Workers Analytics Engine now supports additional SQL functions including new mathematical operations, aggregate functions, and bit functions! date: 2025-10-02 products: - workers-analytics-engine --- + You can now perform more powerful queries directly in [Workers Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/) with a major expansion of our SQL function library. -Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API. +Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API. -Today, we've expanded Workers Analytics Engine's SQL capabilities with several new functions: +Today, we've expanded Workers Analytics Engine's SQL capabilities with several new functions: [**New aggregate functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/) + - `argMin()` - Returns the value associated with the minimum in a group - `argMax()` - Returns the value associated with the maximum in a group - `topK()` - Returns an array of the most frequent values in a group @@ -20,6 +22,7 @@ Today, we've expanded Workers Analytics Engine's SQL capabilities with several n - `last_value()` - Returns the last value in an ordered set of values within a partition [**New bit functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/bit-functions/) + - `bitAnd()` - Returns the bitwise AND of two expressions - `bitCount()` - Returns the number of bits set to one in the binary representation of a number - `bitHammingDistance()` - Returns the number of bits that differ between two numbers @@ -33,24 +36,28 @@ Today, we've expanded Workers Analytics Engine's SQL capabilities with several n - `bitXor()` - Returns the bitwise exclusive-or of two expressions [**New mathematical functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/mathematical-functions/) + - `abs()` - Returns the absolute value of a number - `log()` - Computes the natural logarithm of a number -- `round()` - Rounds a number to a specified number of decimal places +- `round()` - Rounds a number to a specified number of decimal places - `ceil()` - Rounds a number up to the nearest integer - `floor()` - Rounds a number down to the nearest integer - `pow()` - Returns a number raised to the power of another number [**New string functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/string-functions/) + - `lowerUTF8()` - Converts a string to lowercase using UTF-8 encoding - `upperUTF8()` - Converts a string to uppercase using UTF-8 encoding [**New encoding functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/encoding-functions/) + - `hex()` - Converts a number to its hexadecimal representation -- `bin()` - Converts a string to its binary representation +- `bin()` - Converts a string to its binary representation [**New type conversion functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/type-conversion-functions/) + - `toUInt8()` - Converts any numeric expression, or expression resulting in a string representation of a decimal, into an unsigned 8 bit integer +## Ready to get started? -## Ready to get started? -Whether you're building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. [Get started ](/analytics/analytics-engine/get-started/) with Workers Analytics Engine and explore all available functions in our [SQL reference documentation](/analytics/analytics-engine/sql-reference/). +Whether you're building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. [Get started ](/analytics/analytics-engine/get-started/) with Workers Analytics Engine and explore all available functions in our [SQL reference documentation](/analytics/analytics-engine/sql-reference/). diff --git a/src/content/changelog/workers/2025-09-26-ctx-exports.md b/src/content/changelog/workers/2025-09-26-ctx-exports.md index ca40c83e6442e7d..19bcc4be7d98ad5 100644 --- a/src/content/changelog/workers/2025-09-26-ctx-exports.md +++ b/src/content/changelog/workers/2025-09-26-ctx-exports.md @@ -12,17 +12,17 @@ Example: import { WorkerEntrypoint } from "cloudflare:workers"; export class Greeter extends WorkerEntrypoint { - greet(name) { - return `Hello, ${name}!`; - } + greet(name) { + return `Hello, ${name}!`; + } } export default { - async fetch(request, env, ctx) { - let greeting = await ctx.exports.Greeter.greet("World") - return new Response(greeting); - } -} + async fetch(request, env, ctx) { + let greeting = await ctx.exports.Greeter.greet("World"); + return new Response(greeting); + }, +}; ``` At present, you must use [the `enable_ctx_exports` compatibility flag](/workers/configuration/compatibility-flags#enable-ctxexports) to enable this API, though it will be on by default in the future. diff --git a/src/content/changelog/workers/2025-10-09-assets-terraform.mdx b/src/content/changelog/workers/2025-10-09-assets-terraform.mdx index 374f4f9426567ed..7ae62260c3c8ae4 100644 --- a/src/content/changelog/workers/2025-10-09-assets-terraform.mdx +++ b/src/content/changelog/workers/2025-10-09-assets-terraform.mdx @@ -5,7 +5,8 @@ products: - workers date: 2025-10-09 --- -import { Code } from 'astro-expressive-code/components'; + +import { Code } from "astro-expressive-code/components"; You can now upload Workers with [static assets](/workers/static-assets/) (like HTML, CSS, JavaScript, images) with the [Cloudflare Terraform provider v5.11.0](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs), making it even easier to deploy and manage full-stack apps with IaC. @@ -15,14 +16,12 @@ You can now upload Workers with [static assets](/workers/static-assets/) (like H You can get started today with [the Cloudflare Terraform provider (v5.11.0)](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs), using either the existing [`cloudflare_workers_script` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script), or the beta [`cloudflare_worker_version` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version). - ## Examples #### With `cloudflare_workers_script` Here's how you can use the existing [`cloudflare_workers_script`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_script) resource to upload your Worker code and assets in one shot. - ```hcl resource "cloudflare_workers_script" "my_app" { account_id = var.account_id @@ -82,10 +81,11 @@ resource "cloudflare_workers_deployment" "my_app_deployment" { ``` ## What's changed -Under the hood, the Cloudflare Terraform provider now handles the same logic that Wrangler uses for static asset uploads. This includes scanning your assets directory, computing hashes for each file, generating a manifest with file metadata, and calling the Cloudflare API to upload any missing files in chunks. We support large directories with parallel uploads and chunking, and when the asset manifest hash changes, we detect what's changed and trigger an upload for *only* those changed files. +Under the hood, the Cloudflare Terraform provider now handles the same logic that Wrangler uses for static asset uploads. This includes scanning your assets directory, computing hashes for each file, generating a manifest with file metadata, and calling the Cloudflare API to upload any missing files in chunks. We support large directories with parallel uploads and chunking, and when the asset manifest hash changes, we detect what's changed and trigger an upload for _only_ those changed files. ## Try it out -- Get started with [the Cloudflare Terraform provider (v5.11.0)](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs) + +- Get started with [the Cloudflare Terraform provider (v5.11.0)](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs) - You can use either the existing [`cloudflare_workers_script` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script) to upload your Worker code and assets in one resource. - Or you can use the new beta [`cloudflare_worker_version` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version) (along with the [`cloudflare_worker`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker) and [`cloudflare_workers_deployment`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment)) resources to more granularly control the lifecycle of each Worker resource. diff --git a/src/content/changelog/workers/2025-10-09-workflows-terraform.mdx b/src/content/changelog/workers/2025-10-09-workflows-terraform.mdx index a48ee31b4bd8245..8305f662b5ae806 100644 --- a/src/content/changelog/workers/2025-10-09-workflows-terraform.mdx +++ b/src/content/changelog/workers/2025-10-09-workflows-terraform.mdx @@ -20,8 +20,8 @@ resource "cloudflare_workflow" "my_workflow" { ``` # Examples -Here are full examples of how to configure `cloudflare_workflow` in Terraform, using the existing [`cloudflare_workers_script` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script), and the beta [`cloudflare_worker_version` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version). +Here are full examples of how to configure `cloudflare_workflow` in Terraform, using the existing [`cloudflare_workers_script` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workers_script), and the beta [`cloudflare_worker_version` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker_version). #### With `cloudflare_workflow` and `cloudflare_workers_script` @@ -44,10 +44,9 @@ resource "cloudflare_workflow" "workflow" { ``` - #### With `cloudflare_workflow`, and the new beta resources -You can more granularly control the lifecycle of each Worker resource using the beta [`cloudflare_worker_version`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/worker_version) resource, alongside the [`cloudflare_worker`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker) and [`cloudflare_workers_deployment`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment) resources. +You can more granularly control the lifecycle of each Worker resource using the beta [`cloudflare_worker_version`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/worker_version) resource, alongside the [`cloudflare_worker`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/worker) and [`cloudflare_workers_deployment`](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs/resources/workers_deployment) resources. ```hcl @@ -89,4 +88,5 @@ resource "cloudflare_workflow" "my_workflow" { ``` ## Try it out -- Get started with [the Cloudflare Terraform provider (v5.11.0)](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs) and the new [`cloudflare_workflow` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workflow). \ No newline at end of file + +- Get started with [the Cloudflare Terraform provider (v5.11.0)](https://registry.terraform.io/providers/cloudflare/cloudflare/5.11.0/docs) and the new [`cloudflare_workflow` resource](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/workflow). diff --git a/src/content/changelog/workers/2025-10-23-preview-url-default-behavior.mdx b/src/content/changelog/workers/2025-10-23-preview-url-default-behavior.mdx index 7e4144ec5e29a50..60b2deb83ab1bbe 100644 --- a/src/content/changelog/workers/2025-10-23-preview-url-default-behavior.mdx +++ b/src/content/changelog/workers/2025-10-23-preview-url-default-behavior.mdx @@ -3,20 +3,23 @@ title: Workers Preview URL default behavior now matches your workers.dev setting description: If a Workers Preview URL setting is not explicitly configured, its default behavior will now match the setting of the workers.dev subdomain. date: 2025-10-23 --- + We have updated the default behavior for Cloudflare Workers [Preview URLs](/workers/configuration/previews/). **Going forward, if a preview URL setting is not [explicitly configured](/workers/configuration/previews/#toggle-preview-urls-enable-or-disable) during deployment, its default behavior will automatically match the setting of your [`workers.dev` subdomain](/workers/configuration/routing/workers-dev/).** This change is intended to provide a more intuitive and secure experience by aligning your preview URL's default state with your `workers.dev` configuration to prevent cases where a preview URL might remain public even after you disabled your `workers.dev` route. **What this means for you:** + - **If neither setting is configured:** both the workers.dev route and the preview URL will default to enabled - **If your workers.dev route is enabled and you do not explicitly set Preview URLs to enabled or disabled:** Preview URLs will default to enabled - **If your workers.dev route is disabled and you do not explicitly set Preview URLs to enabled or disabled:** Preview URLs will default to disabled -You can override the default setting by explicitly enabling or disabling the preview URL in your Worker's configuration through the [API](/api/resources/workers/subresources/scripts/subresources/subdomain/), [Dashboard](/workers/configuration/previews/#from-the-dashboard), or [Wrangler](/workers/configuration/previews/#from-the-wrangler-configuration-file). +You can override the default setting by explicitly enabling or disabling the preview URL in your Worker's configuration through the [API](/api/resources/workers/subresources/scripts/subresources/subdomain/), [Dashboard](/workers/configuration/previews/#from-the-dashboard), or [Wrangler](/workers/configuration/previews/#from-the-wrangler-configuration-file). **Wrangler Version Behavior** The default behavior depends on the version of Wrangler you are using. This new logic applies to the latest version. Here is a summary of the behavior across different versions: + - **Before v4.34.0:** Preview URLs defaulted to enabled, regardless of the workers.dev setting. - **v4.34.0 up to (but not including) v4.44.0:** Preview URLs defaulted to disabled, regardless of the workers.dev setting. - **v4.44.0 or later:** Preview URLs now default to matching your workers.dev setting. @@ -27,7 +30,7 @@ In July, [we introduced preview URLs to Workers](/changelog/2025-07-23-workers-p To address this, we made a [one-time update](/changelog/2025-09-17-update-preview-url-setting/) to disable preview URLs on existing Workers that had their workers.dev route disabled and changed the default behavior to be disabled for all new deployments where a preview URL setting was not explicitly configured. -While this change helped secure many customers, it was disruptive for customers who keep their `workers.dev` route enabled and actively use the preview functionality, as it now required them to explicitly enable preview URLs on every redeployment.This new, more intuitive behavior ensures that your preview URL settings align with your `workers.dev` configuration by default, providing a more secure and predictable experience. +While this change helped secure many customers, it was disruptive for customers who keep their `workers.dev` route enabled and actively use the preview functionality, as it now required them to explicitly enable preview URLs on every redeployment.This new, more intuitive behavior ensures that your preview URL settings align with your `workers.dev` configuration by default, providing a more secure and predictable experience. **Securing access to `workers.dev` and preview URL endpoints** diff --git a/src/content/changelog/workers/2025-10-24-automatic-resource-provisioning.mdx b/src/content/changelog/workers/2025-10-24-automatic-resource-provisioning.mdx index 8d5b16c36bd1a5c..a4a42cacd6469f1 100644 --- a/src/content/changelog/workers/2025-10-24-automatic-resource-provisioning.mdx +++ b/src/content/changelog/workers/2025-10-24-automatic-resource-provisioning.mdx @@ -10,7 +10,7 @@ import { Render, TypeScriptExample, WranglerConfig } from "~/components"; Previously, if you wanted to develop or deploy a worker with attached resources, you'd have to first manually create the desired resources. Now, if your Wrangler configuration file includes a KV namespace, D1 database, or R2 bucket that does not yet exist on your account, you can develop locally and deploy your application seamlessly, without having to run additional commands. -Automatic provisioning is launching as an open beta, and we'd love to hear your feedback to help us make improvements! It currently works for KV, R2, and D1 bindings. You can disable the feature using the `--no-x-provision` flag. +Automatic provisioning is launching as an open beta, and we'd love to hear your feedback to help us make improvements! It currently works for KV, R2, and D1 bindings. You can disable the feature using the `--no-x-provision` flag. To use this feature, update to wrangler@4.45.0 and add bindings to your config file _without_ resource IDs e.g.: diff --git a/src/content/changelog/workers/2025-10-30-builds-preview.mdx b/src/content/changelog/workers/2025-10-30-builds-preview.mdx index 6d384a223acd212..b18b3bf98b7469f 100644 --- a/src/content/changelog/workers/2025-10-30-builds-preview.mdx +++ b/src/content/changelog/workers/2025-10-30-builds-preview.mdx @@ -10,8 +10,8 @@ You can now access [preview URLs](/workers/configuration/previews/) directly fro ![preview button](src/assets/images/changelog/workers/builds-preview-button.png) - **What's new** -* A **Preview** button now appears in the top-right corner of the build details page for successful builds -* Click it to instantly open the latest preview URL -* Matches the same experience you're familiar with from Pages + +- A **Preview** button now appears in the top-right corner of the build details page for successful builds +- Click it to instantly open the latest preview URL +- Matches the same experience you're familiar with from Pages diff --git a/src/content/changelog/workers/2025-11-09-cloudflare-env-variable.mdx b/src/content/changelog/workers/2025-11-09-cloudflare-env-variable.mdx index f405d7512be43a7..3d8cbe449a7111e 100644 --- a/src/content/changelog/workers/2025-11-09-cloudflare-env-variable.mdx +++ b/src/content/changelog/workers/2025-11-09-cloudflare-env-variable.mdx @@ -11,6 +11,7 @@ Wrangler now supports using the `CLOUDFLARE_ENV` [environment variable](/workers ## What's new **Environment selection via environment variable:** + - Set `CLOUDFLARE_ENV` to specify which environment to use for Wrangler commands - Works with all Wrangler commands that support the `--env` flag - The `--env` command line argument takes precedence over the `CLOUDFLARE_ENV` environment variable diff --git a/src/content/changelog/workers/2025-11-12-analytics-engine-further-sql-enhancements.mdx b/src/content/changelog/workers/2025-11-12-analytics-engine-further-sql-enhancements.mdx index aa66f983da252d7..cbf3d01a00ba625 100644 --- a/src/content/changelog/workers/2025-11-12-analytics-engine-further-sql-enhancements.mdx +++ b/src/content/changelog/workers/2025-11-12-analytics-engine-further-sql-enhancements.mdx @@ -5,18 +5,21 @@ date: 2025-11-12 products: - workers-analytics-engine --- + You can now perform more powerful queries directly in [Workers Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine/) with a major expansion of our SQL function library. -Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API. +Workers Analytics Engine allows you to ingest and store high-cardinality data at scale (such as custom analytics) and query your data through a simple SQL API. -Today, we've expanded Workers Analytics Engine's SQL capabilities with several new functions: +Today, we've expanded Workers Analytics Engine's SQL capabilities with several new functions: [**New aggregate functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/aggregate-functions/) + - `countIf()` - count the number of rows which satisfy a provided condition - `sumIf()` - calculate a sum from rows which satisfy a provided condition - `avgIf()` - calculate an average from rows which satisfy a provided condition [**New date and time functions:**](https://developers.cloudflare.com/analytics/analytics-engine/sql-reference/date-time-functions/) + - `toYear()` - `toMonth()` - `toDayOfMonth()` @@ -36,5 +39,6 @@ Today, we've expanded Workers Analytics Engine's SQL capabilities with several n - `today()` - `toYYYYMM()` -## Ready to get started? -Whether you're building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. [Get started ](/analytics/analytics-engine/get-started/) with Workers Analytics Engine and explore all available functions in our [SQL reference documentation](/analytics/analytics-engine/sql-reference/). +## Ready to get started? + +Whether you're building usage-based billing systems, customer analytics dashboards, or other custom analytics, these functions let you get the most out of your data. [Get started ](/analytics/analytics-engine/get-started/) with Workers Analytics Engine and explore all available functions in our [SQL reference documentation](/analytics/analytics-engine/sql-reference/). diff --git a/src/content/changelog/workers/2025-12-01-build-image-policies-dev-plat.mdx b/src/content/changelog/workers/2025-12-01-build-image-policies-dev-plat.mdx index 1151c4807768e2e..8a813cefea8b895 100644 --- a/src/content/changelog/workers/2025-12-01-build-image-policies-dev-plat.mdx +++ b/src/content/changelog/workers/2025-12-01-build-image-policies-dev-plat.mdx @@ -12,4 +12,4 @@ We've published build image policies for [Workers Builds](/workers/ci-cd/builds/ - **Major version updates**: Before preinstalled software reaches end-of-life, we update to the next stable LTS version with 3 months’ notice. - **Build image version deprecation (Pages only)**: We provide 6 months’ notice before deprecation. Projects on v1 or v2 will be automatically moved to v3 on their specified deprecation dates. -To prepare for updates, monitor the [Cloudflare Changelog](https://developers.cloudflare.com/changelog/), dashboard notifications, and email. You can also [override default versions](/workers/ci-cd/builds/build-image/#overriding-default-versions) to maintain specific versions. \ No newline at end of file +To prepare for updates, monitor the [Cloudflare Changelog](https://developers.cloudflare.com/changelog/), dashboard notifications, and email. You can also [override default versions](/workers/ci-cd/builds/build-image/#overriding-default-versions) to maintain specific versions. diff --git a/src/content/changelog/workers/2025-12-08-python-cold-start-improvements.mdx b/src/content/changelog/workers/2025-12-08-python-cold-start-improvements.mdx index 073712734586f32..f8224767a58f981 100644 --- a/src/content/changelog/workers/2025-12-08-python-cold-start-improvements.mdx +++ b/src/content/changelog/workers/2025-12-08-python-cold-start-improvements.mdx @@ -17,11 +17,11 @@ We set up a benchmark that imports common packages ([httpx](https://www.python-h [fastapi](https://fastapi.tiangolo.com/) and [pydantic](https://docs.pydantic.dev/latest/)) to see how Python Workers stack up against other platforms: -| Platform | Mean Cold Start (ms) | -|----------|----------------------| -| Cloudflare Python Workers | 1027 | -| AWS Lambda | 2502 | -| Google Cloud Run | 3069 | +| Platform | Mean Cold Start (ms) | +| ------------------------- | -------------------- | +| Cloudflare Python Workers | 1027 | +| AWS Lambda | 2502 | +| Google Cloud Run | 3069 | These benchmarks run continuously. You can view the results and the methodology on our [benchmark page](https://cold.edgeworker.net). diff --git a/src/content/changelog/workers/2025-12-08-python-pywrangler.mdx b/src/content/changelog/workers/2025-12-08-python-pywrangler.mdx index 47424c741ce45c1..6889ac1e31e515b 100644 --- a/src/content/changelog/workers/2025-12-08-python-pywrangler.mdx +++ b/src/content/changelog/workers/2025-12-08-python-pywrangler.mdx @@ -37,5 +37,4 @@ uv run pywrangler deploy Pywrangler automatically downloads and vendors the necessary packages for your Worker, and these packages are bundled with the Worker when you deploy. - Consult the [Python packages documentation](/workers/languages/python/packages/) for full details on Pywrangler and Python package management in Workers. diff --git a/src/content/changelog/workers/2025-12-08-vite-optional-config.mdx b/src/content/changelog/workers/2025-12-08-vite-optional-config.mdx index 2890f89b49db4ef..46b90006bdbbd44 100644 --- a/src/content/changelog/workers/2025-12-08-vite-optional-config.mdx +++ b/src/content/changelog/workers/2025-12-08-vite-optional-config.mdx @@ -8,4 +8,4 @@ date: 2025-12-08 When using the [Cloudflare Vite plugin](/workers/vite-plugin/) to build and deploy Workers, a Wrangler configuration file is now optional for assets-only (static) sites. If no `wrangler.toml`, `wrangler.json`, or `wrangler.jsonc` file is found, the plugin generates sensible defaults for an assets-only site. The `name` is based on the `package.json` or the project directory name, and the `compatibility_date` uses the latest date supported by your installed Miniflare version. -This allows easier setup for static sites using Vite. Note that SPAs will still need to [set `assets.not_found_handling` to `single-page-application`](https://developers.cloudflare.com/workers/static-assets/routing/single-page-application/) in order to function correctly. \ No newline at end of file +This allows easier setup for static sites using Vite. Note that SPAs will still need to [set `assets.not_found_handling` to `single-page-application`](https://developers.cloudflare.com/workers/static-assets/routing/single-page-application/) in order to function correctly. diff --git a/src/content/changelog/workers/2025-12-08-vite-programmatic-config.mdx b/src/content/changelog/workers/2025-12-08-vite-programmatic-config.mdx index b18355b4e98ed59..7be9426da4e23de 100644 --- a/src/content/changelog/workers/2025-12-08-vite-programmatic-config.mdx +++ b/src/content/changelog/workers/2025-12-08-vite-programmatic-config.mdx @@ -103,4 +103,4 @@ export default defineConfig({ }); ``` -For more details and examples, see [Programmatic configuration](/workers/vite-plugin/reference/programmatic-configuration/). \ No newline at end of file +For more details and examples, see [Programmatic configuration](/workers/vite-plugin/reference/programmatic-configuration/). diff --git a/src/content/changelog/workers/2025-12-16-vitest-ctx-exports-support.mdx b/src/content/changelog/workers/2025-12-16-vitest-ctx-exports-support.mdx index 64b1e78e3c965cc..c171a822bbc5fa6 100644 --- a/src/content/changelog/workers/2025-12-16-vitest-ctx-exports-support.mdx +++ b/src/content/changelog/workers/2025-12-16-vitest-ctx-exports-support.mdx @@ -15,9 +15,9 @@ import { createExecutionContext } from "cloudflare:test"; import { it, expect } from "vitest"; it("can access ctx.exports", async () => { - const ctx = createExecutionContext(); - const result = await ctx.exports.MyEntryPoint.myMethod(); - expect(result).toBe("expected value"); + const ctx = createExecutionContext(); + const result = await ctx.exports.MyEntryPoint.myMethod(); + expect(result).toBe("expected value"); }); ``` @@ -28,8 +28,8 @@ import { exports } from "cloudflare:workers"; import { it, expect } from "vitest"; it("can access imported exports", async () => { - const result = await exports.MyEntryPoint.myMethod(); - expect(result).toBe("expected value"); + const result = await exports.MyEntryPoint.myMethod(); + expect(result).toBe("expected value"); }); ``` diff --git a/src/content/changelog/workers/2025-12-19-tanstack-start-prerendering.mdx b/src/content/changelog/workers/2025-12-19-tanstack-start-prerendering.mdx index 2a6b5bff0742249..7f91b0a340dd8fd 100644 --- a/src/content/changelog/workers/2025-12-19-tanstack-start-prerendering.mdx +++ b/src/content/changelog/workers/2025-12-19-tanstack-start-prerendering.mdx @@ -6,8 +6,8 @@ products: date: 2025-12-19 --- -[TanStack Start](https://tanstack.com/start/) apps can now prerender routes to static HTML at build time with access to build time environment variables -and bindings, and serve them as [static assets](/workers/static-assets/). To enable prerendering, configure the `prerender` option of the TanStack Start plugin in your Vite config: +[TanStack Start](https://tanstack.com/start/) apps can now prerender routes to static HTML at build time with access to build time environment variables +and bindings, and serve them as [static assets](/workers/static-assets/). To enable prerendering, configure the `prerender` option of the TanStack Start plugin in your Vite config: ```ts title="vite.config.ts" import { defineConfig } from "vite"; @@ -15,14 +15,14 @@ import { cloudflare } from "@cloudflare/vite-plugin"; import { tanstackStart } from "@tanstack/react-start/plugin/vite"; export default defineConfig({ - plugins: [ - cloudflare({ viteEnvironment: { name: "ssr" } }), - tanstackStart({ - prerender: { - enabled: true, - }, - }), - ], + plugins: [ + cloudflare({ viteEnvironment: { name: "ssr" } }), + tanstackStart({ + prerender: { + enabled: true, + }, + }), + ], }); ``` diff --git a/src/content/changelog/workers/2026-02-15-workers-best-practices.mdx b/src/content/changelog/workers/2026-02-15-workers-best-practices.mdx index c28886f2273eb0a..f027c8fd04d6f0d 100644 --- a/src/content/changelog/workers/2026-02-15-workers-best-practices.mdx +++ b/src/content/changelog/workers/2026-02-15-workers-best-practices.mdx @@ -26,6 +26,7 @@ Key guidance includes: ``` + - **Generate binding types with `wrangler types`** — Never hand-write your `Env` interface. Let Wrangler generate it from your actual configuration to catch mismatches at compile time. - **Stream request and response bodies** — Avoid buffering large payloads in memory. Use `TransformStream` and `pipeTo` to stay within the 128 MB memory limit and improve time-to-first-byte. - **Use bindings, not REST APIs** — Bindings to KV, R2, D1, Queues, and other Cloudflare services are direct, in-process references with no network hop and no authentication overhead. diff --git a/src/content/changelog/workers/2026-03-27-rfc9440-mtls-fields.mdx b/src/content/changelog/workers/2026-03-27-rfc9440-mtls-fields.mdx index c153f96598e79c4..7e14d709a1a753e 100644 --- a/src/content/changelog/workers/2026-03-27-rfc9440-mtls-fields.mdx +++ b/src/content/changelog/workers/2026-03-27-rfc9440-mtls-fields.mdx @@ -8,31 +8,36 @@ Four new fields are now available on `request.cf.tlsClientAuth` in Workers for r ### New fields -| Field | Type | Description | -| --- | --- | --- | -| `certRFC9440` | String | The client leaf certificate in RFC 9440 format (`:base64-DER:`). Empty if no client certificate was presented. | -| `certRFC9440TooLarge` | Boolean | `true` if the leaf certificate exceeded 10 KB and was omitted from `certRFC9440`. | -| `certChainRFC9440` | String | The intermediate certificate chain in RFC 9440 format as a comma-separated list. Empty if no intermediates were sent or if the chain exceeded 16 KB. | -| `certChainRFC9440TooLarge` | Boolean | `true` if the intermediate chain exceeded 16 KB and was omitted from `certChainRFC9440`. | +| Field | Type | Description | +| -------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `certRFC9440` | String | The client leaf certificate in RFC 9440 format (`:base64-DER:`). Empty if no client certificate was presented. | +| `certRFC9440TooLarge` | Boolean | `true` if the leaf certificate exceeded 10 KB and was omitted from `certRFC9440`. | +| `certChainRFC9440` | String | The intermediate certificate chain in RFC 9440 format as a comma-separated list. Empty if no intermediates were sent or if the chain exceeded 16 KB. | +| `certChainRFC9440TooLarge` | Boolean | `true` if the intermediate chain exceeded 16 KB and was omitted from `certChainRFC9440`. | ### Example: forwarding client certificate headers to your origin ```js export default { - async fetch(request) { - const tls = request.cf.tlsClientAuth; - - // Only forward if cert was verified and chain is complete - if (!tls || !tls.certVerified || tls.certRevoked || tls.certChainRFC9440TooLarge) { - return new Response("Unauthorized", { status: 401 }); - } - - const headers = new Headers(request.headers); - headers.set("Client-Cert", tls.certRFC9440); - headers.set("Client-Cert-Chain", tls.certChainRFC9440); - - return fetch(new Request(request, { headers })); - }, + async fetch(request) { + const tls = request.cf.tlsClientAuth; + + // Only forward if cert was verified and chain is complete + if ( + !tls || + !tls.certVerified || + tls.certRevoked || + tls.certChainRFC9440TooLarge + ) { + return new Response("Unauthorized", { status: 401 }); + } + + const headers = new Headers(request.headers); + headers.set("Client-Cert", tls.certRFC9440); + headers.set("Client-Cert-Chain", tls.certChainRFC9440); + + return fetch(new Request(request, { headers })); + }, }; ``` diff --git a/src/content/changelog/workers/2026-04-01-l4-transport-telemetry-fields.mdx b/src/content/changelog/workers/2026-04-01-l4-transport-telemetry-fields.mdx index 1a9e3164168578c..c311cbdd393dadd 100644 --- a/src/content/changelog/workers/2026-04-01-l4-transport-telemetry-fields.mdx +++ b/src/content/changelog/workers/2026-04-01-l4-transport-telemetry-fields.mdx @@ -10,31 +10,33 @@ Previously, this telemetry was only available via the `Server-Timing: cfL4` resp ### New properties -| Property | Type | Description | -| --- | --- | --- | -| `clientTcpRtt` | number \| undefined | The smoothed TCP round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for TCP connections (HTTP/1, HTTP/2). For example, `22`. | -| `clientQuicRtt` | number \| undefined | The smoothed QUIC round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for QUIC connections (HTTP/3). For example, `42`. | -| `edgeL4` | Object \| undefined | Layer 4 transport statistics. Contains `deliveryRate` (number) — the most recent data delivery rate estimate for the connection, in bytes per second. For example, `123456`. | +| Property | Type | Description | +| --------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `clientTcpRtt` | number \| undefined | The smoothed TCP round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for TCP connections (HTTP/1, HTTP/2). For example, `22`. | +| `clientQuicRtt` | number \| undefined | The smoothed QUIC round-trip time (RTT) between Cloudflare and the client in milliseconds. Only present for QUIC connections (HTTP/3). For example, `42`. | +| `edgeL4` | Object \| undefined | Layer 4 transport statistics. Contains `deliveryRate` (number) — the most recent data delivery rate estimate for the connection, in bytes per second. For example, `123456`. | ### Example: Log connection quality metrics ```js export default { - async fetch(request) { - const cf = request.cf; + async fetch(request) { + const cf = request.cf; - const rtt = cf.clientTcpRtt ?? cf.clientQuicRtt ?? 0; - const deliveryRate = cf.edgeL4?.deliveryRate ?? 0; - const transport = cf.clientTcpRtt ? "TCP" : "QUIC"; + const rtt = cf.clientTcpRtt ?? cf.clientQuicRtt ?? 0; + const deliveryRate = cf.edgeL4?.deliveryRate ?? 0; + const transport = cf.clientTcpRtt ? "TCP" : "QUIC"; - console.log(`Transport: ${transport}, RTT: ${rtt}ms, Delivery rate: ${deliveryRate} B/s`); + console.log( + `Transport: ${transport}, RTT: ${rtt}ms, Delivery rate: ${deliveryRate} B/s`, + ); - const headers = new Headers(request.headers); - headers.set("X-Client-RTT", String(rtt)); - headers.set("X-Delivery-Rate", String(deliveryRate)); + const headers = new Headers(request.headers); + headers.set("X-Client-RTT", String(rtt)); + headers.set("X-Delivery-Rate", String(deliveryRate)); - return fetch(new Request(request, { headers })); - }, + return fetch(new Request(request, { headers })); + }, }; ``` diff --git a/src/content/changelog/workers/2026-05-06-react-nextjs-vulnerabilities.mdx b/src/content/changelog/workers/2026-05-06-react-nextjs-vulnerabilities.mdx index 47a711a702b2fba..ffd136835ae4bc4 100644 --- a/src/content/changelog/workers/2026-05-06-react-nextjs-vulnerabilities.mdx +++ b/src/content/changelog/workers/2026-05-06-react-nextjs-vulnerabilities.mdx @@ -9,7 +9,7 @@ date: 2026-05-07 12:00:00 UTC Multiple security vulnerabilities were disclosed by the React team and Vercel affecting React Server Components and Next.js. These include denial of service, middleware and proxy bypass, server-side request forgery, cross-site scripting, and cache poisoning issues across a range of severity levels. -**We strongly recommend updating your application and its dependencies immediately.** Patched versions are available for React (`react-server-dom-webpack`, `react-server-dom-parcel`, and `react-server-dom-turbopack` `19.0.6`, `19.1.7`, and `19.2.6`) and Next.js (`15.5.16` and `16.2.5`). +**We strongly recommend updating your application and its dependencies immediately.** Patched versions are available for React (`react-server-dom-webpack`, `react-server-dom-parcel`, and `react-server-dom-turbopack` `19.0.6`, `19.1.7`, and `19.2.6`) and Next.js (`15.5.16` and `16.2.5`). ## WAF protections diff --git a/src/content/changelog/workflows/2025-01-15-workflows-more-steps.mdx b/src/content/changelog/workflows/2025-01-15-workflows-more-steps.mdx index 48963056126296d..7f215858ca21722 100644 --- a/src/content/changelog/workflows/2025-01-15-workflows-more-steps.mdx +++ b/src/content/changelog/workflows/2025-01-15-workflows-more-steps.mdx @@ -10,8 +10,8 @@ date: 2025-01-15 We've also added: -* `instanceId` as property to the [`WorkflowEvent`](/workflows/build/workers-api/#workflowevent) type, allowing you to retrieve the current instance ID from within a running Workflow instance -* Improved queueing logic for Workflow instances beyond the current maximum concurrent instances, reducing the cases where instances are stuck in the queued state. -* Support for [`pause` and `resume`](/workflows/build/workers-api/#pause) for Workflow instances in a queued state. +- `instanceId` as property to the [`WorkflowEvent`](/workflows/build/workers-api/#workflowevent) type, allowing you to retrieve the current instance ID from within a running Workflow instance +- Improved queueing logic for Workflow instances beyond the current maximum concurrent instances, reducing the cases where instances are stuck in the queued state. +- Support for [`pause` and `resume`](/workflows/build/workers-api/#pause) for Workflow instances in a queued state. We're continuing to work on increases to the number of concurrent Workflow instances, steps, and support for a new `waitForEvent` API over the coming weeks. diff --git a/src/content/changelog/workflows/2025-10-28-raising-limits.mdx b/src/content/changelog/workflows/2025-10-28-raising-limits.mdx index dbd052de60e2fc7..4f047f473ce8ee4 100644 --- a/src/content/changelog/workflows/2025-10-28-raising-limits.mdx +++ b/src/content/changelog/workflows/2025-10-28-raising-limits.mdx @@ -9,9 +9,9 @@ date: 2025-10-31 We've raised the [Cloudflare Workflows](/workflows/) account-level limits for all accounts on the [Workers paid plan](/workers/platform/pricing/): -* **Instance creation rate** increased from 100 workflow instances per 10 seconds to 100 instances per second -* **Concurrency limit** increased from 4,500 to 10,000 workflow instances per account +- **Instance creation rate** increased from 100 workflow instances per 10 seconds to 100 instances per second +- **Concurrency limit** increased from 4,500 to 10,000 workflow instances per account -These increases mean you can create new instances up to 10x faster, and have more workflow instances concurrently executing. To learn more and get started with Workflows, refer to [the getting started guide](/workflows/get-started/guide/). +These increases mean you can create new instances up to 10x faster, and have more workflow instances concurrently executing. To learn more and get started with Workflows, refer to [the getting started guide](/workflows/get-started/guide/). If your application requires a higher limit, fill out the [Limit Increase Request Form](/workers/platform/limits/) or contact your account team. Please refer to [Workflows pricing](/workflows/reference/pricing/) for more information. diff --git a/src/content/changelog/workflows/2026-03-23-local-dev-instance-methods.mdx b/src/content/changelog/workflows/2026-03-23-local-dev-instance-methods.mdx index 90eef81c9251ce0..e29d175b6b83ba6 100644 --- a/src/content/changelog/workflows/2026-03-23-local-dev-instance-methods.mdx +++ b/src/content/changelog/workflows/2026-03-23-local-dev-instance-methods.mdx @@ -20,4 +20,4 @@ await instance.pause(); // pauses a running workflow instance await instance.resume(); // resumes a paused instance await instance.restart(); // restarts the instance from the beginning await instance.terminate(); // terminates the instance immediately -``` \ No newline at end of file +``` diff --git a/src/content/changelog/workflows/2026-05-01-dynamic-workflows.mdx b/src/content/changelog/workflows/2026-05-01-dynamic-workflows.mdx index 4afac919aa7d970..93eb46096142460 100644 --- a/src/content/changelog/workflows/2026-05-01-dynamic-workflows.mdx +++ b/src/content/changelog/workflows/2026-05-01-dynamic-workflows.mdx @@ -7,15 +7,15 @@ products: date: 2026-05-01 --- -You can now use [`@cloudflare/dynamic-workflows`](https://github.com/cloudflare/dynamic-workflows) to run a [Workflow](/workflows/) inside a [Dynamic Worker](/dynamic-workers/), ensuring durable execution for code that is loaded at runtime. +You can now use [`@cloudflare/dynamic-workflows`](https://github.com/cloudflare/dynamic-workflows) to run a [Workflow](/workflows/) inside a [Dynamic Worker](/dynamic-workers/), ensuring durable execution for code that is loaded at runtime. The Worker Loader loads Dynamic Workers on demand, which previously made durability challenging. Even within a Dynamic Worker, a Workflow might sleep for hours or days between steps, and by the time it resumes, the original Dynamic Worker code would no longer be in memory. -The library solves this by tagging each Workflow instance with metadata that identifies which Dynamic Worker to load — for example, a tenant ID — then reloading the matching Dynamic Worker through the Worker Loader whenever a Workflow awakens. +The library solves this by tagging each Workflow instance with metadata that identifies which Dynamic Worker to load — for example, a tenant ID — then reloading the matching Dynamic Worker through the Worker Loader whenever a Workflow awakens. Because Dynamic Workers are created on-demand, you do not have to register each Workflow up front or manage them individually. Load the Workflow code in the Dynamic Worker when it is needed, and the Workflows engine handles persistence and retries behind the scenes. Your Workflow code itself is unaffected by the routing and behaves as normal. -This unlocks patterns where the Workflow code itself is dynamic. For example, this is useful with: +This unlocks patterns where the Workflow code itself is dynamic. For example, this is useful with: - **SaaS platforms** where each tenant defines their own automation, such as onboarding sequences, approval chains, or billing retry logic. - **AI agent frameworks** where agents generate and execute multi-step plans at runtime, surviving restarts and waiting for human approval between tool calls. diff --git a/src/content/compatibility-flags/allow-custom-ports.md b/src/content/compatibility-flags/allow-custom-ports.md index 4a9cf4a9b5f6932..537127433070005 100644 --- a/src/content/compatibility-flags/allow-custom-ports.md +++ b/src/content/compatibility-flags/allow-custom-ports.md @@ -22,6 +22,7 @@ For example: ```js const response = await fetch("https://example.com:8000"); ``` + With allow_custom_ports the above example would fetch `https://example.com:8000` rather than `https://example.com:443`. diff --git a/src/content/compatibility-flags/enable-nodejs-http-modules.md b/src/content/compatibility-flags/enable-nodejs-http-modules.md index b28f784408c15f9..2bfccf48ee0d939 100644 --- a/src/content/compatibility-flags/enable-nodejs-http-modules.md +++ b/src/content/compatibility-flags/enable-nodejs-http-modules.md @@ -21,10 +21,10 @@ This enables compatibility with Node.js libraries and existing code that use the standard node:http and node:https APIs for making HTTP requests. The available functionality includes: -* `http.request()` and `https.request()` for making HTTP/HTTPS requests -* `http.get()` and `https.get()` for making GET requests -* Request and response objects with standard Node.js APIs -* Support for standard HTTP methods, headers, and options +- `http.request()` and `https.request()` for making HTTP/HTTPS requests +- `http.get()` and `https.get()` for making GET requests +- Request and response objects with standard Node.js APIs +- Support for standard HTTP methods, headers, and options See the [Node.js documentation](https://nodejs.org/docs/latest/api/http.html) for more details about the Node.js APIs. diff --git a/src/content/compatibility-flags/enable-nodejs-http-server-modules.md b/src/content/compatibility-flags/enable-nodejs-http-server-modules.md index 1e31b6a8b5508a4..b4b92da33a8f73b 100644 --- a/src/content/compatibility-flags/enable-nodejs-http-server-modules.md +++ b/src/content/compatibility-flags/enable-nodejs-http-server-modules.md @@ -20,9 +20,9 @@ server modules. This enables compatibility with Node.js libraries and existing code that use the standard Node.js HTTP server APIs. The available functionality includes: -* `http.createServer()` for creating HTTP servers -* `http.Server` class for server instances -* `http.ServerResponse` for handling server responses +- `http.createServer()` for creating HTTP servers +- `http.Server` class for server instances +- `http.ServerResponse` for handling server responses This flag must be used in combination with the `enable_nodejs_http_modules` flag to enable full features of `node:http`. @@ -30,4 +30,4 @@ to enable full features of `node:http`. This flag is automatically enabled for Workers using a compatibility date of 2025-09-01 or later when `nodejs_compat` is enabled. -See the [Node.js documentation](https://nodejs.org/docs/latest/api/http.html) for more details about the Node.js HTTP APIs. \ No newline at end of file +See the [Node.js documentation](https://nodejs.org/docs/latest/api/http.html) for more details about the Node.js HTTP APIs. diff --git a/src/content/compatibility-flags/fetcher-no-get-put-delete.md b/src/content/compatibility-flags/fetcher-no-get-put-delete.md index d38f2d504089ae8..dcf2a945b94649b 100644 --- a/src/content/compatibility-flags/fetcher-no-get-put-delete.md +++ b/src/content/compatibility-flags/fetcher-no-get-put-delete.md @@ -18,4 +18,3 @@ Historically, API objects that had such a `fetch()` method also had methods `get These methods were a very early idea from many years ago, but were never actually documented, and therefore rarely (if ever) used. Enabling the `fetcher_no_get_put_delete`, or setting a compatibility date on or after `2024-03-26` disables these methods for your Worker. This change paves a future path for you to be able to define your own custom methods using these names. Without this change, you would be unable to define your own `get`, `put`, and `delete` methods, since they would conflict with these built-in helper methods. - diff --git a/src/content/compatibility-flags/js-weak-refs.md b/src/content/compatibility-flags/js-weak-refs.md index 718f8818a545c01..061ea4e608cd187 100644 --- a/src/content/compatibility-flags/js-weak-refs.md +++ b/src/content/compatibility-flags/js-weak-refs.md @@ -12,6 +12,7 @@ disable_flag: "disable_weak_ref" --- Enables the use of [`FinalizationRegistry`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry) and [`WeakRef`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef) built-ins. + - `FinalizationRegistry` allows you to register a cleanup callback that runs after an object has been garbage-collected. - `WeakRef` creates a weak reference to an object, allowing it to be garbage-collected if no other strong references exist. @@ -21,4 +22,4 @@ Enables the use of [`FinalizationRegistry`](https://developer.mozilla.org/en-US/ :::caution These APIs are fundamentally non-deterministic. The timing and execution of garbage collection are unpredictable, and you **should not rely on them for essential program logic**. Additionally, cleanup callbacks registered with `FinalizationRegistry` may **never be executed**, including but not limited to cases where garbage collection is not triggered, or your Worker gets evicted. -::: \ No newline at end of file +::: diff --git a/src/content/compatibility-flags/new-url-parser-implementation.md b/src/content/compatibility-flags/new-url-parser-implementation.md index 55b21a5be67018c..9ec8017e42ea670 100644 --- a/src/content/compatibility-flags/new-url-parser-implementation.md +++ b/src/content/compatibility-flags/new-url-parser-implementation.md @@ -13,17 +13,17 @@ disable_flag: "url_original" The original implementation of the [`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL) API in Workers was not fully compliant with the [WHATWG URL Standard](https://url.spec.whatwg.org/), differing in several ways, including: -* The original implementation collapsed sequences of multiple slashes into a single slash: +- The original implementation collapsed sequences of multiple slashes into a single slash: `new URL("https://example.com/a//b").toString() === "https://example.com/a/b"` -* The original implementation would throw `"TypeError: Invalid URL string."` if it encountered invalid percent-encoded escape sequences, like `https://example.com/a%%b`. +- The original implementation would throw `"TypeError: Invalid URL string."` if it encountered invalid percent-encoded escape sequences, like `https://example.com/a%%b`. -* The original implementation would percent-encode or percent-decode certain content differently: +- The original implementation would percent-encode or percent-decode certain content differently: `new URL("https://example.com/a%40b?c d%20e?f").toString() === "https://example.com/a@b?c+d+e%3Ff"` -* The original implementation lacked more recently implemented `URL` features, like [`URL.canParse()`](https://developer.mozilla.org/en-US/docs/Web/API/URL/canParse_static). +- The original implementation lacked more recently implemented `URL` features, like [`URL.canParse()`](https://developer.mozilla.org/en-US/docs/Web/API/URL/canParse_static). Set the compatibility date of your Worker to a date after `2022-10-31` or enable the `url_standard` compatibility flag to opt-in the fully spec compliant `URL` API implementation. diff --git a/src/content/compatibility-flags/nodejs-compat.md b/src/content/compatibility-flags/nodejs-compat.md index 80bfc4fec1b0734..6eb72d18070e7de 100644 --- a/src/content/compatibility-flags/nodejs-compat.md +++ b/src/content/compatibility-flags/nodejs-compat.md @@ -14,12 +14,12 @@ Enables [Node.js APIs](/workers/runtime-apis/nodejs/) in the Workers Runtime. Note that some Node.js APIs are only enabled if your Worker's compatibility date is set to on or after the following dates: -| Node.js API | Enabled after | -|---|---| -| [`http.server`](/workers/configuration/compatibility-flags/#enable-nodejs-http-server-modules) | `2025-09-01` | -| [`node:http`, `node:https`](/workers/configuration/compatibility-flags/#enable-availability-of-nodehttp-and-nodehttps-modules) | `2025-08-15` | -| [`process.env`](/workers/configuration/compatibility-flags/#enable-auto-populating-processenv) | `2025-04-01` | -| [Disable Top-level Await in `require()`](/workers/configuration/compatibility-flags/#disable-top-level-await-in-require) | `2024-12-02` | +| Node.js API | Enabled after | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------- | +| [`http.server`](/workers/configuration/compatibility-flags/#enable-nodejs-http-server-modules) | `2025-09-01` | +| [`node:http`, `node:https`](/workers/configuration/compatibility-flags/#enable-availability-of-nodehttp-and-nodehttps-modules) | `2025-08-15` | +| [`process.env`](/workers/configuration/compatibility-flags/#enable-auto-populating-processenv) | `2025-04-01` | +| [Disable Top-level Await in `require()`](/workers/configuration/compatibility-flags/#disable-top-level-await-in-require) | `2024-12-02` | When enabling `nodejs_compat`, we recommend using the latest version of [Wrangler CLI](/workers/wrangler/), and the latest compatiblity date, in order to maximize compatibility. Some older versions of Wrangler inject additional polyfills that are no longer neccessary, as they are provided by the Workers runtime, if your Worker is using a more recent compatibility date. diff --git a/src/content/compatibility-flags/queue-consumer-no-wait-waituntil.md b/src/content/compatibility-flags/queue-consumer-no-wait-waituntil.md index 82a917d18ac5162..458d6f154b4f789 100644 --- a/src/content/compatibility-flags/queue-consumer-no-wait-waituntil.md +++ b/src/content/compatibility-flags/queue-consumer-no-wait-waituntil.md @@ -13,26 +13,29 @@ enable_flag: "queue_consumer_no_wait_for_wait_until" By default, [Queues](/queues/) Consumer Workers acknowledge messages only after promises passed to [`ctx.waitUntil()`](/workers/runtime-apis/context) have resolved. This behavior can cause queue consumers which utilize `ctx.waitUntil()` to process messages slowly. The default behavior is documented in the [Queues Consumer Configuration Guide](/queues/configuration/javascript-apis#consumer). This Consumer Worker is an example of a Worker which utilizes `ctx.waitUntil()`. Under the default behavior, this consumer Worker will only acknowledge a batch of messages after the sleep function has resolved. + ```js export default { - async fetch(request, env, ctx) { - // omitted - }, - - async queue(batch, env, ctx) { - console.log(`received batch of ${batch.messages.length} messages to queue ${batch.queue}`); - for (let i = 0; i < batch.messages.length; ++i) { - console.log(`message #${i}: ${JSON.stringify(batch.messages[i])}`); - } - ctx.waitUntil(sleep(30 * 1000)); - } + async fetch(request, env, ctx) { + // omitted + }, + + async queue(batch, env, ctx) { + console.log( + `received batch of ${batch.messages.length} messages to queue ${batch.queue}`, + ); + for (let i = 0; i < batch.messages.length; ++i) { + console.log(`message #${i}: ${JSON.stringify(batch.messages[i])}`); + } + ctx.waitUntil(sleep(30 * 1000)); + }, }; function sleep(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); + return new Promise((resolve) => setTimeout(resolve, ms)); } ``` If the `queue_consumer_no_wait_for_wait_until` flag is enabled, Queues consumers will no longer wait for promises passed to `ctx.waitUntil()` to resolve before acknowledging messages. This can improve the performance of queue consumers which utilize `ctx.waitUntil()`. With the flag enabled, in the above example, the consumer Worker will acknowledge the batch without waiting for the sleep function to resolve. -Using this flag will not affect the behavior of `ctx.waitUntil()`. `ctx.waitUntil()` will continue to extend the lifetime of your consumer Worker to continue to work even after the batch of messages has been acknowledged. \ No newline at end of file +Using this flag will not affect the behavior of `ctx.waitUntil()`. `ctx.waitUntil()` will continue to extend the lifetime of your consumer Worker to continue to work even after the batch of messages has been acknowledged. diff --git a/src/content/compatibility-flags/queues-json-messages.md b/src/content/compatibility-flags/queues-json-messages.md index ed871f0ed83b10b..468e5bc0c452ce5 100644 --- a/src/content/compatibility-flags/queues-json-messages.md +++ b/src/content/compatibility-flags/queues-json-messages.md @@ -11,4 +11,4 @@ enable_flag: "queues_json_messages" disable_flag: "no_queues_json_messages" --- -With the `queues_json_messages` flag set, Queue bindings will serialize values passed to `send()` or `sendBatch()` into JSON format by default (when no specific `contentType` is provided). \ No newline at end of file +With the `queues_json_messages` flag set, Queue bindings will serialize values passed to `send()` or `sendBatch()` into JSON format by default (when no specific `contentType` is provided). diff --git a/src/content/compatibility-flags/request-signal.md b/src/content/compatibility-flags/request-signal.md index e60e43e66403e2f..75a494da250906c 100644 --- a/src/content/compatibility-flags/request-signal.md +++ b/src/content/compatibility-flags/request-signal.md @@ -5,4 +5,4 @@ enable_flag: "enable_request_signal" disable_flag: "disable_request_signal" --- -When you use the `enable_request_signal` compatibility flag, you can attach an event listener to [`Request`](/workers/runtime-apis/request/) objects, using the [`signal` property](https://developer.mozilla.org/en-US/docs/Web/API/Request/signal). This allows you to perform tasks when the request to your Worker is canceled by the client. \ No newline at end of file +When you use the `enable_request_signal` compatibility flag, you can attach an event listener to [`Request`](/workers/runtime-apis/request/) objects, using the [`signal` property](https://developer.mozilla.org/en-US/docs/Web/API/Request/signal). This allows you to perform tasks when the request to your Worker is canceled by the client. diff --git a/src/content/compatibility-flags/streams-byob-reader-detaches-buffer.md b/src/content/compatibility-flags/streams-byob-reader-detaches-buffer.md index 994a6a724e2f465..3cdf43761777395 100644 --- a/src/content/compatibility-flags/streams-byob-reader-detaches-buffer.md +++ b/src/content/compatibility-flags/streams-byob-reader-detaches-buffer.md @@ -20,12 +20,12 @@ User code should never try to reuse an `ArrayBuffer` that has been passed into a let reader = readable.getReader({ mode: "byob" }); let arrayBufferView = new Uint8Array(4096); while (true) { - let result = await reader.read(arrayBufferView); - if (result.done) break; - // Optionally something with `result` here. - // Re-use the same memory for the next `read()` by creating - // a new Uint8Array backed by the result's ArrayBuffer. - arrayBufferView = new Uint8Array(result.value.buffer); + let result = await reader.read(arrayBufferView); + if (result.done) break; + // Optionally something with `result` here. + // Re-use the same memory for the next `read()` by creating + // a new Uint8Array backed by the result's ArrayBuffer. + arrayBufferView = new Uint8Array(result.value.buffer); } ``` diff --git a/src/content/compatibility-flags/strict-crypto.md b/src/content/compatibility-flags/strict-crypto.md index 91a77815dd82fde..17274d7e485ef60 100644 --- a/src/content/compatibility-flags/strict-crypto.md +++ b/src/content/compatibility-flags/strict-crypto.md @@ -14,6 +14,7 @@ disable_flag: "no_strict_crypto_checks" --- Perform additional error checking in the Web Crypto API to conform with the specification and reject possibly unsafe key parameters: + - For RSA key generation, key sizes are required to be multiples of 128 bits as boringssl may otherwise truncate the key. - The size of imported RSA keys must be at least 256 bits and at most 16384 bits, as with newly generated keys. - The public exponent for imported RSA keys is restricted to the commonly used values `[3, 17, 37, 65537]`. diff --git a/src/content/compatibility-flags/throw-on-unrecognized-import-assertion.md b/src/content/compatibility-flags/throw-on-unrecognized-import-assertion.md index 15ea7891dc4fcad..3b380e857412453 100644 --- a/src/content/compatibility-flags/throw-on-unrecognized-import-assertion.md +++ b/src/content/compatibility-flags/throw-on-unrecognized-import-assertion.md @@ -19,4 +19,3 @@ attribute is encountered that is not recognized. When the `ignore_unrecognized_import_assertion` flag is set, Workers will ignore unrecognized import attributes. - diff --git a/src/content/compatibility-flags/to-string-tag.md b/src/content/compatibility-flags/to-string-tag.md index 1de8e533db3f8bb..6fc298a87c182de 100644 --- a/src/content/compatibility-flags/to-string-tag.md +++ b/src/content/compatibility-flags/to-string-tag.md @@ -13,5 +13,5 @@ disable_flag: "do_not_set_tostring_tag" A change was made to set the Symbol.toStringTag on all Workers API objects in order to fix several spec compliance bugs. Unfortunately, -this change was more breaking than anticipated. The `do_not_set_tostring_tag` compat +this change was more breaking than anticipated. The `do_not_set_tostring_tag` compat flag restores the original behavior with compatibility dates of 2024-09-26 or earlier. diff --git a/src/content/compatibility-flags/urlsearchparams-deletehasvalue.md b/src/content/compatibility-flags/urlsearchparams-deletehasvalue.md index ff6e300d56a8451..b94637375b11410 100644 --- a/src/content/compatibility-flags/urlsearchparams-deletehasvalue.md +++ b/src/content/compatibility-flags/urlsearchparams-deletehasvalue.md @@ -21,7 +21,7 @@ For an example of how this change could break existing code, consider code that ```js const usp = new URLSearchParams(); // ... -['abc', 'xyz'].forEach(usp.delete.bind(usp)); +["abc", "xyz"].forEach(usp.delete.bind(usp)); ``` The `forEach()` automatically passes multiple parameters to the function that is passed in. Prior to the addition of the new standard parameters, these extra arguments would have been ignored. @@ -31,5 +31,5 @@ Now, however, the additional arguments have meaning and change the behavior of t ```js const usp = new URLSearchParams(); // ... -['abc', 'xyz'].forEach((key) => usp.delete(key)); -``` \ No newline at end of file +["abc", "xyz"].forEach((key) => usp.delete(key)); +``` diff --git a/src/content/compatibility-flags/web-socket-auto-reply-to-close.md b/src/content/compatibility-flags/web-socket-auto-reply-to-close.md index be603aaba1a62ba..5a0f4a50358133e 100644 --- a/src/content/compatibility-flags/web-socket-auto-reply-to-close.md +++ b/src/content/compatibility-flags/web-socket-auto-reply-to-close.md @@ -19,12 +19,16 @@ Previously, receiving a server-initiated Close frame left the WebSocket in `CLOS const [client, server] = Object.values(new WebSocketPair()); server.accept(); -server.addEventListener("close", (event) => { - // readyState is already CLOSED — no need to call server.close(). - console.log(server.readyState); // WebSocket.CLOSED - console.log(event.code); // 1000 - console.log(event.wasClean); // true -}, { once: true }); +server.addEventListener( + "close", + (event) => { + // readyState is already CLOSED — no need to call server.close(). + console.log(server.readyState); // WebSocket.CLOSED + console.log(event.code); // 1000 + console.log(event.wasClean); // true + }, + { once: true }, +); ``` If you do still call `close()` inside the handler, the call is silently ignored. This means existing code that manually replies to Close frames will not break when you update your compatibility date. @@ -37,14 +41,18 @@ const [client, server] = Object.values(new WebSocketPair()); // Opt into half-open mode for proxying server.accept({ allowHalfOpen: true }); -server.addEventListener("close", (event) => { - // With allowHalfOpen true, readyState is still CLOSING here, - // giving you time to coordinate the close on the other side. - console.log(server.readyState); // WebSocket.CLOSING +server.addEventListener( + "close", + (event) => { + // With allowHalfOpen true, readyState is still CLOSING here, + // giving you time to coordinate the close on the other side. + console.log(server.readyState); // WebSocket.CLOSING - // Manually close when ready. - server.close(1000, "done"); -}, { once: true }); + // Manually close when ready. + server.close(1000, "done"); + }, + { once: true }, +); ``` Note that there is no corresponding option to the `WebSocket` constructor. WebSockets constructed with `new WebSocket` will always auto-reply to closes after this flag takes effect. WebSockets constructed this way are automatically "accepted", so there is no opportunity to pass the option to `accept()`. If you are creating a WebSocket with `new WebSocket`, but you need half-open behavior, you will need to switch to using `fetch()` instead. @@ -55,10 +63,10 @@ let ws = new WebSocket("wss://example.com"); // But you can do this instead: let resp = await fetch("https://example.com", { - headers: { "Upgrade": "websocket" } + headers: { Upgrade: "websocket" }, }); if (!resp.webSocket) { - throw new Error("WebSocket handshake not accepted"); + throw new Error("WebSocket handshake not accepted"); } let ws = resp.webSocket; ws.accept({ allowHalfOpen: true }); diff --git a/src/content/compatibility-flags/web-socket-compression.md b/src/content/compatibility-flags/web-socket-compression.md index c73d329ee01a83e..9949b65656e428f 100644 --- a/src/content/compatibility-flags/web-socket-compression.md +++ b/src/content/compatibility-flags/web-socket-compression.md @@ -15,4 +15,4 @@ The Workers runtime did not support WebSocket compression when the initial WebSo If the flag is present, the Workers runtime is capable of using WebSocket Compression on both inbound and outbound WebSocket connections. -Like browsers, calling `new WebSocket(url)` in a Worker will automatically set the `Sec-WebSocket-Extensions: permessage-deflate` header. If you are using the non-standard `fetch()` API to obtain a WebSocket, you can include the `Sec-WebSocket-Extensions` header with value `permessage-deflate` and include any of the compression parameters defined in [RFC-7692](https://datatracker.ietf.org/doc/html/rfc7692#section-7). \ No newline at end of file +Like browsers, calling `new WebSocket(url)` in a Worker will automatically set the `Sec-WebSocket-Extensions: permessage-deflate` header. If you are using the non-standard `fetch()` API to obtain a WebSocket, you can include the `Sec-WebSocket-Extensions` header with value `permessage-deflate` and include any of the compression parameters defined in [RFC-7692](https://datatracker.ietf.org/doc/html/rfc7692#section-7). diff --git a/src/content/compatibility-flags/websocket-standard-binary-type.md b/src/content/compatibility-flags/websocket-standard-binary-type.md index 81e8b8883ea49f5..6e389dad36862eb 100644 --- a/src/content/compatibility-flags/websocket-standard-binary-type.md +++ b/src/content/compatibility-flags/websocket-standard-binary-type.md @@ -17,7 +17,7 @@ The `binaryType` property itself is available on every `WebSocket` regardless of ```js const resp = await fetch("https://example.com", { - headers: { Upgrade: "websocket" }, + headers: { Upgrade: "websocket" }, }); const ws = resp.webSocket; @@ -26,7 +26,7 @@ ws.binaryType = "arraybuffer"; ws.accept(); ws.addEventListener("message", (event) => { - // event.data is an ArrayBuffer for binary frames. + // event.data is an ArrayBuffer for binary frames. }); ``` diff --git a/src/content/compatibility-flags/workflows-preserve-non-retryable-error-message.md b/src/content/compatibility-flags/workflows-preserve-non-retryable-error-message.md index 9d993472b94bcb7..e0b79d3a85a05ed 100644 --- a/src/content/compatibility-flags/workflows-preserve-non-retryable-error-message.md +++ b/src/content/compatibility-flags/workflows-preserve-non-retryable-error-message.md @@ -19,13 +19,13 @@ Previously, throwing a `NonRetryableError` with a custom message would result in import { WorkflowEntrypoint, NonRetryableError } from "cloudflare:workers"; export class MyWorkflow extends WorkflowEntrypoint { - async run(event, step) { - await step.do("my-step", async () => { - throw new NonRetryableError("custom error message"); - // Without this flag: error.message === "The execution of the Workflow instance was terminated, as a step threw an NonRetryableError and it was not handled" - // With this flag: error.message === "custom error message" - }); - } + async run(event, step) { + await step.do("my-step", async () => { + throw new NonRetryableError("custom error message"); + // Without this flag: error.message === "The execution of the Workflow instance was terminated, as a step threw an NonRetryableError and it was not handled" + // With this flag: error.message === "custom error message" + }); + } } ``` diff --git a/src/content/docs/agents/agentic-payments/mpp/charge-for-http-content.mdx b/src/content/docs/agents/agentic-payments/mpp/charge-for-http-content.mdx index 17806e9fea110e3..39b0c719c6a6edd 100644 --- a/src/content/docs/agents/agentic-payments/mpp/charge-for-http-content.mdx +++ b/src/content/docs/agents/agentic-payments/mpp/charge-for-http-content.mdx @@ -34,10 +34,10 @@ Define protected routes in `wrangler.jsonc`: { "pattern": "/premium/*", "amount": "0.01", - "description": "Access to premium content for 1 hour" - } - ] - } + "description": "Access to premium content for 1 hour", + }, + ], + }, } ``` @@ -55,7 +55,7 @@ With [Bot Management](/bots/), the proxy can charge crawlers while keeping the s "amount": "0.25", "description": "Content access for 1 hour", "bot_score_threshold": 30, - "except_detection_ids": [120623194, 117479730] + "except_detection_ids": [120623194, 117479730], } ``` diff --git a/src/content/docs/agents/agentic-payments/x402/index.mdx b/src/content/docs/agents/agentic-payments/x402/index.mdx index 4ae0cb18581f35d..bc12467db9b9995 100644 --- a/src/content/docs/agents/agentic-payments/x402/index.mdx +++ b/src/content/docs/agents/agentic-payments/x402/index.mdx @@ -45,8 +45,8 @@ The facilitator does not hold funds. It verifies and broadcasts the client's pre x402 uses payment **schemes** to define how a payment is constructed and settled on a given network. -| Scheme | Networks | Description | -| ----------------------------------------------------------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| Scheme | Networks | Description | +| ------------------------------------------------------------------------------------------------ | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | | [`exact`](https://github.com/x402-foundation/x402/blob/main/specs/schemes/exact/scheme_exact.md) | EVM, Solana, Aptos, Stellar, Hedera, Sui | Transfers a fixed token amount — typically [ERC-20](https://eips.ethereum.org/EIPS/eip-20) USDC on EVM — to the merchant address. | | [`upto`](https://github.com/x402-foundation/x402/blob/main/specs/schemes/upto/scheme_upto.md) | EVM | Authorizes a maximum amount; the actual charge is determined at settlement time based on resource consumption. | diff --git a/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-bots.mdx b/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-bots.mdx index 25135f65b7f3f89..a766be9a51e7892 100644 --- a/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-bots.mdx +++ b/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-bots.mdx @@ -38,4 +38,4 @@ You may have both of the following enabled: - A selection of AI crawlers to be charged through AI Crawl Control's pay per crawl - Bot configuration option to [Block AI Bots](/bots/get-started/bot-fight-mode/#block-ai-bots). -Since pay per crawl happens after bot solutions, you need to first turn off **Block AI Bots** to ensure pay per crawl works as intended. \ No newline at end of file +Since pay per crawl happens after bot solutions, you need to first turn off **Block AI Bots** to ensure pay per crawl works as intended. diff --git a/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-waf.mdx b/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-waf.mdx index 8e8f5e9661c32ef..57d1c103c3178a0 100644 --- a/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-waf.mdx +++ b/src/content/docs/ai-crawl-control/configuration/ai-crawl-control-with-waf.mdx @@ -9,7 +9,14 @@ products: - ai-crawl-control --- -import { GlossaryTooltip, Example, Steps, Tabs, TabItem, DashButton } from "~/components"; +import { + GlossaryTooltip, + Example, + Steps, + Tabs, + TabItem, + DashButton, +} from "~/components"; AI Crawl Control works alongside other Cloudflare products, such as Cloudflare [Web Application Firewall (WAF)](/waf/). WAF checks incoming web and API requests, and filters undesired traffic based on rules. [WAF custom rules](/waf/custom-rules/) allow you to perform certain actions such as enforcing `robots.txt`. @@ -132,4 +139,3 @@ Any additions you make are preserved when you subsequently update crawler action :::caution Changes made directly to the WAF rule are not reflected back in the AI Crawl Control dashboard. Use the **Crawlers** tab as your primary interface, and reserve direct WAF edits for cases where the dashboard does not cover your requirements. ::: - diff --git a/src/content/docs/ai-crawl-control/features/analyze-ai-traffic.mdx b/src/content/docs/ai-crawl-control/features/analyze-ai-traffic.mdx index 62af2e2d1d983dc..8ed8a785d4df4d8 100644 --- a/src/content/docs/ai-crawl-control/features/analyze-ai-traffic.mdx +++ b/src/content/docs/ai-crawl-control/features/analyze-ai-traffic.mdx @@ -65,12 +65,12 @@ Visualize crawler activity patterns over the selected time period. Use the view You can group the data by different dimensions: -| Dimension | Description | -| ------------ | ---------------------------------------------------------------------------------------- | -| **Crawler** | Track activity from individual AI crawlers (such as GPTBot, ClaudeBot, Bytespider). | -| **Category** | Analyze crawlers by their purpose or type. | -| **Operator** | Discover which companies (such as OpenAI, Anthropic, ByteDance) are crawling your site. | -| **Host** | Break down activity across multiple subdomains. | +| Dimension | Description | +| ------------ | --------------------------------------------------------------------------------------- | +| **Crawler** | Track activity from individual AI crawlers (such as GPTBot, ClaudeBot, Bytespider). | +| **Category** | Analyze crawlers by their purpose or type. | +| **Operator** | Discover which companies (such as OpenAI, Anthropic, ByteDance) are crawling your site. | +| **Host** | Break down activity across multiple subdomains. | :::note The Data transfer view shows `edgeResponseBytes`. Some crawlers may show higher data transfer per request than others, depending on the content they request. @@ -93,11 +93,11 @@ The **Content Format** chart shows what content types AI systems request versus The chart includes three views: -| View | Description | -| ------------- | --------------------------------------------------------------------------- | -| **Comparison** | A grouped bar chart comparing requested content types versus served content types | -| **Request Type** | Breakdown of requests by Accept header | -| **Response Type** | Breakdown of responses by Content-Type header | +| View | Description | +| ----------------- | --------------------------------------------------------------------------------- | +| **Comparison** | A grouped bar chart comparing requested content types versus served content types | +| **Request Type** | Breakdown of requests by Accept header | +| **Response Type** | Breakdown of responses by Content-Type header | ### Top referrers diff --git a/src/content/docs/ai-crawl-control/features/manage-ai-crawlers.mdx b/src/content/docs/ai-crawl-control/features/manage-ai-crawlers.mdx index 37400acba85f698..2892e1f8c9c5aa7 100644 --- a/src/content/docs/ai-crawl-control/features/manage-ai-crawlers.mdx +++ b/src/content/docs/ai-crawl-control/features/manage-ai-crawlers.mdx @@ -8,7 +8,15 @@ products: - ai-crawl-control --- -import { Steps, GlossaryTooltip, Tabs, TabItem, Example, Plan, DashButton } from "~/components"; +import { + Steps, + GlossaryTooltip, + Tabs, + TabItem, + Example, + Plan, + DashButton, +} from "~/components"; AI Crawl Control enables you to take specific action for each AI crawler. @@ -25,13 +33,13 @@ To manage AI crawlers: The **Crawlers** tab displays a table of AI crawlers that are requesting access to your content, and how they interact with your pages. The table provides the following information. -| Column | Details | -| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Crawler | The name of the AI crawler and the operator that owns it. | -| Category | The category of the AI crawler. Refer to [Verified bot categories](/bots/concepts/bot/verified-bots/#categories). | -| Requests | The total number of allowed and unsuccessful requests, with trend chart. Unsuccessful requests may come from any rule or response error, not just the block action in AI Crawl Control. | -| Robots.txt violations | The number of times the AI crawler has violated your `robots.txt` file. | -| Action | The action you wish to take for the AI crawler. Refer to [Take action for each AI crawler](/ai-crawl-control/features/manage-ai-crawlers/#take-action-for-each-ai-crawler). | +| Column | Details | +| --------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Crawler | The name of the AI crawler and the operator that owns it. | +| Category | The category of the AI crawler. Refer to [Verified bot categories](/bots/concepts/bot/verified-bots/#categories). | +| Requests | The total number of allowed and unsuccessful requests, with trend chart. Unsuccessful requests may come from any rule or response error, not just the block action in AI Crawl Control. | +| Robots.txt violations | The number of times the AI crawler has violated your `robots.txt` file. | +| Action | The action you wish to take for the AI crawler. Refer to [Take action for each AI crawler](/ai-crawl-control/features/manage-ai-crawlers/#take-action-for-each-ai-crawler). | :::note[Quality of AI crawler detection] On the free plan, AI Crawl Control identifies AI crawlers based on their [user agent strings](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-Agent). This enables AI Crawl Control to detect well-known, self-identifying AI crawlers. diff --git a/src/content/docs/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/set-up-cloudflare-account.mdx b/src/content/docs/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/set-up-cloudflare-account.mdx index 8fbf42ce0120ba3..175f3072a93187a 100644 --- a/src/content/docs/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/set-up-cloudflare-account.mdx +++ b/src/content/docs/ai-crawl-control/features/pay-per-crawl/use-pay-per-crawl-as-ai-owner/set-up-cloudflare-account.mdx @@ -29,4 +29,4 @@ Pay per crawl is currently in closed beta. To find out how to join the beta program, reach out to us at [Pay per crawl signup](http://www.cloudflare.com/paypercrawl-signup/), or contact your account executive if you are an existing Enterprise customer. To learn more about pay per crawl, refer to Cloudflare blog: [Introducing pay per crawl: enabling content owners to charge AI crawlers for access](https://blog.cloudflare.com/introducing-pay-per-crawl/). -::: \ No newline at end of file +::: diff --git a/src/content/docs/ai-crawl-control/features/track-robots-txt.mdx b/src/content/docs/ai-crawl-control/features/track-robots-txt.mdx index f406e702ce30ed6..6673c210889beae 100644 --- a/src/content/docs/ai-crawl-control/features/track-robots-txt.mdx +++ b/src/content/docs/ai-crawl-control/features/track-robots-txt.mdx @@ -42,12 +42,12 @@ The values in all tables and metrics will update according to your filters. The **Robots.txt availability** table shows the historical request frequency and health status of `robots.txt` files across your hostnames over the selected time frame. -| Column | Description | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Path | The specific hostname's `robots.txt` file being requested. Paths are listed from the most requested to the least. | +| Column | Description | +| --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Path | The specific hostname's `robots.txt` file being requested. Paths are listed from the most requested to the least. | | Requests | The total number of requests made to this path. Requests are broken down into:
- **Successful:** HTTP status codes below 400 (including **200 OK** and redirects).
- **Unsuccessful:** HTTP status codes of 400 or above. | -| Status | The HTTP status code from pinging the `robots.txt` file. | -| Content Signals | An indicator showing whether the `robots.txt` file contains [Content Signals](https://contentsignals.org/), directives for usage in AI training, search, or AI input. | +| Status | The HTTP status code from pinging the `robots.txt` file. | +| Content Signals | An indicator showing whether the `robots.txt` file contains [Content Signals](https://contentsignals.org/), directives for usage in AI training, search, or AI input. | From this table, you can take the following actions: diff --git a/src/content/docs/ai-crawl-control/reference/redirects-for-ai-training.mdx b/src/content/docs/ai-crawl-control/reference/redirects-for-ai-training.mdx index 1122f0a6d7d639e..d285d0714cd426d 100644 --- a/src/content/docs/ai-crawl-control/reference/redirects-for-ai-training.mdx +++ b/src/content/docs/ai-crawl-control/reference/redirects-for-ai-training.mdx @@ -156,12 +156,12 @@ The feature parses the `` tag from the `` section of ```html - - - - - - + + + + + + ``` @@ -169,10 +169,10 @@ Both absolute and relative URLs are supported: ```html - + - + ``` ### Interaction with other redirect features diff --git a/src/content/docs/ai-gateway/configuration/authentication.mdx b/src/content/docs/ai-gateway/configuration/authentication.mdx index 780ade1a3e222cc..e848745b780263d 100644 --- a/src/content/docs/ai-gateway/configuration/authentication.mdx +++ b/src/content/docs/ai-gateway/configuration/authentication.mdx @@ -66,7 +66,7 @@ const openai = createOpenAI({ :::note When an AI Gateway is accessed from a Cloudflare Worker using a **binding**, the `cf-aig-authorization` header does not need to be manually included. -Requests made through bindings are **pre-authenticated** within the associated Cloudflare account. +Requests made through bindings are **pre-authenticated** within the associated Cloudflare account. ::: The following table outlines gateway behavior based on the authentication settings and header status: diff --git a/src/content/docs/ai-gateway/configuration/custom-providers.mdx b/src/content/docs/ai-gateway/configuration/custom-providers.mdx index 6da29fa5366081a..0bc6f1543a3b8fe 100644 --- a/src/content/docs/ai-gateway/configuration/custom-providers.mdx +++ b/src/content/docs/ai-gateway/configuration/custom-providers.mdx @@ -373,12 +373,12 @@ Everything after `custom-{slug}/` in your request URL is appended directly to th ### Choosing between Unified API and provider-specific endpoint -| | Unified API (`/compat`) | Provider-specific endpoint | -|---|---|---| -| **Best for** | Providers with OpenAI-compatible APIs | Providers with any API structure | -| **Request format** | Must follow the OpenAI `/chat/completions` schema | Uses the provider's native request format | -| **Path control** | Fixed to `/compat/chat/completions` | Full control over the upstream path | -| **How to specify the provider** | `model` field: `custom-{slug}/{model-name}` | URL path: `/custom-{slug}/{path}` | +| | Unified API (`/compat`) | Provider-specific endpoint | +| ------------------------------- | ------------------------------------------------- | ----------------------------------------- | +| **Best for** | Providers with OpenAI-compatible APIs | Providers with any API structure | +| **Request format** | Must follow the OpenAI `/chat/completions` schema | Uses the provider's native request format | +| **Path control** | Fixed to `/compat/chat/completions` | Full control over the upstream path | +| **How to specify the provider** | `model` field: `custom-{slug}/{model-name}` | URL path: `/custom-{slug}/{path}` | Use the **Unified API** when your custom provider accepts the OpenAI-compatible `/chat/completions` request format. This is the simplest option and works well with OpenAI SDKs. @@ -425,10 +425,12 @@ The following examples show how to configure `base_url` and construct request UR Many providers follow the OpenAI convention of hosting their API at `{domain}/v1/chat/completions`. **Configuration:** + - `slug`: `my-openai-compat` - `base_url`: `https://api.example-provider.com` **Provider-specific endpoint:** + ```bash curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-my-openai-compat/v1/chat/completions \ -H "Authorization: Bearer $PROVIDER_API_KEY" \ @@ -448,6 +450,7 @@ curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-my-op | Upstream URL | `https://api.example-provider.com/v1/chat/completions` | Since this provider is OpenAI-compatible, you could also use the Unified API: + ```bash curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/completions \ -H "Authorization: Bearer $PROVIDER_API_KEY" \ @@ -463,10 +466,12 @@ curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/compat/chat/ Some providers use API paths that don't follow the `/v1/` convention. For example, a provider whose chat endpoint is at `https://api.custom-ai.com/api/coding/paas/v4/chat/completions`. **Configuration:** + - `slug`: `custom-ai` - `base_url`: `https://api.custom-ai.com` **Provider-specific endpoint:** + ```bash curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-custom-ai/api/coding/paas/v4/chat/completions \ -H "Authorization: Bearer $PROVIDER_API_KEY" \ @@ -494,10 +499,12 @@ For providers with non-standard paths, you must use the provider-specific endpoi If you host your own model behind a reverse proxy or on a platform that adds a path prefix, include only the fixed prefix portion in `base_url` if all your endpoints share it. Otherwise, keep `base_url` as just the domain. **Configuration (domain-only `base_url`):** + - `slug`: `internal-llm` - `base_url`: `https://ml.internal.example.com` **Provider-specific endpoint:** + ```bash curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-internal-llm/serving/models/my-model:predict \ -H "Authorization: Bearer $INTERNAL_API_KEY" \ @@ -520,10 +527,12 @@ curl https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/custom-inter When using the OpenAI SDK to connect to a custom provider through AI Gateway, set the SDK's `base_url` to the gateway's provider-specific endpoint path (up to and including the API version prefix that your provider expects). **Configuration:** + - `slug`: `alt-provider` - `base_url`: `https://api.alt-provider.com` **Python (OpenAI SDK):** + ```python title="Using OpenAI SDK with a custom provider" from openai import OpenAI @@ -559,14 +568,14 @@ response = client.chat.completions.create( ```json { - "success": false, - "errors": [ - { - "code": 1003, - "message": "A custom provider with this slug already exists", - "path": ["body", "slug"] - } - ] + "success": false, + "errors": [ + { + "code": 1003, + "message": "A custom provider with this slug already exists", + "path": ["body", "slug"] + } + ] } ``` @@ -576,13 +585,13 @@ Each custom provider slug must be unique within your account. Choose a different ```json { - "success": false, - "errors": [ - { - "code": 1004, - "message": "Custom Provider not found" - } - ] + "success": false, + "errors": [ + { + "code": 1004, + "message": "Custom Provider not found" + } + ] } ``` @@ -592,14 +601,14 @@ The specified provider ID does not exist or you don't have access to it. Verify ```json { - "success": false, - "errors": [ - { - "code": 1002, - "message": "base_url must be a valid HTTPS URL starting with https://", - "path": ["body", "base_url"] - } - ] + "success": false, + "errors": [ + { + "code": 1002, + "message": "base_url must be a valid HTTPS URL starting with https://", + "path": ["body", "base_url"] + } + ] } ``` @@ -636,4 +645,4 @@ If you receive a 404 from the upstream provider, the most common cause is an inc - [BYOK (Store Keys)](/ai-gateway/configuration/bring-your-own-keys/) - [Dynamic routing](/ai-gateway/features/dynamic-routing/) - [Caching](/ai-gateway/features/caching/) -- [Rate limiting](/ai-gateway/features/rate-limiting/) \ No newline at end of file +- [Rate limiting](/ai-gateway/features/rate-limiting/) diff --git a/src/content/docs/ai-gateway/evaluations/add-human-feedback.mdx b/src/content/docs/ai-gateway/evaluations/add-human-feedback.mdx index 1583cae3d3cb063..591a2b78db5305d 100644 --- a/src/content/docs/ai-gateway/evaluations/add-human-feedback.mdx +++ b/src/content/docs/ai-gateway/evaluations/add-human-feedback.mdx @@ -8,6 +8,7 @@ sidebar: products: - ai-gateway --- + import { DashButton } from "~/components"; Human feedback is a valuable metric to assess the performance of your AI models. By incorporating human feedback, you can gain deeper insights into how the model's responses are perceived and how well it performs from a user-centric perspective. This feedback can then be used in evaluations to calculate performance metrics, driving optimization and ultimately enhancing the reliability, accuracy, and efficiency of your AI application. diff --git a/src/content/docs/ai-gateway/features/dlp/index.mdx b/src/content/docs/ai-gateway/features/dlp/index.mdx index fed23035a215241..1a2da0f59706eda 100644 --- a/src/content/docs/ai-gateway/features/dlp/index.mdx +++ b/src/content/docs/ai-gateway/features/dlp/index.mdx @@ -59,11 +59,11 @@ Because of this buffering: DLP scanning runs after a cache miss, when AI Gateway forwards the request to the provider and receives a response. The following table describes how each DLP outcome affects caching: -| DLP outcome | Response cached | Behavior | -| --- | --- | --- | -| Pass (no findings) | Yes | The response is cached normally according to your gateway cache settings. | -| Flag | Yes | The response is cached normally. DLP findings are attached to the `cf-aig-dlp` response header and recorded in logs, but the original response is returned to the client. | -| Block | No | The provider response is discarded and replaced with a DLP error response (status `400`). | +| DLP outcome | Response cached | Behavior | +| ------------------ | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Pass (no findings) | Yes | The response is cached normally according to your gateway cache settings. | +| Flag | Yes | The response is cached normally. DLP findings are attached to the `cf-aig-dlp` response header and recorded in logs, but the original response is returned to the client. | +| Block | No | The provider response is discarded and replaced with a DLP error response (status `400`). | **Cache hits skip DLP scanning.** When a subsequent identical request matches a cached response, AI Gateway serves it directly from cache without re-running DLP. This is safe because only responses that already passed DLP (or were flagged, not blocked) are cached. However, if you update your DLP policies after a response has been cached, the cached response is not re-evaluated. It continues to be served until the cache TTL expires. diff --git a/src/content/docs/ai-gateway/features/dynamic-routing/usage.mdx b/src/content/docs/ai-gateway/features/dynamic-routing/usage.mdx index 72c2fa37068d4d0..fc4d9ee983694c4 100644 --- a/src/content/docs/ai-gateway/features/dynamic-routing/usage.mdx +++ b/src/content/docs/ai-gateway/features/dynamic-routing/usage.mdx @@ -92,8 +92,7 @@ export default { ## Response Metadata -The response from a dynamic route is the same as the response from a model. There is additional metadata used to notify the model and provider used, you can check the following headers +The response from a dynamic route is the same as the response from a model. There is additional metadata used to notify the model and provider used, you can check the following headers - `cf-aig-model` - The model used - `cf-aig-provider` - The slug of provider used - diff --git a/src/content/docs/ai-gateway/integrations/aig-workers-ai-binding.mdx b/src/content/docs/ai-gateway/integrations/aig-workers-ai-binding.mdx index d03c6eb9622ec7d..04c450d92911bd4 100644 --- a/src/content/docs/ai-gateway/integrations/aig-workers-ai-binding.mdx +++ b/src/content/docs/ai-gateway/integrations/aig-workers-ai-binding.mdx @@ -124,7 +124,7 @@ You will be prompted to log in after you run `wrangler dev`. When you run `npx w ```json { - "response": "A fascinating question!\n\nThe phrase \"Hello, World!\" originates from a simple computer program written in the early days of programming. It is often attributed to Brian Kernighan, a Canadian computer scientist and a pioneer in the field of computer programming.\n\nIn the early 1970s, Kernighan, along with his colleague Dennis Ritchie, were working on the C programming language. They wanted to create a simple program that would output a message to the screen to demonstrate the basic structure of a program. They chose the phrase \"Hello, World!\" because it was a simple and recognizable message that would illustrate how a program could print text to the screen.\n\nThe exact code was written in the 5th edition of Kernighan and Ritchie's book \"The C Programming Language,\" published in 1988. The code, literally known as \"Hello, World!\" is as follows:\n\n main()\n {\n printf(\"Hello, World!\");\n }\n\nThis code is still often used as a starting point for learning programming languages, as it demonstrates how to output a simple message to the console.\n\nThe phrase \"Hello, World!\" has since become a catch-all phrase to indicate the start of a new program or a small test program, and is widely used in computer science and programming education.\n\nSincerely, I'm glad I could help clarify the origin of this iconic phrase for you!" + "response": "A fascinating question!\n\nThe phrase \"Hello, World!\" originates from a simple computer program written in the early days of programming. It is often attributed to Brian Kernighan, a Canadian computer scientist and a pioneer in the field of computer programming.\n\nIn the early 1970s, Kernighan, along with his colleague Dennis Ritchie, were working on the C programming language. They wanted to create a simple program that would output a message to the screen to demonstrate the basic structure of a program. They chose the phrase \"Hello, World!\" because it was a simple and recognizable message that would illustrate how a program could print text to the screen.\n\nThe exact code was written in the 5th edition of Kernighan and Ritchie's book \"The C Programming Language,\" published in 1988. The code, literally known as \"Hello, World!\" is as follows:\n\n main()\n {\n printf(\"Hello, World!\");\n }\n\nThis code is still often used as a starting point for learning programming languages, as it demonstrates how to output a simple message to the console.\n\nThe phrase \"Hello, World!\" has since become a catch-all phrase to indicate the start of a new program or a small test program, and is widely used in computer science and programming education.\n\nSincerely, I'm glad I could help clarify the origin of this iconic phrase for you!" } ``` diff --git a/src/content/docs/ai-gateway/mcp-server.mdx b/src/content/docs/ai-gateway/mcp-server.mdx index 9cb472e8825884a..5d7ff3bfddb2e49 100644 --- a/src/content/docs/ai-gateway/mcp-server.mdx +++ b/src/content/docs/ai-gateway/mcp-server.mdx @@ -7,4 +7,4 @@ sidebar: order: 90 products: - ai-gateway ---- \ No newline at end of file +--- diff --git a/src/content/docs/ai-gateway/observability/logging/index.mdx b/src/content/docs/ai-gateway/observability/logging/index.mdx index cfcd1cab3d1200c..1ee3a267485ed02 100644 --- a/src/content/docs/ai-gateway/observability/logging/index.mdx +++ b/src/content/docs/ai-gateway/observability/logging/index.mdx @@ -55,9 +55,9 @@ The `cf-aig-collect-log-payload` header allows you to control whether the raw re This is useful when you want to maintain visibility into usage metrics and request metadata without persisting sensitive prompt or completion data. -| Header value | Behavior | -| ------------ | -------- | -| `true` | Request and response payloads are stored. | +| Header value | Behavior | +| ------------ | ---------------------------------------------------------------------- | +| `true` | Request and response payloads are stored. | | `false` | Payload storage is skipped. Metadata-only log entries are still saved. | In the example below, we use `cf-aig-collect-log-payload` to skip storing the request and response bodies while keeping the metadata log. diff --git a/src/content/docs/ai-gateway/reference/audit-logs.mdx b/src/content/docs/ai-gateway/reference/audit-logs.mdx index 0cfe7251d9d7c8a..250b377c6c517ee 100644 --- a/src/content/docs/ai-gateway/reference/audit-logs.mdx +++ b/src/content/docs/ai-gateway/reference/audit-logs.mdx @@ -5,6 +5,7 @@ pcx_content_type: concept products: - ai-gateway --- + import { DashButton } from "~/components"; [Audit logs](/fundamentals/account/account-security/review-audit-logs/) provide a comprehensive summary of changes made within your Cloudflare account, including those made to gateways in AI Gateway. This functionality is available on all plan types, free of charge, and is enabled by default. @@ -13,7 +14,7 @@ import { DashButton } from "~/components"; To view audit logs for AI Gateway, in the Cloudflare dashboard, go to the **Audit logs** page. - + For more information on how to access and use audit logs, refer to [review audit logs documentation](/fundamentals/account/account-security/review-audit-logs/). @@ -33,39 +34,39 @@ Below is an example of an audit log entry showing the creation of a new gateway: ```json { - "action": { - "info": "gateway created", - "result": true, - "type": "create" - }, - "actor": { - "email": "", - "id": "3f7b730e625b975bc1231234cfbec091", - "ip": "fe32:43ed:12b5:526::1d2:13", - "type": "user" - }, - "id": "5eaeb6be-1234-406a-87ab-1971adc1234c", - "interface": "UI", - "metadata": {}, - "newValue": "", - "newValueJson": { - "cache_invalidate_on_update": false, - "cache_ttl": 0, - "collect_logs": true, - "id": "test", - "rate_limiting_interval": 0, - "rate_limiting_limit": 0, - "rate_limiting_technique": "fixed" - }, - "oldValue": "", - "oldValueJson": {}, - "owner": { - "id": "1234d848c0b9e484dfc37ec392b5fa8a" - }, - "resource": { - "id": "89303df8-1234-4cfa-a0f8-0bd848e831ca", - "type": "ai_gateway.gateway" - }, - "when": "2024-07-17T14:06:11.425Z" + "action": { + "info": "gateway created", + "result": true, + "type": "create" + }, + "actor": { + "email": "", + "id": "3f7b730e625b975bc1231234cfbec091", + "ip": "fe32:43ed:12b5:526::1d2:13", + "type": "user" + }, + "id": "5eaeb6be-1234-406a-87ab-1971adc1234c", + "interface": "UI", + "metadata": {}, + "newValue": "", + "newValueJson": { + "cache_invalidate_on_update": false, + "cache_ttl": 0, + "collect_logs": true, + "id": "test", + "rate_limiting_interval": 0, + "rate_limiting_limit": 0, + "rate_limiting_technique": "fixed" + }, + "oldValue": "", + "oldValueJson": {}, + "owner": { + "id": "1234d848c0b9e484dfc37ec392b5fa8a" + }, + "resource": { + "id": "89303df8-1234-4cfa-a0f8-0bd848e831ca", + "type": "ai_gateway.gateway" + }, + "when": "2024-07-17T14:06:11.425Z" } ``` diff --git a/src/content/docs/ai-gateway/reference/limits.mdx b/src/content/docs/ai-gateway/reference/limits.mdx index 5c0459bc75ae5e7..8b130857ad0477c 100644 --- a/src/content/docs/ai-gateway/reference/limits.mdx +++ b/src/content/docs/ai-gateway/reference/limits.mdx @@ -33,11 +33,14 @@ The following limits apply to gateway configurations, logs, and related features 1 When you reach the log storage limit for a gateway, you can configure your gateway to either automatically delete the oldest logs to make room for new ones, or stop saving new logs. You can also use -[Logpush](/ai-gateway/observability/logging/logpush/) to export logs to -external storage. Refer to [Automatic log deletion](/ai-gateway/observability/logging/#automatic-log-deletion) -for more details. - -2 On the free plan, the log storage limit applies to total logs across all gateways in your account. Same auto-delete or stop-saving behavior as 1. +[Logpush](/ai-gateway/observability/logging/logpush/) to export logs to external +storage. Refer to [Automatic log +deletion](/ai-gateway/observability/logging/#automatic-log-deletion) for more +details. + +2 On the free plan, the log storage limit applies to total logs +across all gateways in your account. Same auto-delete or stop-saving behavior as +1. 3 Logs larger than 10 MB will not be stored. diff --git a/src/content/docs/ai-gateway/tutorials/pruna-p-video.mdx b/src/content/docs/ai-gateway/tutorials/pruna-p-video.mdx index 9f0277bdd3a1ac7..d55b0392378c965 100644 --- a/src/content/docs/ai-gateway/tutorials/pruna-p-video.mdx +++ b/src/content/docs/ai-gateway/tutorials/pruna-p-video.mdx @@ -106,12 +106,12 @@ The response includes a prediction `id`: ```json { - "id": "xyz789...", - "status": "starting", - "urls": { - "get": "https://api.replicate.com/v1/predictions/xyz789...", - "cancel": "https://api.replicate.com/v1/predictions/xyz789.../cancel" - } + "id": "xyz789...", + "status": "starting", + "urls": { + "get": "https://api.replicate.com/v1/predictions/xyz789...", + "cancel": "https://api.replicate.com/v1/predictions/xyz789.../cancel" + } } ``` @@ -127,7 +127,7 @@ Keep polling until `status` is `succeeded` (or `failed`). When complete, the `ou ## Next steps -From here you can: +From here you can: - Use [logging](/ai-gateway/observability/logging/) to monitor requests and debug issues. - Set up [rate limiting](/ai-gateway/features/rate-limiting/) to control usage. diff --git a/src/content/docs/ai-gateway/usage/chat-completion.mdx b/src/content/docs/ai-gateway/usage/chat-completion.mdx index 1280237dc0187bb..c1dbd0f663fb740 100644 --- a/src/content/docs/ai-gateway/usage/chat-completion.mdx +++ b/src/content/docs/ai-gateway/usage/chat-completion.mdx @@ -11,11 +11,7 @@ products: - ai-gateway --- -import { - Details, - Tabs, - TabItem -} from "~/components"; +import { Details, Tabs, TabItem } from "~/components"; import CodeSnippets from "~/components/ai-gateway/code-examples.astro"; :::caution[Deprecated] diff --git a/src/content/docs/ai-gateway/usage/providers/anthropic.mdx b/src/content/docs/ai-gateway/usage/providers/anthropic.mdx index 7c7d8622dd1be29..aa1ad566a1a3a37 100644 --- a/src/content/docs/ai-gateway/usage/providers/anthropic.mdx +++ b/src/content/docs/ai-gateway/usage/providers/anthropic.mdx @@ -11,6 +11,7 @@ import { Render, Details, Tabs, TabItem } from "~/components"; [Anthropic](https://www.anthropic.com/) helps build reliable, interpretable, and steerable AI systems. ## Endpoint + **Base URL** ```txt @@ -124,17 +125,18 @@ import Anthropic from "@anthropic-ai/sdk"; const baseURL = `https://gateway.ai.cloudflare.com/v1/{accountId}/{gatewayId}/anthropic`; const anthropic = new Anthropic({ - baseURL, - defaultHeaders: { - Authorization: `Bearer {cf_api_token}`, - }, +baseURL, +defaultHeaders: { +Authorization: `Bearer {cf_api_token}`, +}, }); const message = await anthropic.messages.create({ - model: "claude-sonnet-4-5", - messages: [{ role: "user", content: "What is Cloudflare?" }], - max_tokens: 1024, +model: "claude-sonnet-4-5", +messages: [{ role: "user", content: "What is Cloudflare?" }], +max_tokens: 1024, }); + ```
@@ -151,3 +153,4 @@ const message = await anthropic.messages.create({ }} /> +``` diff --git a/src/content/docs/ai-gateway/usage/providers/azureopenai.mdx b/src/content/docs/ai-gateway/usage/providers/azureopenai.mdx index bbda8d88dad78df..33bc4a3a7827002 100644 --- a/src/content/docs/ai-gateway/usage/providers/azureopenai.mdx +++ b/src/content/docs/ai-gateway/usage/providers/azureopenai.mdx @@ -52,14 +52,14 @@ curl 'https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway}/azure-openai/{ import { AzureOpenAI } from "openai"; const azure_openai = new AzureOpenAI({ - apiKey: "{azure_api_key}", - baseURL: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway}/azure-openai/{resource_name}/`, - apiVersion: "2023-05-15", - defaultHeaders: { "cf-aig-authorization": "{cf-api-token}" }, // if authenticated + apiKey: "{azure_api_key}", + baseURL: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway}/azure-openai/{resource_name}/`, + apiVersion: "2023-05-15", + defaultHeaders: { "cf-aig-authorization": "{cf-api-token}" }, // if authenticated }); const result = await azure_openai.chat.completions.create({ - model: '{deployment_name}', - messages: [{ role: "user", content: "Hello" }], + model: "{deployment_name}", + messages: [{ role: "user", content: "Hello" }], }); ``` diff --git a/src/content/docs/ai-gateway/usage/providers/baseten.mdx b/src/content/docs/ai-gateway/usage/providers/baseten.mdx index 24877ce82f34716..54c26a43777ba18 100644 --- a/src/content/docs/ai-gateway/usage/providers/baseten.mdx +++ b/src/content/docs/ai-gateway/usage/providers/baseten.mdx @@ -57,31 +57,31 @@ const gatewayId = "{gateway_id}"; const baseURL = `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/baseten`; const openai = new OpenAI({ - apiKey, - baseURL, + apiKey, + baseURL, }); const model = "openai/gpt-oss-120b"; const messages = [{ role: "user", content: "What is Cloudflare?" }]; const chatCompletion = await openai.chat.completions.create({ - model, - messages, + model, + messages, }); console.log(chatCompletion); ``` ## Model-specific endpoints @@ -110,15 +110,15 @@ const modelId = "{model_id}"; const baseURL = `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/baseten`; const response = await fetch(`${baseURL}/model/${modelId}`, { - method: "POST", - headers: { - "Authorization": `Bearer ${basetenApiToken}`, - "Content-Type": "application/json", - }, - body: JSON.stringify({ - prompt: "What is Cloudflare?", - max_tokens: 100, - }), + method: "POST", + headers: { + Authorization: `Bearer ${basetenApiToken}`, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + prompt: "What is Cloudflare?", + max_tokens: 100, + }), }); const result = await response.json(); diff --git a/src/content/docs/ai-gateway/usage/providers/bedrock.mdx b/src/content/docs/ai-gateway/usage/providers/bedrock.mdx index 1f2df28b2813847..bb8f30200a44e93 100644 --- a/src/content/docs/ai-gateway/usage/providers/bedrock.mdx +++ b/src/content/docs/ai-gateway/usage/providers/bedrock.mdx @@ -43,10 +43,10 @@ AI Gateway handles this complexity for you. When you store your AWS credentials ### Authentication methods comparison -| Method | `cf-aig-authorization` header | `Authorization` header | Signing | -| --- | --- | --- | --- | -| **BYOK (Recommended)** | `Bearer {CF_AIG_TOKEN}` | Not needed | Gateway signs automatically | -| **Client-side signing** | `Bearer {CF_AIG_TOKEN}` | Pre-signed AWS headers | You sign with `aws4fetch` or AWS SDK | +| Method | `cf-aig-authorization` header | `Authorization` header | Signing | +| ----------------------- | ----------------------------- | ---------------------- | ------------------------------------ | +| **BYOK (Recommended)** | `Bearer {CF_AIG_TOKEN}` | Not needed | Gateway signs automatically | +| **Client-side signing** | `Bearer {CF_AIG_TOKEN}` | Pre-signed AWS headers | You sign with `aws4fetch` or AWS SDK | :::caution[Do not confuse the headers] `cf-aig-authorization` authenticates your request to AI Gateway. When using BYOK, you do not need to include any AWS authorization headers because AI Gateway signs the request for you. @@ -227,5 +227,3 @@ const response = await client.chat.completions.create({ console.log(response.choices[0].message.content); ``` - - diff --git a/src/content/docs/ai-gateway/usage/providers/fal.mdx b/src/content/docs/ai-gateway/usage/providers/fal.mdx index 3e67996cbae3c2d..057d6dda7144ddc 100644 --- a/src/content/docs/ai-gateway/usage/providers/fal.mdx +++ b/src/content/docs/ai-gateway/usage/providers/fal.mdx @@ -78,21 +78,23 @@ The `x-fal-target-url` format is compliant with the Fal SDKs, so AI Gateway can import { fal } from "@fal-ai/client"; fal.config({ - credentials: "{fal_ai_token}", // OR pass a cloudflare api token if using BYOK on AI Gateway - proxyUrl: "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/fal" + credentials: "{fal_ai_token}", // OR pass a cloudflare api token if using BYOK on AI Gateway + proxyUrl: + "https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/fal", }); const result = await fal.subscribe("fal-ai/bytedance/seedream/v4/edit", { - "input": { - "prompt": "Dress the model in the clothes and hat. Add a cat to the scene and change the background to a Victorian era building.", - "image_urls": [ - "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_1.png", - "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_2.png", - "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_3.png", - "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_4.png" - ] - } + input: { + prompt: + "Dress the model in the clothes and hat. Add a cat to the scene and change the background to a Victorian era building.", + image_urls: [ + "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_1.png", + "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_2.png", + "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_3.png", + "https://storage.googleapis.com/falserverless/example_inputs/seedream4_edit_input_4.png", + ], + }, }); console.log(result.data.images[0]); -``` \ No newline at end of file +``` diff --git a/src/content/docs/ai-gateway/usage/providers/google-ai-studio.mdx b/src/content/docs/ai-gateway/usage/providers/google-ai-studio.mdx index 7d986484bd9371b..29e542bf31fb4d9 100644 --- a/src/content/docs/ai-gateway/usage/providers/google-ai-studio.mdx +++ b/src/content/docs/ai-gateway/usage/providers/google-ai-studio.mdx @@ -17,6 +17,7 @@ import { Render, Details, Tabs, TabItem } from "~/components"; ```txt https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/google-ai-studio ``` + Then you can append the endpoint you want to hit, for example: `v1/models/{model}:{generative_ai_rest_resource}` So your final URL will come together as: `https://gateway.ai.cloudflare.com/v1/{account_id}/{gateway_id}/google-ai-studio/v1/models/{model}:{generative_ai_rest_resource}`. @@ -136,18 +137,19 @@ console.log(response.text); import { GoogleGenAI } from "@google/genai"; const ai = new GoogleGenAI({ - apiKey: "{cf_aig_token}", - httpOptions: { - baseUrl: `https://gateway.ai.cloudflare.com/v1/${account_id}/${gateway_name}/google-ai-studio`, - } +apiKey: "{cf_aig_token}", +httpOptions: { +baseUrl: `https://gateway.ai.cloudflare.com/v1/${account_id}/${gateway_name}/google-ai-studio`, +} }); const response = await ai.models.generateContent({ - model: "gemini-2.5-flash", - contents: "What is Cloudflare?", +model: "gemini-2.5-flash", +contents: "What is Cloudflare?", }); console.log(response.text); + ```
@@ -164,3 +166,4 @@ console.log(response.text); }} /> +``` diff --git a/src/content/docs/ai-gateway/usage/providers/ideogram.mdx b/src/content/docs/ai-gateway/usage/providers/ideogram.mdx index bc019d9a71628b5..e9213598bdda79c 100644 --- a/src/content/docs/ai-gateway/usage/providers/ideogram.mdx +++ b/src/content/docs/ai-gateway/usage/providers/ideogram.mdx @@ -48,17 +48,17 @@ const ideogramApiKey = "{ideogram_api_key}"; const baseURL = `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/ideogram`; const response = await fetch(`${baseURL}/v1/ideogram-v3/generate`, { - method: "POST", - headers: { - "Api-Key": ideogramApiKey, - "Content-Type": "application/json", - }, - body: JSON.stringify({ - prompt: "A serene landscape with mountains and a lake at sunset", - model: "V_3", - }), + method: "POST", + headers: { + "Api-Key": ideogramApiKey, + "Content-Type": "application/json", + }, + body: JSON.stringify({ + prompt: "A serene landscape with mountains and a lake at sunset", + model: "V_3", + }), }); const result = await response.json(); console.log(result); -``` \ No newline at end of file +``` diff --git a/src/content/docs/ai-gateway/usage/rest-api.mdx b/src/content/docs/ai-gateway/usage/rest-api.mdx index 7dd750f9b04aca9..e2275bfa7e32b91 100644 --- a/src/content/docs/ai-gateway/usage/rest-api.mdx +++ b/src/content/docs/ai-gateway/usage/rest-api.mdx @@ -18,12 +18,12 @@ No provider SDKs or API keys are needed. Authentication and billing are handled Four endpoints are available, each suited to different use cases: -| Endpoint | Format | Use case | -| -------- | ------ | -------- | -| `POST /ai/run` | Envelope with `model`, `input` | All models and modalities (LLM, image, TTS, ASR) | -| `POST /ai/v1/chat/completions` | OpenAI chat completions | LLMs — OpenAI SDK compatible | -| `POST /ai/v1/responses` | OpenAI Responses API | Agentic workflows — OpenAI SDK compatible | -| `POST /ai/v1/messages` | Anthropic Messages API | LLMs — Anthropic SDK compatible | +| Endpoint | Format | Use case | +| ------------------------------ | ------------------------------ | ------------------------------------------------ | +| `POST /ai/run` | Envelope with `model`, `input` | All models and modalities (LLM, image, TTS, ASR) | +| `POST /ai/v1/chat/completions` | OpenAI chat completions | LLMs — OpenAI SDK compatible | +| `POST /ai/v1/responses` | OpenAI Responses API | Agentic workflows — OpenAI SDK compatible | +| `POST /ai/v1/messages` | Anthropic Messages API | LLMs — Anthropic SDK compatible | ## Authentication @@ -140,13 +140,13 @@ Point the OpenAI SDK `baseURL` at the Cloudflare API: import OpenAI from "openai"; const openai = new OpenAI({ - apiKey: CLOUDFLARE_API_TOKEN, - baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, + apiKey: CLOUDFLARE_API_TOKEN, + baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, }); const response = await openai.chat.completions.create({ - model: "openai/gpt-4.1", - messages: [{ role: "user", content: "What is Cloudflare?" }], + model: "openai/gpt-4.1", + messages: [{ role: "user", content: "What is Cloudflare?" }], }); ``` @@ -158,13 +158,13 @@ Uses the OpenAI Responses API format for agentic workflows. Compatible with the import OpenAI from "openai"; const openai = new OpenAI({ - apiKey: CLOUDFLARE_API_TOKEN, - baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, + apiKey: CLOUDFLARE_API_TOKEN, + baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, }); const response = await openai.responses.create({ - model: "openai/gpt-4.1", - input: "What is Cloudflare?", + model: "openai/gpt-4.1", + input: "What is Cloudflare?", }); ``` @@ -194,14 +194,14 @@ Point the Anthropic SDK `baseURL` at the Cloudflare API: import Anthropic from "@anthropic-ai/sdk"; const anthropic = new Anthropic({ - apiKey: CLOUDFLARE_API_TOKEN, - baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, + apiKey: CLOUDFLARE_API_TOKEN, + baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, }); const message = await anthropic.messages.create({ - model: "anthropic/claude-sonnet-4-5", - max_tokens: 512, - messages: [{ role: "user", content: "What is Cloudflare?" }], + model: "anthropic/claude-sonnet-4-5", + max_tokens: 512, + messages: [{ role: "user", content: "What is Cloudflare?" }], }); ``` @@ -229,11 +229,11 @@ With the OpenAI SDK, set the header via `defaultHeaders`: ```javascript const openai = new OpenAI({ - apiKey: CLOUDFLARE_API_TOKEN, - baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, - defaultHeaders: { - "cf-aig-gateway-id": "my-gateway", - }, + apiKey: CLOUDFLARE_API_TOKEN, + baseURL: `https://api.cloudflare.com/client/v4/accounts/${ACCOUNT_ID}/ai/v1`, + defaultHeaders: { + "cf-aig-gateway-id": "my-gateway", + }, }); ``` @@ -243,17 +243,17 @@ All AI Gateway features configured on that gateway — caching, rate limiting, g Use `cf-aig-*` headers to control AI Gateway behavior on a per-request basis: -| Header | Type | Description | -| ------ | ---- | ----------- | -| `cf-aig-skip-cache` | boolean | Skip the cache for this request. | -| `cf-aig-cache-ttl` | number | Cache TTL in seconds. | -| `cf-aig-cache-key` | string | Custom cache key. | -| `cf-aig-collect-log` | boolean | Turn logging on or off for this request. | -| `cf-aig-request-timeout` | number | Request timeout in milliseconds. | -| `cf-aig-max-attempts` | number | Retry attempts (max 5). | -| `cf-aig-retry-delay` | number | Retry delay in milliseconds (max 5000). | -| `cf-aig-backoff` | string | Backoff method: `constant`, `linear`, or `exponential`. | -| `cf-aig-metadata` | JSON string | Custom metadata to attach to the log entry. | +| Header | Type | Description | +| ------------------------ | ----------- | ------------------------------------------------------- | +| `cf-aig-skip-cache` | boolean | Skip the cache for this request. | +| `cf-aig-cache-ttl` | number | Cache TTL in seconds. | +| `cf-aig-cache-key` | string | Custom cache key. | +| `cf-aig-collect-log` | boolean | Turn logging on or off for this request. | +| `cf-aig-request-timeout` | number | Request timeout in milliseconds. | +| `cf-aig-max-attempts` | number | Retry attempts (max 5). | +| `cf-aig-retry-delay` | number | Retry delay in milliseconds (max 5000). | +| `cf-aig-backoff` | string | Backoff method: `constant`, `linear`, or `exponential`. | +| `cf-aig-metadata` | JSON string | Custom metadata to attach to the log entry. | For more details on these options, refer to [Request handling](/ai-gateway/configuration/request-handling/) and [Caching](/ai-gateway/features/caching/). diff --git a/src/content/docs/ai-gateway/usage/websockets-api/non-realtime-api.mdx b/src/content/docs/ai-gateway/usage/websockets-api/non-realtime-api.mdx index bfc911e09f973c8..dd9b384084acdcf 100644 --- a/src/content/docs/ai-gateway/usage/websockets-api/non-realtime-api.mdx +++ b/src/content/docs/ai-gateway/usage/websockets-api/non-realtime-api.mdx @@ -55,7 +55,7 @@ ws.on("open", () => { }, }), ); -}) +}); ws.on("message", (message) => { console.log(message.toString()); diff --git a/src/content/docs/ai-gateway/usage/websockets-api/realtime-api.mdx b/src/content/docs/ai-gateway/usage/websockets-api/realtime-api.mdx index 57c34339587a994..f444cff4c7a73ef 100644 --- a/src/content/docs/ai-gateway/usage/websockets-api/realtime-api.mdx +++ b/src/content/docs/ai-gateway/usage/websockets-api/realtime-api.mdx @@ -272,7 +272,7 @@ let isPlayingAudio = false; const rl = readline.createInterface({ input: process.stdin, output: process.stdout, - prompt: "Enter text to speak (or \"quit\" to exit): ", + prompt: 'Enter text to speak (or "quit" to exit): ', }); ws.onopen = () => { diff --git a/src/content/docs/ai-search/api/instances/rest-api.mdx b/src/content/docs/ai-search/api/instances/rest-api.mdx index 178f1c9d6c69011..37757fbb0ff5362 100644 --- a/src/content/docs/ai-search/api/instances/rest-api.mdx +++ b/src/content/docs/ai-search/api/instances/rest-api.mdx @@ -20,8 +20,8 @@ Use the AI Search REST API to manage instances and sync jobs over HTTP. AI Search APIs are available at two base paths: -| Path | Description | -| -------------------------------------------------------------------- | --------------------------------------------------------------------------- | +| Path | Description | +| ------------------------------------------------------------------------ | --------------------------------------------------------------------------- | | `/accounts/{account_id}/ai-search/instances/{id}` | Operates on a specific instance | | `/accounts/{account_id}/ai-search/namespaces/{namespace}/instances/{id}` | Operates on instances within a [namespace](/ai-search/concepts/namespaces/) | diff --git a/src/content/docs/ai-search/api/items/rest-api.mdx b/src/content/docs/ai-search/api/items/rest-api.mdx index f23b4dd83703914..08634485801ed10 100644 --- a/src/content/docs/ai-search/api/items/rest-api.mdx +++ b/src/content/docs/ai-search/api/items/rest-api.mdx @@ -35,8 +35,8 @@ The available operations are the same for both paths. For the namespace-scoped A Upload, list, get, delete, and download items within an instance. For the full specification, refer to the [Items API reference](/api/resources/ai_search/subresources/namespaces/subresources/instances/subresources/items/). -| Operation | Method | Description | -| -------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------ | +| Operation | Method | Description | +| ------------------------------------------------------------------------------------------------------------------------ | -------- | ------------------------------ | | [Upload](/api/resources/ai_search/subresources/namespaces/subresources/instances/subresources/items/methods/upload/) | `POST` | Upload a document for indexing | | [List](/api/resources/ai_search/subresources/namespaces/subresources/instances/subresources/items/methods/list/) | `GET` | List all items in an instance | | [Get](/api/resources/ai_search/subresources/namespaces/subresources/instances/subresources/items/methods/get/) | `GET` | Get item info by ID | diff --git a/src/content/docs/ai-search/configuration/models/index.mdx b/src/content/docs/ai-search/configuration/models/index.mdx index c406d789f32edfa..42a76abb29e721b 100644 --- a/src/content/docs/ai-search/configuration/models/index.mdx +++ b/src/content/docs/ai-search/configuration/models/index.mdx @@ -28,12 +28,10 @@ To use AI Search with other model providers: 1. Add provider keys to [AI Gateway](/ai-gateway/configuration/bring-your-own-keys/). 2. Connect the gateway to AI Search. - - When creating a new AI Search, select the AI Gateway with your provider keys. - For an existing AI Search, go to **Settings** and switch to a gateway that has your keys under **Resources**. 3. Select models - - Embedding model: Only available to be changed when creating a new AI Search. - Generation model: Can be selected when creating a new AI Search and can be changed at any time in **Settings**. diff --git a/src/content/docs/ai-search/how-to/nlweb.mdx b/src/content/docs/ai-search/how-to/nlweb.mdx index 25d61bcba3c3cb7..eb36852ae5534f6 100644 --- a/src/content/docs/ai-search/how-to/nlweb.mdx +++ b/src/content/docs/ai-search/how-to/nlweb.mdx @@ -67,23 +67,23 @@ You can use the embeddable snippet to add a search UI directly into your website ```html - - - - -
- - - + + + + +
+ + + ``` This lets you serve conversational AI search directly from your own domain, with control over how people and agents access your content. diff --git a/src/content/docs/ai-search/wrangler-commands.mdx b/src/content/docs/ai-search/wrangler-commands.mdx index f8e1fa53538eca8..916b781370d0e81 100644 --- a/src/content/docs/ai-search/wrangler-commands.mdx +++ b/src/content/docs/ai-search/wrangler-commands.mdx @@ -10,4 +10,4 @@ products: import { WranglerNamespace, WranglerCommand } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/ai/related-products/ai-gateway.mdx b/src/content/docs/ai/related-products/ai-gateway.mdx index c868d2c8ec2fd75..75063087b321b29 100644 --- a/src/content/docs/ai/related-products/ai-gateway.mdx +++ b/src/content/docs/ai/related-products/ai-gateway.mdx @@ -6,5 +6,5 @@ sidebar: external_link: /ai-gateway/ products: - ai - - ai-gateway + - ai-gateway --- diff --git a/src/content/docs/analytics/account-and-zone-analytics/account-analytics.mdx b/src/content/docs/analytics/account-and-zone-analytics/account-analytics.mdx index 0d4aaf4a63bca3e..c5d95a03c76c5d4 100644 --- a/src/content/docs/analytics/account-and-zone-analytics/account-analytics.mdx +++ b/src/content/docs/analytics/account-and-zone-analytics/account-analytics.mdx @@ -9,7 +9,7 @@ products: - analytics --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; Cloudflare account analytics lets you access a wide range of aggregated metrics from all the sites under a specific Cloudflare account. @@ -18,29 +18,29 @@ Cloudflare account analytics lets you access a wide range of aggregated metrics For general information about all of Cloudflare's analytics offerings, refer to [About Cloudflare Analytics](/analytics/faq/about-analytics/). ::: -*** +--- ## View your account analytics To view metrics for your site, in the Cloudflare dashboard, go to the **Account Analytics** page. - + -Once it loads, the Account Analytics app displays a collection of categorized charts with aggregated metrics for your account. To understand the various metrics available, refer to *Review your account metrics* below. +Once it loads, the Account Analytics app displays a collection of categorized charts with aggregated metrics for your account. To understand the various metrics available, refer to _Review your account metrics_ below. -*** +--- ## Review your account metrics This section outlines the aggregated metrics under each category. Before reviewing your metrics, let's define a couple of concepts used in some panels: -* *Rate* -  Reflects the ratio between the amount for a specific data category and the total. -* *Bandwidth* - Refers to the number of bytes sent from the Cloudflare edge network to the requesting client. +- _Rate_ -  Reflects the ratio between the amount for a specific data category and the total. +- _Bandwidth_ - Refers to the number of bytes sent from the Cloudflare edge network to the requesting client. Also, note that: -* To filter metrics for a specific time period, use the dropdown in the top right. -* Most metrics are grouped into panels representing different aspects of the underlying data. +- To filter metrics for a specific time period, use the dropdown in the top right. +- Most metrics are grouped into panels representing different aspects of the underlying data. ### Summary of metrics @@ -52,21 +52,21 @@ These charts aggregate data for HTTP traffic, and include: ![Chart showing last week's data for HTTP traffic](~/assets/images/support/hc-dash-account-analytics-map.png) -* Spark lines for *Requests*, *Bandwidth*, *Page views*, and *Visitors* (*Unique IPs)* -* An interactive map that breaks down the number of requests by country -* A table combining numerical and spark line data, sorted by total number of requests per country +- Spark lines for _Requests_, _Bandwidth_, _Page views_, and _Visitors_ (_Unique IPs)_ +- An interactive map that breaks down the number of requests by country +- A table combining numerical and spark line data, sorted by total number of requests per country #### Security ![Panel displaying lines highlighting encryption metrics: requests, requests rate, bandwidth, and bandwidth rate](~/assets/images/support/hc-dash-account-analytics_security_panel.png) -This panel features spark lines highlighting various encryption metrics, including: *requests*, *requests rate*, *bandwidth*, and *bandwidth rate*.  These also include a comparative percentage change based on the previous period. +This panel features spark lines highlighting various encryption metrics, including: _requests_, _requests rate_, _bandwidth_, and _bandwidth rate_.  These also include a comparative percentage change based on the previous period. #### Cache ![Panel displaying lines for caching metrics: requests, requests rate, bandwidth, and bandwidth rate](~/assets/images/support/hc-dash-account-analytics_cache_card.png) -This panel features spark lines for various caching metrics, including: *requests*, *requests rate*, *bandwidth*, and *bandwidth rate*.  These also include a comparative percentage change based on the previous equivalent period.  For example, if you selected *Last week* as your time period, the previous period refers to the *week* before. +This panel features spark lines for various caching metrics, including: _requests_, _requests rate_, _bandwidth_, and _bandwidth rate_.  These also include a comparative percentage change based on the previous equivalent period.  For example, if you selected _Last week_ as your time period, the previous period refers to the _week_ before. #### Errors diff --git a/src/content/docs/analytics/account-and-zone-analytics/analytics-with-workers.mdx b/src/content/docs/analytics/account-and-zone-analytics/analytics-with-workers.mdx index 76dccf882a47092..84e856b537c7e3a 100644 --- a/src/content/docs/analytics/account-and-zone-analytics/analytics-with-workers.mdx +++ b/src/content/docs/analytics/account-and-zone-analytics/analytics-with-workers.mdx @@ -13,7 +13,7 @@ Learn how Cloudflare analytics tracks requests made by [Cloudflare Workers](/wor With a no-op Worker (a Worker that simply proxies traffic by passing on the original client request to the origin and proxying the response) running on a particular route, the request to the origin is counted as a 'subrequest', separate from initial client to edge request. Thus, unless the Worker responds with a static response and never hits an origin, the eyeball → edge request, and edge → origin request will each be counted separately towards the request or bandwidth count in Analytics. Subrequests are not included in the **Requests** or **Bandwidth** graphs of the Cloudflare **Analytics** app. -*** +--- ## Zone analytics @@ -21,20 +21,20 @@ In the dashboard, the numbers in zone analytics reflect visitor traffic. That is Similarly, the bandwidth is counted based on the bandwidth that is sent to the client, and status codes reflect the status codes that were served back to the client (so if a subrequest received a 500, but you respond with a 200, a 200 will be shown in the status codes breakdown). -*** +--- ## Worker analytics For a breakdown of subrequest traffic (origin facing traffic), you may go to the Cloudflare **Analytics** app and select the **Workers** tab. Under the **Workers** tab, below the Service Workers panel, are a **Subrequests** breakdown by count, **Bandwidth** and **Status Codes**. This will help you spot and debug errors at your origin (such as spikes in 500s), and identify your cache-hit ratio to help you understand traffic going to your origin. -*** +--- ## FAQ **Why do I not have any analytics for Workers?** -* If you are not currently using Workers (do not have Workers deployed on any routes or filters), we will not have any information to show you. -* If your Worker sends a static response back to the client without ever calling fetch() to an origin, you are not making any subrequests, thus, all traffic will be shown in zone Analytics +- If you are not currently using Workers (do not have Workers deployed on any routes or filters), we will not have any information to show you. +- If your Worker sends a static response back to the client without ever calling fetch() to an origin, you are not making any subrequests, thus, all traffic will be shown in zone Analytics **Will this impact billing?**  diff --git a/src/content/docs/analytics/account-and-zone-analytics/index.mdx b/src/content/docs/analytics/account-and-zone-analytics/index.mdx index 54e99ae3cb5ec74..2aeb75e8f6f6dc4 100644 --- a/src/content/docs/analytics/account-and-zone-analytics/index.mdx +++ b/src/content/docs/analytics/account-and-zone-analytics/index.mdx @@ -10,7 +10,7 @@ products: - analytics --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Visit the following pages to learn more about account and zone analytics: diff --git a/src/content/docs/analytics/analytics-engine/grafana.mdx b/src/content/docs/analytics/analytics-engine/grafana.mdx index e6af88fd7a7a901..96310e19e31d8cc 100644 --- a/src/content/docs/analytics/analytics-engine/grafana.mdx +++ b/src/content/docs/analytics/analytics-engine/grafana.mdx @@ -20,10 +20,10 @@ We recommend the use of the [Altinity plugin for Clickhouse](https://grafana.com Configure the plugin as follows: -* URL: `https://api.cloudflare.com/client/v4/accounts//analytics_engine/sql`. Replace `` with your 32 character account ID (available in the Cloudflare dashboard). -* Leave all auth settings off. -* Add a custom header with a name of `Authorization` and value set to `Bearer `. Replace `` with suitable API token string (refer to the [SQL API docs](/analytics/analytics-engine/sql-api/#authentication) for more information on this). -* No other options need to be set. +- URL: `https://api.cloudflare.com/client/v4/accounts//analytics_engine/sql`. Replace `` with your 32 character account ID (available in the Cloudflare dashboard). +- Leave all auth settings off. +- Add a custom header with a name of `Authorization` and value set to `Bearer `. Replace `` with suitable API token string (refer to the [SQL API docs](/analytics/analytics-engine/sql-api/#authentication) for more information on this). +- No other options need to be set. ## Querying timeseries data @@ -35,8 +35,8 @@ SELECT blob1 AS label, SUM(_sample_interval * double1) / SUM(_sample_interval) AS average_metric FROM dataset_name -WHERE - timestamp <= NOW() +WHERE + timestamp <= NOW() AND timestamp > NOW() - INTERVAL '1' DAY GROUP BY blob1, t ORDER BY t diff --git a/src/content/docs/analytics/analytics-engine/index.mdx b/src/content/docs/analytics/analytics-engine/index.mdx index 2eae0d36b0eab7d..ddee07f45c1808c 100644 --- a/src/content/docs/analytics/analytics-engine/index.mdx +++ b/src/content/docs/analytics/analytics-engine/index.mdx @@ -8,15 +8,17 @@ products: - workers-analytics-engine --- -import { LinkButton } from "~/components" +import { LinkButton } from "~/components"; Workers Analytics Engine provides unlimited-cardinality analytics at scale, via [a built-in API](/analytics/analytics-engine/get-started/) to write data points from Workers, and a [SQL API](/analytics/analytics-engine/sql-api/) to query that data. You can use Workers Analytics Engine to: -* Expose custom analytics to your own customers -* Build usage-based billing systems -* Understand the health of your service on a per-customer or per-user basis -* Add instrumentation to frequently called code paths, without impacting performance or overwhelming external analytics systems with events +- Expose custom analytics to your own customers +- Build usage-based billing systems +- Understand the health of your service on a per-customer or per-user basis +- Add instrumentation to frequently called code paths, without impacting performance or overwhelming external analytics systems with events - Get started + + Get started + diff --git a/src/content/docs/analytics/analytics-engine/limits.mdx b/src/content/docs/analytics/analytics-engine/limits.mdx index 293093c33e3343b..d4eb97a73b95fcb 100644 --- a/src/content/docs/analytics/analytics-engine/limits.mdx +++ b/src/content/docs/analytics/analytics-engine/limits.mdx @@ -13,10 +13,10 @@ products: The following limits apply to Workers Analytics Engine: -* Analytics Engine will accept up to twenty blobs, twenty doubles, and one index per call to `writeDataPoint`. -* The total size of all blobs in a request must not exceed **16 KB**. The 16 KB size limit for the blobs field applies to **each individual data point**, regardless of how many are included in a single request using writeDataPoints(). -* Each index must not be more than 96 bytes. -* You can write a maximum of 250 data points per Worker invocation (client HTTP request). Each call to `writeDataPoint` counts towards this limit. +- Analytics Engine will accept up to twenty blobs, twenty doubles, and one index per call to `writeDataPoint`. +- The total size of all blobs in a request must not exceed **16 KB**. The 16 KB size limit for the blobs field applies to **each individual data point**, regardless of how many are included in a single request using writeDataPoints(). +- Each index must not be more than 96 bytes. +- You can write a maximum of 250 data points per Worker invocation (client HTTP request). Each call to `writeDataPoint` counts towards this limit. ## Data retention diff --git a/src/content/docs/analytics/analytics-engine/pricing.mdx b/src/content/docs/analytics/analytics-engine/pricing.mdx index 059f55deae8360d..bef373bc86ebf85 100644 --- a/src/content/docs/analytics/analytics-engine/pricing.mdx +++ b/src/content/docs/analytics/analytics-engine/pricing.mdx @@ -23,7 +23,7 @@ Workers Analytics Engine is priced based on two metrics — data points written Currently, you will not be billed for your use of Workers Analytics Engine. Pricing information here is shared in advance, so that you can estimate what your costs will be once Cloudflare starts billing for usage in the coming months. -If you are an Enterprise customer, contact your account team for information about Workers Analytics Engine pricing and billing. +If you are an Enterprise customer, contact your account team for information about Workers Analytics Engine pricing and billing. ::: ### Data points written diff --git a/src/content/docs/analytics/analytics-engine/recipes/index.mdx b/src/content/docs/analytics/analytics-engine/recipes/index.mdx index f0a1bab71954b46..17c5d1b314b065e 100644 --- a/src/content/docs/analytics/analytics-engine/recipes/index.mdx +++ b/src/content/docs/analytics/analytics-engine/recipes/index.mdx @@ -13,7 +13,7 @@ products: - workers-analytics-engine --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Example implementations of common use cases for Workers Analytics Engine: diff --git a/src/content/docs/analytics/analytics-engine/sampling.mdx b/src/content/docs/analytics/analytics-engine/sampling.mdx index c358eadeb8f377c..bc8b75c9cac7e72 100644 --- a/src/content/docs/analytics/analytics-engine/sampling.mdx +++ b/src/content/docs/analytics/analytics-engine/sampling.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -Workers Analytics Engine offers the ability to write an extensive amount of data and retrieve it quickly, at minimal or no cost. To facilitate writing large amounts of data at a reasonable cost, Workers Analytics Engine employs weighted adaptive [sampling](https://en.wikipedia.org/wiki/Sampling_\(statistics\)). +Workers Analytics Engine offers the ability to write an extensive amount of data and retrieve it quickly, at minimal or no cost. To facilitate writing large amounts of data at a reasonable cost, Workers Analytics Engine employs weighted adaptive [sampling](). When utilizing sampling, you do not need every single data point to answer questions about a dataset. For a sufficiently large dataset, the [necessary sample size](https://select-statistics.co.uk/blog/importance-effect-sample-size/) does not depend on the size of the original population. Necessary sample size depends on the variance of your measure, the size of the subgroups you analyze, and how accurate your estimate must be. @@ -24,11 +24,11 @@ At a high level, the way sampling works is: In the following sections, you will learn: -* [How sampling works](/analytics/analytics-engine/sampling/#how-sampling-works). -* [How to read sampled data](/analytics/analytics-engine/sampling/#how-to-read-sampled-data). -* [How is data sampled](/analytics/analytics-engine/sampling/#how-is-data-sampled). -* [How Adaptive Bit Rate Sampling works](/analytics/analytics-engine/sampling/#adaptive-bit-rate-sampling-at-read-time). -* [How to pick your index such that your data is sampled in a usable way](/analytics/analytics-engine/sampling/#how-to-select-an-index). +- [How sampling works](/analytics/analytics-engine/sampling/#how-sampling-works). +- [How to read sampled data](/analytics/analytics-engine/sampling/#how-to-read-sampled-data). +- [How is data sampled](/analytics/analytics-engine/sampling/#how-is-data-sampled). +- [How Adaptive Bit Rate Sampling works](/analytics/analytics-engine/sampling/#adaptive-bit-rate-sampling-at-read-time). +- [How to pick your index such that your data is sampled in a usable way](/analytics/analytics-engine/sampling/#how-to-select-an-index). ## How sampling works @@ -44,15 +44,15 @@ The key point is that the map's quality does not solely depend on the resolution There are similarities between the how a mapping services handles resolution and Cloudflare Analytics delivers analytics using adaptive samples: -* **How data is stored**: - * **Mapping service**: Imagery stored at different resolutions. - * **Cloudflare Analytics**: Events stored at different sample rates. -* **How data is displayed to user**: - * **Mapping service**: The total number of pixels is \~constant for a given screen size, regardless of the area selected. - * **Cloudflare Analytics**: A similar number of events are read for each query, regardless of the size of the dataset or length of time selected. -* **How a resolution is selected**: - * **Mapping service**: The area represented by each pixel will depend on the size of the map being rendered. In a more zoomed out map, each pixel will represent a larger area. - * **Cloudflare Analytics**: The sample interval of each event in the result depends on the size of the underlying dataset and length of time selected. For a query over a large dataset or long length of time, each sampled event may stand in for many similar events. +- **How data is stored**: + - **Mapping service**: Imagery stored at different resolutions. + - **Cloudflare Analytics**: Events stored at different sample rates. +- **How data is displayed to user**: + - **Mapping service**: The total number of pixels is \~constant for a given screen size, regardless of the area selected. + - **Cloudflare Analytics**: A similar number of events are read for each query, regardless of the size of the dataset or length of time selected. +- **How a resolution is selected**: + - **Mapping service**: The area represented by each pixel will depend on the size of the map being rendered. In a more zoomed out map, each pixel will represent a larger area. + - **Cloudflare Analytics**: The sample interval of each event in the result depends on the size of the underlying dataset and length of time selected. For a query over a large dataset or long length of time, each sampled event may stand in for many similar events. ## How to read sampled data @@ -87,11 +87,11 @@ If we took a [simple random sample](https://en.wikipedia.org/wiki/Simple_random_ ![The same graphic as above, but now based on a 1% sample of the data.](~/assets/images/analytics/sample-data.png) -Notice that the larger bars look more or less unchanged, and yet they are still quite accurate. But as you analyze smaller customers, results get [quantized](https://en.wikipedia.org/wiki/Quantization_\(signal_processing\)) and may even be rounded to 0 entirely. +Notice that the larger bars look more or less unchanged, and yet they are still quite accurate. But as you analyze smaller customers, results get [quantized]() and may even be rounded to 0 entirely. This shows that while a one percent (1%) or even smaller sample of a large population may be sufficient, we may need to store a larger proportion of events for a small population to get accurate results. -We do this through a technique called equitable sampling. This means that we will equalize the number of events we store for each unique index value. For relatively uncommon index values, we may write all of the data points that we get via `writeDataPoint()`. But if you write lots of data points to a single index value, we will start to sample. +We do this through a technique called equitable sampling. This means that we will equalize the number of events we store for each unique index value. For relatively uncommon index values, we may write all of the data points that we get via `writeDataPoint()`. But if you write lots of data points to a single index value, we will start to sample. Here is the same distribution, but now with (a simulation of) equitable sampling applied: @@ -117,23 +117,23 @@ In order to get accurate results with sampled data, select an appropriate value The index has the following properties, which are important to consider when choosing an index: -* Get accurate summary statistics about your entire dataset, across all index values. -* Get an accurate count of the number of unique values of your index. -* Get accurate summary statistics (for example, count, sum) within a particular index value. -* See the `Top N` values of specific fields that are not in your index. -* Filter on most fields. -* Run other aggregations like quantiles. +- Get accurate summary statistics about your entire dataset, across all index values. +- Get an accurate count of the number of unique values of your index. +- Get accurate summary statistics (for example, count, sum) within a particular index value. +- See the `Top N` values of specific fields that are not in your index. +- Filter on most fields. +- Run other aggregations like quantiles. Some limitations and trade-offs to consider are: -* You may not be able to get accurate unique counts of fields that are not in your index. - * For example, if you index on `hostname`, you may not be able to count the number of unique URLs. -* You may not be able to observe very rare values of fields not in the index. - * For example, a particular URL for a hostname, if you index on host and have millions of unique URLs. -* You may not be able to run accurate queries across multiple indices at once. - * For example, you may only be able to query for one host at a time (or all of them) and expect accurate results. -* There is no guarantee you can retrieve any one individual record. -* You cannot necessarily reconstruct exact sequences of events. +- You may not be able to get accurate unique counts of fields that are not in your index. + - For example, if you index on `hostname`, you may not be able to count the number of unique URLs. +- You may not be able to observe very rare values of fields not in the index. + - For example, a particular URL for a hostname, if you index on host and have millions of unique URLs. +- You may not be able to run accurate queries across multiple indices at once. + - For example, you may only be able to query for one host at a time (or all of them) and expect accurate results. +- There is no guarantee you can retrieve any one individual record. +- You cannot necessarily reconstruct exact sequences of events. It is not recommended to write a unique index value on every row (like a UUID) for most use cases. While this will make it possible to retrieve individual data points very quickly, it will slow down most queries for aggregations and time series. diff --git a/src/content/docs/analytics/analytics-engine/sql-api.mdx b/src/content/docs/analytics/analytics-engine/sql-api.mdx index 55cfccf8e90d48f..1801c7d93dbaf1a 100644 --- a/src/content/docs/analytics/analytics-engine/sql-api.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-api.mdx @@ -25,10 +25,10 @@ Use the dashboard to create a token with permission to read analytics data on yo 2. Select **Create Token**. 3. Select **Create Custom Token**. 4. Complete the **Create Custom Token** form as follows: - * Give your token a descriptive name. - * For **Permissions** select *Account* | *Account Analytics* | *Read* - * Optionally configure account and IP restrictions and TTL. - * Submit and confirm the form to create the token. + - Give your token a descriptive name. + - For **Permissions** select _Account_ | _Account Analytics_ | _Read_ + - Optionally configure account and IP restrictions and TTL. + - Submit and confirm the form to create the token. 5. Make a note of the token string. ## Querying the API @@ -63,7 +63,7 @@ The table will have the following columns: | ---------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | dataset | string | This column will contain the dataset name in every row. | | timestamp | DateTime | The timestamp at which the event was logged in your worker. | -| \_sample\_interval | integer | In case that the data has been sampled, this column indicates what the sample rate is for this row (that is, how many rows of the original data are represented by this row). Refer to the [sampling](#sampling) section below for more information. | +| \_sample_interval | integer | In case that the data has been sampled, this column indicates what the sample rate is for this row (that is, how many rows of the original data are represented by this row). Refer to the [sampling](#sampling) section below for more information. | | index1 | string | The index value that was logged with the event. The value in this column is used as the key for sampling. | | blob1
...
blob20 | string | The blob values that were logged with the event. | | double1
...
double20 | double | The double values that were logged with the event. | diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/aggregate-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/aggregate-functions.mdx index 4d1827c650f3567..62e8e01ba6ec69f 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/aggregate-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/aggregate-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## count diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/bit-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/bit-functions.mdx index f8d061a0f4b5635..9a64750c492178a 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/bit-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/bit-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## bitAnd diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/date-time-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/date-time-functions.mdx index 9db9dac5fb7d21a..46e2141c8ef25e0 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/date-time-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/date-time-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## formatDateTime diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/encoding-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/encoding-functions.mdx index 851779802af43f3..016f68450f83fef 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/encoding-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/encoding-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## bin diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/index.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/index.mdx index ebe0124792308e4..e8a324356d02009 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/index.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/index.mdx @@ -13,7 +13,7 @@ products: - workers-analytics-engine --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Reference documentation describing the SQL supported by Workers Analytics Engine: diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/mathematical-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/mathematical-functions.mdx index ba40ae26a6009c2..97035f5a95abd0e 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/mathematical-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/mathematical-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## intDiv diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/string-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/string-functions.mdx index 9a4b8089ef3d6c5..40411492466534f 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/string-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/string-functions.mdx @@ -12,7 +12,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## length diff --git a/src/content/docs/analytics/analytics-engine/sql-reference/type-conversion-functions.mdx b/src/content/docs/analytics/analytics-engine/sql-reference/type-conversion-functions.mdx index f87f1a7eb19e146..1ddf69b03623497 100644 --- a/src/content/docs/analytics/analytics-engine/sql-reference/type-conversion-functions.mdx +++ b/src/content/docs/analytics/analytics-engine/sql-reference/type-conversion-functions.mdx @@ -11,7 +11,7 @@ products: - workers-analytics-engine --- -import { Badge } from "~/components" +import { Badge } from "~/components"; ## toUInt8 diff --git a/src/content/docs/analytics/analytics-engine/worker-querying.mdx b/src/content/docs/analytics/analytics-engine/worker-querying.mdx index 81c7b08511cf5ca..0a8521edc362e68 100644 --- a/src/content/docs/analytics/analytics-engine/worker-querying.mdx +++ b/src/content/docs/analytics/analytics-engine/worker-querying.mdx @@ -11,7 +11,6 @@ products: - workers-analytics-engine --- - import { WranglerConfig } from "~/components"; If you want to access Analytics Engine data from within a Worker you can use `fetch` to access the SQL API. The API can return JSON data that is easy to interact with in JavaScript. diff --git a/src/content/docs/analytics/analytics-integrations/datadog.mdx b/src/content/docs/analytics/analytics-integrations/datadog.mdx index 579cc03b68a207a..07af42f65157723 100644 --- a/src/content/docs/analytics/analytics-integrations/datadog.mdx +++ b/src/content/docs/analytics/analytics-integrations/datadog.mdx @@ -36,7 +36,6 @@ To install the Cloudflare App for Datadog: 4. Click the **Cloudflare** tile to begin the installation. 5. Next, click **Configuration** and then complete the following: - - **Account name**: (Optional) This can be any value. It has not impact on the site data pulled from Cloudflare. - **Email**: This value helps keep your account safe. We recommend creating a dedicated Cloudflare user for analytics with the [_Analytics_ role](/fundamentals/manage-members/roles/) (read-only). Note that the _Analytics_ role is available to Enterprise customers only. diff --git a/src/content/docs/analytics/analytics-integrations/index.mdx b/src/content/docs/analytics/analytics-integrations/index.mdx index 12212b2b3fbc24f..f97ccae2ade7ad9 100644 --- a/src/content/docs/analytics/analytics-integrations/index.mdx +++ b/src/content/docs/analytics/analytics-integrations/index.mdx @@ -9,7 +9,7 @@ products: - logs --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Cloudflare Enterprise customers can use Cloudflare integrations with their preferred analytics provider and configure ready-to-use Cloudflare Dashboards. Most analytics integrations are built on Cloudflare Logs by using Logpush with either Amazon S3 bucket or GCP Storage bucket. diff --git a/src/content/docs/analytics/analytics-integrations/prometheus.mdx b/src/content/docs/analytics/analytics-integrations/prometheus.mdx index 10a355c84e93b3d..bcee11a6e7f26eb 100644 --- a/src/content/docs/analytics/analytics-integrations/prometheus.mdx +++ b/src/content/docs/analytics/analytics-integrations/prometheus.mdx @@ -59,16 +59,16 @@ Create a Cloudflare API token with the following permissions: [Create token with pre-filled permissions](https://dash.cloudflare.com/profile/api-tokens?permissionGroupKeys=%5B%7B%22key%22%3A%22analytics%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22account_analytics%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22workers_scripts%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22ssl_and_certificates%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22firewall_services%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22load_balancers%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22account_logs%22%2C%22type%22%3A%22read%22%7D%2C%7B%22key%22%3A%22magic_transit%22%2C%22type%22%3A%22read%22%7D%5D&name=Cloudflare%20Prometheus%20Exporter) -| Permission | Access | Required | -|---|---|---| -| Zone > Analytics | Read | Yes | -| Account > Account Analytics | Read | Yes | -| Account > Workers Scripts | Read | Yes | -| Zone > SSL and Certificates | Read | Optional | -| Zone > Firewall Services | Read | Optional | -| Zone > Load Balancers | Read | Optional | -| Account > Logs | Read | Optional | -| Account > Magic Transit | Read | Optional | +| Permission | Access | Required | +| --------------------------- | ------ | -------- | +| Zone > Analytics | Read | Yes | +| Account > Account Analytics | Read | Yes | +| Account > Workers Scripts | Read | Yes | +| Zone > SSL and Certificates | Read | Optional | +| Zone > Firewall Services | Read | Optional | +| Zone > Load Balancers | Read | Optional | +| Account > Logs | Read | Optional | +| Account > Magic Transit | Read | Optional | ## Task 3 - Configure Prometheus @@ -76,11 +76,11 @@ Add the exporter as a scrape target in your Prometheus configuration: ```yaml scrape_configs: - - job_name: 'cloudflare' + - job_name: "cloudflare" scrape_interval: 60s scrape_timeout: 30s static_configs: - - targets: ['your-worker.your-subdomain.workers.dev'] + - targets: ["your-worker.your-subdomain.workers.dev"] ``` ### With Basic Auth @@ -89,14 +89,14 @@ If you configured Basic Auth on the exporter, update your Prometheus configurati ```yaml scrape_configs: - - job_name: 'cloudflare' + - job_name: "cloudflare" scrape_interval: 60s scrape_timeout: 30s basic_auth: - username: 'your-username' - password: 'your-password' + username: "your-username" + password: "your-password" static_configs: - - targets: ['your-worker.your-subdomain.workers.dev'] + - targets: ["your-worker.your-subdomain.workers.dev"] ``` ## Configuration @@ -105,32 +105,32 @@ Configuration is resolved in order: **KV overrides** > **environment variables** Set environment variables in `wrangler.jsonc` or via `wrangler secret put`: -| Variable | Default | Description | -|---|---|---| -| `CLOUDFLARE_API_TOKEN` | - | Cloudflare API token (secret) | -| `SCRAPE_DELAY_SECONDS` | `300` | Delay before fetching metrics (data propagation) | -| `TIME_WINDOW_SECONDS` | `60` | Query time window | -| `METRIC_REFRESH_INTERVAL_SECONDS` | `60` | Background refresh interval | -| `CF_ACCOUNTS` | - | Comma-separated account IDs to include (default: all) | -| `CF_ZONES` | - | Comma-separated zone IDs to include (default: all) | -| `METRICS_DENYLIST` | - | Comma-separated list of metrics to exclude | -| `EXCLUDE_HOST` | `false` | Exclude host labels from metrics | -| `METRICS_PATH` | `/metrics` | Custom path for metrics endpoint | -| `BASIC_AUTH_USER` | - | Username for Basic Auth (secret) | -| `BASIC_AUTH_PASSWORD` | - | Password for Basic Auth (secret) | +| Variable | Default | Description | +| --------------------------------- | ---------- | ----------------------------------------------------- | +| `CLOUDFLARE_API_TOKEN` | - | Cloudflare API token (secret) | +| `SCRAPE_DELAY_SECONDS` | `300` | Delay before fetching metrics (data propagation) | +| `TIME_WINDOW_SECONDS` | `60` | Query time window | +| `METRIC_REFRESH_INTERVAL_SECONDS` | `60` | Background refresh interval | +| `CF_ACCOUNTS` | - | Comma-separated account IDs to include (default: all) | +| `CF_ZONES` | - | Comma-separated zone IDs to include (default: all) | +| `METRICS_DENYLIST` | - | Comma-separated list of metrics to exclude | +| `EXCLUDE_HOST` | `false` | Exclude host labels from metrics | +| `METRICS_PATH` | `/metrics` | Custom path for metrics endpoint | +| `BASIC_AUTH_USER` | - | Username for Basic Auth (secret) | +| `BASIC_AUTH_PASSWORD` | - | Password for Basic Auth (secret) | For a full list of configuration options, refer to the [exporter README](https://github.com/cloudflare/cloudflare-prometheus-exporter#configuration). ## Endpoints -| Path | Method | Description | -|---|---|---| -| `/` | GET | Landing page | -| `/metrics` | GET | Prometheus metrics | -| `/health` | GET | Health check | -| `/config` | GET | Get all runtime config | -| `/config/:key` | PUT | Set a config override (persisted in KV) | -| `/config/:key` | DELETE | Reset a config key to its default | +| Path | Method | Description | +| -------------- | ------ | --------------------------------------- | +| `/` | GET | Landing page | +| `/metrics` | GET | Prometheus metrics | +| `/health` | GET | Health check | +| `/config` | GET | Get all runtime config | +| `/config/:key` | PUT | Set a config override (persisted in KV) | +| `/config/:key` | DELETE | Reset a config key to its default | ## Available metrics @@ -160,6 +160,7 @@ For a complete list of metrics with types and labels, refer to the [exporter REA Zones on Cloudflare's Free plan do not have access to the GraphQL Analytics API. The exporter automatically detects and skips free tier zones for metrics that require this API. Free tier zones still export: + - `cloudflare_zone_certificate_validation_status` (SSL certificates) - `cloudflare_zone_lb_origin_weight` (Load balancer weights, if configured) diff --git a/src/content/docs/analytics/custom-dashboards.mdx b/src/content/docs/analytics/custom-dashboards.mdx index 49b08e4bdd64804..11fc76cc324f367 100644 --- a/src/content/docs/analytics/custom-dashboards.mdx +++ b/src/content/docs/analytics/custom-dashboards.mdx @@ -28,10 +28,10 @@ Investigate incidents so that when something goes wrong, you can create focused Custom Dashboards are available to all Cloudflare customers. -| Customer type | Dashboard limit | -|---------------|-----------------| -| All Cloudflare customers | Up to 25 dashboards | -| Log Explorer customers | Up to 100 dashboards | +| Customer type | Dashboard limit | +| ------------------------ | -------------------- | +| All Cloudflare customers | Up to 25 dashboards | +| Log Explorer customers | Up to 100 dashboards | ## Get started @@ -39,13 +39,13 @@ Custom Dashboards are available to all Cloudflare customers. Templates are the fastest way to get value from Custom Dashboards. Each template is designed around a specific use case and includes pre-configured charts that surface the most relevant metrics. -| Template | Use case | -|----------|----------| -| **Bot monitoring** | Understand what automated traffic is hitting your site — distinguish good bots (search engines, monitoring) from bad actors | -| **API Security** | Monitor your API endpoints for anomalies, track data transfer volumes, and identify unexpected access patterns | -| **Account takeover** | Watch for credential stuffing attacks by tracking failed login attempts, leaked credential usage, and suspicious authentication patterns | -| **API Performance** | Identify slow API endpoints, track error rates by endpoint, and monitor latency percentiles to catch regressions before users complain | -| **Performance monitoring** | Find bottlenecks in your origin infrastructure — which hosts are slow, which paths have high TTFB, and how performance trends over time | +| Template | Use case | +| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| **Bot monitoring** | Understand what automated traffic is hitting your site — distinguish good bots (search engines, monitoring) from bad actors | +| **API Security** | Monitor your API endpoints for anomalies, track data transfer volumes, and identify unexpected access patterns | +| **Account takeover** | Watch for credential stuffing attacks by tracking failed login attempts, leaked credential usage, and suspicious authentication patterns | +| **API Performance** | Identify slow API endpoints, track error rates by endpoint, and monitor latency percentiles to catch regressions before users complain | +| **Performance monitoring** | Find bottlenecks in your origin infrastructure — which hosts are slow, which paths have high TTFB, and how performance trends over time | After selecting a template, you can customize it by adding, removing, or modifying charts to fit your specific needs. @@ -81,15 +81,15 @@ For precise control, configure each element of your chart: Choose the visualization that best fits your data: -| Chart type | Best for | -|------------|----------| +| Chart type | Best for | +| -------------- | ---------------------------------------------------------------------------------------- | | **Timeseries** | Trends and patterns over time — traffic spikes, latency changes, error rate fluctuations | -| **Bar** | Comparing values across categories — requests by country, errors by status code | -| **Donut** | Understanding proportions — cache hit ratio, traffic distribution by content type | -| **Map** | Geographic patterns — where your traffic originates, regional performance differences | -| **Stat** | Single important numbers — total requests today, current error rate, p99 latency | -| **Percentage** | Ratios and rates — cache hit percentage, bot traffic proportion | -| **Top N** | Rankings — busiest endpoints, most blocked IPs, top user agents | +| **Bar** | Comparing values across categories — requests by country, errors by status code | +| **Donut** | Understanding proportions — cache hit ratio, traffic distribution by content type | +| **Map** | Geographic patterns — where your traffic originates, regional performance differences | +| **Stat** | Single important numbers — total requests today, current error rate, p99 latency | +| **Percentage** | Ratios and rates — cache hit percentage, bot traffic proportion | +| **Top N** | Rankings — busiest endpoints, most blocked IPs, top user agents | #### Example: Build a security overview chart diff --git a/src/content/docs/analytics/faq/about-analytics.mdx b/src/content/docs/analytics/faq/about-analytics.mdx index 027f8a07eb32e94..53d5f449641933e 100644 --- a/src/content/docs/analytics/faq/about-analytics.mdx +++ b/src/content/docs/analytics/faq/about-analytics.mdx @@ -23,10 +23,10 @@ Refer to [Types of analytics](/analytics/types-of-analytics/) for more informati The underlying datasets that Cloudflare Analytics captures and processes share the following characteristics: -* All metrics reflect traffic proxied through the Cloudflare network (also known as orange-clouded), as configured via DNS records in the Cloudflare DNS app. Note that for a [CNAME setup](/dns/zone-setups/partial-setup/), Cloudflare is unable to offer DNS metrics. -* Cloudflare does not count traffic for unproxied DNS records. However, if your site is not proxied through Cloudflare but Cloudflare is your authoritative DNS server, then we are able to collect DNS metrics. -* Cloudflare can only proxy information for traffic targeting [specific ports](/fundamentals/reference/network-ports/). -* In determining the originating country, Cloudflare uses the IP address associated with each request. Learn about [Configuring Cloudflare IP Geolocation](/network/ip-geolocation/). +- All metrics reflect traffic proxied through the Cloudflare network (also known as orange-clouded), as configured via DNS records in the Cloudflare DNS app. Note that for a [CNAME setup](/dns/zone-setups/partial-setup/), Cloudflare is unable to offer DNS metrics. +- Cloudflare does not count traffic for unproxied DNS records. However, if your site is not proxied through Cloudflare but Cloudflare is your authoritative DNS server, then we are able to collect DNS metrics. +- Cloudflare can only proxy information for traffic targeting [specific ports](/fundamentals/reference/network-ports/). +- In determining the originating country, Cloudflare uses the IP address associated with each request. Learn about [Configuring Cloudflare IP Geolocation](/network/ip-geolocation/). ## Apparent data discrepancies @@ -42,10 +42,10 @@ Finally, it is likely that unique visitor data from the Cloudflare Analytics app You may not be seeing metrics on Cloudflare Analytics for the following reasons: -* You only recently signed up for Cloudflare. Metrics are delayed 24 hours for domains on a free Cloudflare plan. -* If you signed up directly with Cloudflare, your nameservers might not be pointing to Cloudflare at your registrar just yet. Registrars can take 24-72 hours to update their nameservers. Metrics will not start gathering until we detect the nameservers pointing to Cloudflare. -* If you signed up through a Cloudflare [hosting partner option](https://www.cloudflare.com/partners/), something might not be configured correctly. Contact the hosting partner for support. -* Some browser extensions designed to block ads may prevent analytics from loading. To address this issue, disable the ad block extension or allow `cloudflare.com` on it. +- You only recently signed up for Cloudflare. Metrics are delayed 24 hours for domains on a free Cloudflare plan. +- If you signed up directly with Cloudflare, your nameservers might not be pointing to Cloudflare at your registrar just yet. Registrars can take 24-72 hours to update their nameservers. Metrics will not start gathering until we detect the nameservers pointing to Cloudflare. +- If you signed up through a Cloudflare [hosting partner option](https://www.cloudflare.com/partners/), something might not be configured correctly. Contact the hosting partner for support. +- Some browser extensions designed to block ads may prevent analytics from loading. To address this issue, disable the ad block extension or allow `cloudflare.com` on it. :::note Activations through a hosting partner works via a [CNAME setup](/dns/zone-setups/partial-setup/) on the `www` record. If most of your traffic actually goes to `domain.com`, [forward your traffic](/rules/url-forwarding/bulk-redirects/) from `domain.com` to `www.domain.com`. diff --git a/src/content/docs/analytics/faq/index.mdx b/src/content/docs/analytics/faq/index.mdx index c7d87c530a29c24..555fcdc07a3795f 100644 --- a/src/content/docs/analytics/faq/index.mdx +++ b/src/content/docs/analytics/faq/index.mdx @@ -10,7 +10,7 @@ products: - analytics --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Visit the following pages for commonly asked questions: diff --git a/src/content/docs/analytics/faq/other-faqs.mdx b/src/content/docs/analytics/faq/other-faqs.mdx index 4e9145ab25ee9ae..86adb232c817e4d 100644 --- a/src/content/docs/analytics/faq/other-faqs.mdx +++ b/src/content/docs/analytics/faq/other-faqs.mdx @@ -15,10 +15,8 @@ There is a number of different types of traffic which may originate from **CLOUD Some sources of traffic from ASN13335 include: -* [Workers subrequests](/workers/runtime-apis/fetch/) -* [WARP](/warp-client/known-issues-and-faq/#does-warp-reveal-my-ip-address-to-websites-i-visit) -* [iCloud Private Relay](https://blog.cloudflare.com/icloud-private-relay/) (For reference, iCloud Private Relay’s egress IP addresses are available in this [CSV form](https://mask-api.icloud.com/egress-ip-ranges.csv)) -* [Cloudflare Privacy Proxy](https://blog.cloudflare.com/building-privacy-into-internet-standards-and-how-to-make-your-app-more-private-today/) -* Other Cloudflare features like [Health Checks](/health-checks/) - - +- [Workers subrequests](/workers/runtime-apis/fetch/) +- [WARP](/warp-client/known-issues-and-faq/#does-warp-reveal-my-ip-address-to-websites-i-visit) +- [iCloud Private Relay](https://blog.cloudflare.com/icloud-private-relay/) (For reference, iCloud Private Relay’s egress IP addresses are available in this [CSV form](https://mask-api.icloud.com/egress-ip-ranges.csv)) +- [Cloudflare Privacy Proxy](https://blog.cloudflare.com/building-privacy-into-internet-standards-and-how-to-make-your-app-more-private-today/) +- Other Cloudflare features like [Health Checks](/health-checks/) diff --git a/src/content/docs/analytics/faq/wae-faqs.mdx b/src/content/docs/analytics/faq/wae-faqs.mdx index 3693060a2bb2ab8..b88ec97467a6ce7 100644 --- a/src/content/docs/analytics/faq/wae-faqs.mdx +++ b/src/content/docs/analytics/faq/wae-faqs.mdx @@ -23,29 +23,24 @@ On the other hand, if you pick a good index that aligns with how you read the da ### What if I need to index on multiple values? - It is possible to concatenate multiple values in your index field. So if you want to index on user ID and hostname, you can write, for example `"$userID:$hostname"` into your index field. Note that, based on your query pattern, it may make sense to write the same dataset with different indices. It is a common misconception that one should avoid "double-writing" data. Thanks to sampling, the cost of writing data multiple times can be relatively low. However, reading data inefficiently can result in significant expenses or low-quality results due to sampling. - ### How do I know if my data is sampled? You can use the `_sample_interval` field — again, note that this does not tell you if the results are accurate. You can tell when data is sampled at read time because sample intervals will be multiples of powers of 10, for example `20` or `700`. There is no hard and fast rule for when sampling starts at read time, but in practice reading longer periods (or more index values) will result in a higher sample interval. - ### Why is data missing? - Sampling is based largely on the choice of index, as well as other factors like the time range queried and number of indices read. If you are reading from a larger index over a longer time period, and have filtered to a relatively small subgroup within that index, it may not be present due to sampling. If you need to read accurate results for that subgroup, we suggest that you add that field to your index (refer to [What if I need to index on multiple values](/analytics/faq/wae-faqs/#what-if-i-need-to-index-on-multiple-values)). - ### Can I trust sampled data? Are my results accurate? Sampled data is highly reliable, particularly when a carefully selected index is used. @@ -56,7 +51,7 @@ In the near future, we plan to expose the [margin of error](https://en.wikipedia ### How are bursts handled? -Equitable sampling exists both to normalize differences between groups, and also to handle large spikes of traffic to a given index. Equalization happens every few seconds; if you are writing many events very close in time, then it is expected that they will be sampled at write time. The sample interval for a given index will vary from moment to moment, based on the current rate of data being written. +Equitable sampling exists both to normalize differences between groups, and also to handle large spikes of traffic to a given index. Equalization happens every few seconds; if you are writing many events very close in time, then it is expected that they will be sampled at write time. The sample interval for a given index will vary from moment to moment, based on the current rate of data being written. ### How much traffic will trigger sampling? @@ -65,5 +60,3 @@ There is no fixed rule determining when sampling will be triggered. We have observed that for workloads like our global CDN, which distribute load around our network, each index value needs about 100 data points per second before sampling is noticeable at all. Depending on your workload and how you use Workers Analytics Engine, sampling may start at a higher or lower threshold than this. For example, if you are writing out many data points from a single worker execution, it is more likely that your data will be sampled. - - diff --git a/src/content/docs/analytics/graphql-api/errors.mdx b/src/content/docs/analytics/graphql-api/errors.mdx index b40d61df3dca927..aeead71c606fc32 100644 --- a/src/content/docs/analytics/graphql-api/errors.mdx +++ b/src/content/docs/analytics/graphql-api/errors.mdx @@ -13,24 +13,24 @@ The GraphQL Analytics API is a RESTful API based on HTTPS requests and JSON resp All responses contain an `errors` array, which will be `null` if there are no errors, and include at least one error object if there was an error. Non-null error objects will contain the following fields: -* `message`: a string describing the error. -* `path`: the nodes associated with the error, starting from the root. Note that the number included in the path array, for example, `0` or `1`, specifies to which zone the error applies; `0` indicates the first zone in the list (or only zone, if only one is being queried). -* `timestamp`: UTC datetime when the error occurred. +- `message`: a string describing the error. +- `path`: the nodes associated with the error, starting from the root. Note that the number included in the path array, for example, `0` or `1`, specifies to which zone the error applies; `0` indicates the first zone in the list (or only zone, if only one is being queried). +- `timestamp`: UTC datetime when the error occurred. ## Example ```json { - "data": null, - "errors": [ - { - "message": "cannot request data older than 2678400s", - "path": ["viewer", "zones", "0", "firewallEventsAdaptiveGroups"], - "extensions": { - "timestamp": "2019-12-09T21:27:19.195060142Z" - } - } - ] + "data": null, + "errors": [ + { + "message": "cannot request data older than 2678400s", + "path": ["viewer", "zones", "0", "firewallEventsAdaptiveGroups"], + "extensions": { + "timestamp": "2019-12-09T21:27:19.195060142Z" + } + } + ] } ``` @@ -40,8 +40,8 @@ All responses contain an `errors` array, which will be `null` if there are no er Sample error messages: -* `unable to execute query, please try again later` (HTTP `503`) -* `too many queries in progress, please try again later` (HTTP `503`) +- `unable to execute query, please try again later` (HTTP `503`) +- `too many queries in progress, please try again later` (HTTP `503`) These messages indicate a temporary server-side issue. The first message typically means the upstream database is unreachable or returned an error. The second message means the server has reached its maximum number of concurrent queries. @@ -51,10 +51,10 @@ Retry the request after a short delay. If the error persists, check the [Cloudfl Sample error messages: -* `cannot request data older than...` (HTTP `400`) -* `number of fields can't be more than...` (HTTP `400`) -* `limit must be positive number and not greater than...` (HTTP `400`) -* `query time range is too large...` (HTTP `400`) +- `cannot request data older than...` (HTTP `400`) +- `number of fields can't be more than...` (HTTP `400`) +- `limit must be positive number and not greater than...` (HTTP `400`) +- `query time range is too large...` (HTTP `400`) These messages indicate that the query exceeds what is allowed for the particular dataset under the current [plan](https://www.cloudflare.com/plans/), and an upgrade should be considered. Refer to [Node limits](/analytics/graphql-api/limits/#node-limits-and-availability) for details. @@ -62,11 +62,11 @@ These messages indicate that the query exceeds what is allowed for the particula Sample error messages: -* `error parsing args...` (HTTP `400`) -* `scalar fields must have no selections` (HTTP `400`) -* `object field must have selections` (HTTP `400`) -* `unknown field...` (HTTP `400`) -* `query contains error, please review it and retry` (HTTP `400`) +- `error parsing args...` (HTTP `400`) +- `scalar fields must have no selections` (HTTP `400`) +- `object field must have selections` (HTTP `400`) +- `unknown field...` (HTTP `400`) +- `query contains error, please review it and retry` (HTTP `400`) These messages indicate that the query cannot be processed because it is malformed. Check the query syntax against the [GraphQL schema](/analytics/graphql-api/getting-started/explore-graphql-schema/) and correct the invalid fields or structure. @@ -74,9 +74,9 @@ These messages indicate that the query cannot be processed because it is malform Sample error messages: -* `rate limiter budget depleted, try again after 5 minutes` (HTTP `429`) -* `in combination, your request queries too many nodes, zones and accounts` (HTTP `429`) -* `query consumed excessive resources, please try running smaller queries which consume fewer resources` (HTTP `429`) +- `rate limiter budget depleted, try again after 5 minutes` (HTTP `429`) +- `in combination, your request queries too many nodes, zones and accounts` (HTTP `429`) +- `query consumed excessive resources, please try running smaller queries which consume fewer resources` (HTTP `429`) These messages indicate the query exceeded rate or resource limits. Reduce the query complexity, the number of zones or accounts per request, or wait before retrying. Refer to the [Limits](/analytics/graphql-api/limits/) section for more details about rate limits. @@ -84,10 +84,10 @@ These messages indicate the query exceeded rate or resource limits. Reduce the q Sample error messages: -* `Unauthorized` (HTTP `401`) -* `not authorized for that account` (HTTP `403`) -* `zones [...] are not authorized` (HTTP `403`) -* `does not have access to the path...` (HTTP `403`) +- `Unauthorized` (HTTP `401`) +- `not authorized for that account` (HTTP `403`) +- `zones [...] are not authorized` (HTTP `403`) +- `does not have access to the path...` (HTTP `403`) An `Unauthorized` response means the API token or bearer token is missing, expired, or invalid. Verify that you are passing a valid token in the `Authorization` header. @@ -97,6 +97,6 @@ A `403` response means the token does not have the required permissions for the Sample error message: -* `Internal server error` (HTTP `500`) +- `Internal server error` (HTTP `500`) This is a generic error indicating an unexpected failure. If it persists, contact [Cloudflare Support](https://support.cloudflare.com/) with the full request and response, including the `Ray-ID` header from the HTTP response. diff --git a/src/content/docs/analytics/graphql-api/features/confidence-intervals.mdx b/src/content/docs/analytics/graphql-api/features/confidence-intervals.mdx index 2def716afc95aff..4900a64e4e2b8ff 100644 --- a/src/content/docs/analytics/graphql-api/features/confidence-intervals.mdx +++ b/src/content/docs/analytics/graphql-api/features/confidence-intervals.mdx @@ -9,14 +9,14 @@ products: - graphql-api --- -Confidence intervals help assess accuracy and quantify uncertainty in results from sampled datasets. When querying sum or count fields on adaptive datasets, you can request a confidence interval to understand the possible range around an estimate. For example, specifying a confidence level of `0.95` returns the estimate, along with the range of values that likely contains the true value 95% of the time. +Confidence intervals help assess accuracy and quantify uncertainty in results from sampled datasets. When querying sum or count fields on adaptive datasets, you can request a confidence interval to understand the possible range around an estimate. For example, specifying a confidence level of `0.95` returns the estimate, along with the range of values that likely contains the true value 95% of the time. ## Availability - **Supported datasets**: Adaptive (sampled) datasets only. - **Supported fields**: All `sum` and `count` fields. -- **Usage**: Confidence `level` must be provided as a decimal between 0 and 1 (for example,`0.90`, `0.95`, `0.99`). -- **Default**: If no confidence level is specified, intervals are not returned. +- **Usage**: Confidence `level` must be provided as a decimal between 0 and 1 (for example,`0.90`, `0.95`, `0.99`). +- **Default**: If no confidence level is specified, intervals are not returned. ## Usage example @@ -28,35 +28,35 @@ To request a confidence interval, use the `confidence(level: X)` argument in you ```graphql graphql-api-explorer title="A GraphQL query" query SingleDatasetWithConfidence($zoneTag: string, $start: Time, $end: Time) { - viewer { - zones(filter: {zoneTag: $zoneTag}) { - firewallEventsAdaptiveGroups( - filter: {datetime_gt: $start, datetime_lt: $end} - limit: 1000 - ) { - count - avg { - sampleInterval - } - confidence(level: 0.95) { - count { - estimate - lower - upper - sampleSize - } - } - } - } - } + viewer { + zones(filter: { zoneTag: $zoneTag }) { + firewallEventsAdaptiveGroups( + filter: { datetime_gt: $start, datetime_lt: $end } + limit: 1000 + ) { + count + avg { + sampleInterval + } + confidence(level: 0.95) { + count { + estimate + lower + upper + sampleSize + } + } + } + } + } } ``` ### Response -The response includes the following values: +The response includes the following values: -- `estimate`: The estimated value, based on sampled data. +- `estimate`: The estimated value, based on sampled data. - `lower`: The lower bound of the confidence interval. - `sampleSize`: The number of sampled data points used to calculate the estimate. - `upper`: The upper bound of the confidence interval. @@ -65,30 +65,30 @@ In this example, the interpretation of the response is that, based on a sample o ```json { - "data": { - "viewer": { - "zones": [ - { - "firewallEventsAdaptiveGroups": [ - { - "avg": { - "sampleInterval": 1.0720277625205972 - }, - "confidence": { - "count": { - "estimate": 42939, - "lower": 42673.44115335711, - "sampleSize": 40054, - "upper": 43204.55884664289 - } - }, - "count": 42939 - } - ] - } - ] - } - }, - "errors": null + "data": { + "viewer": { + "zones": [ + { + "firewallEventsAdaptiveGroups": [ + { + "avg": { + "sampleInterval": 1.0720277625205972 + }, + "confidence": { + "count": { + "estimate": 42939, + "lower": 42673.44115335711, + "sampleSize": 40054, + "upper": 43204.55884664289 + } + }, + "count": 42939 + } + ] + } + ] + } + }, + "errors": null } ``` diff --git a/src/content/docs/analytics/graphql-api/features/discovery/index.mdx b/src/content/docs/analytics/graphql-api/features/discovery/index.mdx index 74c6b40c78266f7..d7db4d153f586f2 100644 --- a/src/content/docs/analytics/graphql-api/features/discovery/index.mdx +++ b/src/content/docs/analytics/graphql-api/features/discovery/index.mdx @@ -13,5 +13,4 @@ GraphQL API supports [introspection][1] to explore nodes and provides a way to retrieve the user's [limits][2] for every node. [1]: /analytics/graphql-api/features/discovery/introspection/ - [2]: /analytics/graphql-api/features/discovery/settings/ diff --git a/src/content/docs/analytics/graphql-api/features/index.mdx b/src/content/docs/analytics/graphql-api/features/index.mdx index 7b85fab58b64d62..39fea17f29b3b37 100644 --- a/src/content/docs/analytics/graphql-api/features/index.mdx +++ b/src/content/docs/analytics/graphql-api/features/index.mdx @@ -11,7 +11,7 @@ products: - graphql-api --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; The GraphQL Analytics API offers the following features: diff --git a/src/content/docs/analytics/graphql-api/getting-started/authentication/graphql-client-headers.mdx b/src/content/docs/analytics/graphql-api/getting-started/authentication/graphql-client-headers.mdx index 0e458b325ede871..c6a25630a2aedd7 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/authentication/graphql-client-headers.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/authentication/graphql-client-headers.mdx @@ -17,13 +17,13 @@ products: ![Editing HTTP Headers Window](~/assets/images/analytics/GraphiQL-edit-http-headers-window.png) 3. Select **Add Header** to configure authentication. You can use Cloudflare Analytics API token authentication (recommended) or Cloudflare API key authentication. - * **Token authentication**: + - **Token authentication**: Enter **Authorization** in the **Header Name** field, and enter `Bearer {your-analytics-token}` in the **Header value** field, then select **Save**. ![Editing HTTP Headers](~/assets/images/analytics/GraphiQL-edit-http-headers-token.png) - * **Key authentication**: + - **Key authentication**: Enter `X-AUTH-EMAIL` in the **Header name** field and your email address registered with Cloudflare in the **Header value** field, and select **Save**.
@@ -36,10 +36,8 @@ products: :::note[Note] - The right-side response pane is empty when you enter your information correctly. An error displays when there are problems with your header credentials. - ::: Now that you have configured authentication, you are ready to run queries using GraphiQL. diff --git a/src/content/docs/analytics/graphql-api/getting-started/authentication/index.mdx b/src/content/docs/analytics/graphql-api/getting-started/authentication/index.mdx index ed75b1965e7c919..1e96ffce7142c4b 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/authentication/index.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/authentication/index.mdx @@ -15,30 +15,40 @@ To secure access to your GraphQL Analytics data, use a Cloudflare API key or tok This table outlines the differences between Cloudflare API keys and tokens: - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
Authentication MethodDescription
API TokensCloudflare recommends API Tokens as the preferred way to interact with Cloudflare APIs. You can configure the scope of tokens to limit access to account and zone resources, and you can define the Cloudflare APIs to which the token authorizes access.
API Keys

Unique to each Cloudflare user and used only for authentication. API keys do not authorize access to accounts or zones.

-

Use the Global API Key for authentication.

Authentication MethodDescription
+ API Tokens + + Cloudflare recommends API Tokens as the preferred way to interact with + Cloudflare APIs. You can configure the scope of tokens to limit access + to account and zone resources, and you can define the Cloudflare APIs to + which the token authorizes access. +
+ API Keys + +

+ Unique to each Cloudflare user and used only for authentication. API + keys do not authorize access to accounts or zones. +

+

Use the Global API Key for authentication.

+
- - To create and configure GraphQL Analytics API tokens, refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/). To find and retrieve API keys, as well as edit HTTP headers for authentication in GraphiQL, refer to [Authenticate with a Cloudflare API key](/analytics/graphql-api/getting-started/authentication/api-key-auth/). diff --git a/src/content/docs/analytics/graphql-api/getting-started/compose-graphql-query.mdx b/src/content/docs/analytics/graphql-api/getting-started/compose-graphql-query.mdx index 1839c3f0876e56b..4494649d7315149 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/compose-graphql-query.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/compose-graphql-query.mdx @@ -28,13 +28,11 @@ Click on the editing pane of GraphiQL and add this base query, replacing :::note[Note] - To find the zone's tag, log in to your Cloudflare account and select the site for which you want to obtain the tag. In the Cloudflare dashboard **Overview** page, scroll to the **API** section in the right sidebar, which displays your zone and account tags. - ::: To assist query building, the GraphiQL client has word completion. Insert your @@ -128,29 +126,16 @@ This example query uses the `zoneTag` query variable to represent the zone ID: ![Example of GraphiQL query variables][14] [1]: /analytics/graphql-api/getting-started/querying-basics/ - [2]: https://github.com/graphql/graphiql/tree/main/packages/graphiql#readme - [3]: /analytics/graphql-api/getting-started/authentication/graphql-client-headers/ - [4]: ~/assets/images/analytics/graphiql-base-query.png - [5]: ~/assets/images/analytics/graphiql-word-completion.png - [6]: ~/assets/images/analytics/graphiql-set-up-base-query.png - [7]: ~/assets/images/analytics/graphiql-parameters.png - [8]: ~/assets/images/analytics/graphiql-filter-fields.png - [9]: ~/assets/images/analytics/graphiql-filter-values.png - [10]: ~/assets/images/analytics/graphiql-set-up-base-query.png - [11]: ~/assets/images/analytics/graphiql-return-fields.png - [12]: ~/assets/images/analytics/graphiql-query-return-field-values.png - [13]: ~/assets/images/analytics/create-query-fw-data-set-play.png - [14]: ~/assets/images/analytics/graphiql-query-variables.png diff --git a/src/content/docs/analytics/graphql-api/getting-started/execute-graphql-query.mdx b/src/content/docs/analytics/graphql-api/getting-started/execute-graphql-query.mdx index ab3680fa9a78abb..b1eeb322c398cb7 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/execute-graphql-query.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/execute-graphql-query.mdx @@ -24,8 +24,8 @@ query: ```json title="A payload structure for GraphQL API" { - "query": "{viewer { ... }}", - "variables": {} + "query": "{viewer { ... }}", + "variables": {} } ``` diff --git a/src/content/docs/analytics/graphql-api/getting-started/explore-graphql-schema.mdx b/src/content/docs/analytics/graphql-api/getting-started/explore-graphql-schema.mdx index 0d2d0e248a08cf0..e77cba62457a8e1 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/explore-graphql-schema.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/explore-graphql-schema.mdx @@ -79,7 +79,7 @@ query. For example, `zones` can take a filter of `ZoneFilter_InputObject` type as an argument. To view the fields available to filter, select -**ZoneFilter\_InputObject**. +**ZoneFilter_InputObject**. ## Find the datasets available for a zone @@ -122,33 +122,18 @@ The list of fields displays: For more information on using GraphiQL, please visit this [guide][16]. [1]: /analytics/graphql-api/features/discovery/introspection/ - [2]: https://github.com/graphql/graphiql/tree/main/packages/graphiql#readme - [3]: https://altairgraphql.dev/#download - [4]: /analytics/graphql-api/getting-started/authentication/graphql-client-headers/ - [5]: ~/assets/images/analytics/graphiql-docs-link.png - [6]: ~/assets/images/analytics/graphiql-doc-explorer.png - [7]: ~/assets/images/analytics/graphiql-doc-explorer-query-mutations.png - [8]: ~/assets/images/analytics/graphiql-doc-explorer-view-cost.png - [9]: ~/assets/images/analytics/graphiql-doc-explorer-viewer-fields.png - [10]: ~/assets/images/analytics/graphiql-doc-explorer-zones.png - [11]: ~/assets/images/analytics/graphiql-doc-explorer-zone-fields.png - [12]: ~/assets/images/analytics/graphiql-doc-explorer-find-firewall.png - [13]: ~/assets/images/analytics/graphiql-doc-explorer-firewallevents-definition.png - [14]: ~/assets/images/analytics/graphiql-doc-explorer-firewall-type-definition.png - [15]: ~/assets/images/analytics/graphiql-doc-explorer-firewall-fields.png - [16]: /analytics/graphql-api/getting-started/compose-graphql-query/ diff --git a/src/content/docs/analytics/graphql-api/getting-started/index.mdx b/src/content/docs/analytics/graphql-api/getting-started/index.mdx index 2ba6111561b125e..6b82273dfd942ef 100644 --- a/src/content/docs/analytics/graphql-api/getting-started/index.mdx +++ b/src/content/docs/analytics/graphql-api/getting-started/index.mdx @@ -9,19 +9,19 @@ products: - graphql-api --- -import { Render } from "~/components" +import { Render } from "~/components"; Use these articles to get started with the Cloudflare GraphQL API: -* [Authentication][1] - walks you through the options and the steps required to +- [Authentication][1] - walks you through the options and the steps required to set up your access to Cloudflare API successfully, -* [Querying basics][2] - brings simple query examples for you to start exploring +- [Querying basics][2] - brings simple query examples for you to start exploring the GraphQL API, -* [Introspect the GraphQL schema][3] - explains how-to surf the schema with +- [Introspect the GraphQL schema][3] - explains how-to surf the schema with GraphQL client, -* [Create a query in a GraphQL client][4] - describes how to build and run a +- [Create a query in a GraphQL client][4] - describes how to build and run a query against the Cloudflare GraphQL API in the GraphQL clients, -* [Use curl to query the GraphQL API][5] - walks you through running a query +- [Use curl to query the GraphQL API][5] - walks you through running a query against the Cloudflare GraphQL API from the command line. For examples of how to build your own GraphQL Analytics dashboard and query @@ -29,17 +29,13 @@ specific information, such as Firewall and Workers events, please refer to [Tutorials][6]. :::note[Data unavailability: Customer Metadata Boundary configuration] - + + ::: [1]: /analytics/graphql-api/getting-started/authentication/ - [2]: /analytics/graphql-api/getting-started/querying-basics/ - [3]: /analytics/graphql-api/getting-started/explore-graphql-schema/ - [4]: /analytics/graphql-api/getting-started/compose-graphql-query/ - [5]: /analytics/graphql-api/getting-started/execute-graphql-query/ - [6]: /analytics/graphql-api/tutorials/ diff --git a/src/content/docs/analytics/graphql-api/limits.mdx b/src/content/docs/analytics/graphql-api/limits.mdx index 5adcc44092add47..41bac079ca31cd6 100644 --- a/src/content/docs/analytics/graphql-api/limits.mdx +++ b/src/content/docs/analytics/graphql-api/limits.mdx @@ -19,16 +19,16 @@ plans. To support this variety of products, Cloudflare GraphQL API has three layers of limits: -* global limits -* user limits -* node (dataset) limits +- global limits +- user limits +- node (dataset) limits ## Global limits These limits are applied to every query for every plan: -* A zone-scoped query can include up to **10 zones** -* An account-scoped query can include only **1 account** +- A zone-scoped query can include up to **10 zones** +- An account-scoped query can include only **1 account** Additionally, there is a limited number of queries you can make per request. The total number of queries in a request is equal to the number of zone/account scopes, multiplied by the number of nodes to which they are applied. @@ -46,10 +46,10 @@ the Cloudflare API](/fundamentals/api/reference/limits/). Each data node has its limits, such as: -* how far back in time can data be requested, -* the maximum time period (in seconds) that can be requested in one query, -* the maximum number of fields that can be requested in one query, -* the maximum number of records that can be returned in one query. +- how far back in time can data be requested, +- the maximum time period (in seconds) that can be requested in one query, +- the maximum number of fields that can be requested in one query, +- the maximum number of records that can be returned in one query. Node limits are tied to requested `zoneTag` or `accountTag`. Higher plans have access to a greater selection of datasets or fields, and can query over broader historical diff --git a/src/content/docs/analytics/graphql-api/mcp-server.mdx b/src/content/docs/analytics/graphql-api/mcp-server.mdx index be3bc98608dc365..79aea053b1121fa 100644 --- a/src/content/docs/analytics/graphql-api/mcp-server.mdx +++ b/src/content/docs/analytics/graphql-api/mcp-server.mdx @@ -8,4 +8,4 @@ description: Access the GraphQL Analytics MCP server. products: - analytics - graphql-api ---- \ No newline at end of file +--- diff --git a/src/content/docs/analytics/graphql-api/migration-guides/index.mdx b/src/content/docs/analytics/graphql-api/migration-guides/index.mdx index 4255d116dd9db69..a0cd2058706d926 100644 --- a/src/content/docs/analytics/graphql-api/migration-guides/index.mdx +++ b/src/content/docs/analytics/graphql-api/migration-guides/index.mdx @@ -17,8 +17,8 @@ If you are currently using the deprecated `httpRequests1mByColoGroups` or `httpR If you are currently using the Zone Analytics API, the following guide will help you migrate your queries to the new GraphQL Analytics API: -* [Zone Analytics to GraphQL Analytics](/analytics/graphql-api/migration-guides/zone-analytics/) -* [Zone Analytics Colos Endpoint to GraphQL Analytics](/analytics/graphql-api/migration-guides/zone-analytics-colos/) +- [Zone Analytics to GraphQL Analytics](/analytics/graphql-api/migration-guides/zone-analytics/) +- [Zone Analytics Colos Endpoint to GraphQL Analytics](/analytics/graphql-api/migration-guides/zone-analytics-colos/) ## Network Analytics migrations diff --git a/src/content/docs/analytics/graphql-api/migration-guides/network-analytics-v2/schema-map.mdx b/src/content/docs/analytics/graphql-api/migration-guides/network-analytics-v2/schema-map.mdx index f6c3398fe285308..cfec218853327ed 100644 --- a/src/content/docs/analytics/graphql-api/migration-guides/network-analytics-v2/schema-map.mdx +++ b/src/content/docs/analytics/graphql-api/migration-guides/network-analytics-v2/schema-map.mdx @@ -1,5 +1,4 @@ --- - pcx_content_type: reference title: NAv1 to NAv2 schema map sidebar: diff --git a/src/content/docs/analytics/graphql-api/sampling.mdx b/src/content/docs/analytics/graphql-api/sampling.mdx index ce5299faa9407b8..2dcf4bdf7261ff2 100644 --- a/src/content/docs/analytics/graphql-api/sampling.mdx +++ b/src/content/docs/analytics/graphql-api/sampling.mdx @@ -38,15 +38,11 @@ Cloudflare almost always uses **adaptive sampling**, which means the sample rate The following data nodes are based on fixed sampling, where the sample rate does not vary: - - | Data set | Rate | Notes | | :--------------------------------------------------------------------------------------------------------------------------------------------- | -----: | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Firewall Rules Preview

Nodes:
`firewallRulePreviewGroups`

| 1% | Use with caution. A 1% sample rate does not provide accurate estimates for datasets smaller than a certain threshold, a scenario the Cloudflare dashboard calls out explicitly but the API does not. | | Network Analytics

Nodes:
`ipFlows1mGroups`
`ipFlows1hGroups`
`ipFlows1dGroups`
`ipFlows1mAttacksGroups`

| 0.012% | Sampling rate is in terms of packet count (1 of every 8,192 packets). | - - ## Access to raw data Because sampling is primarily adaptive and automatically adjusts to provide an accurate estimate, the sampling rate cannot be directly controlled. Enterprise customers have access to raw data via Cloudflare Logs. diff --git a/src/content/docs/analytics/graphql-api/tutorials/end-customer-analytics.mdx b/src/content/docs/analytics/graphql-api/tutorials/end-customer-analytics.mdx index c74285316775d50..b7bf522c3840234 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/end-customer-analytics.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/end-customer-analytics.mdx @@ -54,107 +54,107 @@ The returned results will be in JSON format (as requested), so piping the output ```json { - "data": { - "viewer": { - "zones": [ - { - "httpRequestsAdaptiveGroups": [ - { - "dimensions": { - "datetimeHour": "2022-07-21T10:00:00Z" - }, - "sum": { - "edgeResponseBytes": 19849385, - "visits": 4383 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-21T06:00:00Z" - }, - "sum": { - "edgeResponseBytes": 20607204, - "visits": 4375 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-26T05:00:00Z" - }, - "sum": { - "edgeResponseBytes": 20170839, - "visits": 4519 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-23T08:00:00Z" - }, - "sum": { - "edgeResponseBytes": 20141860, - "visits": 4448 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-25T15:00:00Z" - }, - "sum": { - "edgeResponseBytes": 21070367, - "visits": 4469 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-28T08:00:00Z" - }, - "sum": { - "edgeResponseBytes": 19200774, - "visits": 4345 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-26T02:00:00Z" - }, - "sum": { - "edgeResponseBytes": 20758067, - "visits": 4502 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-20T19:00:00Z" - }, - "sum": { - "edgeResponseBytes": 22127811, - "visits": 4443 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-27T15:00:00Z" - }, - "sum": { - "edgeResponseBytes": 20480644, - "visits": 4268 - } - }, - { - "dimensions": { - "datetimeHour": "2022-07-27T17:00:00Z" - }, - "sum": { - "edgeResponseBytes": 19885704, - "visits": 4287 - } - } - ] - } - ] - } - }, - "errors": null + "data": { + "viewer": { + "zones": [ + { + "httpRequestsAdaptiveGroups": [ + { + "dimensions": { + "datetimeHour": "2022-07-21T10:00:00Z" + }, + "sum": { + "edgeResponseBytes": 19849385, + "visits": 4383 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-21T06:00:00Z" + }, + "sum": { + "edgeResponseBytes": 20607204, + "visits": 4375 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-26T05:00:00Z" + }, + "sum": { + "edgeResponseBytes": 20170839, + "visits": 4519 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-23T08:00:00Z" + }, + "sum": { + "edgeResponseBytes": 20141860, + "visits": 4448 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-25T15:00:00Z" + }, + "sum": { + "edgeResponseBytes": 21070367, + "visits": 4469 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-28T08:00:00Z" + }, + "sum": { + "edgeResponseBytes": 19200774, + "visits": 4345 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-26T02:00:00Z" + }, + "sum": { + "edgeResponseBytes": 20758067, + "visits": 4502 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-20T19:00:00Z" + }, + "sum": { + "edgeResponseBytes": 22127811, + "visits": 4443 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-27T15:00:00Z" + }, + "sum": { + "edgeResponseBytes": 20480644, + "visits": 4268 + } + }, + { + "dimensions": { + "datetimeHour": "2022-07-27T17:00:00Z" + }, + "sum": { + "edgeResponseBytes": 19885704, + "visits": 4287 + } + } + ] + } + ] + } + }, + "errors": null } ``` @@ -162,13 +162,13 @@ The returned results will be in JSON format (as requested), so piping the output We are going to use the GraphQL Analytics API to query the top 10 consuming URLs from a zone, helping you identify the URLs with the highest resource usage. Here are some configuration instructions: -* To filter on a specific hostname, add the line `"clientRequestHTTPHost": "'$2'"` below `"requestSource"`." -* Replace `API_TOKEN` with your generated API token using the `Read all resources` permissions. The script will only access zones available to the token's creator. -* Pass the zone ID (`zoneTag`) as a parameter `ARG=$1`. -* To calculate the current date and the date from 30 days ago, use `gdate` on Mac: - * `CURRENTDATE=$(gdate -u +'%FT%TZ')` - * `OLDDATE=$(gdate -d '-30 days' -u +'%FT%TZ')`. -* For specific dates within the last 30 days, set `CURRENTDATE` and `OLDDATE` variables in the format `"YYYY-MM-DDTHH:MM:SSZ"`. +- To filter on a specific hostname, add the line `"clientRequestHTTPHost": "'$2'"` below `"requestSource"`." +- Replace `API_TOKEN` with your generated API token using the `Read all resources` permissions. The script will only access zones available to the token's creator. +- Pass the zone ID (`zoneTag`) as a parameter `ARG=$1`. +- To calculate the current date and the date from 30 days ago, use `gdate` on Mac: + - `CURRENTDATE=$(gdate -u +'%FT%TZ')` + - `OLDDATE=$(gdate -d '-30 days' -u +'%FT%TZ')`. +- For specific dates within the last 30 days, set `CURRENTDATE` and `OLDDATE` variables in the format `"YYYY-MM-DDTHH:MM:SSZ"`. ### API call @@ -196,4 +196,4 @@ https://api.cloudflare.com/client/v4/graphql \ }' | jq -r 'try .data.viewer.zones[].topPaths[] | "\"\(.dimensions.metric)\": \(.sum.edgeResponseBytes)"' | sort ``` -[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. \ No newline at end of file +[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. diff --git a/src/content/docs/analytics/graphql-api/tutorials/index.mdx b/src/content/docs/analytics/graphql-api/tutorials/index.mdx index baf7496c1ef4723..ebcfb6d0cf8b7b2 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/index.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/index.mdx @@ -11,7 +11,7 @@ products: - graphql-api --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; The following resources will help you start exploring your data and creating analytics dashboards: diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-access-login-events.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-access-login-events.mdx index 4fbbc812304c501..7f0e232f641a485 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-access-login-events.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-access-login-events.mdx @@ -15,9 +15,9 @@ The following API call will request logs for a single Access login event and out You will need to insert your ``, your API credentials in ``[^1], and substitute your own values for the following variables: -* `rayID`: A unique identifier assigned to the authentication request. -* `datetimeStart`: The earliest event time to query (no earlier than September 16, 2022). -* `datetimeEnd`: The latest event time to query. Be sure to specify a time range that includes the login event you are querying. +- `rayID`: A unique identifier assigned to the authentication request. +- `datetimeStart`: The earliest event time to query (no earlier than September 16, 2022). +- `datetimeEnd`: The latest event time to query. Be sure to specify a time range that includes the login event you are querying. ## API Call @@ -65,47 +65,47 @@ https://api.cloudflare.com/client/v4/graphql \ :::note -Rather than filter by `cfRayId`, you may also [filter](/analytics/graphql-api/features/filtering/) by any other field in the query such as `userUuid` or `deviceId`. +Rather than filter by `cfRayId`, you may also [filter](/analytics/graphql-api/features/filtering/) by any other field in the query such as `userUuid` or `deviceId`. ::: ## Response ```json { - "data": { - "viewer": { - "accounts": [ - { - "accessLoginRequestsAdaptiveGroups": [ - { - "dimensions": { - "approvingPolicyId": "", - "cfRayId": "744927037ce06d68", - "country": "US", - "datetime": "2022-09-02T20:56:27Z", - "deviceId": "", - "hasExistingJWT": 0, - "hasGatewayEnabled": 0, - "hasWarpEnabled": 0, - "identityProvider": "nonidentity", - "ipAddress": "2a09:bac0:15::814:7b37", - "isSuccessfulLogin": 0, - "mtlsCertSerialId": "", - "mtlsCommonName": "", - "mtlsStatus": "NONE", - "serviceTokenId": "", - "userUuid": "" - } - } - ] - } - ] - } - }, - "errors": null + "data": { + "viewer": { + "accounts": [ + { + "accessLoginRequestsAdaptiveGroups": [ + { + "dimensions": { + "approvingPolicyId": "", + "cfRayId": "744927037ce06d68", + "country": "US", + "datetime": "2022-09-02T20:56:27Z", + "deviceId": "", + "hasExistingJWT": 0, + "hasGatewayEnabled": 0, + "hasWarpEnabled": 0, + "identityProvider": "nonidentity", + "ipAddress": "2a09:bac0:15::814:7b37", + "isSuccessfulLogin": 0, + "mtlsCertSerialId": "", + "mtlsCommonName": "", + "mtlsStatus": "NONE", + "serviceTokenId": "", + "userUuid": "" + } + } + ] + } + ] + } + }, + "errors": null } ``` You can compare the query results to your Access policies to understand why a user was blocked. For example, if your application requires a valid mTLS certificate, Access blocked the request shown above because `mtlsStatus`, `mtlsCommonName`, and `mtlsCertSerialId` are empty. -[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. \ No newline at end of file +[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-email-routing.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-email-routing.mdx index ccd12acea299f70..3e8f9dde667b2df 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-email-routing.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-email-routing.mdx @@ -65,74 +65,74 @@ The results returned will be in JSON (as requested): ```json { - "data": { - "viewer": { - "zones": [ - { - "emailRoutingAdaptive": [ - { - "action": "forward", - "arc": "none", - "datetime": "2026-01-19T10:51:25Z", - "dkim": "pass", - "dmarc": "pass", - "errorDetail": "", - "from": "John ", - "id": "AfWyaZ7V1TAH", - "isNDR": 0, - "isSpam": 0, - "messageId": "<9e6574f1-97f8-4060-ad62-c54b6408ac3f@local>", - "spamScore": 0, - "spamThreshold": 5, - "spf": "pass", - "status": "delivered", - "subject": "How are you doing?", - "to": "me@example.com" - }, - { - "action": "forward", - "arc": "none", - "datetime": "2026-01-19T10:30:00Z", - "dkim": "pass", - "dmarc": "pass", - "errorDetail": "", - "from": "eBay ", - "id": "aYPegrIfLWia", - "isNDR": 0, - "isSpam": 0, - "messageId": "<1A513C40-F2CD808A928-029BBE999993-0000000000FA8855@starship>", - "spamScore": 0, - "spamThreshold": 5, - "spf": "pass", - "status": "delivered", - "subject": "New offers", - "to": "me@example.com" - }, - { - "action": "forward", - "arc": "none", - "datetime": "2026-01-19T10:29:59Z", - "dkim": "pass", - "dmarc": "pass", - "errorDetail": "", - "from": "Notification ", - "id": "nWIl9gs95mY3", - "isNDR": 0, - "isSpam": 0, - "messageId": "<0AB8F1C3-3015EDF2980-019BBE9B58F2-0000000000FA7C4D@local>", - "spamScore": 0, - "spamThreshold": 5, - "spf": "pass", - "status": "delivered", - "subject": "You're over quota", - "to": "me@example.com" - } - ] - } - ] - } - }, - "errors": null + "data": { + "viewer": { + "zones": [ + { + "emailRoutingAdaptive": [ + { + "action": "forward", + "arc": "none", + "datetime": "2026-01-19T10:51:25Z", + "dkim": "pass", + "dmarc": "pass", + "errorDetail": "", + "from": "John ", + "id": "AfWyaZ7V1TAH", + "isNDR": 0, + "isSpam": 0, + "messageId": "<9e6574f1-97f8-4060-ad62-c54b6408ac3f@local>", + "spamScore": 0, + "spamThreshold": 5, + "spf": "pass", + "status": "delivered", + "subject": "How are you doing?", + "to": "me@example.com" + }, + { + "action": "forward", + "arc": "none", + "datetime": "2026-01-19T10:30:00Z", + "dkim": "pass", + "dmarc": "pass", + "errorDetail": "", + "from": "eBay ", + "id": "aYPegrIfLWia", + "isNDR": 0, + "isSpam": 0, + "messageId": "<1A513C40-F2CD808A928-029BBE999993-0000000000FA8855@starship>", + "spamScore": 0, + "spamThreshold": 5, + "spf": "pass", + "status": "delivered", + "subject": "New offers", + "to": "me@example.com" + }, + { + "action": "forward", + "arc": "none", + "datetime": "2026-01-19T10:29:59Z", + "dkim": "pass", + "dmarc": "pass", + "errorDetail": "", + "from": "Notification ", + "id": "nWIl9gs95mY3", + "isNDR": 0, + "isSpam": 0, + "messageId": "<0AB8F1C3-3015EDF2980-019BBE9B58F2-0000000000FA7C4D@local>", + "spamScore": 0, + "spamThreshold": 5, + "spf": "pass", + "status": "delivered", + "subject": "You're over quota", + "to": "me@example.com" + } + ] + } + ] + } + }, + "errors": null } ``` @@ -176,114 +176,114 @@ The results returned will be in JSON (as requested): ```json { - "data": { - "viewer": { - "zones": [ - { - "emailRoutingAdaptiveGroups": [ - { - "count": 2, - "dimensions": { - "datetimeHour": "2026-01-18T11:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-18T12:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-18T13:00:00Z" - } - }, - { - "count": 2, - "dimensions": { - "datetimeHour": "2026-01-18T14:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-18T15:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-18T16:00:00Z" - } - }, - { - "count": 2, - "dimensions": { - "datetimeHour": "2026-01-18T17:00:00Z" - } - }, - { - "count": 3, - "dimensions": { - "datetimeHour": "2026-01-18T18:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-18T22:00:00Z" - } - }, - { - "count": 2, - "dimensions": { - "datetimeHour": "2026-01-19T01:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-19T02:00:00Z" - } - }, - { - "count": 4, - "dimensions": { - "datetimeHour": "2026-01-19T05:00:00Z" - } - }, - { - "count": 1, - "dimensions": { - "datetimeHour": "2026-01-19T08:00:00Z" - } - }, - { - "count": 5, - "dimensions": { - "datetimeHour": "2026-01-19T09:00:00Z" - } - }, - { - "count": 6, - "dimensions": { - "datetimeHour": "2026-01-19T10:00:00Z" - } - }, - { - "count": 2, - "dimensions": { - "datetimeHour": "2026-01-19T11:00:00Z" - } - } - ] - } - ] - } - }, - "errors": null + "data": { + "viewer": { + "zones": [ + { + "emailRoutingAdaptiveGroups": [ + { + "count": 2, + "dimensions": { + "datetimeHour": "2026-01-18T11:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-18T12:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-18T13:00:00Z" + } + }, + { + "count": 2, + "dimensions": { + "datetimeHour": "2026-01-18T14:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-18T15:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-18T16:00:00Z" + } + }, + { + "count": 2, + "dimensions": { + "datetimeHour": "2026-01-18T17:00:00Z" + } + }, + { + "count": 3, + "dimensions": { + "datetimeHour": "2026-01-18T18:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-18T22:00:00Z" + } + }, + { + "count": 2, + "dimensions": { + "datetimeHour": "2026-01-19T01:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-19T02:00:00Z" + } + }, + { + "count": 4, + "dimensions": { + "datetimeHour": "2026-01-19T05:00:00Z" + } + }, + { + "count": 1, + "dimensions": { + "datetimeHour": "2026-01-19T08:00:00Z" + } + }, + { + "count": 5, + "dimensions": { + "datetimeHour": "2026-01-19T09:00:00Z" + } + }, + { + "count": 6, + "dimensions": { + "datetimeHour": "2026-01-19T10:00:00Z" + } + }, + { + "count": 2, + "dimensions": { + "datetimeHour": "2026-01-19T11:00:00Z" + } + } + ] + } + ] + } + }, + "errors": null } ``` -[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. \ No newline at end of file +[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions. diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-endpoint-healthcheck-results.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-endpoint-healthcheck-results.mdx index deab15ea91ace34..3d4c56d42ef286d 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-endpoint-healthcheck-results.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-endpoint-healthcheck-results.mdx @@ -9,8 +9,9 @@ products: - magic-transit --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-bandwidth-analytics.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-bandwidth-analytics.mdx index 727a62e37b0ac21..0c1fc135106eaa8 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-bandwidth-analytics.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-bandwidth-analytics.mdx @@ -9,8 +9,10 @@ products: - magic-transit --- -import { Render } from "~/components" +import { Render } from "~/components"; - + params={{ productName: "Magic Transit or Cloudflare WAN" }} +/> diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results.mdx index 3ed3c1e2b7fce50..7e2d5a042de9744 100644 --- a/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results.mdx +++ b/src/content/docs/analytics/graphql-api/tutorials/querying-magic-transit-tunnel-healthcheck-results.mdx @@ -9,9 +9,10 @@ products: - magic-transit --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/analytics/index.mdx b/src/content/docs/analytics/index.mdx index 8c9eca78825e740..7f6b64667dccaec 100644 --- a/src/content/docs/analytics/index.mdx +++ b/src/content/docs/analytics/index.mdx @@ -11,38 +11,52 @@ products: - analytics --- -import { Feature, RelatedProduct } from "~/components" +import { Feature, RelatedProduct } from "~/components"; Cloudflare visualizes the metadata collected by our products in the Cloudflare dashboard. Refer to [Types of analytics](/analytics/types-of-analytics/) for more information about the various types of analytics and where they exist in the dashboard. -*** +--- ## Features -Send unlimited-cardinality data from your Worker to a time-series database. Query it with SQL. + Send unlimited-cardinality data from your Worker to a time-series database. + Query it with SQL. - -Provides details about the requests and traffic related to your Cloudflare accounts and zones. + + Provides details about the requests and traffic related to your Cloudflare + accounts and zones. - -Provides near real-time visibility into network and transport-layer traffic patterns and DDoS attacks. + + Provides near real-time visibility into network and transport-layer traffic + patterns and DDoS attacks. -Provides all of your performance, security, and reliability data from one endpoint. Select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account. + Provides all of your performance, security, and reliability data from one + endpoint. Select exactly what you need, from one metric for a domain to + multiple metrics aggregated for your account. -*** +--- ## Related products -Cloudflare Workers allows developers to build serverless applications and deploy instantly across the globe for exceptional performance, reliability, and scale. + Cloudflare Workers allows developers to build serverless applications and + deploy instantly across the globe for exceptional performance, reliability, + and scale. -Detailed logs that contain metadata generated by Cloudflare products helpful for debugging, identifying configuration adjustments, and creating analytics. + Detailed logs that contain metadata generated by Cloudflare products helpful + for debugging, identifying configuration adjustments, and creating analytics. diff --git a/src/content/docs/analytics/network-analytics/configure/index.mdx b/src/content/docs/analytics/network-analytics/configure/index.mdx index 960840cbc5deb03..16e7bfa95e54afc 100644 --- a/src/content/docs/analytics/network-analytics/configure/index.mdx +++ b/src/content/docs/analytics/network-analytics/configure/index.mdx @@ -13,6 +13,6 @@ products: - analytics --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/analytics/network-analytics/configure/share-export.mdx b/src/content/docs/analytics/network-analytics/configure/share-export.mdx index ebfbca66506210a..4f80063b389f3a8 100644 --- a/src/content/docs/analytics/network-analytics/configure/share-export.mdx +++ b/src/content/docs/analytics/network-analytics/configure/share-export.mdx @@ -11,7 +11,7 @@ products: - analytics --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; ## Share Network Analytics filters diff --git a/src/content/docs/analytics/network-analytics/configure/time-range.mdx b/src/content/docs/analytics/network-analytics/configure/time-range.mdx index f22f93aa5d6e373..4cad33741de7676 100644 --- a/src/content/docs/analytics/network-analytics/configure/time-range.mdx +++ b/src/content/docs/analytics/network-analytics/configure/time-range.mdx @@ -17,7 +17,7 @@ Use the timeframe drop-down list to change the time range over which Network Ana In the Network Analytics dashboard, the range of historical data you can query is 112 days. -When you select *Previous 30 minutes*, the **Network Analytics** card will show the data from the last 30 minutes, refreshing every 20 seconds. A *Live* notification appears next to the statistic drop-down list to let you know that the view keeps updating automatically: +When you select _Previous 30 minutes_, the **Network Analytics** card will show the data from the last 30 minutes, refreshing every 20 seconds. A _Live_ notification appears next to the statistic drop-down list to let you know that the view keeps updating automatically: ![Timeframe drop-down with Previous 30 minutes selected.](~/assets/images/analytics/network-analytics/timeframe-selector.png) diff --git a/src/content/docs/analytics/network-analytics/index.mdx b/src/content/docs/analytics/network-analytics/index.mdx index e8908c5bbfc3b1e..72d38cdbd6e45a7 100644 --- a/src/content/docs/analytics/network-analytics/index.mdx +++ b/src/content/docs/analytics/network-analytics/index.mdx @@ -12,7 +12,7 @@ products: - analytics --- -import { InlineBadge, Render } from "~/components" +import { InlineBadge, Render } from "~/components"; Cloudflare Network Analytics (version 2) provides near real-time visibility into network and transport-layer traffic patterns and DDoS attacks. Network Analytics visualizes packet and bit-level data, the same data available via the Network Analytics dataset of the GraphQL Analytics API. @@ -22,12 +22,12 @@ For a technical deep-dive into Network Analytics, refer to our [blog post](https ## Remarks -* The Network Analytics logs refer to IP traffic of Magic Transit customer prefixes/leased IP addresses or Spectrum applications. These logs are not directly associated with the [zones](/fundamentals/concepts/accounts-and-zones/#zones) in your Cloudflare account. +- The Network Analytics logs refer to IP traffic of Magic Transit customer prefixes/leased IP addresses or Spectrum applications. These logs are not directly associated with the [zones](/fundamentals/concepts/accounts-and-zones/#zones) in your Cloudflare account. -* The data retention for Network Analytics is 16 weeks. Additionally, data older than eight weeks might have lower resolution when using narrow time frames. +- The data retention for Network Analytics is 16 weeks. Additionally, data older than eight weeks might have lower resolution when using narrow time frames. ## Related resources -* [Cloudflare GraphQL API](/analytics/graphql-api/) -* [Cloudflare Logpush](/logs/logpush/) -* [Migrating from Network Analytics v1 to Network Analytics v2](/analytics/graphql-api/migration-guides/network-analytics-v2/) \ No newline at end of file +- [Cloudflare GraphQL API](/analytics/graphql-api/) +- [Cloudflare Logpush](/logs/logpush/) +- [Migrating from Network Analytics v1 to Network Analytics v2](/analytics/graphql-api/migration-guides/network-analytics-v2/) diff --git a/src/content/docs/analytics/network-analytics/reference/index.mdx b/src/content/docs/analytics/network-analytics/reference/index.mdx index bfaf9377cbe9497..50a9131063634e7 100644 --- a/src/content/docs/analytics/network-analytics/reference/index.mdx +++ b/src/content/docs/analytics/network-analytics/reference/index.mdx @@ -13,7 +13,7 @@ products: - analytics --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review reference information about Cloudflare Network Analytics: diff --git a/src/content/docs/analytics/network-analytics/understand/index.mdx b/src/content/docs/analytics/network-analytics/understand/index.mdx index 364ff4458dc64da..6bbfaed1b7957b3 100644 --- a/src/content/docs/analytics/network-analytics/understand/index.mdx +++ b/src/content/docs/analytics/network-analytics/understand/index.mdx @@ -13,6 +13,6 @@ products: - analytics --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/analytics/sampling.mdx b/src/content/docs/analytics/sampling.mdx index 815514bf77937e5..964b7405a3d5f1a 100644 --- a/src/content/docs/analytics/sampling.mdx +++ b/src/content/docs/analytics/sampling.mdx @@ -8,7 +8,7 @@ products: - analytics --- -[Sampling](https://en.wikipedia.org/wiki/Sampling_(statistics)) is a technique used in analytics to analyze a subset of data rather than processing every individual data point. In Cloudflare Analytics, sampling ensures efficient performance and scalability while maintaining high accuracy and reliability. This document provides a comprehensive overview of how sampling works, why it is used, and its impact on analytics across different Cloudflare tools. +[Sampling]() is a technique used in analytics to analyze a subset of data rather than processing every individual data point. In Cloudflare Analytics, sampling ensures efficient performance and scalability while maintaining high accuracy and reliability. This document provides a comprehensive overview of how sampling works, why it is used, and its impact on analytics across different Cloudflare tools. ## How sampling works @@ -20,17 +20,17 @@ To make this possible, data is stored at multiple resolutions (100%, 10%, 1%), e Cloudflare's data pipeline handles [over 700 million events per second](https://blog.cloudflare.com/how-we-make-sense-of-too-much-data) (and growing) across its global network. Processing and storing all this data in real-time would be prohibitively expensive and time-consuming. By leveraging carefully designed sampling methods, Cloudflare Analytics delivers accurate and actionable data, balancing precision with performance. -Sampling enables: +Sampling enables: - **Scalability**: Reduces the volume of data processed without compromising insights. - **Performance**: Speeds up query execution for analytics. - **Cost-Efficiency**: Minimizes resource usage and storage needs. -## Can I trust sampled data? +## Can I trust sampled data? Sampled data is highly reliable, and can provide insights that are as dependable as those derived from full datasets. Cloudflare designs sampling techniques to ensure we capture the essential characteristics of the entire dataset, delivering results you can trust. -Sampling is an approach similarly used in other domains, for instance: +Sampling is an approach similarly used in other domains, for instance: - Google Maps: Just as online maps display lower-resolution images when zoomed out and higher-resolution images when zoomed in — keeping the total number of pixels relatively constant — Cloudflare Analytics dynamically adjusts sampling rates to efficiently provide insights, ensuring queries return consistent and accurate results regardless of dataset size. @@ -44,23 +44,26 @@ In the near future, we plan to expose confidence intervals along with query resu ## Additional considerations -**When sampling occurs** +**When sampling occurs** + - Sampling is typically applied to very high-traffic datasets where full data analysis would be impractical. - For smaller datasets, full data analysis is often performed without sampling. -**Sampling rates** +**Sampling rates** + - Sampling rates vary depending on the dataset and product. - Cloudflare ensures that sampling rates are consistent within a single dataset to maintain accuracy across queries. -**Impact on metrics** +**Impact on metrics** + - While sampling reduces the volume of processed data, aggregated metrics like totals, averages, and percentiles are extrapolated based on the sample size. This ensures the reported metrics represent the entire dataset accurately. **Limitations** -- Sampling may not capture extremely rare events with very low occurrence rates. + +- Sampling may not capture extremely rare events with very low occurrence rates. **Sampling in analytics interfaces** + - GraphQL API: Sampling metadata is included in the query response. For more information, refer to the sampling [GraphQL Analytics API](/analytics/graphql-api/sampling/) documentation. - Workers Analytics Engine: For more information, refer to the [Workers Analytics Engine](/analytics/analytics-engine/sampling/) documentation. - Dashboard Analytics: Displays an icon with the sampled percentage of data, if sampled data was used for the visualization. - - diff --git a/src/content/docs/analytics/types-of-analytics.mdx b/src/content/docs/analytics/types-of-analytics.mdx index 3754f8a0ce803d1..9b13d4d6e16b1d5 100644 --- a/src/content/docs/analytics/types-of-analytics.mdx +++ b/src/content/docs/analytics/types-of-analytics.mdx @@ -40,25 +40,24 @@ Access aggregated traffic, security, and performance metrics for each domain pro Data available under the **Analytics & Logs** section includes: -* **HTTP Traffic** - Requests, Data transfer, Page views, Visits, and API requests. -* **Security** - Total Threats, Top Crawlers/Bots, Rate Limiting, Total Threats Stopped. -* **Performance** - Origin Performance, Bandwidth Saved. -* **Edge Reachability** - [Last mile insights](/network-error-logging/) for Enterprise customers. -* **Workers** - [Detailed information](/workers/observability/metrics-and-analytics/) related to your Workers per zone, and Workers KV per account. -* **Logs** - [Detailed logs](/logs/) of the metadata generated by Cloudflare products for Enterprise customers. -* **Instant logs** - [Live stream of traffic](/logs/instant-logs/) for your domain. Enterprise customers can access this live stream from the Cloudflare dashboard or from a command-line interface (CLI). +- **HTTP Traffic** - Requests, Data transfer, Page views, Visits, and API requests. +- **Security** - Total Threats, Top Crawlers/Bots, Rate Limiting, Total Threats Stopped. +- **Performance** - Origin Performance, Bandwidth Saved. +- **Edge Reachability** - [Last mile insights](/network-error-logging/) for Enterprise customers. +- **Workers** - [Detailed information](/workers/observability/metrics-and-analytics/) related to your Workers per zone, and Workers KV per account. +- **Logs** - [Detailed logs](/logs/) of the metadata generated by Cloudflare products for Enterprise customers. +- **Instant logs** - [Live stream of traffic](/logs/instant-logs/) for your domain. Enterprise customers can access this live stream from the Cloudflare dashboard or from a command-line interface (CLI). ## Product analytics Beyond the analytics provided for your properties, you can also access analytics related to specific products: -* [Bot Analytics](/bots/bot-analytics/) - Shows which requests are associated with known bots, likely automated traffic, likely human traffic, and more. -* [Cache Analytics](/cache/performance-review/cache-analytics/) - Insights to that help determine if resources are missing from cache, expired, or ineligible for caching. -* [DNS Analytics](/dns/additional-options/analytics/) - Provides insights about DNS queries to your zone. -* [Load Balancing Analytics](/load-balancing/reference/load-balancing-analytics/) - Features metrics to help gain insights into traffic load balancer steering decisions. -* [Security Events](/waf/analytics/security-events/) - Highlights attack and mitigation metrics detected by the Cloudflare WAF and HTTP DDoS protection systems. -* [Security Analytics](/waf/analytics/security-analytics/) - Displays information about all incoming HTTP requests, including those not affected by security measures (for example, from the WAF and DDoS protection systems). - +- [Bot Analytics](/bots/bot-analytics/) - Shows which requests are associated with known bots, likely automated traffic, likely human traffic, and more. +- [Cache Analytics](/cache/performance-review/cache-analytics/) - Insights to that help determine if resources are missing from cache, expired, or ineligible for caching. +- [DNS Analytics](/dns/additional-options/analytics/) - Provides insights about DNS queries to your zone. +- [Load Balancing Analytics](/load-balancing/reference/load-balancing-analytics/) - Features metrics to help gain insights into traffic load balancer steering decisions. +- [Security Events](/waf/analytics/security-events/) - Highlights attack and mitigation metrics detected by the Cloudflare WAF and HTTP DDoS protection systems. +- [Security Analytics](/waf/analytics/security-analytics/) - Displays information about all incoming HTTP requests, including those not affected by security measures (for example, from the WAF and DDoS protection systems). ## GraphQL APIs diff --git a/src/content/docs/api-shield/api-gateway.mdx b/src/content/docs/api-shield/api-gateway.mdx index 7eb6722be62e2c5..159a13ee168f6ba 100644 --- a/src/content/docs/api-shield/api-gateway.mdx +++ b/src/content/docs/api-shield/api-gateway.mdx @@ -6,7 +6,6 @@ products: - api-shield sidebar: order: 7 - --- Cloudflare API Shield provides API security, management tools, and integration with the Cloudflare Developer Platform for building new APIs. diff --git a/src/content/docs/api-shield/glossary.mdx b/src/content/docs/api-shield/glossary.mdx index f3d2e75924932cd..8cec6bbf2bf209c 100644 --- a/src/content/docs/api-shield/glossary.mdx +++ b/src/content/docs/api-shield/glossary.mdx @@ -6,10 +6,9 @@ products: - api-shield sidebar: order: 9 - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's API Shield documentation. diff --git a/src/content/docs/api-shield/index.mdx b/src/content/docs/api-shield/index.mdx index 17d437901096fc5..f95940e11bfbf9e 100644 --- a/src/content/docs/api-shield/index.mdx +++ b/src/content/docs/api-shield/index.mdx @@ -11,11 +11,15 @@ head: content: Overview --- -import { Description, Feature, Plan, RelatedProduct, Render } from "~/components" +import { + Description, + Feature, + Plan, + RelatedProduct, + Render, +} from "~/components"; - -Identify and address your API vulnerabilities. - +Identify and address your API vulnerabilities. @@ -37,11 +41,14 @@ Refer to the [Get started](/api-shield/get-started/) guide to set up API Shield. ## Features -Secure your APIs using API Shield's security features. + Secure your APIs using API Shield's security features. - -Monitor the health of your API endpoints. + + Monitor the health of your API endpoints. ## Availability @@ -56,6 +63,11 @@ API Shield currently does not work for JDCloud customers. ## Related products - -Cloudflare DDoS protection secures websites, applications, and entire networks while ensuring the performance of legitimate traffic is not compromised. + + Cloudflare DDoS protection secures websites, applications, and entire networks + while ensuring the performance of legitimate traffic is not compromised. diff --git a/src/content/docs/api-shield/management-and-monitoring/index.mdx b/src/content/docs/api-shield/management-and-monitoring/index.mdx index 182cc0cab64e27c..166b939d9e38c8e 100644 --- a/src/content/docs/api-shield/management-and-monitoring/index.mdx +++ b/src/content/docs/api-shield/management-and-monitoring/index.mdx @@ -6,11 +6,10 @@ products: - api-shield sidebar: order: 5 - group: + group: hideIndex: true - --- import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/api-shield/management-and-monitoring/session-identifiers.mdx b/src/content/docs/api-shield/management-and-monitoring/session-identifiers.mdx index 7139806c6c0866c..34134ffed50f975 100644 --- a/src/content/docs/api-shield/management-and-monitoring/session-identifiers.mdx +++ b/src/content/docs/api-shield/management-and-monitoring/session-identifiers.mdx @@ -6,14 +6,14 @@ products: title: Session identifiers sidebar: order: 3 - --- -import { Render } from "~/components" +import { Render } from "~/components"; :::note + ::: diff --git a/src/content/docs/api-shield/plans.mdx b/src/content/docs/api-shield/plans.mdx index 7cba5403983b3bc..e54a67a1da3c703 100644 --- a/src/content/docs/api-shield/plans.mdx +++ b/src/content/docs/api-shield/plans.mdx @@ -6,7 +6,6 @@ products: - api-shield sidebar: order: 3 - --- Free, Pro, Business, and Enterprise customers without an API Shield subscription can access [Endpoint Management](/api-shield/management-and-monitoring/) and [Schema validation](/api-shield/security/schema-validation/), but no other [API Shield](/api-shield/) features. @@ -15,10 +14,10 @@ To subscribe to API Shield, upgrade to an Enterprise plan and contact your accou Limits to endpoints apply to Endpoint Management and Schema validation. Refer to the table below for limits based on your zone plan. -| Plan type | Saved endpoints | Uploaded schemas | Total uploaded schema size | Rule action | -| --- | --- | --- | --- | --- | -| **Free** | 100 | 5 | 200 kB | `Block` only | -| **Pro** | 250 | 5 | 500 kB | `Block` only | -| **Business** | 500 | 10 | 2 MB | `Block` only | -| **Enterprise without API Shield** | 500 | 10 | 5 MB | `Log` or `Block` | -| **Enterprise with API Shield** | 10,000 | 10+ | 10+ MB | `Log` or `Block` | \ No newline at end of file +| Plan type | Saved endpoints | Uploaded schemas | Total uploaded schema size | Rule action | +| --------------------------------- | --------------- | ---------------- | -------------------------- | ---------------- | +| **Free** | 100 | 5 | 200 kB | `Block` only | +| **Pro** | 250 | 5 | 500 kB | `Block` only | +| **Business** | 500 | 10 | 2 MB | `Block` only | +| **Enterprise without API Shield** | 500 | 10 | 5 MB | `Log` or `Block` | +| **Enterprise with API Shield** | 10,000 | 10+ | 10+ MB | `Log` or `Block` | diff --git a/src/content/docs/api-shield/reference/classic-schema-validation.mdx b/src/content/docs/api-shield/reference/classic-schema-validation.mdx index 7e5925a84e6068a..4fefbda61645691 100644 --- a/src/content/docs/api-shield/reference/classic-schema-validation.mdx +++ b/src/content/docs/api-shield/reference/classic-schema-validation.mdx @@ -12,10 +12,9 @@ sidebar: text: Deprecated order: 1 label: Classic Schema validation - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; :::caution[Deprecation notice] Classic Schema validation has been deprecated. @@ -41,14 +40,11 @@ To configure Schema validation in the Cloudflare dashboard: 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com) and select your account and domain. 2. Select **Security** > **API Shield**. 3. Go to **Schema validation** and select **Add schema**. -4. Enter a descriptive name for your policy and optionally edit the expression to trigger Schema validation. For example, if your API is available at `http://api.example.com/v1`, include a check for the *Hostname* field — equal to `api.example.com` — and a check for the *URI Path* field using a regular expression — matching the regex `^/v1`. -:::caution[Important] +4. Enter a descriptive name for your policy and optionally edit the expression to trigger Schema validation. For example, if your API is available at `http://api.example.com/v1`, include a check for the _Hostname_ field — equal to `api.example.com` — and a check for the _URI Path_ field using a regular expression — matching the regex `^/v1`. + :::caution[Important] -To validate the hostname, you must include the *Hostname* field explicitly in the rule, even if the hostname value is in the schema file. Any hostname value present in the schema file will be ignored. -::: -5. Select **Next**. -6. Upload your schema file. -7. Select **Save** to validate the content of the schema file and deploy the Schema validation rule. If you get a validation error, ensure that you are using one of the [supported file formats](/api-shield/security/schema-validation/#specifications) and that each endpoint and method pair has a unique operation ID. +To validate the hostname, you must include the _Hostname_ field explicitly in the rule, even if the hostname value is in the schema file. Any hostname value present in the schema file will be ignored. +::: 5. Select **Next**. 6. Upload your schema file. 7. Select **Save** to validate the content of the schema file and deploy the Schema validation rule. If you get a validation error, ensure that you are using one of the [supported file formats](/api-shield/security/schema-validation/#specifications) and that each endpoint and method pair has a unique operation ID. After deploying your API Shield rule, Cloudflare displays a summary of all API endpoints organized by their protection level and actions that will occur for non-compliant and unprotected requests. diff --git a/src/content/docs/api-shield/reference/index.mdx b/src/content/docs/api-shield/reference/index.mdx index d51edc253455ed3..e0fb94f82c8316e 100644 --- a/src/content/docs/api-shield/reference/index.mdx +++ b/src/content/docs/api-shield/reference/index.mdx @@ -6,12 +6,11 @@ products: - api-shield sidebar: order: 6 - group: + group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information about API Shield: diff --git a/src/content/docs/api-shield/reference/terraform.mdx b/src/content/docs/api-shield/reference/terraform.mdx index 823b0b64274405a..8e5c5b8d6c3be74 100644 --- a/src/content/docs/api-shield/reference/terraform.mdx +++ b/src/content/docs/api-shield/reference/terraform.mdx @@ -6,10 +6,9 @@ products: - api-shield tags: - Terraform - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Get started with API Shield using Terraform from the examples below. For more information on how to use Terraform with Cloudflare, refer to the [Terraform documentation](/terraform/). @@ -62,7 +61,7 @@ resource "cloudflare_api_shield_operation" "get_image" { host = "example.com" endpoint = "/api/images/{var1}" } - + resource "cloudflare_api_shield_operation" "post_image" { zone_id = var.zone_id method = "POST" @@ -75,7 +74,7 @@ resource "cloudflare_api_shield_operation" "post_image" { :::note -It is required to configure Endpoint Management if you want to set up Schema validation using Terraform. +It is required to configure Endpoint Management if you want to set up Schema validation using Terraform. ::: Refer to the example configuration below to manage [Schema validation](/api-shield/security/schema-validation/api/) on your zone. @@ -90,13 +89,13 @@ resource "cloudflare_schema_validation_schemas" "example_schema" { source = file("./schemas/example-schema.yaml") validation_enabled = true } - + # Block all requests that violate schema by default resource "cloudflare_schema_validation_settings" "zone_level_settings" { zone_id = var.zone_id validation_default_mitigation_action = "block" } - + # For endpoint post_image - only log requests that violate schema resource "cloudflare_schema_validation_operation_settings" "post_image_log_only" { zone_id = var.zone_id diff --git a/src/content/docs/api-shield/security/graphql-protection/index.mdx b/src/content/docs/api-shield/security/graphql-protection/index.mdx index c8c4dfc16b03dd8..6d8f7feb449ca0d 100644 --- a/src/content/docs/api-shield/security/graphql-protection/index.mdx +++ b/src/content/docs/api-shield/security/graphql-protection/index.mdx @@ -6,7 +6,6 @@ products: - api-shield sidebar: order: 5 - --- GraphQL is a query language for APIs. In addition to protecting RESTful APIs, Cloudflare can also protect GraphQL APIs. diff --git a/src/content/docs/api-shield/security/index.mdx b/src/content/docs/api-shield/security/index.mdx index 36a3a3e4120f463..63dde51928c06d0 100644 --- a/src/content/docs/api-shield/security/index.mdx +++ b/src/content/docs/api-shield/security/index.mdx @@ -6,22 +6,19 @@ products: - api-shield sidebar: order: 4 - --- -import { DirectoryListing } from "~/components" - +import { DirectoryListing } from "~/components"; Cloudflare offers the following features to help secure your APIs: -| Discovery & management | Posture management | Runtime protection | -| --- | --- | --- | -| [API Discovery](/api-shield/security/api-discovery/) | [Volumetric Abuse Detection](/api-shield/security/volumetric-abuse-detection/) | [Schema validation](/api-shield/security/schema-validation/) | -| [Schema learning](/api-shield/management-and-monitoring/endpoint-management/schema-learning/) | [Authentication Posture](/api-shield/security/authentication-posture/) | [JWT validation](/api-shield/security/jwt-validation/) | -| [Sequence Analytics](/api-shield/security/sequence-analytics/) | [BOLA vulnerability detection](/api-shield/security/bola-vulnerability-detection/) | [Sequence mitigation](/api-shield/security/sequence-mitigation/) | -| | [Risk labels](/api-shield/management-and-monitoring/endpoint-labels/#risk-labels) | [Mutual TLS (mTLS)](/api-shield/security/mtls/) | -| | [Vulnerability Scanner](/api-shield/security/vulnerability-scanner/) | [GraphQL query protection](/api-shield/security/graphql-protection/) | - +| Discovery & management | Posture management | Runtime protection | +| --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------- | +| [API Discovery](/api-shield/security/api-discovery/) | [Volumetric Abuse Detection](/api-shield/security/volumetric-abuse-detection/) | [Schema validation](/api-shield/security/schema-validation/) | +| [Schema learning](/api-shield/management-and-monitoring/endpoint-management/schema-learning/) | [Authentication Posture](/api-shield/security/authentication-posture/) | [JWT validation](/api-shield/security/jwt-validation/) | +| [Sequence Analytics](/api-shield/security/sequence-analytics/) | [BOLA vulnerability detection](/api-shield/security/bola-vulnerability-detection/) | [Sequence mitigation](/api-shield/security/sequence-mitigation/) | +| | [Risk labels](/api-shield/management-and-monitoring/endpoint-labels/#risk-labels) | [Mutual TLS (mTLS)](/api-shield/security/mtls/) | +| | [Vulnerability Scanner](/api-shield/security/vulnerability-scanner/) | [GraphQL query protection](/api-shield/security/graphql-protection/) | ## Example Cloudflare solutions @@ -29,29 +26,23 @@ Cloudflare API Shield, together with other Cloudflare products, helps protect yo The following table maps each OWASP vulnerability to the Cloudflare features that address it: -| OWASP issue | Example Cloudflare solution | -| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OWASP issue | Example Cloudflare solution | +| ----------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Broken Object Level Authorization | [BOLA vulnerability detection](/api-shield/security/bola-vulnerability-detection/), [Sequence mitigation], [Schema validation], [JWT validation], [Rate Limiting], [Vulnerability Scanner](/api-shield/security/vulnerability-scanner/) | | Broken Authentication | [Authentication Posture](/api-shield/security/authentication-posture/), [mTLS](/api-shield/security/mtls/), [JWT validation], [Exposed Credential Checks](/waf/managed-rules/check-for-exposed-credentials/), [Bot Management](/bots/) | -| Broken Object Property Level Authorization | [Schema validation], [JWT validation] | -| Unrestricted Resource Consumption | [Rate Limiting], [Sequence mitigation], [Bot Management], [GraphQL Query Protection] | -| Broken Function Level Authorization | [Schema validation], [JWT validation] | -| Unrestricted Access to Sensitive Business Flows | [Sequence mitigation], [Bot Management], [GraphQL Query Protection] | -| Server Side Request Forgery | [Schema validation], [WAF managed rules], [WAF custom rules](/waf/custom-rules/) | -| Security Misconfiguration | [Sequence mitigation], [Schema validation], [WAF managed rules], [GraphQL Query Protection] | -| Improper Inventory Management | [Discovery](/api-shield/security/api-discovery/), [Schema learning](/api-shield/management-and-monitoring/#endpoint-schema-learning) | -| Unsafe Consumption of APIs | [JWT validation], [WAF managed rules] | +| Broken Object Property Level Authorization | [Schema validation], [JWT validation] | +| Unrestricted Resource Consumption | [Rate Limiting], [Sequence mitigation], [Bot Management], [GraphQL Query Protection] | +| Broken Function Level Authorization | [Schema validation], [JWT validation] | +| Unrestricted Access to Sensitive Business Flows | [Sequence mitigation], [Bot Management], [GraphQL Query Protection] | +| Server Side Request Forgery | [Schema validation], [WAF managed rules], [WAF custom rules](/waf/custom-rules/) | +| Security Misconfiguration | [Sequence mitigation], [Schema validation], [WAF managed rules], [GraphQL Query Protection] | +| Improper Inventory Management | [Discovery](/api-shield/security/api-discovery/), [Schema learning](/api-shield/management-and-monitoring/#endpoint-schema-learning) | +| Unsafe Consumption of APIs | [JWT validation], [WAF managed rules] | [Schema validation]: /api-shield/security/schema-validation/ - [Sequence mitigation]: /api-shield/security/sequence-mitigation/ - [JWT validation]: /api-shield/security/jwt-validation/ - [GraphQL Query Protection]: /api-shield/security/graphql-protection/ - [Bot management]: /bots/ - [Rate limiting]: /waf/rate-limiting-rules/ - [WAF managed rules]: /waf/managed-rules/ diff --git a/src/content/docs/api-shield/security/jwt-validation/jwt-worker.mdx b/src/content/docs/api-shield/security/jwt-validation/jwt-worker.mdx index 412e2ee5573001d..e37fc920b98921f 100644 --- a/src/content/docs/api-shield/security/jwt-validation/jwt-worker.mdx +++ b/src/content/docs/api-shield/security/jwt-validation/jwt-worker.mdx @@ -14,7 +14,7 @@ tags: - JavaScript --- -import { Steps } from "~/components" +import { Steps } from "~/components"; Use a Worker to automatically keep your identity provider’s latest public key in the JWT validation configuration. diff --git a/src/content/docs/api-shield/security/jwt-validation/transform-rules.mdx b/src/content/docs/api-shield/security/jwt-validation/transform-rules.mdx index 102b9af7bb9bb5e..69906adc1b47b63 100644 --- a/src/content/docs/api-shield/security/jwt-validation/transform-rules.mdx +++ b/src/content/docs/api-shield/security/jwt-validation/transform-rules.mdx @@ -13,7 +13,7 @@ tags: - JSON web token (JWT) --- -import { Steps, DashButton } from "~/components" +import { Steps, DashButton } from "~/components"; You can forward information from a [JSON Web Token (JWT)](/api-shield/security/jwt-validation/) to the origin in a header by creating [Transform Rules](/rules/transform/) using claims that Cloudflare has verified via the JSON Web Token. @@ -44,4 +44,4 @@ As an example, to send the `x-send-jwt-claim-user` request header to the origin, lookup_json_string(http.request.jwt.claims[""][0], "claim_name") ``` `` is your token configuration ID found in JWT validation and `claim_name` is the JWT claim you want to add to the header. - \ No newline at end of file + diff --git a/src/content/docs/api-shield/security/mtls/byo-ca.mdx b/src/content/docs/api-shield/security/mtls/byo-ca.mdx index 2430485da76550a..90b2c59cd2ff56e 100644 --- a/src/content/docs/api-shield/security/mtls/byo-ca.mdx +++ b/src/content/docs/api-shield/security/mtls/byo-ca.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/client-certificates/byo-ca/ sidebar: order: 3 - --- diff --git a/src/content/docs/api-shield/security/mtls/index.mdx b/src/content/docs/api-shield/security/mtls/index.mdx index 6652a44adef3c34..c7984dc34ab21f2 100644 --- a/src/content/docs/api-shield/security/mtls/index.mdx +++ b/src/content/docs/api-shield/security/mtls/index.mdx @@ -8,7 +8,6 @@ sidebar: order: 7 tags: - mTLS - --- import { GlossaryDefinition, Render } from "~/components"; diff --git a/src/content/docs/api-shield/security/sequence-analytics.mdx b/src/content/docs/api-shield/security/sequence-analytics.mdx index 34a24e55bdceb85..c70bf1c1ef13f37 100644 --- a/src/content/docs/api-shield/security/sequence-analytics.mdx +++ b/src/content/docs/api-shield/security/sequence-analytics.mdx @@ -6,10 +6,9 @@ products: title: Sequence Analytics sidebar: order: 3 - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Sequence Analytics tracks the order of API endpoint requests over time, allowing you to discover how users interact with your API. Sequence Analytics groups and highlights important user journeys (sequences) across your API. You can enforce preferred sequences using [Sequence mitigation](/api-shield/security/sequence-mitigation/). diff --git a/src/content/docs/api-shield/security/sequence-mitigation/api.mdx b/src/content/docs/api-shield/security/sequence-mitigation/api.mdx index c3bf0a409084cde..33320b54ef171ed 100644 --- a/src/content/docs/api-shield/security/sequence-mitigation/api.mdx +++ b/src/content/docs/api-shield/security/sequence-mitigation/api.mdx @@ -10,24 +10,23 @@ sidebar: head: - tag: title content: Configure sequence mitigation via the API - --- Configuring sequence mitigation via the API consists of building a rule object by choosing the sequence and setting the type of rule and its action. ```json title="Example of a rule object" { - "id": "d4909253-390f-4956-89fd-92a5b0cd86d8", - "title": "", - "kind": "allow", - "action": "block", - "sequence": [ - "0d9bf70c-92e1-4bb3-9411-34a3bcc59003", - "b704ab4d-5be0-46e0-9875-b2b3d1ab42f9" - ], - "priority": 0, - "last_updated": "2023-07-24T12:06:51.796286Z", - "created_at": "2023-07-24T12:06:51.796286Z" + "id": "d4909253-390f-4956-89fd-92a5b0cd86d8", + "title": "", + "kind": "allow", + "action": "block", + "sequence": [ + "0d9bf70c-92e1-4bb3-9411-34a3bcc59003", + "b704ab4d-5be0-46e0-9875-b2b3d1ab42f9" + ], + "priority": 0, + "last_updated": "2023-07-24T12:06:51.796286Z", + "created_at": "2023-07-24T12:06:51.796286Z" } ``` diff --git a/src/content/docs/api-shield/security/sequence-mitigation/custom-rules.mdx b/src/content/docs/api-shield/security/sequence-mitigation/custom-rules.mdx index 08a2a8da0c12da5..5d43aabef5e991b 100644 --- a/src/content/docs/api-shield/security/sequence-mitigation/custom-rules.mdx +++ b/src/content/docs/api-shield/security/sequence-mitigation/custom-rules.mdx @@ -7,14 +7,14 @@ products: sidebar: order: 4 label: Custom rules - --- -import { GlossaryTooltip, Render } from "~/components" +import { GlossaryTooltip, Render } from "~/components"; API Shield sequence custom rules use the configured API Shield session identifier to track the order of requests a user has made and the time between requests, and makes them available via [Cloudflare Rules](/rules). This allows you to write rules that match valid or invalid sequences. These rules are similar to [cookie sequence rules](/bots/additional-configurations/sequence-rules/) but have a different set of prerequisites: + - They require [session identifiers](/api-shield/get-started/#session-identifiers) to be set in API Shield. - Because they require session identifiers, they can only be used on traffic that can be clearly attributed to individual users through session identifiers (authenticated traffic). - Because Cloudflare stores the user state in memory and not in a cookie, a session's sequence lifetime is limited to 10 minutes. @@ -25,6 +25,7 @@ Rules built using these custom rules are similar to the sequence rules that can ## Availability :::note + ::: @@ -41,30 +42,30 @@ Each saved endpoint will have an endpoint ID visible in its details page in Endp The visitor must wait more than 2 seconds after requesting endpoint `aaaaaaaa` before requesting endpoint `bbbbbbbb`: ```txt -cf.sequence.current_op eq "bbbbbbbb" and +cf.sequence.current_op eq "bbbbbbbb" and cf.sequence.msec_since_op["aaaaaaaa"] ge 2000 ``` The visitor must request endpoints `aaaaaaaa`, then `bbbbbbbb`, then `cccccccc` in that exact order: ```txt -cf.sequence.current_op eq "cccccccc" and -cf.sequence.previous_ops[0] == "bbbbbbbb" and +cf.sequence.current_op eq "cccccccc" and +cf.sequence.previous_ops[0] == "bbbbbbbb" and cf.sequence.previous_ops[1] == "aaaaaaaa" ``` The visitor must request endpoint `aaaaaaaa` before endpoint `bbbbbbbb`, but endpoint `aaaaaaaa` can be anywhere in the previous 10 requests: ```txt -cf.sequence.current_op eq "bbbbbbbb" and +cf.sequence.current_op eq "bbbbbbbb" and any(cf.sequence.previous_ops[*] == "aaaaaaaa") ``` The visitor must request either endpoint `aaaaaaaa` before endpoint `bbbbbbbb`, or endpoint `cccccccc` before endpoint `bbbbbbbb`: ```txt -(cf.sequence.current_op eq "bbbbbbbb" and -any(cf.sequence.previous_ops[*] == "aaaaaaaa")) or -(cf.sequence.current_op eq "bbbbbbbb" and +(cf.sequence.current_op eq "bbbbbbbb" and +any(cf.sequence.previous_ops[*] == "aaaaaaaa")) or +(cf.sequence.current_op eq "bbbbbbbb" and any(cf.sequence.previous_ops[*] == "cccccccc")) -``` \ No newline at end of file +``` diff --git a/src/content/docs/api-shield/security/sequence-mitigation/index.mdx b/src/content/docs/api-shield/security/sequence-mitigation/index.mdx index 184e0fe3410c88c..7672a8fafa6039f 100644 --- a/src/content/docs/api-shield/security/sequence-mitigation/index.mdx +++ b/src/content/docs/api-shield/security/sequence-mitigation/index.mdx @@ -6,10 +6,9 @@ products: - api-shield sidebar: order: 4 - --- -import { GlossaryTooltip, Render } from "~/components" +import { GlossaryTooltip, Render } from "~/components"; Sequence mitigation allows you to enforce request patterns for authenticated clients communicating with your API. @@ -30,7 +29,7 @@ Using sequence mitigation, you can enforce that request pattern with two new seq :::note -You can create sequence mitigation rules for a sequence even if the sequence is not listed in [Sequence Analytics](/api-shield/security/sequence-analytics/). +You can create sequence mitigation rules for a sequence even if the sequence is not listed in [Sequence Analytics](/api-shield/security/sequence-analytics/). ::: ## Process @@ -54,7 +53,6 @@ A negative security model may be useful if you see abusive behavior that is outs For example, if there was an authorization bug that allowed users to iterate through other users' profiles that contain account numbers via `GET /api/v1/users/{var1}/profile` and then a user tries to make fraudulent funds transfers, you could create a rule to block or log the sequence `GET /api/v1/users/{var1}/profile` to `POST /api/v1/transferFunds`. - ## Limitations ### Endpoint Management @@ -87,4 +85,4 @@ For example, if you create a rule requiring one endpoint to be requested before ## Availability - \ No newline at end of file + diff --git a/src/content/docs/api-shield/security/volumetric-abuse-detection.mdx b/src/content/docs/api-shield/security/volumetric-abuse-detection.mdx index ac20b0d38774fb5..4b6e8f08729bae2 100644 --- a/src/content/docs/api-shield/security/volumetric-abuse-detection.mdx +++ b/src/content/docs/api-shield/security/volumetric-abuse-detection.mdx @@ -6,10 +6,9 @@ products: title: Volumetric Abuse Detection sidebar: order: 2 - --- -import { GlossaryTooltip, Steps, Render, APIRequest } from "~/components" +import { GlossaryTooltip, Steps, Render, APIRequest } from "~/components"; Cloudflare Volumetric Abuse Detection generates per-endpoint, per-session rate limit recommendations that adjust automatically as your traffic patterns change. @@ -27,7 +26,7 @@ Volumetric Abuse Detection rate limits are a way to prevent blatant volumetric a Volumetric Abuse Detection analyzes your API's individual session traffic statistics to recommend per-endpoint, per-session rate limits. -To access your endpoints: +To access your endpoints: Old dashboard: **Security** > **API Shield** > **Endpoint Management** @@ -47,7 +46,7 @@ Thresholds are suggested only for endpoints that satisfy all of the following re After adding a session identifier, allow 24 hours for rate limit recommendations to appear on endpoints in the Cloudflare dashboard. -### Rate limiting recommendation calculation +### Rate limiting recommendation calculation Select an endpoint row in **Endpoints** to view its rate limit recommendation. The detail view shows the overall recommended value and percentile-based values (p50, p90, p99). @@ -73,8 +72,8 @@ Refer to the [Rules documentation](/waf/rate-limiting-rules/create-zone-dashboar [Rate limit recommendations are available via the API](/api/resources/api_gateway/subresources/operations/methods/get/) if you would like to dynamically update rate limits over time. ## Special cases diff --git a/src/content/docs/argo-smart-routing/analytics.mdx b/src/content/docs/argo-smart-routing/analytics.mdx index 73046eae32ef933..8ba08d6be3c3f77 100644 --- a/src/content/docs/argo-smart-routing/analytics.mdx +++ b/src/content/docs/argo-smart-routing/analytics.mdx @@ -22,18 +22,15 @@ You can access Argo analytics for your domain in the [Cloudflare dashboard](http :::note - Detailed performance data within **Origin Performance (Argo)** will only display if Argo has routed at least 500 origin requests within the last 48 hours. - ::: ## Types of analytics The dashboard displays two different views for performance data: -* **Origin Response Time**: A histogram shows response time from your origin to the Cloudflare network. The blue bars show time-to-first-byte (TTFB) without Argo, while the orange bars show TTFB where Argo found a Smart Route. - -* **Geography**: A map shows the improvement in response time at each Cloudflare data center. +- **Origin Response Time**: A histogram shows response time from your origin to the Cloudflare network. The blue bars show time-to-first-byte (TTFB) without Argo, while the orange bars show TTFB where Argo found a Smart Route. - * A negative value indicates that requests from that location would not have benefited from Argo Smart Routing, so instead would have been routed directly. +- **Geography**: A map shows the improvement in response time at each Cloudflare data center. + - A negative value indicates that requests from that location would not have benefited from Argo Smart Routing, so instead would have been routed directly. diff --git a/src/content/docs/argo-smart-routing/argo-for-packets.mdx b/src/content/docs/argo-smart-routing/argo-for-packets.mdx index 8d4a1b15407b0ce..b2e857fe5dca3da 100644 --- a/src/content/docs/argo-smart-routing/argo-for-packets.mdx +++ b/src/content/docs/argo-smart-routing/argo-for-packets.mdx @@ -6,7 +6,6 @@ products: - argo-smart-routing sidebar: order: 4 - --- Argo for Packets optimizes IP layer network routing for Cloudflare network services products, including [Magic Transit](/magic-transit/), [Cloudflare WAN](/cloudflare-wan/) (formerly Magic WAN), and [Cloudflare for Offices](https://blog.cloudflare.com/cloudflare-for-offices/). diff --git a/src/content/docs/artifacts/api/errors.mdx b/src/content/docs/artifacts/api/errors.mdx index 7545813cd7cbfa2..467365dbf5b37c7 100644 --- a/src/content/docs/artifacts/api/errors.mdx +++ b/src/content/docs/artifacts/api/errors.mdx @@ -15,17 +15,17 @@ This is a list of Artifacts errors. ## Error codes -| Name | Code | Description | -|------|------|-------------| -| `ALREADY_EXISTS` | 10201 | The target repository already exists in the namespace. | -| `NOT_FOUND` | 10200 | The repository or remote resource does not exist. | -| `IMPORT_IN_PROGRESS` | 10302 | The repository is still being imported and is not yet available. | -| `FORK_IN_PROGRESS` | 10303 | The repository is still being forked and is not yet available. | -| `INVALID_INPUT` | 10100 | A request parameter is missing, malformed, or outside the accepted range. | -| `INVALID_REPO_NAME` | 10101 | The repository name does not meet naming requirements. | -| `INVALID_TTL` | 10103 | The token TTL is outside the allowed range (60–31,536,000 seconds). | -| `INVALID_URL` | 10104 | The source URL does not point to a valid git repository. | -| `REMOTE_AUTH_REQUIRED` | 10106 | The remote repository requires authentication. | -| `UPSTREAM_UNAVAILABLE` | 10401 | The remote git server could not be reached. | -| `MEMORY_LIMIT` | 10402 | The operation exceeds service memory limits. | -| `INTERNAL_ERROR` | 10400 | An unexpected internal error occurred. | +| Name | Code | Description | +| ---------------------- | ----- | ------------------------------------------------------------------------- | +| `ALREADY_EXISTS` | 10201 | The target repository already exists in the namespace. | +| `NOT_FOUND` | 10200 | The repository or remote resource does not exist. | +| `IMPORT_IN_PROGRESS` | 10302 | The repository is still being imported and is not yet available. | +| `FORK_IN_PROGRESS` | 10303 | The repository is still being forked and is not yet available. | +| `INVALID_INPUT` | 10100 | A request parameter is missing, malformed, or outside the accepted range. | +| `INVALID_REPO_NAME` | 10101 | The repository name does not meet naming requirements. | +| `INVALID_TTL` | 10103 | The token TTL is outside the allowed range (60–31,536,000 seconds). | +| `INVALID_URL` | 10104 | The source URL does not point to a valid git repository. | +| `REMOTE_AUTH_REQUIRED` | 10106 | The remote repository requires authentication. | +| `UPSTREAM_UNAVAILABLE` | 10401 | The remote git server could not be reached. | +| `MEMORY_LIMIT` | 10402 | The operation exceeds service memory limits. | +| `INTERNAL_ERROR` | 10400 | An unexpected internal error occurred. | diff --git a/src/content/docs/artifacts/api/git-protocol.mdx b/src/content/docs/artifacts/api/git-protocol.mdx index 0b2fe497d2755c8..df3348a7a33e084 100644 --- a/src/content/docs/artifacts/api/git-protocol.mdx +++ b/src/content/docs/artifacts/api/git-protocol.mdx @@ -20,10 +20,10 @@ Use the returned repo `remote` with a regular Git client for `clone`, `fetch`, ` Git routes accept repo access tokens in two forms: -| Format | Details | Example | -| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | +| Format | Details | Example | +| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | | Bearer token in `http.extraHeader` | Recommended for local workflows. Use the full token string returned by the control plane and keep credentials out of the remote URL. | `git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone` | -| HTTP Basic auth in the remote URL | Use for short-lived, one-off commands when you need a self-contained remote. Put the token secret in the password slot. | `https://x:@.artifacts.cloudflare.net/git//.git` | +| HTTP Basic auth in the remote URL | Use for short-lived, one-off commands when you need a self-contained remote. Put the token secret in the password slot. | `https://x:@.artifacts.cloudflare.net/git//.git` | ### Token format diff --git a/src/content/docs/artifacts/concepts/repositories.mdx b/src/content/docs/artifacts/concepts/repositories.mdx index 026597faaae63d4..c00cad8531dd358 100644 --- a/src/content/docs/artifacts/concepts/repositories.mdx +++ b/src/content/docs/artifacts/concepts/repositories.mdx @@ -30,11 +30,11 @@ Each repository is isolated from other repositories. Tokens, lifecycle, refs, an Artifacts exposes the same repository through three interfaces: -| Interface | What you use it for | What it returns | -| --- | --- | --- | -| Workers binding | Create, list, import, inspect, fork, delete, and mint tokens from a Worker | Repository metadata, repository handles, and repo-scoped token results | -| REST API | Create, list, import, inspect, fork, delete, and mint tokens from external systems | Cloudflare API responses with repository metadata and token results | -| Git protocol | Clone, fetch, pull, and push repository contents | Standard Git behavior over HTTPS | +| Interface | What you use it for | What it returns | +| --------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| Workers binding | Create, list, import, inspect, fork, delete, and mint tokens from a Worker | Repository metadata, repository handles, and repo-scoped token results | +| REST API | Create, list, import, inspect, fork, delete, and mint tokens from external systems | Cloudflare API responses with repository metadata and token results | +| Git protocol | Clone, fetch, pull, and push repository contents | Standard Git behavior over HTTPS | These interfaces point to the same repository. diff --git a/src/content/docs/artifacts/examples/git-client.mdx b/src/content/docs/artifacts/examples/git-client.mdx index a297d94fb81bf26..10a023272838435 100644 --- a/src/content/docs/artifacts/examples/git-client.mdx +++ b/src/content/docs/artifacts/examples/git-client.mdx @@ -11,10 +11,11 @@ products: You can use a standard Git client to interact with Artifacts repos. This example walks through clone, but the same approach works for fetch, pull, push, and any other Git operation. To do this, you need to: + - Fetch the repo's remote URL from the REST API - Mint a short-lived token scoped to that repo -Once you have the remote URL and token, you can use them to run Git commands against the repo. +Once you have the remote URL and token, you can use them to run Git commands against the repo. This example assumes the repo already exists and that you have a [Cloudflare API token](/fundamentals/api/get-started/create-token/) with **Artifacts** > **Edit**. @@ -49,11 +50,13 @@ ARTIFACTS_TOKEN=$(printf '%s' "$TOKEN_JSON" | jq -r '.result.plaintext') # Clone the repo git -c http.extraHeader="Authorization: Bearer $ARTIFACTS_TOKEN" clone "$ARTIFACTS_REMOTE" artifacts-clone ``` + You now have a standard Git checkout in `./artifacts-clone`. This flow is useful when another system owns repo discovery or access control, but your local tooling still expects a normal git remote. ### Authentication + Treat `ARTIFACTS_TOKEN` as a secret. Keep it out of logs, and prefer `http.extraHeader` over saving credentials in a remote URL. If you need a self-contained remote URL for a short-lived workflow, extract the token secret and build the authenticated remote only for that command: diff --git a/src/content/docs/artifacts/guides/authentication.mdx b/src/content/docs/artifacts/guides/authentication.mdx index ac4559e2184b237..b700afb4e8e3481 100644 --- a/src/content/docs/artifacts/guides/authentication.mdx +++ b/src/content/docs/artifacts/guides/authentication.mdx @@ -16,11 +16,11 @@ Review [Namespaces](/artifacts/concepts/namespaces/) first, then use one namespa ## Compare auth methods -| Interface | Authenticate with | Permissions or scopes | Use for | -| --- | --- | --- | --- | -| Workers binding | Configured `artifacts` binding | Wrangler auth is only for local Wrangler commands such as `dev` and `deploy`. | Worker code that calls `env.ARTIFACTS` | -| REST API | Cloudflare API token in `Authorization: Bearer ...` | **Artifacts** > **Read** for read routes and **Artifacts** > **Edit** for write routes. | Control-plane HTTP requests | -| Git protocol | Repo-scoped Artifacts token | `read` for clone, fetch, and pull. `write` for push. | Standard Git over HTTPS | +| Interface | Authenticate with | Permissions or scopes | Use for | +| --------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------- | +| Workers binding | Configured `artifacts` binding | Wrangler auth is only for local Wrangler commands such as `dev` and `deploy`. | Worker code that calls `env.ARTIFACTS` | +| REST API | Cloudflare API token in `Authorization: Bearer ...` | **Artifacts** > **Read** for read routes and **Artifacts** > **Edit** for write routes. | Control-plane HTTP requests | +| Git protocol | Repo-scoped Artifacts token | `read` for clone, fetch, and pull. `write` for push. | Standard Git over HTTPS | Cloudflare API tokens authenticate control-plane access. Repo-scoped Artifacts tokens authenticate Git access. @@ -79,10 +79,10 @@ curl --request POST "$ARTIFACTS_BASE_URL/repos" \ Git uses repo-scoped Artifacts tokens, not Cloudflare API tokens. Mint these tokens from the Workers binding or the REST API, then use them with the repo `remote` URL. -| Token scope | Allowed commands | -| --- | --- | -| `read` | `git clone`, `git fetch`, `git pull` | -| `write` | `git clone`, `git fetch`, `git pull`, `git push` | +| Token scope | Allowed commands | +| ----------- | ------------------------------------------------ | +| `read` | `git clone`, `git fetch`, `git pull` | +| `write` | `git clone`, `git fetch`, `git pull`, `git push` | Use the exact repo `remote` value returned by the Workers binding or REST API: diff --git a/src/content/docs/artifacts/guides/event-subscriptions.mdx b/src/content/docs/artifacts/guides/event-subscriptions.mdx index 8b1184706241f3d..08ff7f6771fca2b 100644 --- a/src/content/docs/artifacts/guides/event-subscriptions.mdx +++ b/src/content/docs/artifacts/guides/event-subscriptions.mdx @@ -13,6 +13,7 @@ import { Render } from "~/components"; Artifacts emits structured events for repository lifecycle changes — creates, deletes, forks, imports, pushes, clones, fetches, and token changes. By subscribing to these events through [event subscriptions](/queues/event-subscriptions/), you can consume them from a Worker to build commit-driven automation. For example: + - Run custom workflows when a repository is created or imported - Kick off a build and deploy a change when an agent pushes to a repo - Trigger a review agent on every push diff --git a/src/content/docs/artifacts/platform/limits.mdx b/src/content/docs/artifacts/platform/limits.mdx index 75154c57881d70c..b328482a34c0687 100644 --- a/src/content/docs/artifacts/platform/limits.mdx +++ b/src/content/docs/artifacts/platform/limits.mdx @@ -15,9 +15,9 @@ These limits cover naming rules, storage, and request rates for control-plane an | Feature | Limit | | ------------------------------ | -------------------------------------------------------------------------------------------------- | | Control-plane request rate | 2,000 requests per 10 seconds per Artifacts namespace | -| Git request rate, per artifact | 2,000 requests per 10 seconds per artifact | +| Git request rate, per artifact | 2,000 requests per 10 seconds per artifact | | Maximum storage per repository | 10 GB | | Maximum storage per account | 1 TB (can be raised on request) | -| Maximum number of repositories | Unlimited | +| Maximum number of repositories | Unlimited | | Maximum number of namespaces | Unlimited | | Namespace and repo names | Start with a letter or digit. Remaining characters may include letters, digits, `.`, `_`, and `-`. | diff --git a/src/content/docs/artifacts/platform/pricing.mdx b/src/content/docs/artifacts/platform/pricing.mdx index 8cca99c4745119f..6986d8c6160294c 100644 --- a/src/content/docs/artifacts/platform/pricing.mdx +++ b/src/content/docs/artifacts/platform/pricing.mdx @@ -15,10 +15,10 @@ Artifacts pricing is billed on two dimensions: ## Artifacts pricing -| Unit | Workers Free | Workers Paid | -| ----------------------------- | ------------ | ------------ | -| Operations (1,000 operations) | Unavailable | First 10,000 per month + $0.15 per additional 1,000 operations | -| Storage (GB-mo) | Unavailable | First 1 GB per month + $0.50 per additional GB-mo | +| Unit | Workers Free | Workers Paid | +| ----------------------------- | ------------ | -------------------------------------------------------------- | +| Operations (1,000 operations) | Unavailable | First 10,000 per month + $0.15 per additional 1,000 operations | +| Storage (GB-mo) | Unavailable | First 1 GB per month + $0.50 per additional GB-mo | ## Storage usage diff --git a/src/content/docs/automatic-platform-optimization/about/index.mdx b/src/content/docs/automatic-platform-optimization/about/index.mdx index 8a627ee1adac90b..8e08942f6c504ec 100644 --- a/src/content/docs/automatic-platform-optimization/about/index.mdx +++ b/src/content/docs/automatic-platform-optimization/about/index.mdx @@ -6,7 +6,6 @@ products: - automatic-platform-optimization sidebar: order: 2 - --- With Automatic Platform Optimization (APO), Cloudflare serves your entire site from our edge network, ensuring customers see improved performance when visiting your site. Cloudflare typically only caches static content, but with APO, we can also cache dynamic content — like HTML — to serve the entire site from the cache. This process removes round trips from the origin to drastically improve time to first byte (TTFB) along with other site performance metrics. In addition to caching dynamic content, APO caches third-party scripts to further reduce the number of requests that leave Cloudflare's edge network. diff --git a/src/content/docs/automatic-platform-optimization/about/plugin-compatibility.mdx b/src/content/docs/automatic-platform-optimization/about/plugin-compatibility.mdx index 3b36da43020bcd5..c63c3dc4fdccb0f 100644 --- a/src/content/docs/automatic-platform-optimization/about/plugin-compatibility.mdx +++ b/src/content/docs/automatic-platform-optimization/about/plugin-compatibility.mdx @@ -16,35 +16,33 @@ For questions about a specific plugin not shown in the list, create a thread in :::note - The Cloudflare APO WordPress plugin does not support multisite WordPress installation. - ::: ## Compatible plugins -* [NitroPack](https://nitropack.io/) -* [FlyingPress](https://flyingpress.com/) -* [WP Rocket](https://community.cloudflare.com/t/cloudflares-apo-with-wp-rockets-minified-css/225906/3?u=yevgen) **version 3.8.6 or later** -* [BigCommerce](https://wordpress.org/plugins/bigcommerce/) -* [Easy Digital Downloads](https://wordpress.org/plugins/easy-digital-downloads/) -* [WooCommerce](https://wordpress.org/plugins/woocommerce/) -* [Redis Object Cache](https://wordpress.org/plugins/redis-cache/) -* [Object Cache Pro](https://objectcache.pro) -* [YITH WooCommerce Wishlist](https://wordpress.org/plugins/yith-woocommerce-wishlist/) -* [WP EasyCart](https://wordpress.org/plugins/wp-easycart/) -* [Ecwid Ecommerce Shopping Cart](https://wordpress.org/plugins/ecwid-shopping-cart/) -* [WP ECommerce](https://wordpress.org/plugins/wp-e-commerce/) -* [Bookly](https://wordpress.org/plugins/bookly-responsive-appointment-booking-tool/) -* [WPTouch](https://wordpress.org/plugins/wptouch/) -* [Mobile Detect](https://wordpress.org/plugins/tinywp-mobile-detect/) -* [WordPress Mobile Pack](https://wordpress.org/plugins/wordpress-mobile-pack/) -* [WP-Mobilizer](https://wordpress.org/plugins/wp-mobilizer/) -* [Any Mobile Theme Switcher](https://wordpress.org/plugins/any-mobile-theme-switcher/) -* [Easy Social Share Buttons](https://codecanyon.net/item/easy-social-share-buttons-for-wordpress/6394476) -* [Jetpack (Mobile Theme)](https://wordpress.org/plugins/jetpack/) -* [WPML](https://wpml.org/) -* [Hummingbird](https://wordpress.org/plugins/hummingbird-performance/) -* [Imunify360](https://docs.imunify360.com/features/#webshield) -* [Perfmatters](https://perfmatters.io/docs/cloudflare-wordpress-settings/) +- [NitroPack](https://nitropack.io/) +- [FlyingPress](https://flyingpress.com/) +- [WP Rocket](https://community.cloudflare.com/t/cloudflares-apo-with-wp-rockets-minified-css/225906/3?u=yevgen) **version 3.8.6 or later** +- [BigCommerce](https://wordpress.org/plugins/bigcommerce/) +- [Easy Digital Downloads](https://wordpress.org/plugins/easy-digital-downloads/) +- [WooCommerce](https://wordpress.org/plugins/woocommerce/) +- [Redis Object Cache](https://wordpress.org/plugins/redis-cache/) +- [Object Cache Pro](https://objectcache.pro) +- [YITH WooCommerce Wishlist](https://wordpress.org/plugins/yith-woocommerce-wishlist/) +- [WP EasyCart](https://wordpress.org/plugins/wp-easycart/) +- [Ecwid Ecommerce Shopping Cart](https://wordpress.org/plugins/ecwid-shopping-cart/) +- [WP ECommerce](https://wordpress.org/plugins/wp-e-commerce/) +- [Bookly](https://wordpress.org/plugins/bookly-responsive-appointment-booking-tool/) +- [WPTouch](https://wordpress.org/plugins/wptouch/) +- [Mobile Detect](https://wordpress.org/plugins/tinywp-mobile-detect/) +- [WordPress Mobile Pack](https://wordpress.org/plugins/wordpress-mobile-pack/) +- [WP-Mobilizer](https://wordpress.org/plugins/wp-mobilizer/) +- [Any Mobile Theme Switcher](https://wordpress.org/plugins/any-mobile-theme-switcher/) +- [Easy Social Share Buttons](https://codecanyon.net/item/easy-social-share-buttons-for-wordpress/6394476) +- [Jetpack (Mobile Theme)](https://wordpress.org/plugins/jetpack/) +- [WPML](https://wpml.org/) +- [Hummingbird](https://wordpress.org/plugins/hummingbird-performance/) +- [Imunify360](https://docs.imunify360.com/features/#webshield) +- [Perfmatters](https://perfmatters.io/docs/cloudflare-wordpress-settings/) diff --git a/src/content/docs/automatic-platform-optimization/about/test-current-speed.mdx b/src/content/docs/automatic-platform-optimization/about/test-current-speed.mdx index 05c85a5ea866629..e4df722b4bb5ebb 100644 --- a/src/content/docs/automatic-platform-optimization/about/test-current-speed.mdx +++ b/src/content/docs/automatic-platform-optimization/about/test-current-speed.mdx @@ -6,7 +6,6 @@ products: - automatic-platform-optimization sidebar: order: 3 - --- Before you begin using APO, we recommend testing your current site speed. Your site speed results give your website a letter grade and performance rating. diff --git a/src/content/docs/automatic-platform-optimization/get-started/change-nameservers.mdx b/src/content/docs/automatic-platform-optimization/get-started/change-nameservers.mdx index e2ba71bfc3a0ea6..422ecb4f5989b1b 100644 --- a/src/content/docs/automatic-platform-optimization/get-started/change-nameservers.mdx +++ b/src/content/docs/automatic-platform-optimization/get-started/change-nameservers.mdx @@ -33,8 +33,6 @@ We recommend keeping this browser tab or window open and opening a new tab or wi :::note - You may be prompted to confirm the nameserver change with your domain registrar. Confirm or continue after making the update. - ::: diff --git a/src/content/docs/automatic-platform-optimization/get-started/index.mdx b/src/content/docs/automatic-platform-optimization/get-started/index.mdx index 27e95e4ce57100a..1ec49c17ce68232 100644 --- a/src/content/docs/automatic-platform-optimization/get-started/index.mdx +++ b/src/content/docs/automatic-platform-optimization/get-started/index.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Get started with APO - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Before you configure APO for your WordPress site, complete the following tasks. diff --git a/src/content/docs/automatic-platform-optimization/reference/cache-device-type.mdx b/src/content/docs/automatic-platform-optimization/reference/cache-device-type.mdx index a8148c2c7bbb2e6..710c8af46eb1aa8 100644 --- a/src/content/docs/automatic-platform-optimization/reference/cache-device-type.mdx +++ b/src/content/docs/automatic-platform-optimization/reference/cache-device-type.mdx @@ -12,9 +12,9 @@ sidebar: APO cache by device type provides all of the same benefits of Cloudflare's cache while targeting visitors with content appropriate to their device. Cloudflare evaluates the `User-Agent` header in the HTTP request to identify the device type. Cloudflare then identifies each device type with a case insensitive match to the regex below: -* **Mobile**: `(?:phone|windows\s+phone|ipod|blackberry|(?:android|bb\d+|meego|silk|googlebot) .+? mobile|palm|windows\s+ce|opera mini|avantgo|mobilesafari|docomo|kaios)` -* **Tablet**: `(?:ipad|playbook|(?:android|bb\d+|meego|silk)(?! .+? mobile))` -* **Desktop**: Everything else not matched above. +- **Mobile**: `(?:phone|windows\s+phone|ipod|blackberry|(?:android|bb\d+|meego|silk|googlebot) .+? mobile|palm|windows\s+ce|opera mini|avantgo|mobilesafari|docomo|kaios)` +- **Tablet**: `(?:ipad|playbook|(?:android|bb\d+|meego|silk)(?! .+? mobile))` +- **Desktop**: Everything else not matched above. To enable caching by device type, enable the setting from the Cloudflare dashboard's APO card or from the WordPress plugin version 4.4.0 or later. @@ -22,10 +22,8 @@ Once enabled, Cloudflare sends a `CF-Device-Type` HTTP header to your origin wit :::note - Changing Cache By Device Type setting will invalidate Cache. - ::: The Cloudflare for WordPress plugin automatically purges all cache variations for updated pages. diff --git a/src/content/docs/automatic-platform-optimization/reference/index.mdx b/src/content/docs/automatic-platform-optimization/reference/index.mdx index d3e472301ede3ee..14a92784439d41f 100644 --- a/src/content/docs/automatic-platform-optimization/reference/index.mdx +++ b/src/content/docs/automatic-platform-optimization/reference/index.mdx @@ -6,9 +6,8 @@ products: - automatic-platform-optimization sidebar: order: 10 - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/automatic-platform-optimization/reference/page-rule-integration.mdx b/src/content/docs/automatic-platform-optimization/reference/page-rule-integration.mdx index 80a3a268e1f1395..c1f33213a954200 100644 --- a/src/content/docs/automatic-platform-optimization/reference/page-rule-integration.mdx +++ b/src/content/docs/automatic-platform-optimization/reference/page-rule-integration.mdx @@ -6,21 +6,20 @@ products: - automatic-platform-optimization sidebar: order: 12 - --- The following Page Rules can control APO. Any changes to caching via Page Rules require purging the cache for the changes to take effect. :::caution -Consider using [Cache Rules](/cache/how-to/cache-rules/) instead to control APO due to their enhanced configurability. +Consider using [Cache Rules](/cache/how-to/cache-rules/) instead to control APO due to their enhanced configurability. ::: -* **Cache Level: Bypass** — APO bypasses pages with response header `cf-apo-via: origin,page-rules` +- **Cache Level: Bypass** — APO bypasses pages with response header `cf-apo-via: origin,page-rules` -* **Cache Level: Ignore Query String** — APO ignores all query strings when serving from Cache. +- **Cache Level: Ignore Query String** — APO ignores all query strings when serving from Cache. -* **Cache Level: Cache Everything** — APO caches pages with all query strings. +- **Cache Level: Cache Everything** — APO caches pages with all query strings. :::caution @@ -28,10 +27,10 @@ Consider using [Cache Rules](/cache/how-to/cache-rules/) instead to control APO ::: -* **Bypass Cache on Cookie (Business and Enterprise plans only)** — APO applies custom bypass cookies in addition to the default list. +- **Bypass Cache on Cookie (Business and Enterprise plans only)** — APO applies custom bypass cookies in addition to the default list. -* **Edge Cache TTL** — APO applies custom Edge TTL instead of 30 days. This page rule is helpful for pages that can generate CAPTCHAs or nonces. +- **Edge Cache TTL** — APO applies custom Edge TTL instead of 30 days. This page rule is helpful for pages that can generate CAPTCHAs or nonces. -* **Browser Cache TTL** — APO applies custom Browser TTL. +- **Browser Cache TTL** — APO applies custom Browser TTL. -* `CDN-Cache-Control` and `Cloudflare-CDN-Cache-Control` – Enables users to have detailed control over cache TTLs without using a page rule. For more information on the `CDN-Cache-Control` and `Cloudflare-CDN-Cache-Control` headers, refer to [CDN-Cache-Control](/cache/concepts/cache-control/). +- `CDN-Cache-Control` and `Cloudflare-CDN-Cache-Control` – Enables users to have detailed control over cache TTLs without using a page rule. For more information on the `CDN-Cache-Control` and `Cloudflare-CDN-Cache-Control` headers, refer to [CDN-Cache-Control](/cache/concepts/cache-control/). diff --git a/src/content/docs/automatic-platform-optimization/reference/query-parameters.mdx b/src/content/docs/automatic-platform-optimization/reference/query-parameters.mdx index d49a44137e07c34..4c26f989a9835bb 100644 --- a/src/content/docs/automatic-platform-optimization/reference/query-parameters.mdx +++ b/src/content/docs/automatic-platform-optimization/reference/query-parameters.mdx @@ -16,46 +16,46 @@ To add a query parameter to our allowlist, [create a post in the community](http APO serves cached content as long as the query parameters in the URL are one of the following: -* `ref` -* `utm_source` -* `utm_medium` -* `utm_campaign` -* `utm_term` -* `utm_content` -* `utm_expid` -* `fbclid` -* `fb_action_ids` -* `fb_action_types` -* `fb_source` -* `mc_cid` -* `mc_eid` -* `gclid` -* `dclid` -* `_ga` -* `campaignid` -* `adgroupid` -* `_ke` -* `cn-reloaded` -* `age-verified` -* `ao_noptimize` -* `usqp` -* `mkt_tok` -* `epik` -* `ck_subscriber_id` +- `ref` +- `utm_source` +- `utm_medium` +- `utm_campaign` +- `utm_term` +- `utm_content` +- `utm_expid` +- `fbclid` +- `fb_action_ids` +- `fb_action_types` +- `fb_source` +- `mc_cid` +- `mc_eid` +- `gclid` +- `dclid` +- `_ga` +- `campaignid` +- `adgroupid` +- `_ke` +- `cn-reloaded` +- `age-verified` +- `ao_noptimize` +- `usqp` +- `mkt_tok` +- `epik` +- `ck_subscriber_id` ## Cookies prefixes that always bypass cache -* `wp-` -* `wordpress` -* `comment_` -* `woocommerce_` -* `xf_` -* `edd_` -* `jetpack` -* `yith_wcwl_session_` -* `yith_wrvp_` -* `wpsc_` -* `ecwid` -* `ec_` -* `bookly_` -* `bookly` +- `wp-` +- `wordpress` +- `comment_` +- `woocommerce_` +- `xf_` +- `edd_` +- `jetpack` +- `yith_wcwl_session_` +- `yith_wrvp_` +- `wpsc_` +- `ecwid` +- `ec_` +- `bookly_` +- `bookly` diff --git a/src/content/docs/automatic-platform-optimization/reference/subdomain-subdirectories.mdx b/src/content/docs/automatic-platform-optimization/reference/subdomain-subdirectories.mdx index c3ac27a754ccf4a..c14b25e62e38c9f 100644 --- a/src/content/docs/automatic-platform-optimization/reference/subdomain-subdirectories.mdx +++ b/src/content/docs/automatic-platform-optimization/reference/subdomain-subdirectories.mdx @@ -46,10 +46,10 @@ export default { const originalResponse = await fetch(request); // Response properties are immutable. To change them, construct a new Response object. - const response = new Response(originalResponse.body, originalResponse); + const response = new Response(originalResponse.body, originalResponse); - // Response headers can be modified through the headers `set` method. - response.headers.set("cf-edge-cache", "no-cache"); + // Response headers can be modified through the headers `set` method. + response.headers.set("cf-edge-cache", "no-cache"); return response; }, diff --git a/src/content/docs/automatic-platform-optimization/troubleshooting/index.mdx b/src/content/docs/automatic-platform-optimization/troubleshooting/index.mdx index 4f41ab6c0987264..f680125ba5c4689 100644 --- a/src/content/docs/automatic-platform-optimization/troubleshooting/index.mdx +++ b/src/content/docs/automatic-platform-optimization/troubleshooting/index.mdx @@ -6,28 +6,25 @@ products: - automatic-platform-optimization sidebar: order: 15 - --- ## WordPress plugin is undetected on Cloudflare dashboard The WordPress plugin may go undetected on your Cloudflare dashboard for a few reasons. -* Versions older than 3.8.2 of the WordPress plugin are installed. - * **Solution:** Install version 4.4.0 of the WordPress plugin. -* Version 3.8.2 of the plugin is installed but existing cache plugins return stale responses, for example, without `cf-edge-cache` header. - * **Solution:** Enable APO from the WordPress plugin and purge the cache in the existing cache plugins. -* WordPress only runs on a subdomain, but WordPress and the WordPress plugin check against the apex domain. - * **Solution:** For additional information, see [Subdomains and subdirectories](/automatic-platform-optimization/reference/subdomain-subdirectories/) +- Versions older than 3.8.2 of the WordPress plugin are installed. + - **Solution:** Install version 4.4.0 of the WordPress plugin. +- Version 3.8.2 of the plugin is installed but existing cache plugins return stale responses, for example, without `cf-edge-cache` header. + - **Solution:** Enable APO from the WordPress plugin and purge the cache in the existing cache plugins. +- WordPress only runs on a subdomain, but WordPress and the WordPress plugin check against the apex domain. + - **Solution:** For additional information, see [Subdomains and subdirectories](/automatic-platform-optimization/reference/subdomain-subdirectories/) If your Cloudflare dashboard cannot detect the WordPress plugin after trying the solutions above, ensure you completed all of the steps listed in [Activate the Cloudflare WordPress plugin](/automatic-platform-optimization/get-started/activate-cf-wp-plugin/). :::note - The Cloudflare APO WordPress plugin does not support multisite WordPress installation. - ::: ## WordPress returns stale content diff --git a/src/content/docs/billing/get-started/create-billing-profile.mdx b/src/content/docs/billing/get-started/create-billing-profile.mdx index db1ff0eccc710d9..278be4c84fffc13 100644 --- a/src/content/docs/billing/get-started/create-billing-profile.mdx +++ b/src/content/docs/billing/get-started/create-billing-profile.mdx @@ -20,7 +20,7 @@ Customers on an [Enterprise plan](https://www.cloudflare.com/plans/enterprise/co 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to the **Subscriptions** page and open the **Payment methods** panel. 3. Select **Add Payment Method**. If no payment method is on file, the dialog opens automatically. @@ -57,7 +57,7 @@ Optionally, add an additional payment method. Cloudflare automatically retries t 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to the **Subscriptions** page and open the **Payment methods** panel. 3. Select **Add Payment Method**. diff --git a/src/content/docs/billing/get-started/update-billing-info.mdx b/src/content/docs/billing/get-started/update-billing-info.mdx index 103bc694b8df894..14d3c82fae104fa 100644 --- a/src/content/docs/billing/get-started/update-billing-info.mdx +++ b/src/content/docs/billing/get-started/update-billing-info.mdx @@ -20,7 +20,7 @@ If Cloudflare is unable to process your payment, review [Troubleshooting failed 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to the **Subscriptions** page and open the **Payment methods** panel. 3. Select **Add Payment Method** to add a new method, or **Edit** next to an existing one. @@ -55,7 +55,7 @@ You cannot delete a payment method if a payment fails or if there is an outstand 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to the **Subscriptions** page and open the **Payment methods** panel. 3. Select **Delete** next to the payment method you want to remove. @@ -65,9 +65,9 @@ You cannot delete a payment method if a payment fails or if there is an outstand Two address fields exist on your account: -| Field | Where it is used | -| --- | --- | -| **Billing profile address** | Appears as **Bill to** on every invoice. Used for tax calculation and sanctions screening. | +| Field | Where it is used | +| ---------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| **Billing profile address** | Appears as **Bill to** on every invoice. Used for tax calculation and sanctions screening. | | **Payment method billing address** | Captured when you add a payment method. Used by the card issuer to authorize each charge. Does not appear on invoices. | Updating the billing profile address applies to invoices issued after the change. Past invoices keep the address that was on file when they were issued. Updating the billing profile address does not change the address stored on existing payment methods. @@ -76,7 +76,7 @@ To update the billing profile address: 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. From **Billing Address**, select **Edit** and enter your information. 3. Review the suggested address in the pop-up window. If the information is correct, select **Confirm**. @@ -91,7 +91,7 @@ Your billing email address is particularly important if you have [opted into ema 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to **Invoices and documents**. 3. From **Billing email preference**, select **Change email address**. @@ -101,13 +101,13 @@ Your billing email address is particularly important if you have [opted into ema If you added a payment method but did not include a Tax ID, VAT or GST number, you can add or change the Tax ID, VAT or GST number associated with the payment method afterwards. -:::note +:::note You cannot apply a VAT or GST number to past invoices. Adding a VAT or GST number will only apply to future invoices issued in the account. ::: 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. From **Billing Address**, select **Edit**. 3. In the **VAT/GST** field, enter your VAT or GST number. @@ -115,13 +115,13 @@ You cannot apply a VAT or GST number to past invoices. Adding a VAT or GST numbe ## Remove a Tax ID, VAT, or GST number -:::note +:::note You cannot remove a VAT or GST number from past invoices. Removing a VAT or GST number will only apply to future invoices issued in the account. ::: 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. From **Billing Address**, select **Edit**. 3. In the **VAT/GST** field, delete the VAT or GST number. diff --git a/src/content/docs/billing/manage/billable-usage.mdx b/src/content/docs/billing/manage/billable-usage.mdx index 936144271be0638..3136309de54ce9b 100644 --- a/src/content/docs/billing/manage/billable-usage.mdx +++ b/src/content/docs/billing/manage/billable-usage.mdx @@ -40,12 +40,12 @@ Hover over any bar to see the per-product cost breakdown for that day. Below the chart, a sortable table breaks down usage by product for the full billing period. -| Column | Description | -| --- | --- | -| **Product** | The Cloudflare product or service generating the usage charge. Products with a free tier show the included allowance (for example, "First 1M included"). | -| **Total usage** | Total metered usage for the billing period, including any free-tier allowance. | -| **Billable usage** | Usage that exceeds the free tier and will be charged. | -| **Usage cost** | Cumulative cost for the product in the selected billing period. | +| Column | Description | +| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Product** | The Cloudflare product or service generating the usage charge. Products with a free tier show the included allowance (for example, "First 1M included"). | +| **Total usage** | Total metered usage for the billing period, including any free-tier allowance. | +| **Billable usage** | Usage that exceeds the free tier and will be charged. | +| **Usage cost** | Cumulative cost for the product in the selected billing period. | Use the **product filter** at the top of the page to narrow the chart and table to specific products. @@ -62,8 +62,6 @@ The dashboard reads from the same data source that generates your monthly invoic - Costs reflect the published rate card for your account. - The total usage cost shown at the end of a completed billing period matches the usage overage charges on the corresponding invoice. - - ## Set up budget alerts To get notified when your spend crosses a dollar threshold, you can create budget alerts directly from the dashboard. For detailed instructions, refer to [Budget alerts](/billing/manage/budget-alerts/). @@ -73,4 +71,3 @@ To get notified when your spend crosses a dollar threshold, you can create budge - [Budget alerts](/billing/manage/budget-alerts/) — Get notified when spend crosses a threshold - [Usage-based billing](/billing/understand/usage-based-billing/) — Which products use metered billing - [How charges accrue](/billing/understand/how-charges-accrue/) — How a request generates charges across products - diff --git a/src/content/docs/billing/manage/budget-alerts.mdx b/src/content/docs/billing/manage/budget-alerts.mdx index 0fb4fdd9330e059..c5cf2ff7f15fc1c 100644 --- a/src/content/docs/billing/manage/budget-alerts.mdx +++ b/src/content/docs/billing/manage/budget-alerts.mdx @@ -28,12 +28,12 @@ Budget alerts are available to Pay-as-you-go accounts only. Enterprise contract 5. Select **Create budget alert**. 6. Configure the alert: - | Field | Description | - | --- | --- | - | **Alert name** | A descriptive name for the alert (for example, "R2 spend warning"). | - | **Description** | *(Optional)* A note about when this alert should fire. | + | Field | Description | + | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | **Alert name** | A descriptive name for the alert (for example, "R2 spend warning"). | + | **Description** | _(Optional)_ A note about when this alert should fire. | | **Budget threshold (USD)** | The dollar amount that triggers the alert. When your cumulative usage-based spend for the current billing period crosses this value, Cloudflare sends a notification. | - | **Email recipients** | One or more email addresses to notify. Select **Add email** to add additional recipients. | + | **Email recipients** | One or more email addresses to notify. Select **Add email** to add additional recipients. | 7. Select **Save**. @@ -54,12 +54,12 @@ From there you can edit or delete existing alerts. Cloudflare offers two types of spend monitoring: -| Feature | Budget alerts | Usage notifications | -| --- | --- | --- | -| **Scope** | Account-wide, all usage-based products combined | Per-product (for example, Argo bytes or Workers requests) | -| **Threshold** | Dollar amount | Product-specific metric (bytes, requests, minutes) | -| **Setup location** | **Billing** > **Billable Usage** | **Notifications** | -| **Best for** | Overall cost management | Monitoring a single product | +| Feature | Budget alerts | Usage notifications | +| ------------------ | ----------------------------------------------- | --------------------------------------------------------- | +| **Scope** | Account-wide, all usage-based products combined | Per-product (for example, Argo bytes or Workers requests) | +| **Threshold** | Dollar amount | Product-specific metric (bytes, requests, minutes) | +| **Setup location** | **Billing** > **Billable Usage** | **Notifications** | +| **Best for** | Overall cost management | Monitoring a single product | For per-product usage notifications, refer to [Usage-based billing](/billing/understand/usage-based-billing/#usage-based-billing-notifications). diff --git a/src/content/docs/billing/manage/cancel-subscription.mdx b/src/content/docs/billing/manage/cancel-subscription.mdx index c80dba8a8bcf6e3..5fdf55b5596082d 100644 --- a/src/content/docs/billing/manage/cancel-subscription.mdx +++ b/src/content/docs/billing/manage/cancel-subscription.mdx @@ -32,17 +32,17 @@ To disable a subscription: 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Select **Subscriptions**. 3. Select the feature you want to disable under **Active Subscriptions** (Free or Pro customers) or **Plan Extensions** (Enterprise customers). -4. Follow the instructions to disable the feature. Each feature has a different process which could include toggling a switch, clicking a button, or choosing *Disable* from a drop-down list. +4. Follow the instructions to disable the feature. Each feature has a different process which could include toggling a switch, clicking a button, or choosing _Disable_ from a drop-down list. ## Step 2: Cancel the subscription in your billing profile 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Select **Subscriptions**. 3. Find the subscription you want to disable and select **Cancel**. diff --git a/src/content/docs/billing/manage/invoices.mdx b/src/content/docs/billing/manage/invoices.mdx index ba940ef55e961bd..43d7879767a806f 100644 --- a/src/content/docs/billing/manage/invoices.mdx +++ b/src/content/docs/billing/manage/invoices.mdx @@ -12,10 +12,10 @@ import { DashButton } from "~/components"; You will receive an invoice in the **Billing** section of your Cloudflare account when you: -* Change your Cloudflare plan type. -* Upgrade or downgrade to or from a paid plan. -* Add a new domain to a Cloudflare account. -* Enable or renew a subscription or add-on service. +- Change your Cloudflare plan type. +- Upgrade or downgrade to or from a paid plan. +- Add a new domain to a Cloudflare account. +- Enable or renew a subscription or add-on service. For any historical invoices not included in the **Billing** section, [contact Cloudflare support](/support/contacting-cloudflare-support/). @@ -29,25 +29,25 @@ To enable Cloudflare invoice emails which are sent when you add or remove subscr 1. In the Cloudflare dashboard, go to the **Billing** page. - - -3. Select **Invoices & Documents**. -4. From **Billing email preferences**, toggle the notification switch to **On**. + + +2. Select **Invoices & Documents**. +3. From **Billing email preferences**, toggle the notification switch to **On**. After you enable email invoices, you will receive invoices via email: -* Within one business day of initial set-up. -* Every month at the end of your billing period. -* Within one business day for all new purchases. +- Within one business day of initial set-up. +- Every month at the end of your billing period. +- Within one business day for all new purchases. ## Download invoice 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Select **Invoices & Documents**. -4. Find the invoice you want to download and select the icon next to the invoice number. +3. Find the invoice you want to download and select the icon next to the invoice number. :::note Invoices cannot be regenerated after they are issued. Any pending billing updates or changes will appear in the next month's invoice. diff --git a/src/content/docs/billing/manage/optimize-costs.mdx b/src/content/docs/billing/manage/optimize-costs.mdx index 1ebb06ae5ce6d13..f4d34d4f201f6a3 100644 --- a/src/content/docs/billing/manage/optimize-costs.mdx +++ b/src/content/docs/billing/manage/optimize-costs.mdx @@ -10,10 +10,10 @@ Reducing usage-based charges starts with understanding where your consumption co ## General strategies -| Strategy | Impact | -|---|---| -| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes early | Prevents surprise invoices across all products | -| Review the [billable usage dashboard](/billing/manage/billable-usage/) weekly to identify cost trends | Catches runaway costs before the invoice arrives | +| Strategy | Impact | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | +| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes early | Prevents surprise invoices across all products | +| Review the [billable usage dashboard](/billing/manage/billable-usage/) weekly to identify cost trends | Catches runaway costs before the invoice arrives | | Understand [how charges accrue](/billing/understand/how-charges-accrue/) across the request lifecycle | Identifies which stage of a request generates the most cost | ## Per-product optimization @@ -22,42 +22,42 @@ Reducing usage-based charges starts with understanding where your consumption co Cached responses are the cheapest path through Cloudflare. Every cache hit avoids origin fetch costs, Argo routing charges, and Workers execution. -| Strategy | What it reduces | -|---|---| -| Increase cache hit ratio with longer TTLs and appropriate `Cache-Control` headers | Argo data transfer, Workers invocations, origin load | +| Strategy | What it reduces | +| --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| Increase cache hit ratio with longer TTLs and appropriate `Cache-Control` headers | Argo data transfer, Workers invocations, origin load | | Use [Cache Reserve](/cache/advanced-configuration/cache-reserve/) for long-tail content that is accessed infrequently | Origin fetches — keeps content cached even when it would normally be evicted | -| Use [tiered caching](/cache/how-to/tiered-cache/) to reduce origin pulls | Origin bandwidth and Argo transfer between Cloudflare data centers | -| Configure [cache rules](/cache/how-to/cache-rules/) to cache more static content by default | Overall cache hit ratio | +| Use [tiered caching](/cache/how-to/tiered-cache/) to reduce origin pulls | Origin bandwidth and Argo transfer between Cloudflare data centers | +| Configure [cache rules](/cache/how-to/cache-rules/) to cache more static content by default | Overall cache hit ratio | ### Workers & Durable Objects -| Strategy | What it reduces | -|---|---| -| Use [Workers Logs](/workers/observability/logs/workers-logs/) for log retention instead of Logpush | Logpush-enabled Workers requests and Logpush data transfer | +| Strategy | What it reduces | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- | +| Use [Workers Logs](/workers/observability/logs/workers-logs/) for log retention instead of Logpush | Logpush-enabled Workers requests and Logpush data transfer | | Use the [WebSocket Hibernation API](/durable-objects/best-practices/websockets/#durable-objects-hibernation-websocket-api) for Durable Objects with idle WebSocket connections | Duration (GB-s) charges — billing pauses while the Durable Object is hibernated | ### R2 -| Strategy | What it reduces | -|---|---| -| Use [R2 lifecycle rules](/r2/buckets/object-lifecycles/) to transition cold data to the Infrequent Access storage class | Storage costs for archival data | -| Batch R2 operations where possible instead of per-object reads | Class B operation count | -| Use [presigned URLs](/r2/api/s3/presigned-urls/) for direct client access instead of proxying through Workers | Workers invocations and CPU time | -| Enable [Cache-Control headers on R2 objects](/r2/buckets/public-buckets/) to leverage Cloudflare's CDN cache | Class B reads — cached objects do not hit R2 | +| Strategy | What it reduces | +| ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| Use [R2 lifecycle rules](/r2/buckets/object-lifecycles/) to transition cold data to the Infrequent Access storage class | Storage costs for archival data | +| Batch R2 operations where possible instead of per-object reads | Class B operation count | +| Use [presigned URLs](/r2/api/s3/presigned-urls/) for direct client access instead of proxying through Workers | Workers invocations and CPU time | +| Enable [Cache-Control headers on R2 objects](/r2/buckets/public-buckets/) to leverage Cloudflare's CDN cache | Class B reads — cached objects do not hit R2 | ### Stream and Images -| Strategy | What it reduces | -|---|---| -| Set appropriate cache headers on Stream embed pages | Repeated Stream delivery minutes | +| Strategy | What it reduces | +| ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | +| Set appropriate cache headers on Stream embed pages | Repeated Stream delivery minutes | | Use [Image Resizing URL format](/images/optimization/features/) with width/height parameters to serve appropriately sized variants | Transformation count — sized variants are cached | ### Load Balancing -| Strategy | What it reduces | -|---|---| +| Strategy | What it reduces | +| --------------------------------------------------------------------------------------------- | -------------------------------------- | | Set health check intervals to the longest acceptable value for your availability requirements | DNS queries to load-balanced hostnames | -| Use fewer health check regions where regional redundancy is not critical | Health check frequency multiplier | +| Use fewer health check regions where regional redundancy is not critical | Health check frequency multiplier | ## Monitor and alert diff --git a/src/content/docs/billing/manage/pay-invoices-overdue-balances.mdx b/src/content/docs/billing/manage/pay-invoices-overdue-balances.mdx index 2b082f37ba9f84f..e55450f95a43eb4 100644 --- a/src/content/docs/billing/manage/pay-invoices-overdue-balances.mdx +++ b/src/content/docs/billing/manage/pay-invoices-overdue-balances.mdx @@ -12,7 +12,6 @@ import { DashButton } from "~/components"; If automatic payment retries fail and you do not pay manually, your account accrues an overdue balance. While the balance is unpaid, you cannot purchase products, upgrade subscriptions, or update your billing profile. Attempts to do so return an error: - **"You cannot add or modify subscriptions or services until the outstanding balance is paid."** To pay, select **Pay Now** from the **Billing** page in the Cloudflare dashboard. You can pay the entire balance in one transaction or [pay individual invoices](#manually-pay-invoices) separately. @@ -23,7 +22,7 @@ When an outstanding balance is due, a new invoice will be created in your accoun 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Select **Invoices and documents**. 3. Select the most recent invoice - the amount shown should match your outstanding balance @@ -40,7 +39,7 @@ To pay the total outstanding balance: 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Go to the **Pay overdue balances** section. 3. Select **Pay now** next to the balance you want to pay. @@ -53,7 +52,7 @@ If an automatic subscription renewal payment fails, Cloudflare automatically ret 1. In the Cloudflare dashboard, go to the **Billing** page. - + 2. Select **Invoices and documents**. 3. Select **Pay now** next to the invoice you want to pay. diff --git a/src/content/docs/billing/payment-methods/instant-bank-payments-link.mdx b/src/content/docs/billing/payment-methods/instant-bank-payments-link.mdx index f4e3aa40ed248b0..181362bc0ffcd63 100644 --- a/src/content/docs/billing/payment-methods/instant-bank-payments-link.mdx +++ b/src/content/docs/billing/payment-methods/instant-bank-payments-link.mdx @@ -33,9 +33,9 @@ Instant Bank Payments via Link is available to US-based self-serve accounts acro Bank-based Link payments appear in your billing history with these identifiers: -| Field | Value | -| --- | --- | -| Payment method | `link` | +| Field | Value | +| ---------------- | ------ | +| Payment method | `link` | | Last four digits | `0000` | Card-based Link payments display your card's last four digits, distinguishing them from bank payments. diff --git a/src/content/docs/billing/threshold-billing.mdx b/src/content/docs/billing/threshold-billing.mdx index 0c72335ac0c6b0a..856ef82e55f97e7 100644 --- a/src/content/docs/billing/threshold-billing.mdx +++ b/src/content/docs/billing/threshold-billing.mdx @@ -27,11 +27,11 @@ You will never be double-charged. The threshold invoice and end-of-cycle invoice ### Example -| Event | Charge | -| --- | --- | -| Combined usage reaches threshold mid-cycle | Threshold invoice charged (for example, $127.50) | +| Event | Charge | +| ------------------------------------------- | -------------------------------------------------- | +| Combined usage reaches threshold mid-cycle | Threshold invoice charged (for example, $127.50) | | End of billing cycle (total usage was $180) | End-of-cycle invoice charged (for example, $52.50) | -| **Total charged** | **$180** | +| **Total charged** | **$180** | ## Products subject to threshold billing diff --git a/src/content/docs/billing/troubleshoot/error-reference.mdx b/src/content/docs/billing/troubleshoot/error-reference.mdx index e2fbd524b5852d0..ea345499f66f805 100644 --- a/src/content/docs/billing/troubleshoot/error-reference.mdx +++ b/src/content/docs/billing/troubleshoot/error-reference.mdx @@ -12,21 +12,21 @@ Use the table below to find common billing error messages, understand what they ## Error messages -| Error message | Cause | Solution | -|---|---|---| -| "You cannot add or modify subscriptions or services until the outstanding balance is paid." | Your account has an unpaid balance. | [Pay the outstanding balance](/billing/manage/pay-invoices-overdue-balances/). | -| "The payment has failed. Please contact your bank or use a different payment method." | Your payment method was declined by your bank. | Check your card details and bank balance, then retry. Refer to [Resolve a payment failure](/billing/troubleshoot/troubleshoot-failed-payments/). | -| "Payment error: authorization failed" | Your bank declined the transaction, or 3DS authentication was not completed. | Contact your bank and retry the payment. Refer to [Resolve a payment failure](/billing/troubleshoot/troubleshoot-failed-payments/). | -| "This zone cannot be upgraded" | The account or a previous owner of the domain has an outstanding balance. | Pay the balance on all accounts you have access to, wait 24 hours, then retry. Refer to [Resolve the zone cannot be upgraded error](/billing/troubleshoot/resolve-zone-cannot-be-upgraded/). | -| "There is a problem with your billing profile" | Same as "this zone cannot be upgraded" — an unpaid balance exists. | [Pay the outstanding balance](/billing/manage/pay-invoices-overdue-balances/) and wait 24 hours. | -| "You cannot modify this subscription since it is currently scheduled to be cancelled" | You are trying to change a subscription that already has a pending cancellation. | Cancel the pending downgrade first, then make your change. Refer to [Resolve "you cannot modify this subscription"](/billing/troubleshoot/resolve-you-cannot-modify-this-subscription/). | -| "You can't remove this payment method while it's linked to active subscriptions." | You are trying to delete a payment method that is still tied to paid services. | Cancel all paid subscriptions first, or add a replacement payment method. Refer to [Resolve "cannot remove payment method"](/billing/troubleshoot/resolve-cannot-remove-payment-method/). | -| "You can't remove a payment method while there are transactions in progress." | A usage-based charge is pending, or a Registrar renewal is scheduled within 24 hours. | Wait for pending transactions to complete, then retry. Refer to [Resolve "cannot remove payment method"](/billing/troubleshoot/resolve-cannot-remove-payment-method/). | +| Error message | Cause | Solution | +| ------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| "You cannot add or modify subscriptions or services until the outstanding balance is paid." | Your account has an unpaid balance. | [Pay the outstanding balance](/billing/manage/pay-invoices-overdue-balances/). | +| "The payment has failed. Please contact your bank or use a different payment method." | Your payment method was declined by your bank. | Check your card details and bank balance, then retry. Refer to [Resolve a payment failure](/billing/troubleshoot/troubleshoot-failed-payments/). | +| "Payment error: authorization failed" | Your bank declined the transaction, or 3DS authentication was not completed. | Contact your bank and retry the payment. Refer to [Resolve a payment failure](/billing/troubleshoot/troubleshoot-failed-payments/). | +| "This zone cannot be upgraded" | The account or a previous owner of the domain has an outstanding balance. | Pay the balance on all accounts you have access to, wait 24 hours, then retry. Refer to [Resolve the zone cannot be upgraded error](/billing/troubleshoot/resolve-zone-cannot-be-upgraded/). | +| "There is a problem with your billing profile" | Same as "this zone cannot be upgraded" — an unpaid balance exists. | [Pay the outstanding balance](/billing/manage/pay-invoices-overdue-balances/) and wait 24 hours. | +| "You cannot modify this subscription since it is currently scheduled to be cancelled" | You are trying to change a subscription that already has a pending cancellation. | Cancel the pending downgrade first, then make your change. Refer to [Resolve "you cannot modify this subscription"](/billing/troubleshoot/resolve-you-cannot-modify-this-subscription/). | +| "You can't remove this payment method while it's linked to active subscriptions." | You are trying to delete a payment method that is still tied to paid services. | Cancel all paid subscriptions first, or add a replacement payment method. Refer to [Resolve "cannot remove payment method"](/billing/troubleshoot/resolve-cannot-remove-payment-method/). | +| "You can't remove a payment method while there are transactions in progress." | A usage-based charge is pending, or a Registrar renewal is scheduled within 24 hours. | Wait for pending transactions to complete, then retry. Refer to [Resolve "cannot remove payment method"](/billing/troubleshoot/resolve-cannot-remove-payment-method/). | ## Email notifications -| Email subject | What it means | What to do | -|---|---|---| +| Email subject | What it means | What to do | +| ------------------------------------------ | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | "We couldn't process your renewal payment" | A recurring subscription charge failed. Cloudflare will retry up to 5 times over 5 days. | Update your payment method or manually pay the invoice before the grace period ends. Refer to [Resolve a payment failure](/billing/troubleshoot/troubleshoot-failed-payments/). | ## Still stuck? diff --git a/src/content/docs/billing/troubleshoot/resolve-cannot-remove-payment-method.mdx b/src/content/docs/billing/troubleshoot/resolve-cannot-remove-payment-method.mdx index 276892b5ec3390d..8cbc680da963f94 100644 --- a/src/content/docs/billing/troubleshoot/resolve-cannot-remove-payment-method.mdx +++ b/src/content/docs/billing/troubleshoot/resolve-cannot-remove-payment-method.mdx @@ -10,13 +10,14 @@ products: When attempting to remove a payment method, you may see one of the following error messages: -* "You can't remove this payment method while it's linked to active subscriptions. Go to Billing to manage subscriptions." -* "You can't remove a payment method while there are transactions in progress. Make sure all transactions are completed and all subscriptions are cancelled." +- "You can't remove this payment method while it's linked to active subscriptions. Go to Billing to manage subscriptions." +- "You can't remove a payment method while there are transactions in progress. Make sure all transactions are completed and all subscriptions are cancelled." ## Causes -* You still have active paid subscriptions -* You have cancelled your paid subscriptions, but a usage-based charge is still scheduled -* You have an upcoming Registrar domain registration renewal within the next 24 hours + +- You still have active paid subscriptions +- You have cancelled your paid subscriptions, but a usage-based charge is still scheduled +- You have an upcoming Registrar domain registration renewal within the next 24 hours ## Solutions @@ -36,19 +37,19 @@ Repeat this for all active paid subscriptions before attempting to remove the pa If you have cancelled all paid subscriptions, any usage-based products cancelled within the last 30 days may still generate charges. Your payment method must remain on file until those charges are processed. If you recently cancelled any of the following products, wait 30 days before removing your payment method: -* Images -* Stream -* Workers -* Argo -* Spectrum -* R2 -* Cache Reserve -* Load Balancing -* Rate Limiting -* Log Explorer -* Zero Trust -* Vectorize -* Analytics +- Images +- Stream +- Workers +- Argo +- Spectrum +- R2 +- Cache Reserve +- Load Balancing +- Rate Limiting +- Log Explorer +- Zero Trust +- Vectorize +- Analytics After the next monthly invoice is generated, you can remove the payment method. diff --git a/src/content/docs/billing/troubleshoot/resolve-you-cannot-modify-this-subscription.mdx b/src/content/docs/billing/troubleshoot/resolve-you-cannot-modify-this-subscription.mdx index b43d3e71c65fec6..eb388902186d5ac 100644 --- a/src/content/docs/billing/troubleshoot/resolve-you-cannot-modify-this-subscription.mdx +++ b/src/content/docs/billing/troubleshoot/resolve-you-cannot-modify-this-subscription.mdx @@ -10,16 +10,19 @@ products: When attempting to cancel or modify a subscription, you may see the following error message: -* "This subscription is scheduled to be cancelled at the end of the billing period. To make changes or purchase more, please click 'Cancel Downgrade' on the Subscriptions page." +- "This subscription is scheduled to be cancelled at the end of the billing period. To make changes or purchase more, please click 'Cancel Downgrade' on the Subscriptions page." ## Causes -* You are attempting to cancel a subscription which you have already requested cancellation for -* You are attempting to upgrade a subscription for which a cancellation is already scheduled + +- You are attempting to cancel a subscription which you have already requested cancellation for +- You are attempting to upgrade a subscription for which a cancellation is already scheduled ## Solutions + If you intended to cancel a subscription, the cancellation is already scheduled. Your subscription ends at the close of the current billing period. Refer to the section below to find the exact date. ### When will my subscription be cancelled? + After requesting cancellation, the subscriptions page shows the end date under "Ending On". 1. Log into the [Cloudflare dashboard](https://dash.cloudflare.com) and select your account. @@ -31,6 +34,7 @@ After requesting cancellation, the subscriptions page shows the end date under " If you previously cancelled the subscription and have changed your decision, you need to cancel the downgrade. ### Can I receive a refund for my cancelled subscription? + No refund will be issued for a cancelled subscription - instead, your subscription will remain active until the end of the current billing period. If you do not wish to pay for the coming billing period, then you should cancel your subscription no later than on the last day of the billing period. You can discover this date by visiting the **Subscriptions** page and checking the renew date, for example “RENEWS ON Aug 29, 2025”. @@ -55,4 +59,4 @@ If the cancellation hasn’t taken effect yet, you can click **Cancel Downgrade* - [Cancel subscriptions](/billing/manage/cancel-subscription/) — How cancellations work - [Billing policy](/billing/understand/billing-policy/) — Refund policy and billing terms -- [Error reference](/billing/troubleshoot/error-reference/) — Look up other billing error messages \ No newline at end of file +- [Error reference](/billing/troubleshoot/error-reference/) — Look up other billing error messages diff --git a/src/content/docs/billing/troubleshoot/troubleshoot-invoices.mdx b/src/content/docs/billing/troubleshoot/troubleshoot-invoices.mdx index aba89709e47d926..32e60e707eb83a6 100644 --- a/src/content/docs/billing/troubleshoot/troubleshoot-invoices.mdx +++ b/src/content/docs/billing/troubleshoot/troubleshoot-invoices.mdx @@ -34,4 +34,4 @@ You may have to wait up to one billing period for updates to appear in your Clou - [Invoices](/billing/manage/invoices/) — Download and manage invoices - [How Cloudflare billing works](/billing/understand/how-billing-works/) — How to read your invoice -- [Update billing information](/billing/get-started/update-billing-info/) — Change your billing email \ No newline at end of file +- [Update billing information](/billing/get-started/update-billing-info/) — Change your billing email diff --git a/src/content/docs/billing/understand/billing-permissions.mdx b/src/content/docs/billing/understand/billing-permissions.mdx index f0a656bc1f33ea6..90f8f01686d0a1a 100644 --- a/src/content/docs/billing/understand/billing-permissions.mdx +++ b/src/content/docs/billing/understand/billing-permissions.mdx @@ -10,19 +10,19 @@ Access to billing features in the Cloudflare dashboard depends on the role assig ## Roles and billing capabilities -| Action | Super Administrator | Administrator | Billing | -|---|---|---|---| -| View invoices and billing history | Yes | Yes | Yes | -| Download invoice PDFs | Yes | Yes | Yes | -| View billable usage dashboard | Yes | Yes | Yes | -| Pay an outstanding balance | Yes | No | Yes | -| Add or update payment methods | Yes | No | Yes | -| Change billing address | Yes | No | Yes | -| Change billing email | Yes | No | Yes | -| Set up budget alerts | Yes | Yes | Yes | -| Change or cancel subscriptions | Yes | Yes | No | -| Upgrade or downgrade a domain plan | Yes | Yes | No | -| Manage account members and roles | Yes | No | No | +| Action | Super Administrator | Administrator | Billing | +| ---------------------------------- | ------------------- | ------------- | ------- | +| View invoices and billing history | Yes | Yes | Yes | +| Download invoice PDFs | Yes | Yes | Yes | +| View billable usage dashboard | Yes | Yes | Yes | +| Pay an outstanding balance | Yes | No | Yes | +| Add or update payment methods | Yes | No | Yes | +| Change billing address | Yes | No | Yes | +| Change billing email | Yes | No | Yes | +| Set up budget alerts | Yes | Yes | Yes | +| Change or cancel subscriptions | Yes | Yes | No | +| Upgrade or downgrade a domain plan | Yes | Yes | No | +| Manage account members and roles | Yes | No | No | :::note The Billing role can view and pay but cannot change subscriptions or plans. To both manage subscriptions and handle payments, a user needs the Super Administrator role. diff --git a/src/content/docs/billing/understand/billing-policy.mdx b/src/content/docs/billing/understand/billing-policy.mdx index 14a33c5e72ce247..b980bae02a464c9 100644 --- a/src/content/docs/billing/understand/billing-policy.mdx +++ b/src/content/docs/billing/understand/billing-policy.mdx @@ -81,15 +81,15 @@ Enterprise account owners receive invoices directly from the Cloudflare accounti Cloudflare accepts the following payment methods: -* Visa -* Mastercard -* American Express -* Discover -* PayPal -* Apple Pay -* Google Pay -* Stripe Link -* UnionPay +- Visa +- Mastercard +- American Express +- Discover +- PayPal +- Apple Pay +- Google Pay +- Stripe Link +- UnionPay :::note Enterprise customers can use ACH payments for Cloudflare plans and subscriptions. diff --git a/src/content/docs/billing/understand/how-charges-accrue.mdx b/src/content/docs/billing/understand/how-charges-accrue.mdx index 44a3bbcf2906350..d13bbe22d007ff3 100644 --- a/src/content/docs/billing/understand/how-charges-accrue.mdx +++ b/src/content/docs/billing/understand/how-charges-accrue.mdx @@ -26,17 +26,17 @@ Consider a visitor loading a page on a Pro domain that uses Workers, R2, Argo Sm The visitor's browser resolves the domain. This DNS query is handled by Cloudflare's authoritative DNS. -| Resource | Billing impact | -|---|---| +| Resource | Billing impact | +| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | | DNS queries | Included in all plans at no extra charge. If you use Load Balancing, DNS queries to load-balanced hostnames are metered (first 500K included). | ### 2. Edge request and TLS The request arrives at the nearest Cloudflare data center. Cloudflare terminates TLS and processes the request. -| Resource | Billing impact | -|---|---| -| TLS/SSL | Included in all plans. Advanced Certificate Manager and SSL for SaaS have separate pricing. | +| Resource | Billing impact | +| -------- | ------------------------------------------------------------------------------------------- | +| TLS/SSL | Included in all plans. Advanced Certificate Manager and SSL for SaaS have separate pricing. | ### 3. Cache lookup @@ -44,9 +44,9 @@ Cloudflare checks whether a cached response exists for this request. **Cache hit** — the response is served directly from the edge. No origin fetch occurs. This is the cheapest path. -| Resource | Billing impact | -|---|---| -| Bandwidth | Included in all plans. Cloudflare does not charge for bandwidth. | +| Resource | Billing impact | +| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bandwidth | Included in all plans. Cloudflare does not charge for bandwidth. | | Cache Reserve reads | If Cache Reserve is enabled and the asset is served from tiered cache storage, reads are metered. Refer to [Cache Reserve pricing](/cache/advanced-configuration/cache-reserve/) for current rates. | **Cache miss** — the request must be forwarded to the origin. Continue to step 4. @@ -55,53 +55,53 @@ Cloudflare checks whether a cached response exists for this request. If Argo is enabled, Cloudflare routes the request through the fastest path across its network to your origin. -| Resource | Billing impact | -|---|---| +| Resource | Billing impact | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | Argo data transfer | Metered per GB transferred between Cloudflare and your origin. First 1 GB included. Refer to [Argo Smart Routing](/argo-smart-routing/) for current rates. | ### 5. Workers execution (if configured) If a Worker is bound to the route, it executes before or instead of fetching from the origin. -| Resource | Billing impact | -|---|---| -| Worker requests | Metered per invocation. Workers Paid plan includes 10 million requests. Refer to [Workers pricing](/workers/platform/pricing/) for current rates. | -| Worker CPU time | Metered per millisecond of CPU time. 30 million CPU-ms included. Refer to [Workers pricing](/workers/platform/pricing/) for current rates. | -| Workers KV reads/writes | If the Worker reads from or writes to KV, each operation is metered separately. Refer to [KV pricing](/kv/platform/pricing/) for current rates. | +| Resource | Billing impact | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| Worker requests | Metered per invocation. Workers Paid plan includes 10 million requests. Refer to [Workers pricing](/workers/platform/pricing/) for current rates. | +| Worker CPU time | Metered per millisecond of CPU time. 30 million CPU-ms included. Refer to [Workers pricing](/workers/platform/pricing/) for current rates. | +| Workers KV reads/writes | If the Worker reads from or writes to KV, each operation is metered separately. Refer to [KV pricing](/kv/platform/pricing/) for current rates. | ### 6. Origin fetch and response If the Worker or cache miss triggers an origin fetch, Cloudflare retrieves the response from your origin server. -| Resource | Billing impact | -|---|---| +| Resource | Billing impact | +| --------- | -------------------------------------------------------------------------------- | | Bandwidth | No charge for data transfer between Cloudflare and your origin (no egress fees). | ### 7. R2 storage operations (if used) If the Worker or origin logic reads from or writes to R2, each operation is metered. -| Resource | Billing impact | -|---|---| -| R2 Class A operations (writes) | First 1 million included. Refer to [R2 pricing](/r2/pricing/) for current rates. | -| R2 Class B operations (reads) | First 10 million included. Refer to [R2 pricing](/r2/pricing/) for current rates. | -| R2 storage | First 10 GB-month included. Refer to [R2 pricing](/r2/pricing/) for current rates. | -| R2 data egress | Free. Cloudflare does not charge for R2 egress. | +| Resource | Billing impact | +| ------------------------------ | ---------------------------------------------------------------------------------- | +| R2 Class A operations (writes) | First 1 million included. Refer to [R2 pricing](/r2/pricing/) for current rates. | +| R2 Class B operations (reads) | First 10 million included. Refer to [R2 pricing](/r2/pricing/) for current rates. | +| R2 storage | First 10 GB-month included. Refer to [R2 pricing](/r2/pricing/) for current rates. | +| R2 data egress | Free. Cloudflare does not charge for R2 egress. | ### 8. Cache write (miss path) After fetching from the origin, Cloudflare caches the response at the edge for future requests. -| Resource | Billing impact | -|---|---| +| Resource | Billing impact | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | Cache Reserve writes | If Cache Reserve is enabled, writes are metered. Refer to [Cache Reserve pricing](/cache/advanced-configuration/cache-reserve/) for current rates. | ### 9. Image Resizing (if configured) If the request triggers Image Resizing (via URL parameters or a Worker), the transformation is metered. -| Resource | Billing impact | -|---|---| +| Resource | Billing impact | +| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | | Image transformations | First 50,000 included on the Business plan, then metered per request. Refer to [Images pricing](/images/pricing/) for current rates. | ### 10. Response delivered @@ -116,15 +116,15 @@ The key takeaway: **cached responses are the cheapest path**. Every cache hit av ## Cost optimization strategies -| Strategy | Products affected | Impact | -|---|---|---| -| Maximize cache hit ratio with appropriate Cache-Control headers | Argo, Workers, origin bandwidth | High — every cache hit eliminates origin-side costs | -| Use Cache Reserve for long-tail content | Cache, origin | Medium — reduces origin fetches for infrequently accessed content | -| Set appropriate TTLs to avoid unnecessary revalidation | Cache, Argo | Medium — reduces origin round-trips | -| Use Workers Smart Placement to run Workers closer to your data | Workers CPU time | Medium — reduces execution time for data-dependent Workers | -| Use R2 lifecycle rules to move infrequently accessed data to Infrequent Access tier | R2 storage | Medium — reduces storage costs for archival data | -| Monitor usage with the [billable usage dashboard](/billing/manage/billable-usage/) | All usage-based products | High — visibility is the first step to optimization | -| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes | All usage-based products | High — prevents surprise invoices | +| Strategy | Products affected | Impact | +| ----------------------------------------------------------------------------------- | ------------------------------- | ----------------------------------------------------------------- | +| Maximize cache hit ratio with appropriate Cache-Control headers | Argo, Workers, origin bandwidth | High — every cache hit eliminates origin-side costs | +| Use Cache Reserve for long-tail content | Cache, origin | Medium — reduces origin fetches for infrequently accessed content | +| Set appropriate TTLs to avoid unnecessary revalidation | Cache, Argo | Medium — reduces origin round-trips | +| Use Workers Smart Placement to run Workers closer to your data | Workers CPU time | Medium — reduces execution time for data-dependent Workers | +| Use R2 lifecycle rules to move infrequently accessed data to Infrequent Access tier | R2 storage | Medium — reduces storage costs for archival data | +| Monitor usage with the [billable usage dashboard](/billing/manage/billable-usage/) | All usage-based products | High — visibility is the first step to optimization | +| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes | All usage-based products | High — prevents surprise invoices | ## Related resources diff --git a/src/content/docs/billing/understand/preview-services.mdx b/src/content/docs/billing/understand/preview-services.mdx index 0be6d9d6118dc30..4b7d658484684f6 100644 --- a/src/content/docs/billing/understand/preview-services.mdx +++ b/src/content/docs/billing/understand/preview-services.mdx @@ -29,7 +29,7 @@ To enable a preview service, use the **Dashboard link** in the following table. | Load Balancing | [Load Balancing dashboard](https://dash.cloudflare.com/?to=/:account/:zone/traffic/load-balancing) | [Load Balancing docs](/load-balancing/) | [Load Balancing community](https://community.cloudflare.com/tag/loadbalancing) | | Advanced Rate Limiting | [Rate Limiting dashboard](https://dash.cloudflare.com/?to=/:account/:zone/security/waf/rate-limiting-rules) | [Rate Limiting docs](/waf/rate-limiting-rules/) | [Rate Limiting community](https://community.cloudflare.com/c/security/6) | | Stream | [Stream dashboard](https://dash.cloudflare.com/?to=/:account/stream) | [Stream docs](/stream/) | [Stream community](https://community.cloudflare.com/tag/cloudflarestream) | -| Waiting Room | [Waiting Room dashboard](https://dash.cloudflare.com/?to=/:account/:zone/traffic/waiting-rooms) | [Waiting Room docs](/waiting-room/) | [Waiting Room community](https://community.cloudflare.com/) | +| Waiting Room | [Waiting Room dashboard](https://dash.cloudflare.com/?to=/:account/:zone/traffic/waiting-rooms) | [Waiting Room docs](/waiting-room/) | [Waiting Room community](https://community.cloudflare.com/) | | Web3 | [Web3 dashboard](https://dash.cloudflare.com/?to=/:account/:zone/web3) | [Web3 docs](/web3/) | [Web3 discord](https://discord.cloudflare.com) | | Workers | [Workers dashboard](https://dash.cloudflare.com/?to=/:account/workers) | [Workers docs](/workers/) | [Workers discord](https://discord.com/invite/cloudflaredev) | | Zero Trust | [Zero Trust dashboard](https://one.dash.cloudflare.com/) | [Zero Trust docs](/cloudflare-one/) | [Zero Trust community](https://community.cloudflare.com/c/security/access/51) | diff --git a/src/content/docs/billing/understand/usage-based-billing.mdx b/src/content/docs/billing/understand/usage-based-billing.mdx index 2e7cc4c49963e48..c3270b67c1b766d 100644 --- a/src/content/docs/billing/understand/usage-based-billing.mdx +++ b/src/content/docs/billing/understand/usage-based-billing.mdx @@ -24,29 +24,29 @@ The following products bill based on consumption. Each product includes a free t For current overage rates, refer to the [Cloudflare plans page](https://www.cloudflare.com/plans/) or each product's pricing page linked below. Rates may change — the links below are always up to date. -| Product | Billable metric | Free tier (included) | Pricing details | -|---|---|---|---| -| [Workers](/workers/platform/pricing/) | Requests, CPU time | 10M requests, 30M CPU-ms | [Workers pricing](/workers/platform/pricing/) | -| [R2](/r2/pricing/) | Storage, operations | 10 GB storage, 1M Class A, 10M Class B | [R2 pricing](/r2/pricing/) | -| [Argo Smart Routing](/argo-smart-routing/) | Data transfer (GB) | First 1 GB | [Argo pricing](/argo-smart-routing/) | -| [Cache Reserve](/cache/advanced-configuration/cache-reserve/) | Reads, writes, storage | None | [Cache Reserve pricing](/cache/advanced-configuration/cache-reserve/) | -| [Load Balancing](/load-balancing/) | DNS queries | First 500K | [Load Balancing](/load-balancing/) | -| [Stream](/stream/pricing/) | Minutes stored, minutes viewed | Varies by plan | [Stream pricing](/stream/pricing/) | -| [Images](/images/pricing/) | Transformations, storage | Varies by plan | [Images pricing](/images/pricing/) | -| [Spectrum](/spectrum/) | Data transfer (GB) | None | [Spectrum](/spectrum/) | +| Product | Billable metric | Free tier (included) | Pricing details | +| ------------------------------------------------------------- | ------------------------------ | -------------------------------------- | --------------------------------------------------------------------- | +| [Workers](/workers/platform/pricing/) | Requests, CPU time | 10M requests, 30M CPU-ms | [Workers pricing](/workers/platform/pricing/) | +| [R2](/r2/pricing/) | Storage, operations | 10 GB storage, 1M Class A, 10M Class B | [R2 pricing](/r2/pricing/) | +| [Argo Smart Routing](/argo-smart-routing/) | Data transfer (GB) | First 1 GB | [Argo pricing](/argo-smart-routing/) | +| [Cache Reserve](/cache/advanced-configuration/cache-reserve/) | Reads, writes, storage | None | [Cache Reserve pricing](/cache/advanced-configuration/cache-reserve/) | +| [Load Balancing](/load-balancing/) | DNS queries | First 500K | [Load Balancing](/load-balancing/) | +| [Stream](/stream/pricing/) | Minutes stored, minutes viewed | Varies by plan | [Stream pricing](/stream/pricing/) | +| [Images](/images/pricing/) | Transformations, storage | Varies by plan | [Images pricing](/images/pricing/) | +| [Spectrum](/spectrum/) | Data transfer (GB) | None | [Spectrum](/spectrum/) | ## Optimize usage-based costs Reducing usage-based charges starts with understanding where your consumption comes from. Use the [billable usage dashboard](/billing/manage/billable-usage/) to identify which products are driving costs, then apply the strategies below. -| Strategy | What it reduces | -|---|---| -| Increase cache hit ratio with longer TTLs and appropriate `Cache-Control` headers | Argo data transfer, Workers invocations, origin load | -| Use [Cache Reserve](/cache/advanced-configuration/cache-reserve/) for long-tail content | Origin fetches for infrequently accessed assets | -| Set up [R2 lifecycle rules](/r2/buckets/object-lifecycles/) to transition cold data to Infrequent Access | R2 storage costs | -| Use [Workers Smart Placement](/workers/configuration/placement/) for data-heavy Workers | Workers CPU time | -| Batch R2 operations where possible instead of per-object reads | R2 Class B operation count | -| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes early | All products — prevents surprise invoices | +| Strategy | What it reduces | +| -------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | +| Increase cache hit ratio with longer TTLs and appropriate `Cache-Control` headers | Argo data transfer, Workers invocations, origin load | +| Use [Cache Reserve](/cache/advanced-configuration/cache-reserve/) for long-tail content | Origin fetches for infrequently accessed assets | +| Set up [R2 lifecycle rules](/r2/buckets/object-lifecycles/) to transition cold data to Infrequent Access | R2 storage costs | +| Use [Workers Smart Placement](/workers/configuration/placement/) for data-heavy Workers | Workers CPU time | +| Batch R2 operations where possible instead of per-object reads | R2 Class B operation count | +| Set up [budget alerts](/billing/manage/budget-alerts/) to catch unexpected spikes early | All products — prevents surprise invoices | For a detailed walkthrough of how a single request generates charges across multiple products, refer to [How charges accrue](/billing/understand/how-charges-accrue/). diff --git a/src/content/docs/bots/account-abuse-protection.mdx b/src/content/docs/bots/account-abuse-protection.mdx index ddd1362d953258a..e54a667206310fc 100644 --- a/src/content/docs/bots/account-abuse-protection.mdx +++ b/src/content/docs/bots/account-abuse-protection.mdx @@ -12,16 +12,15 @@ sidebar: badge: text: Early Access variant: note - --- -import { Render, Description, DashButton, Steps } from "~/components" +import { Render, Description, DashButton, Steps } from "~/components"; -Identify and mitigate attacks on your customer and user accounts. + Identify and mitigate attacks on your customer and user accounts. -Account abuse — bulk account creation and account takeover attacks — can cause financial losses and erode user trust. Fraud detection allows you to detect and mitigate these attacks among your traffic. You can use fraud signals to [update or create new rules](/waf/custom-rules/) for suspicious account activity, or pass signals to your origin to integrate into authentication and authorization systems. +Account abuse — bulk account creation and account takeover attacks — can cause financial losses and erode user trust. Fraud detection allows you to detect and mitigate these attacks among your traffic. You can use fraud signals to [update or create new rules](/waf/custom-rules/) for suspicious account activity, or pass signals to your origin to integrate into authentication and authorization systems. ## Availability @@ -38,15 +37,15 @@ Contact your Cloudflare account team to request access. User ID is a cryptographically hashed, per-zone identifier that customers can use in [Security Analytics](/waf/analytics/security-analytics/), [Security Rules](/waf/custom-rules/), and [Managed Transforms](/rules/transform/managed-transforms/reference/). Hashed User IDs are created by encrypting the primary credentials your users provide, converting them into opaque identifiers unique to your zone. This allows traffic analysis while protecting user privacy. With access to hashed User ID, website owners can: - Review which users have the most activity on your website. -- Find the details on a specific user's characteristics and activity patterns. -- Mitigate traffic based on the user, such as blocking a user with historically suspicious activity. -- Combine fields to see when accounts are being targeted with leaked credentials. +- Find the details on a specific user's characteristics and activity patterns. +- Mitigate traffic based on the user, such as blocking a user with historically suspicious activity. +- Combine fields to see when accounts are being targeted with leaked credentials. - Manage network patterns or signals associated with specific users. :::note[Data privacy] -User profiling was created with privacy in mind. Its design and engineering align with our privacy and compliance programs and contain technical controls that protect the privacy of users. Hashed User IDs are created by encrypting the primary credentials your users use to access your applications. +User profiling was created with privacy in mind. Its design and engineering align with our privacy and compliance programs and contain technical controls that protect the privacy of users. Hashed User IDs are created by encrypting the primary credentials your users use to access your applications. -Other Cloudflare customers cannot access your user profiles. They are unique to your zone. +Other Cloudflare customers cannot access your user profiles. They are unique to your zone. ::: User ID is an opt-in feature that can be enabled in Security Settings. @@ -65,13 +64,13 @@ To enable, edit, or disable the setting: ### Ephemeral IDs -Customers using Cloudflare [Turnstile](/turnstile/) can utilize ephemeral IDs for Fraud detection. +Customers using Cloudflare [Turnstile](/turnstile/) can utilize ephemeral IDs for Fraud detection. Refer to [Fraud detection with ephemeral IDs](/turnstile/tutorials/fraud-detection-with-ephemeral-ids/) for more information. ### Account takeover detections -Cloudflare Bot Management includes dedicated detection IDs for account takeover attacks. +Cloudflare Bot Management includes dedicated detection IDs for account takeover attacks. Refer to [Account takeover detections](/bots/additional-configurations/detection-ids/account-takeover-detections/) for more information. @@ -85,25 +84,25 @@ Account takeover (ATO) detections are not available for accounts using the [Data ### Prerequisites -Fraud detection requires the following configurations and settings to be enabled to properly identify suspicious behavior. +Fraud detection requires the following configurations and settings to be enabled to properly identify suspicious behavior. #### Security Settings -- User ID: Cloudflare encrypts or hashes your user IDs to better understand typical user traffic patterns across your applications. Enabling Cloudflare to create hashed user ID mappings to your users will allow you to receive account takeover and bulk account creation detections. +- User ID: Cloudflare encrypts or hashes your user IDs to better understand typical user traffic patterns across your applications. Enabling Cloudflare to create hashed user ID mappings to your users will allow you to receive account takeover and bulk account creation detections. -#### Eligible traffic +#### Eligible traffic -Cloudflare automatically identifies certain login and sign up traffic on your applications and runs these detections without any additional configurations. +Cloudflare automatically identifies certain login and sign up traffic on your applications and runs these detections without any additional configurations. - Sign-ups: Cloudflare automatically monitors traffic on endpoints that match common sign up endpoints. - Login: Cloudflare automatically monitors traffic on endpoints that match common login endpoints. Verify that your endpoints are properly labeled to ensure Cloudflare can detect and monitor them correctly. - :::tip[Enhanced with leaked credential detections] @@ -114,43 +113,43 @@ Cloudflare also recommends enabling [Leaked credentials detection](/waf/detectio ### Detections -Fraud detections focus on account abuse attacks such as account takeover, bulk account creation, and credential quality. These detections run on all eligible traffic and can be used across [Cloudflare Rules](/rules/) to log, challenge, and/or block requests to your sign up and login endpoints. +Fraud detections focus on account abuse attacks such as account takeover, bulk account creation, and credential quality. These detections run on all eligible traffic and can be used across [Cloudflare Rules](/rules/) to log, challenge, and/or block requests to your sign up and login endpoints. #### Account creation -Disposable Email Checks detect when users sign up with throwaway email addresses commonly used for promotion abuse and fake account creation. These disposable email services allow attackers to create thousands of unique accounts without maintaining real infrastructure. +Disposable Email Checks detect when users sign up with throwaway email addresses commonly used for promotion abuse and fake account creation. These disposable email services allow attackers to create thousands of unique accounts without maintaining real infrastructure. -You can use the following binary field as you build rules to enforce security preferences, choosing to block all disposable emails outright, or issue a [challenge](/cloudflare-challenges/challenge-types/) to anyone attempting to create an account with a disposable email. +You can use the following binary field as you build rules to enforce security preferences, choosing to block all disposable emails outright, or issue a [challenge](/cloudflare-challenges/challenge-types/) to anyone attempting to create an account with a disposable email. #### Suspicious emails -Cloudflare analyzes the components of an email used during sign up to help identify suspicious patterns. Refer to [prerequisites](#prerequisites) to ensure your traffic is eligible for detections. +Cloudflare analyzes the components of an email used during sign up to help identify suspicious patterns. Refer to [prerequisites](#prerequisites) to ensure your traffic is eligible for detections. -Cloudflare does not store email addresses during this analysis. All detections processed without any storage or caching. +Cloudflare does not store email addresses during this analysis. All detections processed without any storage or caching. -| Detection tag | Description | -| --- | --- | -| `cf.fraud_detection.disposable_email` | Identifies emails with domains that are commonly found in lists of temporary or disposable email services. | -| `cf.fraud.email_risk` | Analyzes the randomness (entropy) of characters in an email username and top level domain. For example, `a8xk2m9p@example.com` has high entropy (very random characters), while `john.smith@example.com` has low entropy (recognizable pattern).
High risk emails indicate high entropy, while medium and low risk emails indicate less randomness in the string of characters. | +| Detection tag | Description | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `cf.fraud_detection.disposable_email` | Identifies emails with domains that are commonly found in lists of temporary or disposable email services. | +| `cf.fraud.email_risk` | Analyzes the randomness (entropy) of characters in an email username and top level domain. For example, `a8xk2m9p@example.com` has high entropy (very random characters), while `john.smith@example.com` has low entropy (recognizable pattern).
High risk emails indicate high entropy, while medium and low risk emails indicate less randomness in the string of characters. | ---- +--- ### Mitigations -The following Fraud detection fields can be used in Security Rules to help identify and mitigate suspicious traffic. +The following Fraud detection fields can be used in Security Rules to help identify and mitigate suspicious traffic. #### Security Rules The following fields can be used in new and existing Security Rules. -| Field | Description | Values | -| --- | --- | --- | -| `cf.fraud_detection.disposable_domain` | Flags whether a domain for a given email is included in a known list of temporary email providers. | `True` or `False` | -| `cf.fraud.email_risk` | Measures risk of email based on randomness of characters in the username and domain. | `Low` represents low risk due to reduced randomness and simple emails.
`Medium` represents medium risk based on larger strings with slightly more randomness.
`High` represents high risk based on larger and random character strings.
`Unknown` | +| Field | Description | Values | +| -------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `cf.fraud_detection.disposable_domain` | Flags whether a domain for a given email is included in a known list of temporary email providers. | `True` or `False` | +| `cf.fraud.email_risk` | Measures risk of email based on randomness of characters in the username and domain. | `Low` represents low risk due to reduced randomness and simple emails.
`Medium` represents medium risk based on larger strings with slightly more randomness.
`High` represents high risk based on larger and random character strings.
`Unknown` | #### Other rules -You can use Fraud detection data in Request Header [Transform Rules](/rules/transform/managed-transforms/) to pass information down to the origin. +You can use Fraud detection data in Request Header [Transform Rules](/rules/transform/managed-transforms/) to pass information down to the origin. #### LogPush @@ -160,12 +159,12 @@ You can add Fraud detection fields to existing or new [LogPush](/logs/logpush/) ## Analytics -You can find Fraud data and detections in Security Analytics, where you can see top User IDs. +You can find Fraud data and detections in Security Analytics, where you can see top User IDs. -Fraud fields can be used as filters to identify suspicious patterns in your traffic. +Fraud fields can be used as filters to identify suspicious patterns in your traffic. -The hashed User ID field within Security Analytics also provides Fraud customers with data that can help review detections and patterns per individual users rather than requests. You can review user level aggregations for IPs and IP counts, event types (login or sign up), locations, devices, and browsers. +The hashed User ID field within Security Analytics also provides Fraud customers with data that can help review detections and patterns per individual users rather than requests. You can review user level aggregations for IPs and IP counts, event types (login or sign up), locations, devices, and browsers. A user level profile also provides a quick way to review the latest events associated with a user so that you can identify any anomalies and create a custom rule to log, block, or challenge that user. diff --git a/src/content/docs/bots/additional-configurations/block-ai-bots.mdx b/src/content/docs/bots/additional-configurations/block-ai-bots.mdx index 61260abf06b336f..b666e3479ba08d7 100644 --- a/src/content/docs/bots/additional-configurations/block-ai-bots.mdx +++ b/src/content/docs/bots/additional-configurations/block-ai-bots.mdx @@ -12,7 +12,7 @@ sidebar: label: Block AI Bots --- -import { Render, Steps, DashButton } from "~/components" +import { Render, Steps, DashButton } from "~/components"; :::note[Block AI bots availability] The **Block AI bots** feature is only available in the new [application security dashboard](/security/). @@ -35,4 +35,4 @@ To block [AI bots](/bots/concepts/bot/#ai-bots): 5. Select **Save** to save your configuration. -To block individual AI crawlers (rather than blocking all crawlers), use [AI Crawl Control](/ai-crawl-control/). \ No newline at end of file +To block individual AI crawlers (rather than blocking all crawlers), use [AI Crawl Control](/ai-crawl-control/). diff --git a/src/content/docs/bots/additional-configurations/custom-rules.mdx b/src/content/docs/bots/additional-configurations/custom-rules.mdx index 287bace657d036c..fca74fa82b41d73 100644 --- a/src/content/docs/bots/additional-configurations/custom-rules.mdx +++ b/src/content/docs/bots/additional-configurations/custom-rules.mdx @@ -16,17 +16,17 @@ Bot protection on Cloudflare works through two complementary mechanisms: built-i The following features are configured through toggles and dropdowns in [Security Settings](/security/settings/). They do not require you to write any rule expressions. -| Feature | What it does | Availability | -| --- | --- | --- | -| [Block AI bots](/bots/additional-configurations/block-ai-bots/) | Blocks AI crawlers (GPTBot, ClaudeBot, Bytespider, and others) using an auto-updating managed rule | All plans | -| [AI Labyrinth](/bots/additional-configurations/ai-labyrinth/) | Feeds non-compliant AI crawlers into a maze of generated content | All plans | -| [Managed robots.txt](/bots/additional-configurations/managed-robots-txt/) | Prepends AI crawler disallow directives to your `robots.txt` | All plans | -| Super Bot Fight Mode > **Definitely automated** | Blocks or challenges traffic with a [bot score](/bots/concepts/bot-score/) of 1 | Pro, Business, Enterprise | -| Super Bot Fight Mode > **Likely automated** | Blocks or challenges traffic with a bot score of 2-29 | Business, Enterprise | -| [Verified bots](/bots/concepts/bot/verified-bots/) | Managed category of high-trust bots (Googlebot, Bingbot, and others) | Pro, Business, Enterprise | -| [Static resource protection](/bots/additional-configurations/static-resources/) | Extends bot actions to cover static file types | Pro, Business, Enterprise | -| [Optimize for WordPress](/bots/troubleshooting/wordpress-loopback-issue/) | Allows WordPress loopback requests through bot protection | Pro, Business, Enterprise | -| [JavaScript detections](/cloudflare-challenges/challenge-types/javascript-detections/) | Injects a lightweight script to identify clients that cannot execute JavaScript | All plans (automatic on Free) | +| Feature | What it does | Availability | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ----------------------------- | +| [Block AI bots](/bots/additional-configurations/block-ai-bots/) | Blocks AI crawlers (GPTBot, ClaudeBot, Bytespider, and others) using an auto-updating managed rule | All plans | +| [AI Labyrinth](/bots/additional-configurations/ai-labyrinth/) | Feeds non-compliant AI crawlers into a maze of generated content | All plans | +| [Managed robots.txt](/bots/additional-configurations/managed-robots-txt/) | Prepends AI crawler disallow directives to your `robots.txt` | All plans | +| Super Bot Fight Mode > **Definitely automated** | Blocks or challenges traffic with a [bot score](/bots/concepts/bot-score/) of 1 | Pro, Business, Enterprise | +| Super Bot Fight Mode > **Likely automated** | Blocks or challenges traffic with a bot score of 2-29 | Business, Enterprise | +| [Verified bots](/bots/concepts/bot/verified-bots/) | Managed category of high-trust bots (Googlebot, Bingbot, and others) | Pro, Business, Enterprise | +| [Static resource protection](/bots/additional-configurations/static-resources/) | Extends bot actions to cover static file types | Pro, Business, Enterprise | +| [Optimize for WordPress](/bots/troubleshooting/wordpress-loopback-issue/) | Allows WordPress loopback requests through bot protection | Pro, Business, Enterprise | +| [JavaScript detections](/cloudflare-challenges/challenge-types/javascript-detections/) | Injects a lightweight script to identify clients that cannot execute JavaScript | All plans (automatic on Free) | Bot settings update automatically as Cloudflare identifies new bot signatures and AI crawlers, while custom rules require manual updates. They do not count toward your [custom rule limits](/waf/custom-rules/#availability), and apply uniformly across your domain without the risk of expression errors. diff --git a/src/content/docs/bots/additional-configurations/detection-ids/additional-detections.mdx b/src/content/docs/bots/additional-configurations/detection-ids/additional-detections.mdx index ce92bacfafafb92..d36b1802e907d09 100644 --- a/src/content/docs/bots/additional-configurations/detection-ids/additional-detections.mdx +++ b/src/content/docs/bots/additional-configurations/detection-ids/additional-detections.mdx @@ -12,7 +12,6 @@ Cloudflare bot detection includes additional signals to catch different kinds of Bot management customers automatically benefit from the residential proxy detection improvement below, which lowers the [bot score](/bots/concepts/bot-score/) for matched requests. Using the detection ID in [custom rules](/waf/custom-rules/) provides even more visibility and control over mitigating residential proxy traffic. - -|
Detection ID
| Description | -| ------------------------------------------ | ---------------------------------------- | -| `50331651` | Observes traffic from residential proxy networks and similar commercial proxies.

When the ID matches a request, Bot Management sets the bot score to 29 and uses [anomaly detection](/bots/concepts/bot-detection-engines/#anomaly-detection-enterprise) as its score source. | +|
Detection ID
| Description | +| ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `50331651` | Observes traffic from residential proxy networks and similar commercial proxies.

When the ID matches a request, Bot Management sets the bot score to 29 and uses [anomaly detection](/bots/concepts/bot-detection-engines/#anomaly-detection-enterprise) as its score source. | diff --git a/src/content/docs/bots/additional-configurations/index.mdx b/src/content/docs/bots/additional-configurations/index.mdx index 0768d508f998fd1..bc876caf734e5e0 100644 --- a/src/content/docs/bots/additional-configurations/index.mdx +++ b/src/content/docs/bots/additional-configurations/index.mdx @@ -11,11 +11,10 @@ sidebar: head: - tag: title content: Additional Bots configurations - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on additional bot management configurations: - \ No newline at end of file + diff --git a/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/index.mdx b/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/index.mdx index b575e485e4d47b1..f8af19b5b7de7b0 100644 --- a/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/index.mdx +++ b/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/index.mdx @@ -6,10 +6,9 @@ products: - bots sidebar: order: 1 - --- -import { Render } from "~/components" +import { Render } from "~/components"; [**JA3**](https://github.com/salesforce/ja3) and [**JA4**](https://github.com/FoxIO-LLC/ja4) **fingerprints** identify TLS clients based on how they initiate connections. Each client type (browser, bot, or application) has distinct connection characteristics, so the resulting fingerprint acts as a stable identifier across different destination IPs, ports, and certificates. @@ -17,64 +16,62 @@ JA4 improves on JA3 by sorting ClientHello extensions, which reduces the number :::note -JA3 and JA4 fingerprints are only available to Enterprise customers who have purchased Bot Management. +JA3 and JA4 fingerprints are only available to Enterprise customers who have purchased Bot Management. ::: ```json - { - "ja4Signals": { - "h2h3_ratio_1h": 0.98826485872269, - "heuristic_ratio_1h": 7.288895722013e-05, - "reqs_quantile_1h": 0.99905741214752, - "uas_rank_1h": 901, - "browser_ratio_1h": 0.93640440702438, - "paths_rank_1h": 655, - "reqs_rank_1h": 850, - "cache_ratio_1h": 0.18918327987194, - "ips_rank_1h": 662, - "ips_quantile_1h": 0.99926590919495 - }, - "jaSignalsParsed": { - "ratios": { - "h2h3_ratio_1h": 0.98826485872269, - "heuristic_ratio_1h": 7.288895722013e-05, - "browser_ratio_1h": 0.93640440702438, - "cache_ratio_1h": 0.18918327987194 - }, - "ranks": { - "uas_rank_1h": 901, - "paths_rank_1h": 655, - "reqs_rank_1h": 850, - "ips_rank_1h": 662 - }, - "quantiles": { - "reqs_quantile_1h": 0.99905741214752, - "ips_quantile_1h": 0.99926590919495 - } - } + "ja4Signals": { + "h2h3_ratio_1h": 0.98826485872269, + "heuristic_ratio_1h": 7.288895722013e-5, + "reqs_quantile_1h": 0.99905741214752, + "uas_rank_1h": 901, + "browser_ratio_1h": 0.93640440702438, + "paths_rank_1h": 655, + "reqs_rank_1h": 850, + "cache_ratio_1h": 0.18918327987194, + "ips_rank_1h": 662, + "ips_quantile_1h": 0.99926590919495 + }, + "jaSignalsParsed": { + "ratios": { + "h2h3_ratio_1h": 0.98826485872269, + "heuristic_ratio_1h": 7.288895722013e-5, + "browser_ratio_1h": 0.93640440702438, + "cache_ratio_1h": 0.18918327987194 + }, + "ranks": { + "uas_rank_1h": 901, + "paths_rank_1h": 655, + "reqs_rank_1h": 850, + "ips_rank_1h": 662 + }, + "quantiles": { + "reqs_quantile_1h": 0.99905741214752, + "ips_quantile_1h": 0.99926590919495 + } + } } - ``` When JA4 Signals are missing, the output appears as follows: ```json output title="Missing JA4 signals output" { - "ja4Signals": {}, - "jaSignalsParsed": { - "ratios": {}, - "ranks": {}, - "quantiles": {} - } + "ja4Signals": {}, + "jaSignalsParsed": { + "ratios": {}, + "ranks": {}, + "quantiles": {} + } } ``` :::note -This sample was generated using [Workers' Cloudflare Object script](/workers/examples/accessing-the-cloudflare-object/). +This sample was generated using [Workers' Cloudflare Object script](/workers/examples/accessing-the-cloudflare-object/). ::: diff --git a/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/signals-intelligence.mdx b/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/signals-intelligence.mdx index 2a86d9d70cbc989..23baf713cc11a7c 100644 --- a/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/signals-intelligence.mdx +++ b/src/content/docs/bots/additional-configurations/ja3-ja4-fingerprint/signals-intelligence.mdx @@ -8,7 +8,7 @@ sidebar: order: 1 --- -import { Render } from "~/components" +import { Render } from "~/components"; Bot Management customers can view aggregate intelligence data for each [JA4 fingerprint](/bots/additional-configurations/ja3-ja4-fingerprint/) based on traffic across the Cloudflare network. Use this data to understand why a request received a specific bot score or to feed into your own machine learning models running in [Cloudflare Workers](/workers/) or at your origin. diff --git a/src/content/docs/bots/additional-configurations/javascript-detections.mdx b/src/content/docs/bots/additional-configurations/javascript-detections.mdx index 69e80bc8893eef4..e3c29b9383911ff 100644 --- a/src/content/docs/bots/additional-configurations/javascript-detections.mdx +++ b/src/content/docs/bots/additional-configurations/javascript-detections.mdx @@ -7,4 +7,4 @@ products: external_link: /cloudflare-challenges/challenge-types/javascript-detections/ sidebar: order: 3 ---- \ No newline at end of file +--- diff --git a/src/content/docs/bots/concepts/bot-tags.mdx b/src/content/docs/bots/concepts/bot-tags.mdx index ce7772981cc0afe..f498c1ebd7862df 100644 --- a/src/content/docs/bots/concepts/bot-tags.mdx +++ b/src/content/docs/bots/concepts/bot-tags.mdx @@ -6,10 +6,9 @@ products: - bots sidebar: order: 3 - --- -import { Render, GlossaryTooltip } from "~/components" +import { Render, GlossaryTooltip } from "~/components"; Bot tags provide more detail about *why* Cloudflare assigned a bot score to a request. diff --git a/src/content/docs/bots/concepts/bot/index.mdx b/src/content/docs/bots/concepts/bot/index.mdx index 79b102ed14105a3..8135d2506798f9c 100644 --- a/src/content/docs/bots/concepts/bot/index.mdx +++ b/src/content/docs/bots/concepts/bot/index.mdx @@ -29,7 +29,7 @@ For more background, refer to [What is a bot?](https://www.cloudflare.com/learni :::note -The method for allowing or blocking verified bots depends on [your plan](/bots/concepts/bot/verified-bots/#availability). +The method for allowing or blocking verified bots depends on [your plan](/bots/concepts/bot/verified-bots/#availability). ::: ## AI bots diff --git a/src/content/docs/bots/concepts/bot/signed-agents/index.mdx b/src/content/docs/bots/concepts/bot/signed-agents/index.mdx index 79b4ca637337d88..51b8af2d0e34705 100644 --- a/src/content/docs/bots/concepts/bot/signed-agents/index.mdx +++ b/src/content/docs/bots/concepts/bot/signed-agents/index.mdx @@ -9,7 +9,6 @@ sidebar: learning_center: title: What is a bot? link: https://www.cloudflare.com/learning/bots/what-is-a-bot/ - --- A signed agent is a bot controlled by an end user and verified through [Web Bot Auth](/bots/reference/bot-verification/web-bot-auth/) cryptographic signatures. @@ -33,4 +32,4 @@ Once Cloudflare approves a signed agent, it should appear on [Cloudflare Radar's ## Verification method -The bot must be verified using [Web Bot Auth](/bots/reference/bot-verification/web-bot-auth/). \ No newline at end of file +The bot must be verified using [Web Bot Auth](/bots/reference/bot-verification/web-bot-auth/). diff --git a/src/content/docs/bots/concepts/bot/signed-agents/policy.mdx b/src/content/docs/bots/concepts/bot/signed-agents/policy.mdx index 4b3a2e13bca22e5..7012c9a37f3a779 100644 --- a/src/content/docs/bots/concepts/bot/signed-agents/policy.mdx +++ b/src/content/docs/bots/concepts/bot/signed-agents/policy.mdx @@ -5,9 +5,8 @@ description: Requirements an agent must meet to be listed as a Cloudflare signed products: - bots sidebar: - order: 3 - label: Policy - + order: 3 + label: Policy --- In order to be listed by Cloudflare as a signed agent, your agent must conform to the below requirements. To provide the best possible protection to our customers, this policy may change in the future as we adapt to new bot behaviors. @@ -64,4 +63,4 @@ If any of the requirements to validate are breached, a service will be removed f The following are examples of breaches of policy: - The service has vulnerabilities that have not been patched. -- The disclosed purpose of the service does not reflect on the traffic. \ No newline at end of file +- The disclosed purpose of the service does not reflect on the traffic. diff --git a/src/content/docs/bots/concepts/bot/verified-bots/policy.mdx b/src/content/docs/bots/concepts/bot/verified-bots/policy.mdx index 0a353f6982931b7..35f535378a55bd9 100644 --- a/src/content/docs/bots/concepts/bot/verified-bots/policy.mdx +++ b/src/content/docs/bots/concepts/bot/verified-bots/policy.mdx @@ -5,12 +5,11 @@ description: Requirements a bot must meet to be listed as a Cloudflare verified products: - bots sidebar: - order: 5 - label: Policy - + order: 5 + label: Policy --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; In order to be listed by Cloudflare as a verified bot, your bot must conform to the below requirements. To provide the best possible protection to our customers, this policy may change in the future as we adapt to new bot behaviors. diff --git a/src/content/docs/bots/concepts/index.mdx b/src/content/docs/bots/concepts/index.mdx index 24071d2b6d12abd..6c7d7f72e402af2 100644 --- a/src/content/docs/bots/concepts/index.mdx +++ b/src/content/docs/bots/concepts/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on bot concepts: diff --git a/src/content/docs/bots/get-started/index.mdx b/src/content/docs/bots/get-started/index.mdx index 4082e3406e6058c..e3dd198f6f0fb99 100644 --- a/src/content/docs/bots/get-started/index.mdx +++ b/src/content/docs/bots/get-started/index.mdx @@ -12,10 +12,9 @@ sidebar: head: - tag: title content: Get started with Cloudflare bot solutions - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages to get started with Cloudflare's bot solutions based on your plan type: diff --git a/src/content/docs/bots/glossary.mdx b/src/content/docs/bots/glossary.mdx index 0fbbfcdccbc2f94..51cd6fdaf56a98f 100644 --- a/src/content/docs/bots/glossary.mdx +++ b/src/content/docs/bots/glossary.mdx @@ -6,10 +6,9 @@ products: - bots sidebar: order: 10 - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Bots documentation. diff --git a/src/content/docs/bots/plans/bm-subscription.mdx b/src/content/docs/bots/plans/bm-subscription.mdx index 3d5517526b98383..c0946617758e924 100644 --- a/src/content/docs/bots/plans/bm-subscription.mdx +++ b/src/content/docs/bots/plans/bm-subscription.mdx @@ -105,17 +105,17 @@ Zones that have [Enterprise Bot Management](/bots/get-started/bot-management/) e Bot Management customers have both bot settings (configured in **Security Settings**) and the ability to create custom rules using bot score fields. Start with the bot settings for baseline protection, then add custom rules only when you need additional control. -| Feature | Handled by bot settings | When to use custom rules instead | -| --- | --- | --- | -| Block or challenge definitely automated traffic | No | Path-specific rules, custom thresholds, or combining with other fields | -| Block or challenge likely automated traffic | No | Path-specific rules, custom thresholds, or combining with other fields | -| Allow or block verified bots | No | Granular control by verified bot category | -| Block AI crawlers | Yes | Target individual AI crawlers using detection IDs | -| Protect static resources | No | Exclude static resources from specific rules | -| Optimize for WordPress | No | No | -| Forward bot data to origin | No | Use [Transform Rules](/rules/transform/) or [Snippets](/rules/snippets/) | -| Detection ID targeting | No | Use `cf.bot_management.detection_ids` in [custom rules](/waf/custom-rules/) | -| JA3/JA4 fingerprint rules | No | Use `cf.bot_management.ja3_hash` or `cf.bot_management.ja4` in [custom rules](/waf/custom-rules/) | +| Feature | Handled by bot settings | When to use custom rules instead | +| ----------------------------------------------- | ----------------------- | ------------------------------------------------------------------------------------------------- | +| Block or challenge definitely automated traffic | No | Path-specific rules, custom thresholds, or combining with other fields | +| Block or challenge likely automated traffic | No | Path-specific rules, custom thresholds, or combining with other fields | +| Allow or block verified bots | No | Granular control by verified bot category | +| Block AI crawlers | Yes | Target individual AI crawlers using detection IDs | +| Protect static resources | No | Exclude static resources from specific rules | +| Optimize for WordPress | No | No | +| Forward bot data to origin | No | Use [Transform Rules](/rules/transform/) or [Snippets](/rules/snippets/) | +| Detection ID targeting | No | Use `cf.bot_management.detection_ids` in [custom rules](/waf/custom-rules/) | +| JA3/JA4 fingerprint rules | No | Use `cf.bot_management.ja3_hash` or `cf.bot_management.ja4` in [custom rules](/waf/custom-rules/) | For more details on when custom rules are needed, refer to [custom rules](/bots/additional-configurations/custom-rules/). diff --git a/src/content/docs/bots/reference/alerts.mdx b/src/content/docs/bots/reference/alerts.mdx index 76c74e5d486644c..039399e05dda310 100644 --- a/src/content/docs/bots/reference/alerts.mdx +++ b/src/content/docs/bots/reference/alerts.mdx @@ -6,10 +6,9 @@ products: - bots sidebar: order: 4 - --- -import { AvailableNotifications, Steps, DashButton } from "~/components" +import { AvailableNotifications, Steps, DashButton } from "~/components"; Bot alerts inform you when Cloudflare detects spikes in your traffic with any of the following characteristics: @@ -17,7 +16,7 @@ Bot alerts inform you when Cloudflare detects spikes in your traffic with any of - An increase in traffic on available dimensions in [Set up a bot detection alert](#set-up-a-bot-detection-alert). - Filters of your choosing in [Set up a bot detection alert](#set-up-a-bot-detection-alert). ---- +--- ## Alert types @@ -73,5 +72,5 @@ You can also choose to group by the following dimensions so that they can be ale - Bot Detection IDs :::note -Bot Detection Alerts exclude [verified bots](/bots/concepts/bot/verified-bots/). -::: \ No newline at end of file +Bot Detection Alerts exclude [verified bots](/bots/concepts/bot/verified-bots/). +::: diff --git a/src/content/docs/bots/reference/bot-management-variables.mdx b/src/content/docs/bots/reference/bot-management-variables.mdx index 8b78f19b39ba24e..388e76e2a3c7d80 100644 --- a/src/content/docs/bots/reference/bot-management-variables.mdx +++ b/src/content/docs/bots/reference/bot-management-variables.mdx @@ -6,21 +6,21 @@ products: - bots sidebar: order: 2 - --- -import { Render } from "~/components" +import { Render } from "~/components"; ## Ruleset Engine fields Bot Management provides access to several [new variables](/ruleset-engine/rules-language/fields/reference/?field-category=Bots) within the expression builder of Ruleset Engine-based products such as [WAF custom rules](/waf/custom-rules/). - **Bot Score** (`cf.bot_management.score`): An integer between 1-99 that indicates [Cloudflare's level of certainty](/bots/concepts/bot-score/) that a request comes from a bot. -- **Verified Bot** (`cf.bot_management.verified_bot`): A boolean value that indicates whether a request originates from a Cloudflare allowed bot. - - Cloudflare maintains a large allowlist of good, automated bots (such as Google Search Engine and Pingdom) that perform beneficial tasks. Cloudflare identifies and verifies these bots primarily through reverse DNS validation, ensuring the source IP matches the requesting service. - +- **Verified Bot** (`cf.bot_management.verified_bot`): A boolean value that indicates whether a request originates from a Cloudflare allowed bot. + + Cloudflare maintains a large allowlist of good, automated bots (such as Google Search Engine and Pingdom) that perform beneficial tasks. Cloudflare identifies and verifies these bots primarily through reverse DNS validation, ensuring the source IP matches the requesting service. + We also use additional validation methods, including checking ASN blocks and public lists. If these methods are unavailable, Cloudflare utilizes internal data and machine learning to identify and verify legitimate IP addresses from good bots. Most customers choose to [allow this traffic](/ruleset-engine/rules-language/fields/reference/cf.bot_management.verified_bot/). + - **Serves Static Resource** (`cf.bot_management.static_resource`): An identifier that matches [file extensions](/bots/additional-configurations/static-resources/) for many types of static resources. Use this variable if you send emails that retrieve static images. - **ja3Hash** (`cf.bot_management.ja3_hash`) and **ja4** (`cf.bot_management.ja4`): A [**JA3/JA4 fingerprint**](/bots/additional-configurations/ja3-ja4-fingerprint/) helps you profile specific SSL/TLS clients across different destination IPs, Ports, and X509 certificates. - **Bot Detection IDs** (`cf.bot_management.detection_ids`): List of IDs that correlate to the Bot Management heuristic detections made on a request (you can have multiple heuristic detections on the same request). diff --git a/src/content/docs/bots/reference/bot-verification/index.mdx b/src/content/docs/bots/reference/bot-verification/index.mdx index c074fd2973d2c84..ea311232d0c71de 100644 --- a/src/content/docs/bots/reference/bot-verification/index.mdx +++ b/src/content/docs/bots/reference/bot-verification/index.mdx @@ -8,11 +8,10 @@ sidebar: order: 1 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on Cloudflare's validation methods for [Verified](/bots/concepts/bot/verified-bots/) and [Signed](/bots/concepts/bot/signed-agents/) bots. - \ No newline at end of file + diff --git a/src/content/docs/bots/reference/bot-verification/ip-validation.mdx b/src/content/docs/bots/reference/bot-verification/ip-validation.mdx index 9d65f3cb32d07cf..e21b0eabee315f3 100644 --- a/src/content/docs/bots/reference/bot-verification/ip-validation.mdx +++ b/src/content/docs/bots/reference/bot-verification/ip-validation.mdx @@ -5,12 +5,11 @@ description: Verify bot identity by matching request IP addresses against publis products: - bots sidebar: - order: 3 - label: IP validation - + order: 3 + label: IP validation --- -import { GlossaryTooltip, Steps } from "~/components" +import { GlossaryTooltip, Steps } from "~/components"; The IP validation method aims to identify all of the IP addresses that a bot may use to send requests. IP validation is only used as a verification method for [verified bots](/bots/concepts/bot/verified-bots/). @@ -57,4 +56,4 @@ Generic user-agents include: - `node-fetch` - `okhttp` - `python-requests` -- `uTorrent` \ No newline at end of file +- `uTorrent` diff --git a/src/content/docs/bots/reference/index.mdx b/src/content/docs/bots/reference/index.mdx index d98d7d7b81bce95..f157689e81141cc 100644 --- a/src/content/docs/bots/reference/index.mdx +++ b/src/content/docs/bots/reference/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 9 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on Cloudflare's bot solutions: diff --git a/src/content/docs/bots/reference/machine-learning-models.mdx b/src/content/docs/bots/reference/machine-learning-models.mdx index 49af33d0da4309d..bdaac08a260b29c 100644 --- a/src/content/docs/bots/reference/machine-learning-models.mdx +++ b/src/content/docs/bots/reference/machine-learning-models.mdx @@ -8,10 +8,9 @@ sidebar: order: 3 tags: - AI - --- -import { Render } from "~/components" +import { Render } from "~/components"; ## Enable auto-updates to the Machine Learning models @@ -39,4 +38,4 @@ By not updating to the latest version, you will be using a Machine Learning mode | v6 | Significantly improved scoring for native Android application traffic.

Improved scoring on the newest versions of Chromium browsers. | Q1 2022 | | v7 | Increased recognition of distributed botnets.

Improved HTTP/3 scoring. | Q1 2024 | | v8 | Improved detection of residential proxies.

Increased weight on network level traffic characteristics. | Q2 2024 | -| v9 | Improved model consistency and model efficacy against randomization attack techniques | Q2 2025 | +| v9 | Improved model consistency and model efficacy against randomization attack techniques | Q2 2025 | diff --git a/src/content/docs/bots/reference/sample-terms.mdx b/src/content/docs/bots/reference/sample-terms.mdx index 3c05cc2e80dd3e8..2ba93ce64ee1935 100644 --- a/src/content/docs/bots/reference/sample-terms.mdx +++ b/src/content/docs/bots/reference/sample-terms.mdx @@ -8,7 +8,6 @@ sidebar: order: 5 tags: - AI - --- Cloudflare recommends that customers consider updating their Terms of Service to address bots specifically related to Artificial Intelligence (AI) training and data scraping. The text below provides an informational example of the kind of language that could be added to a website's terms of use. @@ -19,8 +18,7 @@ Cloudflare recommends that customers consider updating their Terms of Service to :::caution[Disclaimer] -This language is provided for informational purposes only. It does not constitute legal advice, nor does it guarantee any specific outcome. +This language is provided for informational purposes only. It does not constitute legal advice, nor does it guarantee any specific outcome. -This is an illustrative example of language that can be included in a website's terms to put AI providers on notice that they are not authorized to use automated means to scrape content from your website for purposes of training or otherwise contributing to their AI models or systems, unless you have expressly permitted them to do so in your `robots.txt` file. +This is an illustrative example of language that can be included in a website's terms to put AI providers on notice that they are not authorized to use automated means to scrape content from your website for purposes of training or otherwise contributing to their AI models or systems, unless you have expressly permitted them to do so in your `robots.txt` file. ::: - diff --git a/src/content/docs/bots/troubleshooting/bot-management-skips.mdx b/src/content/docs/bots/troubleshooting/bot-management-skips.mdx index 363aa1c84d09636..b8453361111ca0c 100644 --- a/src/content/docs/bots/troubleshooting/bot-management-skips.mdx +++ b/src/content/docs/bots/troubleshooting/bot-management-skips.mdx @@ -6,10 +6,9 @@ products: - bots sidebar: order: 1 - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; There are instances in which Bot Management does not run and certain fields, such as the [JA3/JA4 field](/bots/additional-configurations/ja3-ja4-fingerprint/), are not populated because it has been determined that running Bot Management would not be necessary. diff --git a/src/content/docs/bots/troubleshooting/false-positives.mdx b/src/content/docs/bots/troubleshooting/false-positives.mdx index 377e7ac13199bff..7d7dadcae903c10 100644 --- a/src/content/docs/bots/troubleshooting/false-positives.mdx +++ b/src/content/docs/bots/troubleshooting/false-positives.mdx @@ -7,7 +7,6 @@ products: sidebar: order: 3 label: False positives - --- import { Render } from "~/components"; @@ -25,4 +24,4 @@ You cannot bypass or skip Bot Fight Mode using the _Skip_ action in WAF custom r Bot Fight Mode can still trigger if you have IP Access rules, but it cannot trigger if an IP Access rule matches the request. For example, the IP Access rule matches the connecting IP. -If you encounter persistent false positives, you can [disable the feature in the Cloudflare dashboard](/bots/get-started/bot-fight-mode/#disable-bot-fight-mode). \ No newline at end of file +If you encounter persistent false positives, you can [disable the feature in the Cloudflare dashboard](/bots/get-started/bot-fight-mode/#disable-bot-fight-mode). diff --git a/src/content/docs/bots/troubleshooting/index.mdx b/src/content/docs/bots/troubleshooting/index.mdx index b1e6d5b78a345c4..821d9ed42c52b76 100644 --- a/src/content/docs/bots/troubleshooting/index.mdx +++ b/src/content/docs/bots/troubleshooting/index.mdx @@ -12,12 +12,10 @@ sidebar: head: - tag: title content: Troubleshoot issues with Bots - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages to troubleshoot issues with Cloudflare's bot solutions: - diff --git a/src/content/docs/bots/workers-templates/index.mdx b/src/content/docs/bots/workers-templates/index.mdx index aae030a3a8b29b2..6bf57e8cbfb768f 100644 --- a/src/content/docs/bots/workers-templates/index.mdx +++ b/src/content/docs/bots/workers-templates/index.mdx @@ -12,10 +12,9 @@ sidebar: head: - tag: title content: Workers templates - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the templates below to integrate Bot Management with [Cloudflare Workers](/workers/): diff --git a/src/content/docs/browser-run/features/index.mdx b/src/content/docs/browser-run/features/index.mdx index 6ef34df2029deea..8f79040189134a4 100644 --- a/src/content/docs/browser-run/features/index.mdx +++ b/src/content/docs/browser-run/features/index.mdx @@ -12,4 +12,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/browser-run/how-to/deploy-worker.mdx b/src/content/docs/browser-run/how-to/deploy-worker.mdx index 808b712441c47df..d15deee8a1e1894 100644 --- a/src/content/docs/browser-run/how-to/deploy-worker.mdx +++ b/src/content/docs/browser-run/how-to/deploy-worker.mdx @@ -6,7 +6,7 @@ sidebar: order: 1 products: - browser-run - - workers + - workers --- import { diff --git a/src/content/docs/browser-run/mcp-server.mdx b/src/content/docs/browser-run/mcp-server.mdx index 3d7ba05eaeadd22..a79dc14dcabbbb1 100644 --- a/src/content/docs/browser-run/mcp-server.mdx +++ b/src/content/docs/browser-run/mcp-server.mdx @@ -7,4 +7,4 @@ sidebar: order: 90 products: - browser-run ---- \ No newline at end of file +--- diff --git a/src/content/docs/browser-run/quick-actions/api-reference.mdx b/src/content/docs/browser-run/quick-actions/api-reference.mdx index 15e3e787ca1f282..dc44d9a5ba8d2e4 100644 --- a/src/content/docs/browser-run/quick-actions/api-reference.mdx +++ b/src/content/docs/browser-run/quick-actions/api-reference.mdx @@ -4,7 +4,7 @@ title: Reference description: View the complete Browser Run Quick Actions API reference for all available endpoints and parameters. external_link: /api/resources/browser_rendering/ sidebar: - order: 15 + order: 15 products: - browser-run --- diff --git a/src/content/docs/browser-run/reference/browser-close-reasons.mdx b/src/content/docs/browser-run/reference/browser-close-reasons.mdx index 3fe11accbc5a78a..cfb411b73a356c1 100644 --- a/src/content/docs/browser-run/reference/browser-close-reasons.mdx +++ b/src/content/docs/browser-run/reference/browser-close-reasons.mdx @@ -24,13 +24,13 @@ Browser Run sessions are billed based on [usage](/browser-run/pricing/). We do n ## Close reasons -| Reason | Description | -| --- | --- | -| **Normal closure** | Your code called `browser.close()` and the session ended normally. No action needed. | -| **Browser idle** | The session received no commands for the configured inactivity timeout (60 seconds by default, up to 10 minutes with [`keep_alive`](/browser-run/puppeteer/#keep-alive)). To prevent idle closures, send commands within the inactivity window or increase the `keep_alive` value. | -| **Chromium crashed** | The Chromium instance inside the session crashed, often because the page consumed too much memory (large DOMs, heavy JavaScript, or many concurrent pages). Try reducing page complexity, closing unused pages, or breaking work into smaller tasks. | -| **Connection error** | The connection between the client and Browser Run was interrupted. This can be caused by network issues, your Worker reaching its CPU time limit, or a WebSocket disconnection. Retry the operation with a `try...catch` block. | -| **Session evicted** | Browser Run recycled the session due to infrastructure maintenance or a new release deployment. This is not caused by your code. Retry the operation with a `try...catch` block and reconnection logic. | +| Reason | Description | +| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Normal closure** | Your code called `browser.close()` and the session ended normally. No action needed. | +| **Browser idle** | The session received no commands for the configured inactivity timeout (60 seconds by default, up to 10 minutes with [`keep_alive`](/browser-run/puppeteer/#keep-alive)). To prevent idle closures, send commands within the inactivity window or increase the `keep_alive` value. | +| **Chromium crashed** | The Chromium instance inside the session crashed, often because the page consumed too much memory (large DOMs, heavy JavaScript, or many concurrent pages). Try reducing page complexity, closing unused pages, or breaking work into smaller tasks. | +| **Connection error** | The connection between the client and Browser Run was interrupted. This can be caused by network issues, your Worker reaching its CPU time limit, or a WebSocket disconnection. Retry the operation with a `try...catch` block. | +| **Session evicted** | Browser Run recycled the session due to infrastructure maintenance or a new release deployment. This is not caused by your code. Retry the operation with a `try...catch` block and reconnection logic. | ## Handling unexpected closures @@ -38,18 +38,18 @@ Sessions can close at any time due to infrastructure events, network issues, or ```js async function runBrowser(env) { - let browser; - try { - browser = await puppeteer.launch(env.MYBROWSER); - const page = await browser.newPage(); - await page.goto("https://example.com"); - // Your browser automation logic - } catch (error) { - console.error("Browser session ended unexpectedly:", error.message); - // Retry or return an error response - } finally { - await browser?.close(); - } + let browser; + try { + browser = await puppeteer.launch(env.MYBROWSER); + const page = await browser.newPage(); + await page.goto("https://example.com"); + // Your browser automation logic + } catch (error) { + console.error("Browser session ended unexpectedly:", error.message); + // Retry or return an error response + } finally { + await browser?.close(); + } } ``` @@ -57,13 +57,13 @@ For long-running or critical workflows, consider adding retry logic: ```js async function runWithRetry(env, maxRetries = 3) { - for (let attempt = 1; attempt <= maxRetries; attempt++) { - try { - return await runBrowser(env); - } catch (error) { - if (attempt === maxRetries) throw error; - console.log(`Attempt ${attempt} failed, retrying...`); - } - } + for (let attempt = 1; attempt <= maxRetries; attempt++) { + try { + return await runBrowser(env); + } catch (error) { + if (attempt === maxRetries) throw error; + console.log(`Attempt ${attempt} failed, retrying...`); + } + } } ``` diff --git a/src/content/docs/byoip/address-maps/setup.mdx b/src/content/docs/byoip/address-maps/setup.mdx index 9e80f9aa794cc37..4ded8d833123a77 100644 --- a/src/content/docs/byoip/address-maps/setup.mdx +++ b/src/content/docs/byoip/address-maps/setup.mdx @@ -11,7 +11,13 @@ sidebar: label: Setup --- -import { GlossaryTooltip, APIRequest, DashButton, Tabs, TabItem } from "~/components"; +import { + GlossaryTooltip, + APIRequest, + DashButton, + Tabs, + TabItem, +} from "~/components"; Consider the sections below to learn how to set up address maps. @@ -120,13 +126,13 @@ Default SNI for Spectrum can only be created via API using the [Create Address M Do not include any membership in your command. Your API command should resemble the following: \ No newline at end of file +/> diff --git a/src/content/docs/byoip/changelog.mdx b/src/content/docs/byoip/changelog.mdx index 389731c7bfc427f..bee100a7b07c3bc 100644 --- a/src/content/docs/byoip/changelog.mdx +++ b/src/content/docs/byoip/changelog.mdx @@ -14,4 +14,4 @@ import { ProductReleaseNotes } from "~/components"; {/* */} - \ No newline at end of file + diff --git a/src/content/docs/byoip/concepts/index.mdx b/src/content/docs/byoip/concepts/index.mdx index 646653a0d44f0e6..7a7f4b5b8de1b6d 100644 --- a/src/content/docs/byoip/concepts/index.mdx +++ b/src/content/docs/byoip/concepts/index.mdx @@ -10,7 +10,7 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the topics below for more information about concepts related to BYOIP. diff --git a/src/content/docs/byoip/concepts/prefix-delegations.mdx b/src/content/docs/byoip/concepts/prefix-delegations.mdx index 65ddd820ea83124..2c7fa214ed734aa 100644 --- a/src/content/docs/byoip/concepts/prefix-delegations.mdx +++ b/src/content/docs/byoip/concepts/prefix-delegations.mdx @@ -10,7 +10,6 @@ sidebar: Prefix delegations allow a prefix owner (Account A) to grant another Cloudflare account (Account B) permission to use all or part of their BYOIP prefix. The original prefix remains managed by Account A, but Account B can use the delegated IPs with CDN services (including Cloudflare for SaaS) or Spectrum. Refer to [service bindings](/byoip/service-bindings/) for more information on the services an IP can be bound to. - ## CDN CDN delegations allow you to use the IP(s) with [Address Maps](/byoip/address-maps/) or [Cloudflare for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/) customers. diff --git a/src/content/docs/byoip/glossary.mdx b/src/content/docs/byoip/glossary.mdx index 8b3f72c3e98e200..21eb58070060e3a 100644 --- a/src/content/docs/byoip/glossary.mdx +++ b/src/content/docs/byoip/glossary.mdx @@ -8,7 +8,7 @@ sidebar: order: 12 --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's BYOIP documentation. diff --git a/src/content/docs/byoip/route-leak-detection.mdx b/src/content/docs/byoip/route-leak-detection.mdx index 7b25fea18deee8c..b42d00458f0abed 100644 --- a/src/content/docs/byoip/route-leak-detection.mdx +++ b/src/content/docs/byoip/route-leak-detection.mdx @@ -6,10 +6,9 @@ products: - byoip sidebar: order: 8 - --- -import { AvailableNotifications, DashButton } from "~/components" +import { AvailableNotifications, DashButton } from "~/components"; Route Leak Detection protects your routes on the Internet by notifying you when your traffic is routed somewhere it should not go, which could indicate a possible attack. Route Leak Detection also reduces the amount of time needed to mitigate leaks by providing you with timely notifications. diff --git a/src/content/docs/byoip/service-bindings/index.mdx b/src/content/docs/byoip/service-bindings/index.mdx index 0078224d0428db2..51ae83d822bc673 100644 --- a/src/content/docs/byoip/service-bindings/index.mdx +++ b/src/content/docs/byoip/service-bindings/index.mdx @@ -79,4 +79,5 @@ When adding a service binding for a given IP address, it must be either a CDN se [^1]: Layer 7 HTTP-based -[^2]: Layer 4 or Layer 7 HTTP with custom ports \ No newline at end of file + +[^2]: Layer 4 or Layer 7 HTTP with custom ports diff --git a/src/content/docs/byoip/troubleshooting/index.mdx b/src/content/docs/byoip/troubleshooting/index.mdx index c3c66603d15744f..b83821670151137 100644 --- a/src/content/docs/byoip/troubleshooting/index.mdx +++ b/src/content/docs/byoip/troubleshooting/index.mdx @@ -36,13 +36,12 @@ Instead, you can use Address Maps to set a default SNI for IPs on your account o When onboarding BYOIP prefixes via the API, you may encounter the following errors: -| Error code | Meaning | Resolution | -|---|---|---| +| Error code | Meaning | Resolution | +| ------------------------------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `prefix_not_valid_and_approved` | The prefix has not passed IRR validation, RPKI validation, and ownership verification (or manual approval). | Verify all three validation steps have completed. If one or more are failing, check prefix registration with your Regional Internet Registry (RIR) and your RPKI ROA configuration. If validation is passing but you are still seeing this error, contact support for manual approval. | -| `incomplete_bgp_deployment` | Cannot create a BGP prefix without a default edge service binding configured. | Configure a default edge service binding before creating BGP prefixes. | -| `advertise_state_locked` | Cannot create a BGP prefix — the default edge service binding is still deploying. | Wait for the edge service binding deployment to complete, then retry. | +| `incomplete_bgp_deployment` | Cannot create a BGP prefix without a default edge service binding configured. | Configure a default edge service binding before creating BGP prefixes. | +| `advertise_state_locked` | Cannot create a BGP prefix — the default edge service binding is still deploying. | Wait for the edge service binding deployment to complete, then retry. | :::note Self-serve BYOIP onboarding is not supported when BYOIP is used as a Magic Transit on-ramp configuration. For more information, refer to [Magic Transit with CDN](/byoip/service-bindings/magic-transit-with-cdn/). ::: - diff --git a/src/content/docs/cache/advanced-configuration/cache-reserve.mdx b/src/content/docs/cache/advanced-configuration/cache-reserve.mdx index 5bd9e4060218ead..4e48745c1d36d41 100644 --- a/src/content/docs/cache/advanced-configuration/cache-reserve.mdx +++ b/src/content/docs/cache/advanced-configuration/cache-reserve.mdx @@ -105,10 +105,7 @@ For example: ### Operations - + ## Cache Reserve billing examples @@ -152,10 +149,10 @@ Cache Reserve is designed for use with [Tiered Cache](/cache/how-to/tiered-cache ## Cache Reserve Analytics diff --git a/src/content/docs/cache/advanced-configuration/crawler-hints.mdx b/src/content/docs/cache/advanced-configuration/crawler-hints.mdx index 22a7ef8c9ba65a7..e94802d8e09921e 100644 --- a/src/content/docs/cache/advanced-configuration/crawler-hints.mdx +++ b/src/content/docs/cache/advanced-configuration/crawler-hints.mdx @@ -4,10 +4,9 @@ description: Signal search engine crawlers when content changes with IndexNow. products: - cache title: Crawler Hints - --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; Crawler Hints uses Cloudflare cache signals to tell search engines when your content has likely changed, so they crawl your site at the right time instead of guessing. @@ -41,6 +40,6 @@ After enabling Crawler Hints, Cloudflare will begin sending hints to search engi When enabled, Crawler Hints is a global setting for your entire website. You can stop a specific page from being indexed by either: -* Having the origin server send through the header `X-Robots-Tag: noindex` on any pages that should not be indexed. -* Including `` in the HTML of any pages that should not be indexed. -* Creating a [Response header Transform Rule](/rules/transform/response-header-modification/) in Cloudflare to add the `X-Robots-Tag: noindex` header instead of doing it from the origin server. +- Having the origin server send through the header `X-Robots-Tag: noindex` on any pages that should not be indexed. +- Including `` in the HTML of any pages that should not be indexed. +- Creating a [Response header Transform Rule](/rules/transform/response-header-modification/) in Cloudflare to add the `X-Robots-Tag: noindex` header instead of doing it from the origin server. diff --git a/src/content/docs/cache/advanced-configuration/early-hints.mdx b/src/content/docs/cache/advanced-configuration/early-hints.mdx index 0dbc92752839ea9..cc491452932a8a8 100644 --- a/src/content/docs/cache/advanced-configuration/early-hints.mdx +++ b/src/content/docs/cache/advanced-configuration/early-hints.mdx @@ -4,10 +4,9 @@ pcx_content_type: concept description: Preload assets with 103 Early Hints to speed up page loads. products: - cache - --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; When a browser requests a page, the origin server takes time to prepare the full response. Early Hints uses this wait time to send the browser a preliminary `103` response containing `Link` headers that tell the browser which assets it will need. The browser can start loading those assets before the full response arrives, which speeds up page loads. @@ -15,10 +14,8 @@ Early Hints is defined in [RFC 8297](https://httpwg.org/specs/rfc8297.html) as a :::note[Note] - Early Hints is currently only supported over HTTP/2 and HTTP/3. - ::: For more information about Early Hints, refer to the [Cloudflare](https://blog.cloudflare.com/early-hints) and [Google Chrome](https://developer.chrome.com/en/blog/early-hints/) blogs. @@ -40,16 +37,14 @@ For more information about Early Hints, refer to the [Cloudflare](https://blog.c Early Hints are only generated and cached: -* For URIs with `.html`, `.htm`, or `.php` file extensions, or no file extension -* On 200, 301, or 302 response return codes -* When the response contains [link headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link) with preconnect or preload rel types, such as `Link: ; rel=preload` +- For URIs with `.html`, `.htm`, or `.php` file extensions, or no file extension +- On 200, 301, or 302 response return codes +- When the response contains [link headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Link) with preconnect or preload rel types, such as `Link: ; rel=preload` :::note - Early Hints cache entries are keyed by request URI and ignore query strings. - ::: ## Emit Early Hints @@ -60,7 +55,7 @@ Currently, only certain browser versions will take action to preload or preconne Additionally, keep the following in mind: -* Early Hints responses may be emitted before reaching the origin server or Worker. When Early Hints is enabled and pages on your site require authentication, unauthenticated visitors may receive a 103 response. The 103 response would contain cached Link headers and be sent before a 403 Forbidden response from your origin. -* Early Hints may be emitted less frequently on requests where the content is cacheable. Cloudflare CDN is more likely to retrieve a response header before the asynchronous Early Hints lookup finishes if the response has been cached. Cloudflare will not send a 103 response if the main response header is already available. -* Cloudflare currently disables Early Hints on some User-Agents, for example, select search crawler bots that show incompatibility with 1xx responses. -* You may see an influx of `504` responses with the `RequestSource` of `earlyHintsCache` in Cloudflare Logs when Early Hints is enabled, which is expected and benign. Requests from `earlyHintsCache` are internal subrequests for cached Early Hints, and they are neither end user requests, nor do they go to your origin. Their response status only indicates whether there are cached Early Hints for the request URI (`200` on cache HIT, `504` on cache MISS). These requests are already filtered out in other views, such as Cache Analytics. To filter out these requests or to filter requests by end users of your website only, please refer to [Filter end users](/analytics/graphql-api/features/filtering/#filter-end-users). +- Early Hints responses may be emitted before reaching the origin server or Worker. When Early Hints is enabled and pages on your site require authentication, unauthenticated visitors may receive a 103 response. The 103 response would contain cached Link headers and be sent before a 403 Forbidden response from your origin. +- Early Hints may be emitted less frequently on requests where the content is cacheable. Cloudflare CDN is more likely to retrieve a response header before the asynchronous Early Hints lookup finishes if the response has been cached. Cloudflare will not send a 103 response if the main response header is already available. +- Cloudflare currently disables Early Hints on some User-Agents, for example, select search crawler bots that show incompatibility with 1xx responses. +- You may see an influx of `504` responses with the `RequestSource` of `earlyHintsCache` in Cloudflare Logs when Early Hints is enabled, which is expected and benign. Requests from `earlyHintsCache` are internal subrequests for cached Early Hints, and they are neither end user requests, nor do they go to your origin. Their response status only indicates whether there are cached Early Hints for the request URI (`200` on cache HIT, `504` on cache MISS). These requests are already filtered out in other views, such as Cache Analytics. To filter out these requests or to filter requests by end users of your website only, please refer to [Filter end users](/analytics/graphql-api/features/filtering/#filter-end-users). diff --git a/src/content/docs/cache/advanced-configuration/index.mdx b/src/content/docs/cache/advanced-configuration/index.mdx index 9efd5cc15381ed7..12fa7c03f59e222 100644 --- a/src/content/docs/cache/advanced-configuration/index.mdx +++ b/src/content/docs/cache/advanced-configuration/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 7 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Learn how to complete different configuration options to customize your cache behavior. diff --git a/src/content/docs/cache/advanced-configuration/query-string-sort.mdx b/src/content/docs/cache/advanced-configuration/query-string-sort.mdx index 0b41b69eb776303..05e6363b11a6dad 100644 --- a/src/content/docs/cache/advanced-configuration/query-string-sort.mdx +++ b/src/content/docs/cache/advanced-configuration/query-string-sort.mdx @@ -9,14 +9,14 @@ tags: - WordPress --- -import { FeatureTable } from "~/components" +import { FeatureTable } from "~/components"; **Query String Sort** increases cache-hit rates by first sorting query strings into a consistent order before checking the Cloudflare cache. By default, Cloudflare’s cache treats resources as distinct if their URL query strings are in a different order. For instance, these resources are cached separately: -* `/video/48088296?title=0&byline=0&portrait=0&color=51a516` -* `/video/48088296?byline=0&color=51a516&portrait=0&title=0` +- `/video/48088296?title=0&byline=0&portrait=0&color=51a516` +- `/video/48088296?byline=0&color=51a516&portrait=0&title=0` Query String Sort changes this behavior. If two query strings exist with the same name, the URL is sorted by the parameter value. For example: @@ -30,7 +30,7 @@ would be sorted to: -*** +--- ## Enable Query String Sort @@ -41,7 +41,7 @@ To enable Query String Sort: 3. Go to **Caching** > **Configuration**. 4. For **Enable Query String Sort**, switch the toggle to **On**. -*** +--- ## Unexpected behavior with WordPress admin pages @@ -49,19 +49,17 @@ When a site or an application requires exact query string ordering, enabling Que For example in the WordPress admin UI, you might notice any of the following behaviors: -* No media appear in the Media Library -* Inability to customize the site via **Appearance** > **Customize** -* Inability to drag any widget to a sidebar in **Appearance** > **Widgets** -* Inability to edit menus in **Appearance** > **Menus** +- No media appear in the Media Library +- Inability to customize the site via **Appearance** > **Customize** +- Inability to drag any widget to a sidebar in **Appearance** > **Widgets** +- Inability to edit menus in **Appearance** > **Menus** To understand why this happens, note that WordPress [concatenates JavaScript files](https://developer.wordpress.org/advanced-administration/wordpress/wp-config/#disable-javascript-concatenation) to speed up the administration interface. The way WordPress implements this involves multiple occurrences of `load[]` parameters in the query string, where the order of those parameters is crucial. :::note - Note that more recent versions of WordPress may not experience this issue, as a patch has been implemented in WordPress since 2019. The patch can be found at [WordPress Core Trac Changeset 45456](https://core.trac.wordpress.org/changeset/45456). - ::: ### Identify the problem @@ -100,15 +98,15 @@ For example, you might have an image resizing endpoint or a search form, where t To minimize problems, consider: -* Disabling **Query String Sort** for the site if you’re sure that this feature does not add value to any part of your site. Cloudflare disables this option by default in the **Caching** app. -* Use Cache Rules to enable **Query String Sort** (set **Cache key** > **Sort query string**: `On`) for URLs where preserving the query string parameter order is not important. -* Alternatively, use Cache Rules to disable **Query String Sort** for URLs where a specific parameter order is required. For example, set **Cache key** > **Sort query string**: `Off` for URI paths starting with `/wp-admin/load-scripts.php`, or for any URLs with similar requirements. +- Disabling **Query String Sort** for the site if you’re sure that this feature does not add value to any part of your site. Cloudflare disables this option by default in the **Caching** app. +- Use Cache Rules to enable **Query String Sort** (set **Cache key** > **Sort query string**: `On`) for URLs where preserving the query string parameter order is not important. +- Alternatively, use Cache Rules to disable **Query String Sort** for URLs where a specific parameter order is required. For example, set **Cache key** > **Sort query string**: `Off` for URI paths starting with `/wp-admin/load-scripts.php`, or for any URLs with similar requirements. To learn more about Cache Rules, visit [Cache Rules](/cache/how-to/cache-rules/). -*** +--- ## Related resources -* [Increasing Cache Hit Rates with Query String Sort](https://blog.cloudflare.com/increasing-cache-hit-rates-with-query-string-sort/) -* [Best Practice: Caching Everything While Ignoring Query Strings](/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings/) +- [Increasing Cache Hit Rates with Query String Sort](https://blog.cloudflare.com/increasing-cache-hit-rates-with-query-string-sort/) +- [Best Practice: Caching Everything While Ignoring Query Strings](/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings/) diff --git a/src/content/docs/cache/advanced-configuration/serve-tailored-content.mdx b/src/content/docs/cache/advanced-configuration/serve-tailored-content.mdx index 8d6b138d7f117d2..4f0f14a99828213 100644 --- a/src/content/docs/cache/advanced-configuration/serve-tailored-content.mdx +++ b/src/content/docs/cache/advanced-configuration/serve-tailored-content.mdx @@ -42,8 +42,8 @@ In this example, you run an e-commerce site and want to display prices in the lo - **Operator:** `equals` - **Value:** `Canada` 6. Under **Then...** - - for **Path**, select **Preserve**. - - for **Query**, select **Rewrite to**: **Dynamic** `loc=ca` + - for **Path**, select **Preserve**. + - for **Query**, select **Rewrite to**: **Dynamic** `loc=ca` 7. Select **Save**. Now, requests from Canada to `/products/item` will be transformed to `/products/item?loc=ca` before reaching your origin or the cache, creating a distinct cache entry. @@ -65,14 +65,14 @@ To enable this feature, create a _variants rule_ using the API. This rule maps f For example, the following API call tells Cloudflare that for `.jpeg` and `.jpg` files, your origin can serve `image/webp` and `image/avif` variants: After creating the rule, Cloudflare will create distinct cache entries for each image variant, improving performance for users with modern browsers. @@ -100,26 +100,27 @@ In this example, you run an A/B test controlled by a cookie named `ab-test` (wit const CACHE_DURATION = 30 * 24 * 60 * 60; // 30 days export default { - async fetch(request) { - // Construct a new URL for the cache key based on the A/B cookie - const abCookie = request.headers.get('Cookie')?.match(/ab-test=([^;]+)/)?.[1] || 'control'; - const url = new URL(request.url); - url.pathname = `/ab-test/${abCookie}${url.pathname}`; - - const cacheKey = new Request(url, request); - const cache = caches.default; - - let response = await cache.match(cacheKey); - if (!response) { - // If not in cache, fetch from origin - response = await fetch(request); - response = new Response(response.body, response); - response.headers.set("Cache-Control", `s-maxage=${CACHE_DURATION}`); - // Put the response into cache with the custom key - await cache.put(cacheKey, response.clone()); - } - return response; - }, + async fetch(request) { + // Construct a new URL for the cache key based on the A/B cookie + const abCookie = + request.headers.get("Cookie")?.match(/ab-test=([^;]+)/)?.[1] || "control"; + const url = new URL(request.url); + url.pathname = `/ab-test/${abCookie}${url.pathname}`; + + const cacheKey = new Request(url, request); + const cache = caches.default; + + let response = await cache.match(cacheKey); + if (!response) { + // If not in cache, fetch from origin + response = await fetch(request); + response = new Response(response.body, response); + response.headers.set("Cache-Control", `s-maxage=${CACHE_DURATION}`); + // Put the response into cache with the custom key + await cache.put(cacheKey, response.clone()); + } + return response; + }, }; ``` @@ -151,13 +152,13 @@ If your origin serves different content types (for example, `application/json` v 2. Select **Create rule**. -3. Enter rule name, such as `Vary by Accept Header`. +3. Enter rule name, such as `Vary by Accept Header`. 4. Set the condition for the rule to apply (for example, a specific hostname or path). 5. Under **Cache key**, select **Use custom key**. 6. Select **Add new**. - - **Type**: `Header` - - **Name**: `Accept` - - **Value**: Add each `value`, or leave empty for all. + - **Type**: `Header` + - **Name**: `Accept` + - **Value**: Add each `value`, or leave empty for all. 7. Select **Deploy**. This configuration creates separate cache entries based on the `Accept` header value, respecting your API's content negotiation. @@ -176,28 +177,28 @@ This Worker detects whether a visitor is on a mobile or desktop device and creat ```js export default { - async fetch(request, env, ctx) { - const userAgent = request.headers.get('User-Agent') || ''; - const deviceType = userAgent.includes('Mobile') ? 'mobile' : 'desktop'; + async fetch(request, env, ctx) { + const userAgent = request.headers.get("User-Agent") || ""; + const deviceType = userAgent.includes("Mobile") ? "mobile" : "desktop"; - // Create a new URL for the cache key that includes the device type - const url = new URL(request.url); - url.pathname = `/${deviceType}${url.pathname}`; + // Create a new URL for the cache key that includes the device type + const url = new URL(request.url); + url.pathname = `/${deviceType}${url.pathname}`; - const cacheKey = new Request(url, request); - const cache = caches.default; + const cacheKey = new Request(url, request); + const cache = caches.default; - let response = await cache.match(cacheKey); + let response = await cache.match(cacheKey); - if (!response) { - console.log(`Cache miss for ${deviceType} device. Fetching from origin.`); - response = await fetch(request); - let responseToCache = response.clone(); - ctx.waitUntil(cache.put(cacheKey, responseToCache)); - } + if (!response) { + console.log(`Cache miss for ${deviceType} device. Fetching from origin.`); + response = await fetch(request); + let responseToCache = response.clone(); + ctx.waitUntil(cache.put(cacheKey, responseToCache)); + } - return response; - }, + return response; + }, }; ``` @@ -211,28 +212,28 @@ This Worker detects if a visitor is on a mobile device or a desktop and creates ```js export default { - async fetch(request) { - // 1. Determine the device type from the User-Agent header - const userAgent = request.headers.get('User-Agent') || ''; - const deviceType = userAgent.includes('Mobile') ? 'mobile' : 'desktop'; - - // 2. Create a custom cache key by appending the device type to the URL - const customCacheKey = `${request.url}-${deviceType}`; - - // 3. Fetch the response. Cloudflare's cache automatically uses the - // customCacheKey for cache operations (match, put). - const response = await fetch(request, { - cf: { - cacheKey: customCacheKey, - }, - }); - - // Optionally, you can modify the response before returning it - // For example, add a header to indicate which cache key was used - const newResponse = new Response(response.body, response); - newResponse.headers.set("X-Cache-Key", customCacheKey); - return newResponse; - }, + async fetch(request) { + // 1. Determine the device type from the User-Agent header + const userAgent = request.headers.get("User-Agent") || ""; + const deviceType = userAgent.includes("Mobile") ? "mobile" : "desktop"; + + // 2. Create a custom cache key by appending the device type to the URL + const customCacheKey = `${request.url}-${deviceType}`; + + // 3. Fetch the response. Cloudflare's cache automatically uses the + // customCacheKey for cache operations (match, put). + const response = await fetch(request, { + cf: { + cacheKey: customCacheKey, + }, + }); + + // Optionally, you can modify the response before returning it + // For example, add a header to indicate which cache key was used + const newResponse = new Response(response.body, response); + newResponse.headers.set("X-Cache-Key", customCacheKey); + return newResponse; + }, }; ``` @@ -256,11 +257,11 @@ The simplest solution is to create a [Transform Rule](/rules/transform/) that ch 3. Enter a name, such as `Vary by RSC Header`. 4. In **If incoming requests match**, select **Custom filter expression**. 5. Under **When incoming requests match**, manually edit the expression so that it checks for the presence of the `RSC` header: - - `has_key(http.request.headers, "rsc")` + - `has_key(http.request.headers, "rsc")` 6. Under **Then**: - - For **Path**, select **Preserve**. - - For **Query**, select **Rewrite to**, select **Static**: `_rsc=1`. + - For **Path**, select **Preserve**. + - For **Query**, select **Rewrite to**, select **Static**: `_rsc=1`. 7. Select **Save**. @@ -269,8 +270,7 @@ The simplest solution is to create a [Transform Rule](/rules/transform/) that ch Alternatively, use [Snippets](/rules/snippets/) or [Custom Cache Keys](/cache/how-to/cache-keys) to add the `RSC` header directly to the cache key without modifying the visible URL. This provides a cleaner URL but requires more advanced configuration. :::note[Availability] + - Snippets: Pro, Business, Enterprise - Custom Cache Keys: Enterprise only -::: - - + ::: diff --git a/src/content/docs/cache/advanced-configuration/vary-for-images.mdx b/src/content/docs/cache/advanced-configuration/vary-for-images.mdx index ab7ed953aa09229..1209ddf6440e3ee 100644 --- a/src/content/docs/cache/advanced-configuration/vary-for-images.mdx +++ b/src/content/docs/cache/advanced-configuration/vary-for-images.mdx @@ -4,10 +4,9 @@ pcx_content_type: concept description: Serve images in the best format for each visitor browser. products: - cache - --- -import { Details, FeatureTable, APIRequest } from "~/components" +import { Details, FeatureTable, APIRequest } from "~/components"; The `Vary` HTTP response header tells Cloudflare that an origin can serve different versions of the same resource depending on the request headers. For images, this allows your origin to serve modern formats like WebP or AVIF to browsers that support them, while continuing to serve JPEG or PNG to others. @@ -25,20 +24,19 @@ Vary for images is available for Pro, Business, and Enterprise customers. You can use vary for images on the file extensions below if the origin server sends the `Vary: Accept` response header. If the origin server sends `Vary: Accept` but does not serve the set variant, the response is not cached and displays `BYPASS` in the cache status in the response header. Additionally, the list of variant types the origin serves for each extension must be configured so that Cloudflare decides which variant to serve without contacting the origin server. -
-
    -
  • .avif
  • -
  • .bmp
  • -
  • .gif
  • -
  • .jpg
  • -
  • .jpeg
  • -
  • .jp2
  • -
  • .png
  • -
  • .tif
  • -
  • .tiff
  • -
  • .webp
  • -
+
    +
  • .avif
  • +
  • .bmp
  • +
  • .gif
  • +
  • .jpg
  • +
  • .jpeg
  • +
  • .jp2
  • +
  • .png
  • +
  • .tif
  • +
  • .tiff
  • +
  • .webp
  • +
## Enable vary for images @@ -48,46 +46,40 @@ Vary for Images is enabled through Cloudflare's API by creating a variants rule. ### Create a variants rule ### Modify to only allow WebP variants ### Delete the rule - + ### Get the rule - + To learn more about purging varied images, refer to [Purge varied images](/cache/how-to/purge-cache/purge-varied-images/). ## Limitations -* For Vary for images to work, your image URLs must include the file extension in the path and not the query string. For example the URL `https://example.com/image.jpg` is compatible but `https://example.com/index.php?file=image.jpg` is not compatible. -* Your origin must return an image type matching the file extension in the URL when a HTTP client sends no `Accept` header, or an `Accept: */*` header. Otherwise, you will see `CF-Cache-Status: BYPASS` in the HTTP response headers. +- For Vary for images to work, your image URLs must include the file extension in the path and not the query string. For example the URL `https://example.com/image.jpg` is compatible but `https://example.com/index.php?file=image.jpg` is not compatible. +- Your origin must return an image type matching the file extension in the URL when a HTTP client sends no `Accept` header, or an `Accept: */*` header. Otherwise, you will see `CF-Cache-Status: BYPASS` in the HTTP response headers. diff --git a/src/content/docs/cache/cache-security/avoid-web-poisoning.mdx b/src/content/docs/cache/cache-security/avoid-web-poisoning.mdx index 3978e79c7e9bb20..f115a63a6b91c56 100644 --- a/src/content/docs/cache/cache-security/avoid-web-poisoning.mdx +++ b/src/content/docs/cache/cache-security/avoid-web-poisoning.mdx @@ -19,22 +19,22 @@ A Content Delivery Network (CDN) like Cloudflare relies on cache keys to compare To deepen your understanding of the risks and vulnerabilities associated with cache poisoning, consult the following resources: -* [Practical Web Cache Poisoning](https://portswigger.net/blog/practical-web-cache-poisoning) -* [How Cloudflare protects customers from cache poisoning](https://blog.cloudflare.com/cache-poisoning-protection/) +- [Practical Web Cache Poisoning](https://portswigger.net/blog/practical-web-cache-poisoning) +- [How Cloudflare protects customers from cache poisoning](https://blog.cloudflare.com/cache-poisoning-protection/) ## Only cache files that are truly static Review the caching configuration for your origin web server and ensure you are caching files that are static and do not depend on user input in any way. To learn more about Cloudflare caching, review: -* [Which file extensions does Cloudflare cache for static content?](/cache/concepts/default-cache-behavior/) -* [How Do I Tell Cloudflare What to Cache?](/cache/how-to/cache-rules/) +- [Which file extensions does Cloudflare cache for static content?](/cache/concepts/default-cache-behavior/) +- [How Do I Tell Cloudflare What to Cache?](/cache/how-to/cache-rules/) ## Do not trust data in HTTP headers Attackers can exploit HTTP headers to inject malicious content into cached responses. For example, if your application reflects an untrusted header value in the response body, an attacker could use this to perform cross-site scripting (XSS) through the cache. To reduce this risk: -* Do not rely on values in HTTP headers if they are not part of your [cache key](/cache/how-to/cache-keys/). -* Do not include untrusted header values in your response body. +- Do not rely on values in HTTP headers if they are not part of your [cache key](/cache/how-to/cache-keys/). +- Do not include untrusted header values in your response body. ## Do not trust GET request bodies @@ -44,6 +44,6 @@ Cloudflare caches contents of GET request bodies, but they are not included in t To keep informed about Internet security threats, Cloudflare recommends that you monitor web security advisories on a regular basis. Some of the more popular advisories include: -* [Drupal Security Advisories](https://www.drupal.org/security) -* [Symfony Security Advisories](https://symfony.com/blog/category/security-advisories) -* [Laminas Security Advisories](https://getlaminas.org/security/advisories) +- [Drupal Security Advisories](https://www.drupal.org/security) +- [Symfony Security Advisories](https://symfony.com/blog/category/security-advisories) +- [Laminas Security Advisories](https://getlaminas.org/security/advisories) diff --git a/src/content/docs/cache/cache-security/cache-deception-armor.mdx b/src/content/docs/cache/cache-security/cache-deception-armor.mdx index a008458a9255072..2b41dc71ac0ea52 100644 --- a/src/content/docs/cache/cache-security/cache-deception-armor.mdx +++ b/src/content/docs/cache/cache-security/cache-deception-armor.mdx @@ -24,9 +24,9 @@ In the newsfeed example above, if `http://www.example.com/newsfeed` is a script ### Exceptions -* If the returned `Content-Type` is `application/octet-stream`, the extension does not matter because that is typically a signal to instruct the browser to save the asset instead of to display it. -* Cloudflare allows `.jpg` to be served as `image/webp` or `.gif` as `video/webm` and other cases that are unlikely to be attacks. -* Keep in mind that Cache Deception Armor depends upon [Origin Cache Control](/cache/concepts/cache-control/). A `Cache-Control` header from the origin, or an [Edge Cache TTL Cache Rule](/cache/how-to/cache-rules/settings/#edge-ttl) may override the protection. +- If the returned `Content-Type` is `application/octet-stream`, the extension does not matter because that is typically a signal to instruct the browser to save the asset instead of to display it. +- Cloudflare allows `.jpg` to be served as `image/webp` or `.gif` as `video/webm` and other cases that are unlikely to be attacks. +- Keep in mind that Cache Deception Armor depends upon [Origin Cache Control](/cache/concepts/cache-control/). A `Cache-Control` header from the origin, or an [Edge Cache TTL Cache Rule](/cache/how-to/cache-rules/settings/#edge-ttl) may override the protection. ## Enable Cache Deception Armor diff --git a/src/content/docs/cache/cache-security/cors.mdx b/src/content/docs/cache/cache-security/cors.mdx index 5f1e357e312c2fe..3f70fe69412f798 100644 --- a/src/content/docs/cache/cache-security/cors.mdx +++ b/src/content/docs/cache/cache-security/cors.mdx @@ -12,8 +12,8 @@ A cross-origin request occurs when a webpage on one origin (for example, `a.exam Cloudflare supports CORS by: -* Identifying cached assets based on the `Host` Header, `Origin` Header, URL path, and query. This allows different resources to use the same `Host` header but different `Origin` headers. -* Passing `Access-Control-Allow-Origin` headers from the origin server to the browser. +- Identifying cached assets based on the `Host` Header, `Origin` Header, URL path, and query. This allows different resources to use the same `Host` header but different `Origin` headers. +- Passing `Access-Control-Allow-Origin` headers from the origin server to the browser. The `Access-Control-Allow-Origin` header lets a server specify rules for sharing its resources with external origins. A server may respond with different `Access-Control-Allow-Origin` values depending on the `Origin` header in the request. These headers are often present on [cacheable content](/cache/concepts/default-cache-behavior/). @@ -21,9 +21,9 @@ The `Access-Control-Allow-Origin` header lets a server specify rules for sharing If you add or change CORS configuration at your origin web server, purging the Cloudflare cache by URL does not update the CORS headers. Force Cloudflare to retrieve the new CORS headers via one of the following options: -* Change the filename or URL to bypass cache to instruct Cloudflare to retrieve the latest CORS headers. -* Use the [single-file purge API](/api/resources/cache/methods/purge/#purge-cached-content-by-url) to specify the appropriate CORS headers along with the purge request. -* Update the resource’s last-modified time at your origin web server. Then, complete a [full purge](/cache/how-to/purge-cache/purge-everything/) to retrieve the latest version of your assets including updated CORS headers. +- Change the filename or URL to bypass cache to instruct Cloudflare to retrieve the latest CORS headers. +- Use the [single-file purge API](/api/resources/cache/methods/purge/#purge-cached-content-by-url) to specify the appropriate CORS headers along with the purge request. +- Update the resource’s last-modified time at your origin web server. Then, complete a [full purge](/cache/how-to/purge-cache/purge-everything/) to retrieve the latest version of your assets including updated CORS headers. ## Add or change CORS headers on Cloudflare @@ -32,4 +32,3 @@ You can use one of following methods to set CORS headers using Cloudflare produc - Use a [Worker](/workers/): Refer to [CORS header proxy](/workers/examples/cors-header-proxy/) for an example. - Configure a [Snippet](/rules/snippets/): Refer to [Define CORS headers](/rules/snippets/examples/define-cors-headers/) for an example. - Use [Transform Rules](/rules/transform/): Refer to [Add a wildcard CORS response header](/rules/transform/examples/add-cors-header/) for an example. - diff --git a/src/content/docs/cache/cache-security/index.mdx b/src/content/docs/cache/cache-security/index.mdx index 6f753ca961b67d0..3287619c54fa92c 100644 --- a/src/content/docs/cache/cache-security/index.mdx +++ b/src/content/docs/cache/cache-security/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 9 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the following content to learn more about cache security. diff --git a/src/content/docs/cache/concepts/cache-behavior.mdx b/src/content/docs/cache/concepts/cache-behavior.mdx index 212cd5cec8fe30f..ca4b43ee981b90a 100644 --- a/src/content/docs/cache/concepts/cache-behavior.mdx +++ b/src/content/docs/cache/concepts/cache-behavior.mdx @@ -11,8 +11,8 @@ tags: This page describes how Cloudflare's cache system behaves in interaction with: -* `HEAD` requests -* `Set-Cookie` response headers +- `HEAD` requests +- `Set-Cookie` response headers ## Interaction of `HEAD` requests with Cache @@ -24,8 +24,8 @@ When you make a `HEAD` request for a cacheable resource and Cloudflare does not For non-cacheable requests, `Set-Cookie` is always preserved. For cacheable requests, there are three possible behaviors: -* `Set-Cookie` is returned from origin and the default cache level is used. If [origin cache control](/cache/concepts/cache-control/) is not enabled, Cloudflare removes the `Set-Cookie` and caches the asset. If origin cache control is enabled, Cloudflare does not cache the asset and preserves the `Set-Cookie`. A cache status of `BYPASS` is returned. +- `Set-Cookie` is returned from origin and the default cache level is used. If [origin cache control](/cache/concepts/cache-control/) is not enabled, Cloudflare removes the `Set-Cookie` and caches the asset. If origin cache control is enabled, Cloudflare does not cache the asset and preserves the `Set-Cookie`. A cache status of `BYPASS` is returned. -* `Set-Cookie` is returned from origin and the cache level is set to `Cache Everything` in Page Rules, or `Eligible for cache` in Cache Rules. In this case, Cloudflare preserves the `Set-Cookie` but does not cache the asset. A cache `MISS` will be returned every time. +- `Set-Cookie` is returned from origin and the cache level is set to `Cache Everything` in Page Rules, or `Eligible for cache` in Cache Rules. In this case, Cloudflare preserves the `Set-Cookie` but does not cache the asset. A cache `MISS` will be returned every time. -* `Set-Cookie` is returned from origin, the cache level is set to `Cache Everything` in Page Rules, or `Eligible for cache` in Cache Rules, and edge cache TTL is explicitly set using either the "Ignore cache-control header and use this TTL" or "Status code TTL" setting. In this case, Cloudflare removes the `Set-Cookie` and the asset is cached. +- `Set-Cookie` is returned from origin, the cache level is set to `Cache Everything` in Page Rules, or `Eligible for cache` in Cache Rules, and edge cache TTL is explicitly set using either the "Ignore cache-control header and use this TTL" or "Status code TTL" setting. In this case, Cloudflare removes the `Set-Cookie` and the asset is cached. diff --git a/src/content/docs/cache/concepts/cache-responses.mdx b/src/content/docs/cache/concepts/cache-responses.mdx index a1f3935e1f26ba9..20f1007625c6956 100644 --- a/src/content/docs/cache/concepts/cache-responses.mdx +++ b/src/content/docs/cache/concepts/cache-responses.mdx @@ -7,7 +7,6 @@ products: head: - tag: title content: Cloudflare cache responses - --- The `CF-Cache-Status` header output indicates whether a resource is cached or not. To investigate cache responses returned by this header, use services like [Redbot](https://redbot.org/), [webpagetest.org](http://www.webpagetest.org/), or a visual tool like [Cloudflare Optics plugin](https://chromewebstore.google.com/detail/cloudflare-optics/mdjgbjnbdnhneejmmaabmccfehigbjbe). @@ -32,13 +31,13 @@ The resource was not found in Cloudflare's cache and was served from the origin Cloudflare generated a response that denotes the asset is not eligible for caching. This may have happened because: -* A Worker generated a response without sending any subrequests. In this case, the response did not come from cache, so the cache status will be `none/unknown`. +- A Worker generated a response without sending any subrequests. In this case, the response did not come from cache, so the cache status will be `none/unknown`. -* A Worker request made a subrequest (`fetch`). In this case, the subrequest will be logged with a cache status, while the main request will be logged with `none/unknown` status (the main request did not hit cache, since Workers sits in front of cache). +- A Worker request made a subrequest (`fetch`). In this case, the subrequest will be logged with a cache status, while the main request will be logged with `none/unknown` status (the main request did not hit cache, since Workers sits in front of cache). -* A WAF custom rule was triggered to block a request. The response will come from the Cloudflare global network before it hits cache. Since there is no cache status, Cloudflare will log as `none/unknown`. +- A WAF custom rule was triggered to block a request. The response will come from the Cloudflare global network before it hits cache. Since there is no cache status, Cloudflare will log as `none/unknown`. -* A [redirect rule](/rules/url-forwarding/) or [Always Use HTTPS](/ssl/edge-certificates/additional-options/always-use-https/) caused the global network to respond with a redirect to another asset/URL. This redirect response happens before the request reaches cache, so the cache status is `none/unknown`. +- A [redirect rule](/rules/url-forwarding/) or [Always Use HTTPS](/ssl/edge-certificates/additional-options/always-use-https/) caused the global network to respond with a redirect to another asset/URL. This redirect response happens before the request reaches cache, so the cache status is `none/unknown`. ## EXPIRED diff --git a/src/content/docs/cache/concepts/cdn-cache-control.mdx b/src/content/docs/cache/concepts/cdn-cache-control.mdx index 81e86ba54273c84..ae3401ebbb3fa3b 100644 --- a/src/content/docs/cache/concepts/cdn-cache-control.mdx +++ b/src/content/docs/cache/concepts/cdn-cache-control.mdx @@ -18,11 +18,11 @@ If a [Cache Response Rule](/cache/how-to/cache-response-rules/) sets `Cache-Cont When no Cache Response Rule applies, an origin can: -* Return the `CDN-Cache-Control` response header which Cloudflare evaluates to make caching decisions. `Cache-Control`, if also returned by the origin, is proxied as is and does not affect caching decisions made by Cloudflare. Additionally, `CDN-Cache-Control` is proxied downstream in case there are other CDNs between Cloudflare and the browser. +- Return the `CDN-Cache-Control` response header which Cloudflare evaluates to make caching decisions. `Cache-Control`, if also returned by the origin, is proxied as is and does not affect caching decisions made by Cloudflare. Additionally, `CDN-Cache-Control` is proxied downstream in case there are other CDNs between Cloudflare and the browser. -* Return the `Cloudflare-CDN-Cache-Control` response header. This results in the same behavior as the origin returning `CDN-Cache-Control` except Cloudflare does not proxy `Cloudflare-CDN-Cache-Control` downstream because it’s a header only used to control Cloudflare. This option is beneficial if you want only Cloudflare to have a different caching behavior while all other downstream servers rely on `Cache-Control` or if you do not want Cloudflare to proxy the `CDN-Cache-Control` header downstream. +- Return the `Cloudflare-CDN-Cache-Control` response header. This results in the same behavior as the origin returning `CDN-Cache-Control` except Cloudflare does not proxy `Cloudflare-CDN-Cache-Control` downstream because it’s a header only used to control Cloudflare. This option is beneficial if you want only Cloudflare to have a different caching behavior while all other downstream servers rely on `Cache-Control` or if you do not want Cloudflare to proxy the `CDN-Cache-Control` header downstream. -* Return both `Cloudflare-CDN-Cache-Control` and `CDN-Cache-Control` response headers. In this case, Cloudflare only looks at `Cloudflare-CDN-Cache-Control` when making caching decisions because it is the most specific version of `CDN-Cache-Control` and proxies `CDN-Cache-Control` downstream. Only forwarding `CDN-Cache-Control` in this situation is beneficial if you want Cloudflare to have a different caching behavior than other CDNs downstream. +- Return both `Cloudflare-CDN-Cache-Control` and `CDN-Cache-Control` response headers. In this case, Cloudflare only looks at `Cloudflare-CDN-Cache-Control` when making caching decisions because it is the most specific version of `CDN-Cache-Control` and proxies `CDN-Cache-Control` downstream. Only forwarding `CDN-Cache-Control` in this situation is beneficial if you want Cloudflare to have a different caching behavior than other CDNs downstream. Additionally, surrogates will not honor `Cache-Control` headers in the response from an origin. For example, if the `Surrogate-Control` header is present within the response, Cloudflare ignores any `Cache-Control` directives, even if the `Surrogate-Control` header does not contain directives. @@ -52,61 +52,61 @@ Use `CDN-Cache-Control` when you want to manage cached asset’s TTLs separately Headers: -* `Cache-Control: max-age=14400, s-maxage=84000` -* `Cloudflare-CDN-Cache-Control: max-age=24400` -* `CDN-Cache-Control: max-age=18000` +- `Cache-Control: max-age=14400, s-maxage=84000` +- `Cloudflare-CDN-Cache-Control: max-age=24400` +- `CDN-Cache-Control: max-age=18000` Cache behavior: - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
- Caches - - Cache TTL (seconds) -
- Origin Server Cache - - 14400 -
- Network Shared Cache - - 84000 -
- Cloudflare Edge - - 24400 -
- Other CDNs - - 18000 -
- Browser Cache - - 14400 -
+ Caches + + Cache TTL (seconds) +
+ Origin Server Cache + + 14400 +
+ Network Shared Cache + + 84000 +
+ Cloudflare Edge + + 24400 +
+ Other CDNs + + 18000 +
+ Browser Cache + + 14400 +
### Specify when to serve stale content @@ -115,43 +115,43 @@ Use `CDN-Cache-Control` headers in conjunction with `Cache-Control` headers to s Headers: -* `Cache-Control: stale-if-error=400` -* `Cloudflare-CDN-Cache-Control: stale-if-error=60` -* `CDN-Cache-Control: stale-if-error=200` +- `Cache-Control: stale-if-error=400` +- `Cloudflare-CDN-Cache-Control: stale-if-error=60` +- `CDN-Cache-Control: stale-if-error=200` Behavior in response to [5XX error](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/): - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
- Caches - - Stale served (seconds) in response to error -
- Origin Cache Layer/Network Cache/Browser Cache - - 400 (if it assumes the directive applies) -
- Cloudflare Edge - - 60 -
- Other CDN - - 200 -
+ Caches + + Stale served (seconds) in response to error +
+ Origin Cache Layer/Network Cache/Browser Cache + + 400 (if it assumes the directive applies) +
+ Cloudflare Edge + + 60 +
+ Other CDN + + 200 +
diff --git a/src/content/docs/cache/concepts/customize-cache.mdx b/src/content/docs/cache/concepts/customize-cache.mdx index c4f49110ea13c65..1a9047525da3655 100644 --- a/src/content/docs/cache/concepts/customize-cache.mdx +++ b/src/content/docs/cache/concepts/customize-cache.mdx @@ -4,7 +4,6 @@ pcx_content_type: concept description: Methods for customizing cache behavior with rules, Workers, and headers. products: - cache - --- Some possible combinations of origin web server settings and Cloudflare [Cache Rules](/cache/how-to/cache-rules/) include: @@ -13,21 +12,21 @@ Some possible combinations of origin web server settings and Cloudflare [Cache R For example, create a `/static/` subdirectory at your origin web server and a Cache Everything Cache Rule matching the following expression: -* Using the Expression Builder: `Hostname contains "example.com" AND URI Path starts with "/static"` -* Using the Expression Editor: `(http.host contains "example.com" and starts_with(http.request.uri.path, "/static"))` +- Using the Expression Builder: `Hostname contains "example.com" AND URI Path starts with "/static"` +- Using the Expression Editor: `(http.host contains "example.com" and starts_with(http.request.uri.path, "/static"))` ## Append a unique file extension to static pages For example, create a `.shtml` file extension for resources at your origin web server and a Cache Everything Cache Rule matching the following expression: -* Using the Expression Builder: `Hostname contains "example.com" AND URI Path ends with ".shtml"` -* Using the Expression Editor: `(http.host contains "example.com" and ends_with(http.request.uri.path, ".shtml"))` +- Using the Expression Builder: `Hostname contains "example.com" AND URI Path ends with ".shtml"` +- Using the Expression Editor: `(http.host contains "example.com" and ends_with(http.request.uri.path, ".shtml"))` ## Add a query string to a resource’s URL to mark the content as static For example, add a `static=true` query string for resources at your origin web server and a Cache Everything Cache Rule matching the following expression: -* Using the Expression Builder: `Hostname contains "example.com" AND URI Query String contains "static=true"` -* Using the Expression Editor: `(http.host contains "example.com" and http.request.uri.query contains "static=true")` +- Using the Expression Builder: `Hostname contains "example.com" AND URI Query String contains "static=true"` +- Using the Expression Editor: `(http.host contains "example.com" and http.request.uri.query contains "static=true")` Resources that match a Cache Everything Cache Rule are still not cached if the origin web server sends a Cache-Control header of `max-age=0`, `private`, `no-cache`, or an `Expires` header with an already expired date. Include the [Edge Cache TTL](/cache/how-to/cache-rules/settings/#edge-ttl) setting within the Cache Everything Cache Rule to additionally override the `Cache-Control` headers from the origin web server. diff --git a/src/content/docs/cache/concepts/default-cache-behavior.mdx b/src/content/docs/cache/concepts/default-cache-behavior.mdx index 0f9a375df7316c6..6749f5b82907cf1 100644 --- a/src/content/docs/cache/concepts/default-cache-behavior.mdx +++ b/src/content/docs/cache/concepts/default-cache-behavior.mdx @@ -7,20 +7,24 @@ products: head: - tag: title content: Default Cache Behavior - --- -import { FeatureTable, GlossaryTooltip, Render, DashButton } from "~/components" +import { + FeatureTable, + GlossaryTooltip, + Render, + DashButton, +} from "~/components"; Cloudflare respects the origin web server’s cache headers in the following order unless an [Edge Cache TTL cache rule](/cache/how-to/cache-rules/settings/#edge-ttl) overrides the headers. Refer to the [Edge TTL](/cache/how-to/configure-cache-status-code/#edge-ttl) section for details on default TTL behavior. -* Cloudflare **does not** cache the resource when: - * The `Cache-Control` header is set to `private`, `no-store`, `no-cache`, or `max-age=0`. - * The [Set-Cookie header](/cache/concepts/cache-behavior/#interaction-of-set-cookie-response-header-with-cache) exists. - * The HTTP request method is anything other than a `GET`. -* Cloudflare **does** cache the resource when: - * The `Cache-Control` header is set to `public` and `max-age` is greater than 0. - * The `Expires` header is set to a future date. +- Cloudflare **does not** cache the resource when: + - The `Cache-Control` header is set to `private`, `no-store`, `no-cache`, or `max-age=0`. + - The [Set-Cookie header](/cache/concepts/cache-behavior/#interaction-of-set-cookie-response-header-with-cache) exists. + - The HTTP request method is anything other than a `GET`. +- Cloudflare **does** cache the resource when: + - The `Cache-Control` header is set to `public` and `max-age` is greater than 0. + - The `Expires` header is set to a future date. :::note Cloudflare does cache the resource even if there is no `Cache-Control` header based on [status codes](/cache/how-to/configure-cache-status-code/#edge-ttl). @@ -36,8 +40,8 @@ When [Origin Cache Control](/cache/concepts/cache-control/) is enabled on an Ent Clients can send range requests to be served from the cache using the `Range` header. Note that: - - If the origin response includes a `Content-Length` header, then the specified byte range will be returned with an [HTTP 206](/support/troubleshooting/http-status-codes/2xx-success/#206-partial-content) response. - - If the origin response does not include the `Content-Length` header, the cache will return the full content with an HTTP 200 response. +- If the origin response includes a `Content-Length` header, then the specified byte range will be returned with an [HTTP 206](/support/troubleshooting/http-status-codes/2xx-success/#206-partial-content) response. +- If the origin response does not include the `Content-Length` header, the cache will return the full content with an HTTP 200 response. ## Request collapsing @@ -64,10 +68,10 @@ Cloudflare only caches based on file extension and not by MIME type. The Cloudfl To cache additional content, refer to [Cache Rules](/cache/how-to/cache-rules/) to create a rule to cache everything. @@ -75,14 +79,14 @@ To cache additional content, refer to [Cache Rules](/cache/how-to/cache-rules/) Cloudflare’s CDN provides several cache customization options: -* Caching behavior for individual URLs via [Cache Rules](/cache/how-to/cache-rules/) +- Caching behavior for individual URLs via [Cache Rules](/cache/how-to/cache-rules/) - + -* Customize caching with [Cloudflare Workers](/workers/reference/how-the-cache-works/) -* Adjust caching level, cache TTL, and more in the Caching page in the Cloudflare dashboard: +- Customize caching with [Cloudflare Workers](/workers/reference/how-the-cache-works/) +- Adjust caching level, cache TTL, and more in the Caching page in the Cloudflare dashboard: - + ### Upload limits @@ -96,8 +100,8 @@ If you require a larger upload, you can group requests into smaller chunks, uplo Cloudflare cacheable file limits: -* Free, Pro and Business customers have a limit of 512 MB. -* For Enterprise customers the default maximum cacheable file size is 5 GB. Contact your account team to request a limit increase. +- Free, Pro and Business customers have a limit of 512 MB. +- For Enterprise customers the default maximum cacheable file size is 5 GB. Contact your account team to request a limit increase. ## When does Cloudflare cache successfully? diff --git a/src/content/docs/cache/concepts/index.mdx b/src/content/docs/cache/concepts/index.mdx index 9d7aa540158df71..c39bdbe713dbf77 100644 --- a/src/content/docs/cache/concepts/index.mdx +++ b/src/content/docs/cache/concepts/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 5 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the following topics to learn more about the basic concepts and components of Cloudflare Cache. diff --git a/src/content/docs/cache/concepts/retention-vs-freshness.mdx b/src/content/docs/cache/concepts/retention-vs-freshness.mdx index 1148870b16f91ca..86ee2ef5d7736c5 100644 --- a/src/content/docs/cache/concepts/retention-vs-freshness.mdx +++ b/src/content/docs/cache/concepts/retention-vs-freshness.mdx @@ -4,7 +4,6 @@ pcx_content_type: concept description: How cache retention and TTL freshness differ in Cloudflare. products: - cache - --- In the context of Cloudflare CDN (Content Delivery Network), retention and freshness refer to two separate but related concepts. For an object in cache, freshness is how long it should be considered valid without consulting its source, while retention refers to how long it stays in cache before being removed. @@ -19,8 +18,8 @@ Cloudflare uses a Least Recently Used (LRU) algorithm to decide which objects to Freshness, also known as Time to Live (TTL), determines how long a cache can use an object without checking with the origin again. For example, if an object has a TTL of five minutes, the cache serves it directly for five minutes after first receiving it. After five minutes, Cloudflare must check with the origin to confirm the object is still valid before serving it again. There are a few ways to configure TTLs for resources served through Cloudflare's CDN: -* Include [Origin Cache Control](/cache/concepts/cache-control/) or [CDN Cache Control](/cache/concepts/cache-control/) directives, like `max-age` or `s-maxage`, in the origin cache-control response header. +- Include [Origin Cache Control](/cache/concepts/cache-control/) or [CDN Cache Control](/cache/concepts/cache-control/) directives, like `max-age` or `s-maxage`, in the origin cache-control response header. -* Use [Cache Rules](/cache/how-to/cache-rules/) or [Workers](/cache/interaction-cloudflare-products/workers/). +- Use [Cache Rules](/cache/how-to/cache-rules/) or [Workers](/cache/interaction-cloudflare-products/workers/). If an object in cache is no longer fresh, Cloudflare revalidates it with the origin. When [`stale-while-revalidate`](/cache/concepts/cache-control/#revalidation) is set, revalidation happens asynchronously at expiry — visitors continue to be served from cache while Cloudflare fetches a fresh copy in the background. Without this directive, incoming requests wait for the origin to respond before receiving content. The origin can either confirm the cached object is still valid (refreshing its TTL) or return a new version to replace it. Refer to [Revalidation](/cache/concepts/revalidation/) for details. diff --git a/src/content/docs/cache/concepts/revalidation.mdx b/src/content/docs/cache/concepts/revalidation.mdx index be6792de1f48057..f289dc2c55c0ce6 100644 --- a/src/content/docs/cache/concepts/revalidation.mdx +++ b/src/content/docs/cache/concepts/revalidation.mdx @@ -4,7 +4,6 @@ pcx_content_type: concept description: How Cloudflare revalidates stale cached content with your origin. products: - cache - --- ## Stale-while-revalidate diff --git a/src/content/docs/cache/get-started.mdx b/src/content/docs/cache/get-started.mdx index ab1be9257230ee3..485414c218db17e 100644 --- a/src/content/docs/cache/get-started.mdx +++ b/src/content/docs/cache/get-started.mdx @@ -13,7 +13,7 @@ head: content: Get started with Cache --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Cloudflare speeds up your website by caching content across globally distributed data centers. @@ -21,12 +21,12 @@ Content can be static or dynamic. Static content — such as images, CSS, and Ja Cloudflare caches static content based on the following factors: -* [Caching levels](/cache/how-to/set-caching-levels/) -* [File extension](/cache/concepts/default-cache-behavior/#default-cached-file-extensions) -* Presence of [query strings](/cache/advanced-configuration/query-string-sort/) -* [Origin cache-control headers](/cache/concepts/cache-control/) -* Origin headers that indicate dynamic content -* Cache rules that bypass cache on cookie +- [Caching levels](/cache/how-to/set-caching-levels/) +- [File extension](/cache/concepts/default-cache-behavior/#default-cached-file-extensions) +- Presence of [query strings](/cache/advanced-configuration/query-string-sort/) +- [Origin cache-control headers](/cache/concepts/cache-control/) +- Origin headers that indicate dynamic content +- Cache rules that bypass cache on cookie Cloudflare only caches resources within the Cloudflare data center that serve the request. Cloudflare does not cache off-site or third-party resources, or content hosted on [DNS-only (unproxied)](/dns/proxy-status/) DNS records. @@ -34,35 +34,35 @@ Cloudflare only caches resources within the Cloudflare data center that serve th Discover the benefits of caching with Cloudflare's CDN and understand the default cache behavior. -* [Understand what is a CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/) -* [Understand default cache behavior](/cache/concepts/default-cache-behavior/) -* [Understand the default file types Cloudflare caches](/cache/concepts/default-cache-behavior/#default-cached-file-extensions) +- [Understand what is a CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/) +- [Understand default cache behavior](/cache/concepts/default-cache-behavior/) +- [Understand the default file types Cloudflare caches](/cache/concepts/default-cache-behavior/#default-cached-file-extensions) ## Make more resources cacheable Configure your settings to cache static HTML or cache anonymous page views of dynamic content. -* [Customize Caching with Cache Rules](/cache/how-to/cache-rules/) -* [Specify which resources to cache](/cache/concepts/customize-cache/) -* [Understand Origin Cache Control](/cache/concepts/cache-control/) -* [Cache by device type (Enterprise only)](/cache/how-to/cache-rules/examples/cache-device-type/) +- [Customize Caching with Cache Rules](/cache/how-to/cache-rules/) +- [Specify which resources to cache](/cache/concepts/customize-cache/) +- [Understand Origin Cache Control](/cache/concepts/cache-control/) +- [Cache by device type (Enterprise only)](/cache/how-to/cache-rules/examples/cache-device-type/) ## Improve cache HIT rates Include or exclude query strings, optimize cache keys, or enable [Tiered Cache](/cache/how-to/tiered-cache/) to improve HIT rates and reduce traffic to your origin. -* [Choose a cache level](/cache/how-to/set-caching-levels/) -* [Enable Tiered Cache with Argo](/cache/how-to/tiered-cache/#enable-tiered-cache) -* [Configure custom cache keys (Enterprise only)](/cache/how-to/cache-keys/) -* [Enable Prefetch URLs (Enterprise only)](/speed/optimization/content/prefetch-urls/) +- [Choose a cache level](/cache/how-to/set-caching-levels/) +- [Enable Tiered Cache with Argo](/cache/how-to/tiered-cache/#enable-tiered-cache) +- [Configure custom cache keys (Enterprise only)](/cache/how-to/cache-keys/) +- [Enable Prefetch URLs (Enterprise only)](/speed/optimization/content/prefetch-urls/) ## Secure your cache configuration Control resources a client is allowed to load and set access permissions to allow different origins to access your origin's resources. Protect your site from web cache deception attacks while still caching static assets. -* [Avoid web cache poisoning attacks](/cache/cache-security/avoid-web-poisoning/) -* [Configure Cross-Origin Resource Sharing (CORS)](/cache/cache-security/cors/) -* [Enable Cache Deception Armor](/cache/cache-security/cache-deception-armor/#enable-cache-deception-armor) +- [Avoid web cache poisoning attacks](/cache/cache-security/avoid-web-poisoning/) +- [Configure Cross-Origin Resource Sharing (CORS)](/cache/cache-security/cors/) +- [Enable Cache Deception Armor](/cache/cache-security/cache-deception-armor/#enable-cache-deception-armor) ## Features that alter cached content @@ -70,16 +70,16 @@ Some Cloudflare features modify your HTML or cached objects at the edge to enabl These alterations only affect cached copies at Cloudflare's edge and do not change your original source files. Cloudflare removes the changes when you disable the feature and purge the cache. These alterations only affect cached copies at Cloudflare's edge and do not change your original source files. The changes are removed if the feature is disabled and the cache is purged. -* [Rocket Loader](/speed/optimization/content/rocket-loader/) -* [Polish](/images/polish/) -* [Hotlink Protection](/waf/tools/scrape-shield/hotlink-protection/) -* [Email address obfuscation](/waf/tools/scrape-shield/email-address-obfuscation/) -* [Bot Management JavaScript Detections](/bots/additional-configurations/javascript-detections/) +- [Rocket Loader](/speed/optimization/content/rocket-loader/) +- [Polish](/images/polish/) +- [Hotlink Protection](/waf/tools/scrape-shield/hotlink-protection/) +- [Email address obfuscation](/waf/tools/scrape-shield/email-address-obfuscation/) +- [Bot Management JavaScript Detections](/bots/additional-configurations/javascript-detections/) ## Troubleshoot Resolve common caching concerns. -* [Learn about Cloudflare's cache response statuses](/cache/concepts/cache-responses/) -* [Investigate Cloudflare's cache response with cURL](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/#troubleshoot-requests-with-curl) -* [Diagnose Always Online issues](/cache/troubleshooting/always-online/) +- [Learn about Cloudflare's cache response statuses](/cache/concepts/cache-responses/) +- [Investigate Cloudflare's cache response with cURL](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/#troubleshoot-requests-with-curl) +- [Diagnose Always Online issues](/cache/troubleshooting/always-online/) diff --git a/src/content/docs/cache/glossary.mdx b/src/content/docs/cache/glossary.mdx index 93414f59d8d1137..ae52887a0324745 100644 --- a/src/content/docs/cache/glossary.mdx +++ b/src/content/docs/cache/glossary.mdx @@ -4,10 +4,9 @@ pcx_content_type: glossary description: Definitions for terms used across Cloudflare Cache documentation. products: - cache - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Cache documentation. diff --git a/src/content/docs/cache/how-to/always-online.mdx b/src/content/docs/cache/how-to/always-online.mdx index 5e0cffeecb60098..26540e1b1bc9dfc 100644 --- a/src/content/docs/cache/how-to/always-online.mdx +++ b/src/content/docs/cache/how-to/always-online.mdx @@ -4,10 +4,9 @@ pcx_content_type: concept description: Serve cached pages when your origin server is unavailable. products: - cache - --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; Cloudflare’s Always Online feature is now integrated with the [Internet Archive](https://archive.org/) so that visitors can access a portion of your website even when your origin server is unreachable and a Cloudflare-cached version is unavailable. When your origin is unreachable, Always Online checks Cloudflare’s cache for a stale or expired version of your website. If a version does not exist, Cloudflare goes to the Internet Archive to fetch and serve static portions of your website. @@ -46,10 +45,8 @@ Here is how to enable Always Online in the dashboard: :::note[Note] - When turning on Always Online, you are also enabling the Internet Archive integration. - ::: Refer to [Always Online](/cache/troubleshooting/always-online/) for best practices, limitations, and FAQs. diff --git a/src/content/docs/cache/how-to/cache-keys.mdx b/src/content/docs/cache/how-to/cache-keys.mdx index 59b3e1e4cd98538..8afbd280f376234 100644 --- a/src/content/docs/cache/how-to/cache-keys.mdx +++ b/src/content/docs/cache/how-to/cache-keys.mdx @@ -14,16 +14,16 @@ head: content: Cache Keys --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; A Cache Key is an identifier that Cloudflare uses for a file in our cache, and the Cache Key Template defines the identifier for a given HTTP request. A default cache key includes: 1. Full URL: - * scheme - could be HTTP or HTTPS. - * host - for example, `www.cloudflare.com` - * URI with query string - for example, `/logo.jpg?utm_source=newsletter` + - scheme - could be HTTP or HTTPS. + - host - for example, `www.cloudflare.com` + - URI with query string - for example, `/logo.jpg?utm_source=newsletter` 2. Origin header sent by client (for CORS support). 3. `x-http-method-override`, `x-http-method`, and `x-method-override` headers. 4. `x-forwarded-host`, `x-host`, `x-forwarded-scheme` (unless http or https), `x-original-url`, `x-rewrite-url`, and `forwarded` headers. @@ -51,8 +51,8 @@ When [URL normalization](/rules/normalization/) is enabled, we recommend also en There are a couple of common reasons to change the Cache Key Template. You might change the Cache Key Template to: -* Fragment the cache so one URL is stored in multiple files. For example, to store different files based on a specific query string in the URL. -* Consolidate the cache so different HTTP requests are stored in the same file. For example, to remove the Origin header added to Cloudflare Cache Keys by default. +- Fragment the cache so one URL is stored in multiple files. For example, to store different files based on a specific query string in the URL. +- Consolidate the cache so different HTTP requests are stored in the same file. For example, to remove the Origin header added to Cloudflare Cache Keys by default. ### Impact of SSL settings on Cache behavior @@ -90,9 +90,9 @@ If you include the query string foo in a URL like `https://www.example.com/?foo= #### Usage notes -* To include all query string parameters (the default behavior), use include: `"\*"` -* To ignore query strings, use exclude: `"\*"` -* To include most query string parameters but exclude a few, use the exclude field which assumes the other query string parameters are included. +- To include all query string parameters (the default behavior), use include: `"\*"` +- To ignore query strings, use exclude: `"\*"` +- To include most query string parameters but exclude a few, use the exclude field which assumes the other query string parameters are included. ### Headers @@ -102,13 +102,13 @@ When you include a header, the header value is included in the Cache Key. For ex In the **Include headers and selected values** section, you can add header names and their values to the cache key. For custom headers, values are optional, but for the following restricted headers, you must include one to 10 specific values: - * `accept` - * `accept-charset` - * `accept-encoding` - * `accept-datetime` - * `accept-language` - * `referer` - * `user-agent` +- `accept` +- `accept-charset` +- `accept-encoding` +- `accept-datetime` +- `accept-language` +- `referer` +- `user-agent` To check for the presence of a header without including its actual value, use the **Check presence of** option. @@ -116,28 +116,28 @@ Currently, you can only exclude the `Origin` header. The `Origin` header is alwa Additionally, you cannot include the following headers: -* Headers that re-implement cache or proxy features - * `connection` - * `content-length` - * `cache-control` - * `if-match` - * `if-modified-since` - * `if-none-match` - * `if-unmodified-since` - * `range` - * `upgrade` -* Headers that are covered by other Cache Key features - * `cookie` - * `host` -* Headers that are specific to Cloudflare and prefixed with `cf-`, for example, `cf-ray` -* Headers that are already included in the custom Cache Key template, for example, `origin` +- Headers that re-implement cache or proxy features + - `connection` + - `content-length` + - `cache-control` + - `if-match` + - `if-modified-since` + - `if-none-match` + - `if-unmodified-since` + - `range` + - `upgrade` +- Headers that are covered by other Cache Key features + - `cookie` + - `host` +- Headers that are specific to Cloudflare and prefixed with `cf-`, for example, `cf-ray` +- Headers that are already included in the custom Cache Key template, for example, `origin` ### Host Host determines which host header to include in the Cache Key. -* If `Use original host` (`resolved: false` in the API), Cloudflare includes the `Host` header in the HTTP request sent to the origin. -* If `Resolved host` (`resolved: true` in the API), Cloudflare includes the `Host` header that was resolved to get the `origin IP` for the request. The `Host` header may be different from the header actually sent if it has been changed with an [Origin Rule](/rules/origin-rules/features/#dns-record). +- If `Use original host` (`resolved: false` in the API), Cloudflare includes the `Host` header in the HTTP request sent to the origin. +- If `Resolved host` (`resolved: true` in the API), Cloudflare includes the `Host` header that was resolved to get the `origin IP` for the request. The `Host` header may be different from the header actually sent if it has been changed with an [Origin Rule](/rules/origin-rules/features/#dns-record). ### Cookie @@ -151,9 +151,9 @@ You cannot include cookies specific to Cloudflare. Cloudflare cookies are prefix User feature fields add features about the end-user (client) into the Cache Key. -* `device_type` classifies a request as `mobile`, `desktop`, or `tablet` based on the User Agent -* `geo` includes the client’s country, derived from the IP address -* `lang` includes the first language code contained in the `Accept-Language` header sent by the client +- `device_type` classifies a request as `mobile`, `desktop`, or `tablet` based on the User Agent +- `geo` includes the client’s country, derived from the IP address +- `lang` includes the first language code contained in the `Accept-Language` header sent by the client ## Availability diff --git a/src/content/docs/cache/how-to/cache-response-rules/create-dashboard.mdx b/src/content/docs/cache/how-to/cache-response-rules/create-dashboard.mdx index f8032d4bd1be12e..7c75c81a407e301 100644 --- a/src/content/docs/cache/how-to/cache-response-rules/create-dashboard.mdx +++ b/src/content/docs/cache/how-to/cache-response-rules/create-dashboard.mdx @@ -30,7 +30,6 @@ import { Render, DashButton } from "~/components"; 7. Following the selection of the field and operator, enter the corresponding value that will trigger the Cache Response Rule. For example, if the selected field is `Hostname` and the operator is `equals`, a value of `example.com` would mean the rule matches any request to that hostname. 8. Under **Then**, select one of the following actions: - - **Modify cache-control directives**: Set or remove `Cache-Control` directives sent by your origin. For each directive, choose **Set directive** or **Remove directive**. For duration-based directives like `max-age` or `s-maxage`, enter a value in seconds. Turn on **Cloudflare only** to apply the directive only within Cloudflare's cache without changing what visitors receive. Refer to [Supported directives](/cache/how-to/cache-response-rules/settings/#supported-directives) for the full list. - **Modify cache tags**: Add, override, or remove cache tags on the response for targeted [purging](/cache/how-to/purge-cache/purge-by-tags/). Select one of the following operations: @@ -43,7 +42,8 @@ import { Render, DashButton } from "~/components"; - **Strip headers**: Remove `Set-Cookie`, `ETag`, or `Last-Modified` headers from the origin response before Cloudflare evaluates the response for caching. Select which headers to strip. For more details on each action, refer to [Available settings](/cache/how-to/cache-response-rules/settings/#available-actions). + 9. Under **Place at**, from the dropdown, you can select the order of your rule. From the main page, you can also change the order of the rules you have created. 10. To save and deploy your rule, select **Deploy**. If you are not ready to deploy your rule, select **Save as Draft**. - + diff --git a/src/content/docs/cache/how-to/cache-rules/examples/index.mdx b/src/content/docs/cache/how-to/cache-rules/examples/index.mdx index ba3e5a14e0342aa..24434a23533ec9f 100644 --- a/src/content/docs/cache/how-to/cache-rules/examples/index.mdx +++ b/src/content/docs/cache/how-to/cache-rules/examples/index.mdx @@ -1,5 +1,4 @@ --- - hideChildren: false pcx_content_type: navigation description: Example cache rule configurations for common use cases. @@ -8,10 +7,9 @@ products: title: Examples sidebar: order: 8 - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; In the following sections, you can find common cache rules examples. diff --git a/src/content/docs/cache/how-to/cache-rules/order.mdx b/src/content/docs/cache/how-to/cache-rules/order.mdx index 40377bc15fa1145..5810d731d8608f8 100644 --- a/src/content/docs/cache/how-to/cache-rules/order.mdx +++ b/src/content/docs/cache/how-to/cache-rules/order.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Order and priority - --- -import { Render } from "~/components" +import { Render } from "~/components"; Cache rules affect requests differently from Page Rules. This is how they are applied: diff --git a/src/content/docs/cache/how-to/cache-rules/page-rules-migration.mdx b/src/content/docs/cache/how-to/cache-rules/page-rules-migration.mdx index 6541177a91b6aa8..b1875b3767c20c3 100644 --- a/src/content/docs/cache/how-to/cache-rules/page-rules-migration.mdx +++ b/src/content/docs/cache/how-to/cache-rules/page-rules-migration.mdx @@ -13,7 +13,7 @@ head: content: Migration from Page Rules --- -import { TabItem, Tabs } from "~/components" +import { TabItem, Tabs } from "~/components"; If you are migrating from Page Rules, there is a behavior change between Page Rules and Cache Rules. @@ -64,10 +64,8 @@ If you prefer, you can select **Edit expression** and paste the following expres :::note[Note] - Remember to create the rules in the specified order: first, the `bypass everything` rule, and then the `cache all default cacheable file extensions` rule. ![Rules order](~/assets/images/cache/rule-order.png) - ::: diff --git a/src/content/docs/cache/how-to/configure-cache-status-code.mdx b/src/content/docs/cache/how-to/configure-cache-status-code.mdx index 2c71df51f6c0e94..c30d541d4d833c7 100644 --- a/src/content/docs/cache/how-to/configure-cache-status-code.mdx +++ b/src/content/docs/cache/how-to/configure-cache-status-code.mdx @@ -8,7 +8,7 @@ tags: - REST API --- -import { Render } from "~/components" +import { Render } from "~/components"; Customers can set cache time-to-live (TTL) based on the response status from the origin web server. Cache TTL refers to the duration of a resource in the Cloudflare network before being marked as `STALE` or discarded from cache. Status codes are returned by a resource's origin. @@ -19,10 +19,10 @@ Setting cache TTL based on response status overrides the [default cache behavior The maximum caching limit for Free, Pro, and Business customers is 512 MB per file, and the maximum caching limit for Enterprise customers is 5 GB per file. If you need to raise the limits, contact your Customer Success Manager. @@ -79,9 +79,9 @@ curl --request PUT \ Provide a JSON object containing status codes and their corresponding TTLs. Each key-value pair in the cache TTL by status cache rule has the following syntax: -* `status_code`: An integer value such as 200 or 500. `status_code` matches the exact status code from the origin web server. Valid status codes are between 100-999. -* `status_code_range`: Integer values for `from` and `to`. `status_code_range` matches any status code from the origin web server within the specified range. -* `value`: An integer value that defines the duration an asset is valid in seconds or one of the following strings: `no-store` (equivalent to `-1`), `no-cache` (equivalent to `0`). +- `status_code`: An integer value such as 200 or 500. `status_code` matches the exact status code from the origin web server. Valid status codes are between 100-999. +- `status_code_range`: Integer values for `from` and `to`. `status_code_range` matches any status code from the origin web server within the specified range. +- `value`: An integer value that defines the duration an asset is valid in seconds or one of the following strings: `no-store` (equivalent to `-1`), `no-cache` (equivalent to `0`). ## Set cache TTL by response status via a Cloudflare Worker @@ -98,4 +98,4 @@ The **cacheTtlByStatus** option is a version of the **cacheTtl** feature that de For example, if a user specifies a TTL of one hour for status `200` and 0 seconds (cache and always revalidate) for status `304`, the asset will be cached for 1 hour. After it expires, we revalidate with the origin. If the origin returns a `304`, each subsequent request will trigger revalidation. If the origin continues to return `304`, this cycle will persist. -This behavior is likely undesirable unless the user has a specific use case. Therefore, users should ensure that the TTL for `304` matches the TTL for `200` unless they intentionally require this behavior. \ No newline at end of file +This behavior is likely undesirable unless the user has a specific use case. Therefore, users should ensure that the TTL for `304` matches the TTL for `200` unless they intentionally require this behavior. diff --git a/src/content/docs/cache/how-to/edge-browser-cache-ttl/index.mdx b/src/content/docs/cache/how-to/edge-browser-cache-ttl/index.mdx index 9bd8eb61f1eeb6f..c26df5fd963f037 100644 --- a/src/content/docs/cache/how-to/edge-browser-cache-ttl/index.mdx +++ b/src/content/docs/cache/how-to/edge-browser-cache-ttl/index.mdx @@ -4,10 +4,9 @@ pcx_content_type: concept description: Configure edge and browser cache TTL for your resources. products: - cache - --- -import { FeatureTable } from "~/components" +import { FeatureTable } from "~/components"; ## Edge Cache TTL @@ -21,17 +20,16 @@ For more information on how to set up Edge Cache TTL, refer to [Cache rules](/ca The Browser Cache TTL sets the expiration for resources cached in a visitor’s browser. By default, Cloudflare honors the cache expiration set in your `Expires` and `Cache-Control` headers but overrides those headers if: -* The value of the `Expires` or `Cache-Control` header from the origin web server is less than the Browser Cache TTL Cloudflare setting. -* The origin web server does not send a `Cache-Control` or an `Expires` header. +- The value of the `Expires` or `Cache-Control` header from the origin web server is less than the Browser Cache TTL Cloudflare setting. +- The origin web server does not send a `Cache-Control` or an `Expires` header. Unless specifically set in a cache rule, Cloudflare does not override or insert `Cache-Control` headers if you set **Browser Cache TTL** to **Respect Existing Headers**. :::note[Note] - -* Setting high Browser Cache TTL values means that the assets will be cached for a long time by users’ browsers. -* If you modify cached assets, the new assets may not be displayed to repeat visitors before the Browser Cache TTL expires. -* Purging Cloudflare’s cache does not affect assets stored by a visitor’s browser. +- Setting high Browser Cache TTL values means that the assets will be cached for a long time by users’ browsers. +- If you modify cached assets, the new assets may not be displayed to repeat visitors before the Browser Cache TTL expires. +- Purging Cloudflare’s cache does not affect assets stored by a visitor’s browser. ::: diff --git a/src/content/docs/cache/how-to/edge-browser-cache-ttl/set-browser-ttl.mdx b/src/content/docs/cache/how-to/edge-browser-cache-ttl/set-browser-ttl.mdx index fcaf35844aa8d00..bed629ee6ba70c8 100644 --- a/src/content/docs/cache/how-to/edge-browser-cache-ttl/set-browser-ttl.mdx +++ b/src/content/docs/cache/how-to/edge-browser-cache-ttl/set-browser-ttl.mdx @@ -6,7 +6,6 @@ products: - cache sidebar: order: 3 - --- import { DashButton } from "~/components"; @@ -15,8 +14,8 @@ Specify a time for a visitor’s Browser Cache TTL to accelerate the page load f By default, Cloudflare honors the cache expiration set in your `Expires` and `Cache-Control` headers. Cloudflare overrides any `Cache-Control` or `Expires` headers with values set via the **Browser Cache TTL** option under **Caching** on your dashboard if: -* The value of the `Cache-Control` header from the origin web server is less than the **Browser Cache TTL** setting. This means that **Browser cache TTL** value needs to be higher than origin `max-age`. -* The origin web server does not send a `Cache-Control` or an `Expires` header. +- The value of the `Cache-Control` header from the origin web server is less than the **Browser Cache TTL** setting. This means that **Browser cache TTL** value needs to be higher than origin `max-age`. +- The origin web server does not send a `Cache-Control` or an `Expires` header. Unless specifically set in a [Cache Rule](/cache/how-to/cache-rules/), Cloudflare does not override or insert `Cache-Control` headers if you set **Browser Cache TTL** to **Respect Existing Headers**. @@ -26,10 +25,8 @@ Nevertheless, the value you set via Cache Rule will be ignored if `Cache-Control :::note[Note] - If you modify cached assets, the new asset is not displayed to repeat visitors before the Browser Cache TTL duration. [Purging Cloudflare’s cache](/cache/how-to/purge-cache/) does not affect assets cached in a visitor’s browser. - ::: 1. In the Cloudflare dashboard, go to the **Caching** page. diff --git a/src/content/docs/cache/how-to/index.mdx b/src/content/docs/cache/how-to/index.mdx index 80c1f5c0266452d..9bb4c1c487aacad 100644 --- a/src/content/docs/cache/how-to/index.mdx +++ b/src/content/docs/cache/how-to/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Learn how to complete different configuration options to customize your cache behavior. diff --git a/src/content/docs/cache/how-to/purge-cache/purge-by-hostname.mdx b/src/content/docs/cache/how-to/purge-cache/purge-by-hostname.mdx index eccbbdee17432d8..f33d3c2f25167fd 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-by-hostname.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-by-hostname.mdx @@ -6,10 +6,9 @@ products: - cache sidebar: order: 4 - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; Purging by hostname means that all assets at URLs with a host that matches one of the provided values will be instantly purged from the cache. @@ -20,9 +19,9 @@ Purging by hostname means that all assets at URLs with a host that matches one o 2. Under **Purge Cache**, select **Custom Purge**. The **Custom Purge** window appears. 3. Under **Purge by**, select **Hostname**. 4. Follow the syntax instructions: - * One hostname per line. - * Separated by commas. - * You can purge up to 30 hostnames at a time. + - One hostname per line. + - Separated by commas. + - You can purge up to 30 hostnames at a time. 5. Enter the appropriate value(s) in the text field using the format shown in the example. 6. Select **Purge**. diff --git a/src/content/docs/cache/how-to/purge-cache/purge-by-single-file.mdx b/src/content/docs/cache/how-to/purge-cache/purge-by-single-file.mdx index 1eba5da16e5ee10..20267fbc6318106 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-by-single-file.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-by-single-file.mdx @@ -8,7 +8,7 @@ sidebar: order: 1 --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; With purge by single-file, cached resources are instantly removed from the stored assets in your Content Delivery Network (CDN) across all data centers. New requests for the purged asset receive the latest version from your origin web server and add it back to your CDN cache within the specific Cloudflare data center that served the request. diff --git a/src/content/docs/cache/how-to/purge-cache/purge-by-tags.mdx b/src/content/docs/cache/how-to/purge-cache/purge-by-tags.mdx index 0531322accc993e..0b305a3f14ae32d 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-by-tags.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-by-tags.mdx @@ -6,10 +6,9 @@ products: - cache sidebar: order: 3 - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; Cache-tag purging makes multi-file purging easier because you can instantly bulk purge by adding cache-tags to your assets, such as webpages, image files, and more. @@ -23,10 +22,8 @@ Cache-tag purging makes multi-file purging easier because you can instantly bulk :::caution[Warning] - Be careful when purging. A cache MISS can cause execution delays by requiring a fetch from your origin server. - ::: ## Add Cache-Tag HTTP response headers @@ -35,19 +32,19 @@ You add cache-tags to your web content in `Cache-Tag` HTTP response headers to a When your content reaches our edge network, Cloudflare: -* Removes the `Cache-Tag` HTTP header before sending the response to your website visitor or passing the response to a [Worker](/workers/). Your end users or Worker never see `Cache-Tag` HTTP headers on your Cloudflare-enabled website. -* Removes whitespaces from the header and any before and after cache-tag names: `tag1`, `tag2` and `tag1,tag2` are considered the same. -* Removes all repeated and trailing commas before applying cache-tags: `tag1,,,tag2` and `tag1,tag2` are considered the same. +- Removes the `Cache-Tag` HTTP header before sending the response to your website visitor or passing the response to a [Worker](/workers/). Your end users or Worker never see `Cache-Tag` HTTP headers on your Cloudflare-enabled website. +- Removes whitespaces from the header and any before and after cache-tag names: `tag1`, `tag2` and `tag1,tag2` are considered the same. +- Removes all repeated and trailing commas before applying cache-tags: `tag1,,,tag2` and `tag1,tag2` are considered the same. ## A few things to remember -* A single HTTP response can have more than one `Cache-Tag` HTTP header field. -* The minimum length of a cache-tag is one byte. -* Individual tags do not have a maximum length, but the aggregate `Cache-Tag` HTTP header cannot exceed 16 KB after the header field name, which is approximately 1,000 unique tags. Length includes whitespace and commas but does not include the header field name. -* For cache purges, the maximum length of a cache-tag in an API call is 1,024 characters. -* The `Cache-Tag` HTTP header must only contain printable ASCII encoded characters. -* Spaces are not allowed in cache-tags. -* Case is not sensitive. For example, `Tag1` and `tag1` are considered the same. +- A single HTTP response can have more than one `Cache-Tag` HTTP header field. +- The minimum length of a cache-tag is one byte. +- Individual tags do not have a maximum length, but the aggregate `Cache-Tag` HTTP header cannot exceed 16 KB after the header field name, which is approximately 1,000 unique tags. Length includes whitespace and commas but does not include the header field name. +- For cache purges, the maximum length of a cache-tag in an API call is 1,024 characters. +- The `Cache-Tag` HTTP header must only contain printable ASCII encoded characters. +- Spaces are not allowed in cache-tags. +- Case is not sensitive. For example, `Tag1` and `tag1` are considered the same. ## Purge using cache-tags @@ -62,7 +59,6 @@ When your content reaches our edge network, Cloudflare: For information on rate limits, refer to the [Availability and limits](/cache/how-to/purge-cache/#availability-and-limits) section. - ## Resulting cache status Purging by tag deletes the resource, resulting in the `CF-Cache-Status` header being set to [`MISS`](/cache/concepts/cache-responses/#miss) for subsequent requests. diff --git a/src/content/docs/cache/how-to/purge-cache/purge-cache-key.mdx b/src/content/docs/cache/how-to/purge-cache/purge-cache-key.mdx index 831850a380c6d9f..d251d69477368b4 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-cache-key.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-cache-key.mdx @@ -25,18 +25,18 @@ For a Cache Key based on device type, purge the asset by passing the `CF-Device- Refer to the example API request below to instantly purge all mobile assets on the root webpage. ## Purge by geo @@ -44,18 +44,18 @@ Refer to the example API request below to instantly purge all mobile assets on t Instantly purge resources for a location-based Cache Key by specifying the two-letter country code. Spain is used in the example below. ## Purge by language @@ -63,16 +63,16 @@ Instantly purge resources for a location-based Cache Key by specifying the two-l For a Cache Key based on language, purge the asset by passing the `accept-language` header. Refer to the example API request below to instantly purge all assets in Chinese (PRC). diff --git a/src/content/docs/cache/how-to/purge-cache/purge-everything.mdx b/src/content/docs/cache/how-to/purge-cache/purge-everything.mdx index 1253a3d847f6bfb..42378f5e362023e 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-everything.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-everything.mdx @@ -6,10 +6,9 @@ products: - cache sidebar: order: 2 - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; To maintain optimal site performance, Cloudflare strongly recommends using single-file (by URL) purging instead of a complete cache purge. diff --git a/src/content/docs/cache/how-to/purge-cache/purge-varied-images.mdx b/src/content/docs/cache/how-to/purge-cache/purge-varied-images.mdx index 2da37b5840f703d..f2953ab487936d9 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-varied-images.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-varied-images.mdx @@ -6,7 +6,6 @@ products: - cache sidebar: order: 7 - --- Purging varied images instantly purges all content variants for that URL. This behavior occurs so that if an image changes, you can easily update the cache with a single purge request instead of trying to determine the potential number of out-of-date variants. The behavior is true regardless of [purge type](/cache/how-to/purge-cache/) used, such as [single file](/cache/how-to/purge-cache/purge-by-single-file/), [tag](/cache/how-to/purge-cache/purge-by-tags/), or [hostname](/cache/how-to/purge-cache/purge-by-hostname/). diff --git a/src/content/docs/cache/how-to/purge-cache/purge-zone-versions.mdx b/src/content/docs/cache/how-to/purge-cache/purge-zone-versions.mdx index 06f0af7f6b98cd4..837b8a1faf20235 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge-zone-versions.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge-zone-versions.mdx @@ -6,7 +6,6 @@ products: - cache sidebar: order: 8 - --- To purge zone versions via the Cloudflare API, follow these steps: @@ -23,44 +22,44 @@ This API call will return a JSON response similar to the example below: ```json { - "result": { - "environments": [ - { - "name": "Production", - "ref": "12abcd3e45f678940a573f51834a54", - "version": 0, - "expression": "(cf.zone.name eq \"example.com\")", - "locked_on_deployment": false, - "position": { - "before": "5d41402abc4b2a76b9719d911017c" - } - }, - { - "name": "Staging", - "ref": "5d41402abc4b2a76b9719d911017c", - "version": 0, - "expression": "((cf.edge.server_ip in {1.2.3.4 5.6.7.8})) and (cf.zone.name eq \"example.com\")", - "locked_on_deployment": false, - "position": { - "before": "49f0bad299687c62334182178bfd", - "after": "12abcd3e45f678940a573f51834a54" - } - }, - { - "name": "Development", - "ref": "49f0bad299687c62334182178bfd", - "version": 0, - "expression": "((any(http.request.cookies[\"development\"][*] eq \"true\"))) and (cf.zone.name eq \"example.com\")", - "locked_on_deployment": false, - "position": { - "after": "5d41402abc4b2a76b9719d911017c" - } - } - ] - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "environments": [ + { + "name": "Production", + "ref": "12abcd3e45f678940a573f51834a54", + "version": 0, + "expression": "(cf.zone.name eq \"example.com\")", + "locked_on_deployment": false, + "position": { + "before": "5d41402abc4b2a76b9719d911017c" + } + }, + { + "name": "Staging", + "ref": "5d41402abc4b2a76b9719d911017c", + "version": 0, + "expression": "((cf.edge.server_ip in {1.2.3.4 5.6.7.8})) and (cf.zone.name eq \"example.com\")", + "locked_on_deployment": false, + "position": { + "before": "49f0bad299687c62334182178bfd", + "after": "12abcd3e45f678940a573f51834a54" + } + }, + { + "name": "Development", + "ref": "49f0bad299687c62334182178bfd", + "version": 0, + "expression": "((any(http.request.cookies[\"development\"][*] eq \"true\"))) and (cf.zone.name eq \"example.com\")", + "locked_on_deployment": false, + "position": { + "after": "5d41402abc4b2a76b9719d911017c" + } + } + ] + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -76,7 +75,7 @@ https://api.cloudflare.com/client/v4/zones//purge_cache/ To purge non-production environments, you must use a new `purge_cache` endpoint and specify the environment you would like to purge. -To purge the Staging environment from the example above, send a request to the following endpoint: +To purge the Staging environment from the example above, send a request to the following endpoint: ```bash https://api.cloudflare.com/client/v4/zones//environments/5d41402abc4b2a76b9719d911017c/purge_cache/ @@ -90,4 +89,4 @@ https://api.cloudflare.com/client/v4/zones//environments/49f0bad299687c :::note When purging everything for a non-production cache environment, all files for that specific cache environment will be purged. However, when purging everything for the production environment, all files will be purged across all environments. -::: \ No newline at end of file +::: diff --git a/src/content/docs/cache/how-to/purge-cache/purge_by_prefix.mdx b/src/content/docs/cache/how-to/purge-cache/purge_by_prefix.mdx index 315411bd1db2ac1..38922ec63e70388 100644 --- a/src/content/docs/cache/how-to/purge-cache/purge_by_prefix.mdx +++ b/src/content/docs/cache/how-to/purge-cache/purge_by_prefix.mdx @@ -6,24 +6,23 @@ products: - cache sidebar: order: 5 - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; You can instantly purge their cache by URL prefix or path separators in their URL. For an example URL like `https://www.example.com/foo/bar/baz/qux.jpg`, valid purge requests include: -* `www.example.com` -* `www.example.com/foo` -* `www.example.com/foo/bar` -* `www.example.com/foo/bar/baz` -* `www.example.com/foo/bar/baz/qux.jpg` +- `www.example.com` +- `www.example.com/foo` +- `www.example.com/foo/bar` +- `www.example.com/foo/bar/baz` +- `www.example.com/foo/bar/baz/qux.jpg` Purging by prefix is useful in different scenarios, such as: -* Purging everything within a directory. -* Increasing control over cached objects in a path. -* Simplifying the number of purge calls sent. +- Purging everything within a directory. +- Increasing control over cached objects in a path. +- Simplifying the number of purge calls sent. 1. In the Cloudflare dashboard, go to the **Configuration** page. @@ -32,8 +31,8 @@ Purging by prefix is useful in different scenarios, such as: 2. Under **Purge Cache**, select **Custom Purge**. The **Custom Purge** window appears. 3. Under **Purge by**, select **Prefix**. 4. Follow the syntax instructions. - * One prefix per line. - * Maximum 30 prefixes per API call. + - One prefix per line. + - Maximum 30 prefixes per API call. 5. Enter the appropriate value(s) in the text field using the format shown in the example. 6. Select **Purge**. @@ -41,10 +40,8 @@ For information on rate limits, refer to the [Availability and limits](/cache/ho :::caution[Warning] - If you have a [Transform Rule](/rules/transform/) in place that is modifying part of a URL path, you must use the post-transformed (origin) URL when performing a prefix purge so that purge can take effect. - ::: ## Resulting cache status @@ -58,21 +55,19 @@ Depending on whether the upper tier has the resource or not, and whether the end There are several limitations regarding purge by prefix: -* Path separators are limited to 31 for a prefix `(example.com/a/b/c/d/e/f/g/h/i/j/k/l/m…)`. -* Purge requests are limited to 30 prefixes per request. -* [Purge rate-limits apply](/api/resources/cache/methods/purge/). -* URI query strings & fragments cannot purge by prefix: - * `www.example.com/foo?a=b` (query string) - * `www.example.com/foo#bar` (fragment) +- Path separators are limited to 31 for a prefix `(example.com/a/b/c/d/e/f/g/h/i/j/k/l/m…)`. +- Purge requests are limited to 30 prefixes per request. +- [Purge rate-limits apply](/api/resources/cache/methods/purge/). +- URI query strings & fragments cannot purge by prefix: + - `www.example.com/foo?a=b` (query string) + - `www.example.com/foo#bar` (fragment) :::caution[Warning] - Because purge by prefix purges a directory, any URI for a resource within the purged directory is purged regardless of query string or fragment (though fragments are not generally sent by browsers). Purge by prefix rules do not accept fragments and query strings. Example: If you purge `foo.com/bar`, any asset that starts with `foo.com/bar` will be purged, for example, `foo.com/bar/baz`, `foo.com/bar?good=bad`, etc. and purging `foo.com/bar?good=bad` itself will not work. - ::: ## Purge by prefix normalization diff --git a/src/content/docs/cache/how-to/set-caching-levels.mdx b/src/content/docs/cache/how-to/set-caching-levels.mdx index 4d6a0dee4f74ba7..84cb1614461925d 100644 --- a/src/content/docs/cache/how-to/set-caching-levels.mdx +++ b/src/content/docs/cache/how-to/set-caching-levels.mdx @@ -7,23 +7,20 @@ products: head: - tag: title content: Caching levels - --- Caching levels determine how much of your website’s static content Cloudflare should cache. Cloudflare’s CDN caches static content according to the levels below. -* **No Query String**: Delivers resources from cache when there is no query string. Example URL: `example.com/pic.jpg` -* **Ignore Query String**: Delivers the same resource to everyone independent of the query string. Example URL: `example.com/pic.jpg?ignore=this-query-string` -* **Standard (Default)**: Delivers a different resource each time the query string changes. Example URL: `example.com/pic.jpg?with=query` +- **No Query String**: Delivers resources from cache when there is no query string. Example URL: `example.com/pic.jpg` +- **Ignore Query String**: Delivers the same resource to everyone independent of the query string. Example URL: `example.com/pic.jpg?ignore=this-query-string` +- **Standard (Default)**: Delivers a different resource each time the query string changes. Example URL: `example.com/pic.jpg?with=query` You can adjust the caching level from the dashboard under **Caching** > **Configuration** > **Caching level**. :::note[Note] - Ignore Query String only disregards the query string for static file extensions. For example, Cloudflare serves the `style.css` resource to requests for either `style.css?this` or `style.css?that`. - ::: ## API Caching level values diff --git a/src/content/docs/cache/interaction-cloudflare-products/index.mdx b/src/content/docs/cache/interaction-cloudflare-products/index.mdx index 449a56ed4e7345c..842985c69a31adc 100644 --- a/src/content/docs/cache/interaction-cloudflare-products/index.mdx +++ b/src/content/docs/cache/interaction-cloudflare-products/index.mdx @@ -8,11 +8,10 @@ sidebar: order: 11 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Cloudflare caches content at data centers close to your visitors so your origin server handles fewer requests. The pages below explain how caching works when you also use Workers, R2 storage, or WAF security rules, and what to watch out for when combining them. - \ No newline at end of file + diff --git a/src/content/docs/cache/interaction-cloudflare-products/r2.mdx b/src/content/docs/cache/interaction-cloudflare-products/r2.mdx index ed54947bc4e5f34..11c3946c910d777 100644 --- a/src/content/docs/cache/interaction-cloudflare-products/r2.mdx +++ b/src/content/docs/cache/interaction-cloudflare-products/r2.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Enable cache in an R2 bucket - --- By default, R2 buckets are private. To serve R2 objects through Cloudflare's cache, you need to attach a domain name you control — called a [Custom Domain](/r2/buckets/public-buckets/#custom-domains) — to the bucket. This creates a public URL backed by Cloudflare's network, so requests for your stored files go through Cloudflare's cache instead of hitting R2 directly every time. diff --git a/src/content/docs/cache/interaction-cloudflare-products/waf-snippets.mdx b/src/content/docs/cache/interaction-cloudflare-products/waf-snippets.mdx index fb6bf25720d358f..5f5d22b02dd934b 100644 --- a/src/content/docs/cache/interaction-cloudflare-products/waf-snippets.mdx +++ b/src/content/docs/cache/interaction-cloudflare-products/waf-snippets.mdx @@ -23,7 +23,7 @@ accTitle: Connections with Cloudflare A[User's request] --> B[WAF] --> C[Cache] --> D[R2] ``` -
+
## Presigned URLs diff --git a/src/content/docs/cache/interaction-cloudflare-products/workers-cache-rules.mdx b/src/content/docs/cache/interaction-cloudflare-products/workers-cache-rules.mdx index 390f1369a9cee75..a7765d2c345f3a1 100644 --- a/src/content/docs/cache/interaction-cloudflare-products/workers-cache-rules.mdx +++ b/src/content/docs/cache/interaction-cloudflare-products/workers-cache-rules.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: How Workers interact with Cache Rules - --- When you use both [Cache Rules](/cache/how-to/cache-rules/) and [Workers](/workers/) on the same request, the Worker's cache settings take priority — but only when the required [compatibility flags](#compatibility-flags) are enabled. @@ -39,10 +38,10 @@ These flags must be enabled to allow Workers scripts to override Cache Rules. If A Worker's [compatibility date](/workers/configuration/compatibility-dates/) determines which flags are active by default. When you set a compatibility date, all flags with an enable date on or before that date are automatically turned on. -| Flag | Enabled by default | Prerequisite | -| --- | --- | --- | -| `request_cf_overrides_cache_rules` (Fetch API) | Compatibility dates on or after `2025-04-02` | None | -| `cache_api_compat_flags` | Compatibility dates on or after `2025-04-19` | None | +| Flag | Enabled by default | Prerequisite | +| -------------------------------------------------------- | -------------------------------------------- | --------------------------------- | +| `request_cf_overrides_cache_rules` (Fetch API) | Compatibility dates on or after `2025-04-02` | None | +| `cache_api_compat_flags` | Compatibility dates on or after `2025-04-19` | None | | `cache_api_request_cf_overrides_cache_rules` (Cache API) | Compatibility dates on or after `2025-05-19` | Requires `cache_api_compat_flags` | The Cache API has an extra requirement: `cache_api_compat_flags` must be enabled for any compatibility flags to take effect on the Cache API. Without it, the Cache API ignores all compatibility flags, even ones you explicitly list in your configuration. diff --git a/src/content/docs/cache/interaction-cloudflare-products/workers.mdx b/src/content/docs/cache/interaction-cloudflare-products/workers.mdx index 0b90c7883ab5180..91df57a65ed0396 100644 --- a/src/content/docs/cache/interaction-cloudflare-products/workers.mdx +++ b/src/content/docs/cache/interaction-cloudflare-products/workers.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Customize cache behavior with Workers - --- You can use [Workers](/workers/) to customize cache behavior on Cloudflare's network. Workers run as middleware in the request lifecycle — a single Worker handles both the request and response phases. When a request arrives, it hits the Worker before the cache is checked. The Worker can modify the incoming request (for example, rewrite the URL or add headers), then call `fetch()` to continue the request through the cache. When the response comes back — whether from cache or from the origin server — the Worker can also modify the response before it is sent to the visitor. @@ -46,4 +45,4 @@ Workers offer two ways to interact with the cache. Use `fetch()` when your Worke - **Cache API**: Allows you to programmatically store, retrieve, and delete responses in Cloudflare's cache using `caches.default` or `caches.open()`. Unlike `fetch()`, the Cache API only operates on the cache in the data center handling the current request — it does not interact with Tiered Cache. Use the Cache API when you need to cache responses that did not come from an origin. For more details, refer to [Using the Cache API](/workers/examples/cache-api/). -To understand more about how Cache and Workers interact, refer to [Cache in Workers](/workers/reference/how-the-cache-works/). \ No newline at end of file +To understand more about how Cache and Workers interact, refer to [Cache in Workers](/workers/reference/how-the-cache-works/). diff --git a/src/content/docs/cache/performance-review/cache-analytics.mdx b/src/content/docs/cache/performance-review/cache-analytics.mdx index 5e225c6a89340c7..6db30fa95015ec1 100644 --- a/src/content/docs/cache/performance-review/cache-analytics.mdx +++ b/src/content/docs/cache/performance-review/cache-analytics.mdx @@ -4,10 +4,9 @@ pcx_content_type: concept description: View cache hit rates and bandwidth savings in Cache Analytics. products: - cache - --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; Cache Analytics shows how much of your site's traffic is served from Cloudflare's cache versus your origin server. When content is served from cache, visitors get faster page loads and your origin web server handles less traffic. Use Cache Analytics to identify resources that are [missing from cache](/cache/concepts/cache-responses/#miss), [expired](/cache/concepts/cache-responses/#expired) (cached copy is outdated), or [ineligible for caching](/cache/concepts/cache-responses/#noneunknown) (not eligible for caching). You can filter by hostname, review the top URLs that miss cache, and query up to three days of data. @@ -19,7 +18,7 @@ Cache Analytics shows how much of your site's traffic is served from Cloudflare' In the Cloudflare dashboard, go to the **Caching** page. - + ## Requests vs Data Transfer diff --git a/src/content/docs/cache/performance-review/cache-performance.mdx b/src/content/docs/cache/performance-review/cache-performance.mdx index 528344752e6ef3d..9e4e9ebc7569a11 100644 --- a/src/content/docs/cache/performance-review/cache-performance.mdx +++ b/src/content/docs/cache/performance-review/cache-performance.mdx @@ -24,7 +24,6 @@ Depending on the [cache status](/cache/concepts/cache-responses/) you receive, y Use [Cache Analytics](/cache/performance-review/cache-analytics/) to identify cache performance issues. The following examples show how to filter for common problems and resolve them. - Not caching HTML. - - Identify the issue: Select **Add filter** and select **Cache status equals Dynamic**. - Resolution: Set a Cloudflare Cache Rule to [cache dynamic content](/cache/how-to/cache-rules/examples/cache-everything/). @@ -35,14 +34,12 @@ This option caches all HTML regardless of the presence of dynamic content (conte - Checking for the presence of a cookie. - Excluding requests that match known dynamic content file paths. - Excluding requests with dynamic content extensions (or no extension). -::: + ::: - Short cache expiration TTL. - - Identify the issue: Select **Add filter** and select **Cache status equals Revalidated**. - Resolution: [Increase Cloudflare's Edge Cache TTL via a Cache Rule](/cache/how-to/cache-rules/examples/edge-ttl/). - Need to enable Tiered Cache or custom cache key. - - Identify the issue: Select **Add filter** and select **Cache status equals Miss**. - Resolution: [Enable Tiered Cache](/cache/how-to/tiered-cache/#enable-tiered-cache) or [create a custom cache key](/cache/how-to/cache-rules/examples/custom-cache-key/). diff --git a/src/content/docs/cache/performance-review/index.mdx b/src/content/docs/cache/performance-review/index.mdx index 62a5b788d098027..b2b00f57fe7dfb6 100644 --- a/src/content/docs/cache/performance-review/index.mdx +++ b/src/content/docs/cache/performance-review/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 8 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Use Cache Analytics to understand how effectively Cloudflare caches your content, and apply optimization techniques to improve your cache hit ratio and reduce origin server load. diff --git a/src/content/docs/cache/plans.mdx b/src/content/docs/cache/plans.mdx index e8f54313de37f9f..a4543e9bf53afe7 100644 --- a/src/content/docs/cache/plans.mdx +++ b/src/content/docs/cache/plans.mdx @@ -10,13 +10,12 @@ sidebar: head: - tag: title content: Features by plan type - --- -import { ProductFeatures } from "~/components" +import { ProductFeatures } from "~/components"; Cloudflare provides the following features for different [plans](https://www.cloudflare.com/plans/). ## Features - \ No newline at end of file + diff --git a/src/content/docs/cache/reference/cdn-reference-architecture.mdx b/src/content/docs/cache/reference/cdn-reference-architecture.mdx index 4681ed5552d3aa6..145f83c1cb84f3c 100644 --- a/src/content/docs/cache/reference/cdn-reference-architecture.mdx +++ b/src/content/docs/cache/reference/cdn-reference-architecture.mdx @@ -5,5 +5,4 @@ products: - cache title: CDN Reference Architecture external_link: /reference-architecture/architectures/cdn/ - --- diff --git a/src/content/docs/cache/reference/development-mode.mdx b/src/content/docs/cache/reference/development-mode.mdx index c6f9d879d1f7baf..417c841881601c5 100644 --- a/src/content/docs/cache/reference/development-mode.mdx +++ b/src/content/docs/cache/reference/development-mode.mdx @@ -4,16 +4,15 @@ pcx_content_type: how-to description: Bypass the cache temporarily with Development Mode. products: - cache - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; Development Mode temporarily suspends Cloudflare's edge caching and [Polish](/images/polish/) features for three hours unless disabled beforehand. Development Mode allows customers to immediately observe changes to their [cacheable content](/cache/concepts/default-cache-behavior/#default-cached-file-extensions) like images, CSS, or JavaScript. :::note -To bypass cache for longer than three hours, use bypass cache in [Cache Rules](/cache/how-to/cache-rules/settings/#bypass-cache). +To bypass cache for longer than three hours, use bypass cache in [Cache Rules](/cache/how-to/cache-rules/settings/#bypass-cache). ::: ## Enable Development Mode diff --git a/src/content/docs/cache/reference/index.mdx b/src/content/docs/cache/reference/index.mdx index 57aa94f03cf5680..fa4c9cb8953cc15 100644 --- a/src/content/docs/cache/reference/index.mdx +++ b/src/content/docs/cache/reference/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 10 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the reference content to learn more about specific caching functionality. diff --git a/src/content/docs/cache/troubleshooting/always-online.mdx b/src/content/docs/cache/troubleshooting/always-online.mdx index c5011e04ae13af4..bd25e5e49df3439 100644 --- a/src/content/docs/cache/troubleshooting/always-online.mdx +++ b/src/content/docs/cache/troubleshooting/always-online.mdx @@ -36,16 +36,13 @@ Always Online does not trigger for HTTP response codes such as [404](/support/tr ## Frequently asked questions 1. How can I know if a page has been crawled? - - You can go to the [Internet Archive](https://web.archive.org/) and search for the page URL to see if it has been crawled or not. - You can also check this via the [Internet Archive Availability API](https://archive.org/help/wayback_api.php). 2. Why were not pages x, y, and z crawled? - - Since Cloudflare only requests to crawl the most popular pages on the site, it is possible that there will be missing pages. If you really want to archive a page, then you can visit the [Internet Archive](https://web.archive.org/save) save page and ask them to crawl a particular page. 3. What IP addresses do we need to allowlist to make sure crawling works? - - IP Range: `207.241.224.0/20` and `208.70.24.0/21`. Note that this ip range belongs to Internet Archive and NOT Cloudflare, since it is the Internet Archive that does the crawling. 4. What user agent should the origin expect to see? diff --git a/src/content/docs/cache/troubleshooting/index.mdx b/src/content/docs/cache/troubleshooting/index.mdx index 6d019d87491a048..43a1ccb36799ea9 100644 --- a/src/content/docs/cache/troubleshooting/index.mdx +++ b/src/content/docs/cache/troubleshooting/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 11 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; The following topics are useful for troubleshooting Cache issues. diff --git a/src/content/docs/china-network/concepts/global-acceleration.mdx b/src/content/docs/china-network/concepts/global-acceleration.mdx index d5cf13877556bdc..65a11d18c9950e0 100644 --- a/src/content/docs/china-network/concepts/global-acceleration.mdx +++ b/src/content/docs/china-network/concepts/global-acceleration.mdx @@ -30,14 +30,14 @@ Organizations that serve content or connect employees in Mainland China face con Global Acceleration can support the following scenarios: -| Service | Scenario | -| --------------------------------------------------------------------------------------- | ------------------------------------------------------------------- | +| Service | Scenario | +| --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | [CDN Global Acceleration](#cdn-global-acceleration) | Improved performance for dynamic content (API responses, personalized pages) on China Network CDN. | -| [Cloudflare One Client Global Acceleration](#cloudflare-one-client-global-acceleration) | Cloudflare One Client used in Mainland China. | -| [Cloudflare WAN Global Acceleration](#cloudflare-wan-global-acceleration) | Cloudflare WAN used in Mainland China. | -| [ICP](#icp-services) | China Network prerequisite. | -| [MLPS](#mlps-services) | China cybersecurity compliance certification. | -| [Travel SIM](#travel-sim) | Temporary Cloudflare One Client access for employees traveling to Mainland China. | +| [Cloudflare One Client Global Acceleration](#cloudflare-one-client-global-acceleration) | Cloudflare One Client used in Mainland China. | +| [Cloudflare WAN Global Acceleration](#cloudflare-wan-global-acceleration) | Cloudflare WAN used in Mainland China. | +| [ICP](#icp-services) | China Network prerequisite. | +| [MLPS](#mlps-services) | China cybersecurity compliance certification. | +| [Travel SIM](#travel-sim) | Temporary Cloudflare One Client access for employees traveling to Mainland China. | ## CDN Global Acceleration diff --git a/src/content/docs/china-network/reference/available-products.mdx b/src/content/docs/china-network/reference/available-products.mdx index f5ba030c4d27bda..0ae2911eaa5b486 100644 --- a/src/content/docs/china-network/reference/available-products.mdx +++ b/src/content/docs/china-network/reference/available-products.mdx @@ -37,7 +37,7 @@ The following products and features are available on the Cloudflare China Networ | [R2](/r2/)[^3] | Object storage for all your data. | | [Assets](/workers/static-assets/) | Upload static assets (HTML, CSS, images and other files) as part of your Worker — Cloudflare will handle caching and serving them to web browsers. | | [Environment variables](/workers/configuration/environment-variables/) | Attach text strings or JSON values to your Worker. | -| [Images](/images/optimization/transformations/bindings/)[^4] | Store, transform, optimize, and deliver images at scale. | +| [Images](/images/optimization/transformations/bindings/)[^4] | Store, transform, optimize, and deliver images at scale. | | [mTLS](/workers/runtime-apis/bindings/mtls/) | Securely connect to backend servers over [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/). | | [Rate Limiting](/workers/runtime-apis/bindings/rate-limit/) | Define rate limits and write code around them in your Worker. | | [Secrets](/workers/configuration/secrets/) | Attach encrypted text values to your Worker. | diff --git a/src/content/docs/client-ip-geolocation/about/index.mdx b/src/content/docs/client-ip-geolocation/about/index.mdx index 28a8f360c648938..eeb0a5dfa94995f 100644 --- a/src/content/docs/client-ip-geolocation/about/index.mdx +++ b/src/content/docs/client-ip-geolocation/about/index.mdx @@ -10,10 +10,8 @@ description: Learn how Cloudflare Firewall Rules work. :::note - Client IP Geolocation is currently in closed Beta testing. - ::: Cloudflare Client IP Geolocation helps you understand where in the world a given client is located, even if their true client IP address is obscured by Cloudflare's proxy systems. We offer this service to ensure customers have high-quality experiences interacting with origins that rely on geolocation — such as mapping providers — and origin operators can deliver the right content to the right users. Ensuring origins know where clients are located avoids problems associated with traditional VPNs that obscure a consumer’s geolocation and allow circumvention of geographic restrictions on content. @@ -30,7 +28,7 @@ If a VPN user tries to use an interposed VPN or proxy system that attempts to hi ## Technical explanation -We map our egress IP addresses for our forward-proxy offerings to specific geolocations and continuously share this information with major geolocation database providers like *MaxMind*, *IP 2 Location*, and *Neustar*. +We map our egress IP addresses for our forward-proxy offerings to specific geolocations and continuously share this information with major geolocation database providers like _MaxMind_, _IP 2 Location_, and _Neustar_. When Cloudflare receives an inbound request from a WARP or 1.1.1.1 user, we first geolocate the IP address that made the connection to Cloudflare. Then, we select an egress IP that maps to the client geolocation. We then discard Client IP information to preserve user privacy but return their true geographic location. diff --git a/src/content/docs/client-ip-geolocation/faq/index.mdx b/src/content/docs/client-ip-geolocation/faq/index.mdx index c7687b23fc2d865..85a00673fec5ea2 100644 --- a/src/content/docs/client-ip-geolocation/faq/index.mdx +++ b/src/content/docs/client-ip-geolocation/faq/index.mdx @@ -10,10 +10,8 @@ description: Answers to common questions. :::note - Client IP Geolocation is currently in closed Beta testing. - ::: ## Website operators diff --git a/src/content/docs/client-ip-geolocation/get-started.mdx b/src/content/docs/client-ip-geolocation/get-started.mdx index 7bfddd2706bc177..f6115e8f83f2b6f 100644 --- a/src/content/docs/client-ip-geolocation/get-started.mdx +++ b/src/content/docs/client-ip-geolocation/get-started.mdx @@ -10,18 +10,16 @@ description: Set up Client IP Geolocation for your network. :::note - Client IP Geolocation is currently in closed Beta testing. - ::: There are several things you can do to best handle traffic from Cloudflare VPN and forward-proxy users: -* **Origin operators**: - * Do not block IP addresses associated with our VPN and proxy products (see the [About section](/client-ip-geolocation/about/) for more details) - * To get even more accurate geolocation data, ensure your origin is [reachable via IPv6](/client-ip-geolocation/faq/) -* **Geolocation data providers**: - * Regularly pull updated geolocation data from the [Cloudflare API](https://api.cloudflare.com/local-ip-ranges.csv) -* **Users of WARP and 1.1.1.1**: - * Review the [FAQs](/client-ip-geolocation/faq/#cloudflare-vpn-users) and [About section](/client-ip-geolocation/about/) to learn exactly how, how much, and why we share geolocation data +- **Origin operators**: + - Do not block IP addresses associated with our VPN and proxy products (see the [About section](/client-ip-geolocation/about/) for more details) + - To get even more accurate geolocation data, ensure your origin is [reachable via IPv6](/client-ip-geolocation/faq/) +- **Geolocation data providers**: + - Regularly pull updated geolocation data from the [Cloudflare API](https://api.cloudflare.com/local-ip-ranges.csv) +- **Users of WARP and 1.1.1.1**: + - Review the [FAQs](/client-ip-geolocation/faq/#cloudflare-vpn-users) and [About section](/client-ip-geolocation/about/) to learn exactly how, how much, and why we share geolocation data diff --git a/src/content/docs/client-ip-geolocation/index.mdx b/src/content/docs/client-ip-geolocation/index.mdx index 5464f9a0cb448ee..bd7c326b3032781 100644 --- a/src/content/docs/client-ip-geolocation/index.mdx +++ b/src/content/docs/client-ip-geolocation/index.mdx @@ -11,27 +11,27 @@ products: description: Add geolocation data for clients behind Cloudflare proxies. --- -import { LinkButton } from "~/components" +import { LinkButton } from "~/components"; :::note - Client IP Geolocation is currently in closed Beta testing. - ::: Cloudflare designed [Cloudflare WARP](/warp-client/) and [1.1.1.1](/1.1.1.1/) to make Internet browsing more private and secure. These applications encrypt last-mile connections and make it more difficult for others to use client IP addresses in user fingerprinting. However, unlike legacy VPN applications, we never designed WARP or 1.1.1.1 to hide user locations or allow users to misrepresent their true geographic location. As a web property operator, you can use **Client IP Geolocation** to map Cloudflare egress IP addresses to specific geolocations. - Get started Learn more - + + Get started + + + Learn more + :::note - Client IP Geolocation is different from the [Cloudflare IP Geolocation setting](/network/ip-geolocation/), which helps you capture country codes for visitors. - ::: diff --git a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/additional-configuration.mdx b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/additional-configuration.mdx index c3af18280364b77..e8e7c1e8e6a9464 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/additional-configuration.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/additional-configuration.mdx @@ -214,4 +214,4 @@ The custom error token provides diagnostic information or specific functionality ``` - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/detect-response.mdx b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/detect-response.mdx index 82759d6a2395e0b..a5b7daf4949db75 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/detect-response.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/detect-response.mdx @@ -29,4 +29,4 @@ fetch("/my-api-endpoint").then((response) => { // Process response as usual } }); -``` \ No newline at end of file +``` diff --git a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/index.mdx b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/index.mdx index bc5eb92be6854f4..6c07e3d158b50d9 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/index.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/index.mdx @@ -56,4 +56,4 @@ To ensure your API calls are protected without breaking single-page applications By enabling Pre-clearance, the Turnstile widget issues a persistent clearance cookie (`cf_clearance`) upon successful human verification on an initial HTML page. This cookie pre-clears the visitor to interact with sensitive API endpoints secured by WAF rules, allowing you to deploy granular security without forcing a disruptive Challenge Page response. -For implementation details, refer to the [guidance on Pre-clearance for Turnstile](/cloudflare-challenges/concepts/clearance/#pre-clearance-support-in-turnstile). \ No newline at end of file +For implementation details, refer to the [guidance on Pre-clearance for Turnstile](/cloudflare-challenges/concepts/clearance/#pre-clearance-support-in-turnstile). diff --git a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/resolve-challenge.mdx b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/resolve-challenge.mdx index ca4edef555c115d..9f1f938bab49aa4 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/resolve-challenge.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/challenge-pages/resolve-challenge.mdx @@ -19,4 +19,4 @@ When observing a Cloudflare Challenge page, a visitor could: :::note Visitors must enable JavaScript and cookies on their browser to be able to pass any type of Challenge. -::: \ No newline at end of file +::: diff --git a/src/content/docs/cloudflare-challenges/challenge-types/index.mdx b/src/content/docs/cloudflare-challenges/challenge-types/index.mdx index 5ccae5620b19ca2..e0f3d123a4bb4d7 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/index.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/index.mdx @@ -6,12 +6,12 @@ products: - cloudflare-challenges sidebar: order: 3 - group: + group: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on available challenge types: - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-challenges/challenge-types/turnstile.mdx b/src/content/docs/cloudflare-challenges/challenge-types/turnstile.mdx index 3a4bd64156f9af5..5c15a8df1753eff 100644 --- a/src/content/docs/cloudflare-challenges/challenge-types/turnstile.mdx +++ b/src/content/docs/cloudflare-challenges/challenge-types/turnstile.mdx @@ -16,7 +16,7 @@ Turnstile differs from Challenges Pages in that the challenge does not pause the In most cases, nothing further is required from the visitor. However, if necessary, Turnstile may display a simple checkbox that the visitor must click to proceed. -After the challenge passes, Turnstile issues a clearance token to the visitor that must be validated via the [Siteverify API](/turnstile/get-started/server-side-validation/) before completing a sensitive action like login, sign up, or other form submissions. +After the challenge passes, Turnstile issues a clearance token to the visitor that must be validated via the [Siteverify API](/turnstile/get-started/server-side-validation/) before completing a sensitive action like login, sign up, or other form submissions. @@ -26,20 +26,18 @@ While there are three types of widgets that you can choose to implement on your - **Managed (recommended)**: Functions similar to a Managed Challenge Page. It selects a challenge based on the signals gathered from the visitor's browser and presents an interaction only if it detects potentially automated traffic. -- **Non-Interactive**: The widget is displayed, but the visitor does not need to interact with it to verify their identity. +- **Non-Interactive**: The widget is displayed, but the visitor does not need to interact with it to verify their identity. - **Invisible**: The widget is completely invisible to the visitor, but the challenge still runs in the background. :::note[Link to Cloudflare's Turnstile Privacy Policy] - + + ::: ## Implementation -When you create a widget for your website or application via the Cloudflare dashboard, you will receive a sitekey. +When you create a widget for your website or application via the Cloudflare dashboard, you will receive a sitekey. The sitekey is used with [client-side rendering](/turnstile/get-started/client-side-rendering/#implicitly-render-the-turnstile-widget) by adding it to the `
` container placeholder. You will then place that `
` code snippet where you want to add the widget to your site page or form. diff --git a/src/content/docs/cloudflare-challenges/concepts/index.mdx b/src/content/docs/cloudflare-challenges/concepts/index.mdx index 8587e3ba1d8f3f0..181b5dfde7eb724 100644 --- a/src/content/docs/cloudflare-challenges/concepts/index.mdx +++ b/src/content/docs/cloudflare-challenges/concepts/index.mdx @@ -7,11 +7,11 @@ products: sidebar: order: 2 label: About - group: + group: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on how challenges work: diff --git a/src/content/docs/cloudflare-challenges/index.mdx b/src/content/docs/cloudflare-challenges/index.mdx index b1612b44767b991..08083dc2ca79e13 100644 --- a/src/content/docs/cloudflare-challenges/index.mdx +++ b/src/content/docs/cloudflare-challenges/index.mdx @@ -11,7 +11,8 @@ sidebar: import { Render, Description, Plan, RelatedProduct } from "~/components"; - Challenges are security mechanisms used by Cloudflare to verify whether a visitor to your site is a real human and not a bot or automated script. + Challenges are security mechanisms used by Cloudflare to verify whether a + visitor to your site is a real human and not a bot or automated script. When a Challenge is issued, Cloudflare asks the browser to perform a series of checks that help confirm the visitor's legitimacy. This process involves evaluating client-side signals (data gathered from the visitor's browser environment) or asking a visitor to take minimal action such as checking a box or selecting a button. diff --git a/src/content/docs/cloudflare-challenges/reference/index.mdx b/src/content/docs/cloudflare-challenges/reference/index.mdx index 3c0a6f05993d737..fe3f9e06287d1c6 100644 --- a/src/content/docs/cloudflare-challenges/reference/index.mdx +++ b/src/content/docs/cloudflare-challenges/reference/index.mdx @@ -6,12 +6,12 @@ products: - cloudflare-challenges sidebar: order: 3 - group: + group: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information about Cloudflare Challenges: - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-challenges/reference/supported-browsers.mdx b/src/content/docs/cloudflare-challenges/reference/supported-browsers.mdx index a8b394b4c4b0410..d5d5ad31165401a 100644 --- a/src/content/docs/cloudflare-challenges/reference/supported-browsers.mdx +++ b/src/content/docs/cloudflare-challenges/reference/supported-browsers.mdx @@ -8,45 +8,43 @@ sidebar: order: 4 --- -import { Details } from "~/components" +import { Details } from "~/components"; -Cloudflare can challenge your visitors in various ways. They can be challenged by [Challenge Pages](/cloudflare-challenges/challenge-types/challenge-pages/), [Turnstile](/turnstile/), or by [JavaScript Detections (JSD) in Bot Management](/cloudflare-challenges/challenge-types/javascript-detections/). This document lays out the supported browsers across all of these challenge methods. When your website or application presents a challenge, your visitors receive either a Non-interactive or an Interactive Challenge. +Cloudflare can challenge your visitors in various ways. They can be challenged by [Challenge Pages](/cloudflare-challenges/challenge-types/challenge-pages/), [Turnstile](/turnstile/), or by [JavaScript Detections (JSD) in Bot Management](/cloudflare-challenges/challenge-types/javascript-detections/). This document lays out the supported browsers across all of these challenge methods. When your website or application presents a challenge, your visitors receive either a Non-interactive or an Interactive Challenge. -Cloudflare is committed to ensuring our challenges work with as many browsers as possible, but there are limitations that you should be aware of. +Cloudflare is committed to ensuring our challenges work with as many browsers as possible, but there are limitations that you should be aware of. ## Overview -Cloudflare Challenges are designed to be compatible with any desktop and mobile browser. If your visitors are using an up-to-date version of a browser listed below, they will receive and be able to solve challenges without any issues. The following is a non-exclusive list of browsers supported by Cloudflare Challenges. Browsers not listed on this list are supported on a best-effort basis. +Cloudflare Challenges are designed to be compatible with any desktop and mobile browser. If your visitors are using an up-to-date version of a browser listed below, they will receive and be able to solve challenges without any issues. The following is a non-exclusive list of browsers supported by Cloudflare Challenges. Browsers not listed on this list are supported on a best-effort basis. ### Supported browsers The following browsers are officially supported and tested.
- - Current version and two previous major versions - - Chromium-based browsers and Chromium-based browsers that track the current Chrome stable version - - :::caution - Beta, Dev, Canary, Nightly, or other unreleased builds are not officially supported. - ::: + - Current version and two previous major versions - Chromium-based browsers + and Chromium-based browsers that track the current Chrome stable version + :::caution Beta, Dev, Canary, Nightly, or other unreleased builds are not + officially supported. :::
- - Current version and two previous major versions - - Extended Support Release (ESR) versions are supported + - Current version and two previous major versions - Extended Support Release + (ESR) versions are supported
- - Current version and two previous major versions - - iOS Safari on current iOS version and two previous major versions + - Current version and two previous major versions - iOS Safari on current iOS + version and two previous major versions
- - Current version and two previous major versions -
+ - Current version and two previous major versions +
- - Current version and two previous major versions + - Current version and two previous major versions
### Limited browser support @@ -81,19 +79,19 @@ Browser extensions can interfere with challenges in several ways. - Browser automation tools are often detected as potential bots and may cause challenge failures. :::note -If challenges consistently fail, try temporarily disabling extensions and reload the page. +If challenges consistently fail, try temporarily disabling extensions and reload the page. ::: ### Device emulation and developer tools Challenges are designed to distinguish between real human users and automated traffic. When device emulation is enabled (such as through browser developer tools), it can trigger bot detection mechanisms. -- Mobile device emulation in desktop browsers often uses distinctive characteristics that differ from real mobile devices. +- Mobile device emulation in desktop browsers often uses distinctive characteristics that differ from real mobile devices. - Developer tools may modify browser behavior or expose debugging information that changes how challenges operate. - Automation frameworks like Selenium, Puppeteer, or Playwright are specifically detected as non-human traffic. :::note -For developers testing applications, we recommend using real devices rather than emulated environments when possible. +For developers testing applications, we recommend using real devices rather than emulated environments when possible. If you must use emulation, be aware that challenges may be more difficult to pass, and do not reflect the real experience on mobile devices. ::: diff --git a/src/content/docs/cloudflare-challenges/reference/supported-languages.mdx b/src/content/docs/cloudflare-challenges/reference/supported-languages.mdx index 3b3282d4adca332..c9c87ed0b0cddc3 100644 --- a/src/content/docs/cloudflare-challenges/reference/supported-languages.mdx +++ b/src/content/docs/cloudflare-challenges/reference/supported-languages.mdx @@ -12,30 +12,30 @@ sidebar: ## Multi-language support -Cloudflare Challenges can detect multiple languages and display the localized challenge experience, which is determined by `navigator.language` value. The [Navigator.language read-only property](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language) returns a string representing the preferred language of the user, usually the language of the browser user interface. +Cloudflare Challenges can detect multiple languages and display the localized challenge experience, which is determined by `navigator.language` value. The [Navigator.language read-only property](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language) returns a string representing the preferred language of the user, usually the language of the browser user interface. -For language support specific to Challenge Pages, refer to the table below. +For language support specific to Challenge Pages, refer to the table below. -| Language | Language code
(4 letters) | Language code
(2 letters) | -| -------------------------------- | ----------------------------- | ----------------------------- | -| Arabic (Egypt) | `ar-eg` | `ar` | -| Chinese (Simplified, China) | `zh-cn` | `zh` | -| Chinese (Traditional, Taiwan) | `zh-tw` | -- | -| Dutch (Netherlands) | `nl-nl` | `nl` | -| English (United States) | `en-us` | `en` | -| French (France) | `fr-fr` | `fr` | -| German (Germany) | `de-de` | `de` | -| Indonesian (Indonesia) | `id-id` | `id` | -| Italian (Italy) | `it-it` | `it` | -| Japanese (Japan) | `ja-jp` | `ja` | -| Korean (Korea) | `ko-kr` | `ko` | -| Persian | -- | `fa` -| Polish (Poland) | `pl-pl` | `pl` | -| Portuguese (Brazil) | `pt-br` | `pt` | -| Russian (Russia) | `ru-ru` | `ru` | -| Spanish (Spain) | `es-es` | `es` | -| Turkish (Turkey) | `tr-tr` | `tr` | +| Language | Language code
(4 letters) | Language code
(2 letters) | +| ----------------------------- | ----------------------------- | ----------------------------- | +| Arabic (Egypt) | `ar-eg` | `ar` | +| Chinese (Simplified, China) | `zh-cn` | `zh` | +| Chinese (Traditional, Taiwan) | `zh-tw` | -- | +| Dutch (Netherlands) | `nl-nl` | `nl` | +| English (United States) | `en-us` | `en` | +| French (France) | `fr-fr` | `fr` | +| German (Germany) | `de-de` | `de` | +| Indonesian (Indonesia) | `id-id` | `id` | +| Italian (Italy) | `it-it` | `it` | +| Japanese (Japan) | `ja-jp` | `ja` | +| Korean (Korea) | `ko-kr` | `ko` | +| Persian | -- | `fa` | +| Polish (Poland) | `pl-pl` | `pl` | +| Portuguese (Brazil) | `pt-br` | `pt` | +| Russian (Russia) | `ru-ru` | `ru` | +| Spanish (Spain) | `es-es` | `es` | +| Turkish (Turkey) | `tr-tr` | `tr` | ### Turnstile language support -For language support specific to Turnstile, refer to the [Turnstile documentation](/turnstile/reference/supported-languages/). \ No newline at end of file +For language support specific to Turnstile, refer to the [Turnstile documentation](/turnstile/reference/supported-languages/). diff --git a/src/content/docs/cloudflare-challenges/troubleshooting/challenge-solve-issues.mdx b/src/content/docs/cloudflare-challenges/troubleshooting/challenge-solve-issues.mdx index d9da862f3207f6c..0403f66ba3ed126 100644 --- a/src/content/docs/cloudflare-challenges/troubleshooting/challenge-solve-issues.mdx +++ b/src/content/docs/cloudflare-challenges/troubleshooting/challenge-solve-issues.mdx @@ -8,10 +8,9 @@ tags: - Debugging sidebar: order: 2 - --- -import { Render } from "~/components" +import { Render } from "~/components"; ## Challenge loops @@ -35,6 +34,6 @@ Ensure your browser is updated to the latest version to maintain compatibility. Follow the steps below to ensure that your environment is properly configured. - + If none of the above resolves your issue, contact the website administrator with the [error code](/turnstile/troubleshooting/client-side-errors/error-codes/) and Ray ID or submit a [feedback report](/turnstile/troubleshooting/feedback-reports/) through the Turnstile widget by selecting **Submit Feedback**. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/backoff-schedule.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/backoff-schedule.mdx index 360ff1b151ff9d5..7ff0b1bb50a2ea4 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/backoff-schedule.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/backoff-schedule.mdx @@ -9,20 +9,19 @@ sidebar: head: - tag: title content: Backoff schedule | Hostname validation - --- After you create a custom hostname, Cloudflare has to [validate that hostname](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/). Attempts to validate a Custom Hostname are distributed over seven days (a total of 75 retries). At the end of this schedule, if the validation is unsuccessful, the custom hostname will be deleted. The function that determines the next check varies based on the number of attempts: -* For the first 10 attempts: +- For the first 10 attempts: ```txt now() + min((floor(60 * pow(1.05, retry_attempt)) * INTERVAL '1 second'), INTERVAL '4 hours') ``` -* For the remaining 65 attempts: +- For the remaining 65 attempts: ```txt now() + min((floor(60 * pow(1.15, retry_attempt)) * INTERVAL '1 second'), INTERVAL '4 hours') diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/error-codes.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/error-codes.mdx index 3583929fa75cde3..e53e217ee14dd51 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/error-codes.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/error-codes.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Error codes - Custom Hostname Validation - --- When you [validate a custom hostname](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/), you might encounter the following error codes. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation.mdx index 4e23151ad107b4f..12b2229cd3ba429 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/pre-validation.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Pre-validation methods - Custom Hostname Validation - --- Pre-validation methods help verify domain ownership before your customer's traffic is proxying through Cloudflare. @@ -30,10 +29,8 @@ TXT validation is when your customer adds a `TXT` record to their authoritative :::note - If your customer cannot update their authoritative DNS, you could also use [HTTP validation](#http-tokens). - ::: To set up `TXT` validation: @@ -42,21 +39,23 @@ To set up `TXT` validation: ```json null {11-12} { - "result": [ - { - "id": "3537a672-e4d8-4d89-aab9-26cb622918a1", - "hostname": "app.example.com", - // ... - "status": "pending", - "verification_errors": ["custom hostname does not CNAME to this zone."], - "ownership_verification": { - "type": "txt", - "name": "_cf-custom-hostname.app.example.com", - "value": "0e2d5a7f-1548-4f27-8c05-b577cb14f4ec" - }, - "created_at": "2020-03-04T19:04:02.705068Z" - } - ] + "result": [ + { + "id": "3537a672-e4d8-4d89-aab9-26cb622918a1", + "hostname": "app.example.com", + // ... + "status": "pending", + "verification_errors": [ + "custom hostname does not CNAME to this zone." + ], + "ownership_verification": { + "type": "txt", + "name": "_cf-custom-hostname.app.example.com", + "value": "0e2d5a7f-1548-4f27-8c05-b577cb14f4ec" + }, + "created_at": "2020-03-04T19:04:02.705068Z" + } + ] } ``` @@ -82,18 +81,18 @@ To get and use the `ownership_verification` record: ```json title="Example response (truncated)" {8-9} { - "result": [ - { - "id": "24c8c68e-bec2-49b6-868e-f06373780630", - "hostname": "app.example.com", - // ... - "ownership_verification_http": { - "http_url": "http://app.example.com/.well-known/cf-custom-hostname-challenge/24c8c68e-bec2-49b6-868e-f06373780630", - "http_body": "48b409f6-c886-406b-8cbc-0fbf59983555" - }, - "created_at": "2020-03-04T20:06:04.117122Z" - } - ] + "result": [ + { + "id": "24c8c68e-bec2-49b6-868e-f06373780630", + "hostname": "app.example.com", + // ... + "ownership_verification_http": { + "http_url": "http://app.example.com/.well-known/cf-custom-hostname-challenge/24c8c68e-bec2-49b6-868e-f06373780630", + "http_body": "48b409f6-c886-406b-8cbc-0fbf59983555" + }, + "created_at": "2020-03-04T20:06:04.117122Z" + } + ] } ``` diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/migrating-custom-hostnames.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/migrating-custom-hostnames.mdx index 37075f00034342b..4cc01d36fb14628 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/migrating-custom-hostnames.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/domain-support/migrating-custom-hostnames.mdx @@ -15,7 +15,7 @@ description: Learn how to move hostnames between different zones. As a SaaS provider, you may want, or have, multiple zones to manage hostnames. Each zone can have different configurations or origins, as well as correlate to varying products. You might shift custom hostnames between zones to enable or disable certain features. Cloudflare allows migration within the same account through the steps below: -*** +--- ## CNAME diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/hostname-analytics.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/hostname-analytics.mdx index 9623b2a72514ec3..3c056f32553e457 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/hostname-analytics.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/hostname-analytics.mdx @@ -11,7 +11,7 @@ sidebar: order: 7 --- -import { Render } from "~/components" +import { Render } from "~/components"; You can use custom hostname analytics for two general purposes: exploring how your customers use your product and sharing the benefits provided by Cloudflare with your customers. @@ -19,19 +19,17 @@ These analytics include **Site Analytics**, **Bot Analytics**, **Cache Analytics :::note - The plan of your Cloudflare for SaaS application determines the analytics available for your custom hostnames. - ::: ## Explore customer usage Use custom hostname analytics to help your organization with billing and infrastructure decisions, answering questions like: -* "How many total requests is your service getting?" -* "Is one customer transferring significantly more data than the others?" -* "How many global customers do you have and where are they distributed?" +- "How many total requests is your service getting?" +- "Is one customer transferring significantly more data than the others?" +- "How many global customers do you have and where are they distributed?" If you see one customer is using more data than another, you might increase their bill. If requests are increasing in a certain geographic region, you might want to increase the origin servers in that region. @@ -41,9 +39,9 @@ To access custom hostname analytics, either [use the dashboard](/analytics/faq/a With custom hostname analytics, you can also share site information with your customers, including data about: -* How many pageviews their site is receiving. -* Whether their site has a large percentage of bot traffic. -* How fast their site is. +- How many pageviews their site is receiving. +- Whether their site has a large percentage of bot traffic. +- How fast their site is. Build custom dashboards to share this information by specifying an individual custom hostname in `clientRequestHTTPHost` field of [any dataset](/analytics/graphql-api/features/data-sets/) that includes this field. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas.mdx index 55fbfb5650d6322..5e86134809b77f7 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas.mdx @@ -6,7 +6,6 @@ products: - cloudflare-for-saas sidebar: order: 3 - --- Argo Smart Routing uses real-time global network information to route traffic on the fastest possible path across the Internet. Regardless of geographic location, this allows Cloudflare to optimize routing to make it faster, more reliable, and more secure. As a SaaS provider, you may want to emphasize the quickest traffic delivery for your end customers. To do so, [enable Argo Smart Routing](/argo-smart-routing/get-started/). diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas.mdx index 16b0b87aaa5f035..9b9a27e309eb3ba 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas.mdx @@ -6,7 +6,6 @@ products: - cloudflare-for-saas sidebar: order: 3 - --- Cloudflare makes customer websites faster by storing a copy of the website’s content on the servers of our globally distributed data centers. Content can be either static or dynamic: static content is “cacheable” or eligible for caching, and dynamic content is “uncacheable” or ineligible for caching. The cached copies of content are stored physically closer to users, optimized to be fast, and do not require recomputing. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas.mdx index 439f92b92dc27a1..74ec34298a49532 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas.mdx @@ -12,13 +12,13 @@ import { APIRequest } from "~/components"; [Early Hints](/cache/advanced-configuration/early-hints/) allows the browser to begin loading resources while the origin server is compiling the full response. This improves webpage’s loading speed for the end user. As a SaaS provider, you may prioritize speed for some of your custom hostnames. Using custom metadata, you can [enable Early Hints](/cache/advanced-configuration/early-hints/#enable-early-hints) per custom hostname. -*** +--- ## Prerequisites Before you can employ Early Hints for SaaS, you need to create a custom hostname. Review [Get Started with Cloudflare for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/start/getting-started/) if you have not already done so. -*** +--- ## Enable Early Hints per custom hostname via the API @@ -29,51 +29,51 @@ Before you can employ Early Hints for SaaS, you need to create a custom hostname 3. If you are [creating a new custom hostname](/api/resources/custom_hostnames/methods/create/), make an API call such as the example below, specifying `"early_hints": "on"`: ", - "ssl": { - "method": "http", - "type": "dv", - "settings": { - "http2": "on", - "min_tls_version": "1.2", - "tls_1_3": "on", - "early_hints": "on" - }, - "bundle_method": "ubiquitous", - "wildcard": false + path="/zones/{zone_id}/custom_hostnames" + method="POST" + json={{ + hostname: "", + ssl: { + method: "http", + type: "dv", + settings: { + http2: "on", + min_tls_version: "1.2", + tls_1_3: "on", + early_hints: "on", }, + bundle_method: "ubiquitous", + wildcard: false, + }, }} /> 4. For an existing custom hostname, locate the `id` of that hostname via a `GET` call: 5. Then make an API call such as the example below, specifying `"early_hints": "on"`: diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/index.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/index.mdx index 599383a86465771..1f00c930036f700 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/index.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/performance/index.mdx @@ -6,12 +6,11 @@ products: - cloudflare-for-saas sidebar: order: 4 - --- Cloudflare for SaaS allows you to deliver the best performance to your end customers by helping enable you to reduce latency through: -* [Argo Smart Routing for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas/) calculates and optimizes the fastest path for requests to travel to your origin. -* [Early Hints for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas/) provides faster loading speeds for individual custom hostnames by allowing the browser to begin loading responses while the origin server is compiling the full response. -* [Cache for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas/) makes customer websites faster by storing a copy of the website’s content on the servers of our globally distributed data centers. -* By using Cloudflare for SaaS, your customers automatically inherit the benefits of Cloudflare's vast [anycast network](https://www.cloudflare.com/network/). +- [Argo Smart Routing for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/argo-for-saas/) calculates and optimizes the fastest path for requests to travel to your origin. +- [Early Hints for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/early-hints-for-saas/) provides faster loading speeds for individual custom hostnames by allowing the browser to begin loading responses while the origin server is compiling the full response. +- [Cache for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/performance/cache-for-saas/) makes customer websites faster by storing a copy of the website’s content on the servers of our globally distributed data centers. +- By using Cloudflare for SaaS, your customers automatically inherit the benefits of Cloudflare's vast [anycast network](https://www.cloudflare.com/network/). diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-authorities.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-authorities.mdx index beee8c46e86d55c..8e173849b2eee87 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-authorities.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-authorities.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/reference/certificate-authorities/ sidebar: order: 8 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-statuses.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-statuses.mdx index 66293af0636f89f..0914ddfc956673d 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-statuses.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/certificate-statuses.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/reference/certificate-statuses/ sidebar: order: 8 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/dcv-validation-backoff.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/dcv-validation-backoff.mdx index 2e40b6f99d15771..aaeb2fc1941b5f1 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/dcv-validation-backoff.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/dcv-validation-backoff.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/edge-certificates/changing-dcv-method/validation-backoff-schedule/ sidebar: order: 8 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/hostname-priority.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/hostname-priority.mdx index c6b4665a4571939..b13a64d43827f6c 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/hostname-priority.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/hostname-priority.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/reference/certificate-and-hostname-priority/ sidebar: order: 8 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-csrs.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-csrs.mdx index 6b92b6171e4f460..8f572172a0a7569 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-csrs.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-csrs.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Custom Certificate Signing Requests - --- ## Success codes @@ -23,33 +22,33 @@ head: ## Error codes -| HTTP Status Code | API Error Code | Error Message | -| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| 400 | 1400 | Unable to decode the JSON request body. Check your input and try again. | -| 400 | 1401 | Zone ID is required. Check your input and try again. | -| 400 | 1402 | The request has no Authorization header. Check your input and try again. | -| 400 | 1405 | Country field is required. Check your input and try again. | -| 400 | 1406 | State field is required. Check your input and try again. | -| 400 | 1407 | Locality field is required. Check your input and try again. | -| 400 | 1408 | Organization field is required. Check your input and try again. | -| 400 | 1409 | Common Name field is required. Check your input and try again. | -| 400 | 1410 | The specified Common Name is too long. Maximum allowed length is %d characters. Check your input and try again. | -| 400 | 1411 | At least one subject alternative name (SAN) is required. Check your input and try again. | -| 400 | 1412 | Invalid subject alternative name(s) (SAN). SANs have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as ~`!@#$%^&*()=+{}[] | -| 400 | 1413 | Subject Alternative Names (SANs) with non-ASCII characters are not supported. Check your input and try again. | -| 400 | 1414 | Reserved top domain subject alternative names (SAN), such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | -| 400 | 1415 | Unable to parse subject alternative name(s) (SAN) - :reason. Check your input and try again. Reasons: publicsuffix: cannot derive eTLD+1 for domain %q; publicsuffix: invalid public suffix %q for domain %q; | -| 400 | 1416 | Subject Alternative Names (SANs) ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | -| 400 | 1417 | Invalid key type. Only 'rsa2048' or 'p256v1' is accepted. Check your input and try again. | -| 400 | 1418 | The custom CSR ID is invalid. Check your input and try again. | -| 401 | 1000 | Unable to extract bearer token | -| 401 | 1001 | Unable to parse JWT token | -| 401 | 1002 | Bad JWT header | -| 401 | 1003 | Failed to verify JWT token | -| 401 | 1004 | Failed to get claims from JWT token | -| 401 | 1005 | JWT token does not have required claims | -| 403 | 1403 | No quota has been allocated for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will contact you. | +| HTTP Status Code | API Error Code | Error Message | +| ---------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 400 | 1400 | Unable to decode the JSON request body. Check your input and try again. | +| 400 | 1401 | Zone ID is required. Check your input and try again. | +| 400 | 1402 | The request has no Authorization header. Check your input and try again. | +| 400 | 1405 | Country field is required. Check your input and try again. | +| 400 | 1406 | State field is required. Check your input and try again. | +| 400 | 1407 | Locality field is required. Check your input and try again. | +| 400 | 1408 | Organization field is required. Check your input and try again. | +| 400 | 1409 | Common Name field is required. Check your input and try again. | +| 400 | 1410 | The specified Common Name is too long. Maximum allowed length is %d characters. Check your input and try again. | +| 400 | 1411 | At least one subject alternative name (SAN) is required. Check your input and try again. | +| 400 | 1412 | Invalid subject alternative name(s) (SAN). SANs have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as ~`!@#$%^&\*()=+{}[] | +| 400 | 1413 | Subject Alternative Names (SANs) with non-ASCII characters are not supported. Check your input and try again. | +| 400 | 1414 | Reserved top domain subject alternative names (SAN), such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | +| 400 | 1415 | Unable to parse subject alternative name(s) (SAN) - :reason. Check your input and try again. Reasons: publicsuffix: cannot derive eTLD+1 for domain %q; publicsuffix: invalid public suffix %q for domain %q; | +| 400 | 1416 | Subject Alternative Names (SANs) ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | +| 400 | 1417 | Invalid key type. Only 'rsa2048' or 'p256v1' is accepted. Check your input and try again. | +| 400 | 1418 | The custom CSR ID is invalid. Check your input and try again. | +| 401 | 1000 | Unable to extract bearer token | +| 401 | 1001 | Unable to parse JWT token | +| 401 | 1002 | Bad JWT header | +| 401 | 1003 | Failed to verify JWT token | +| 401 | 1004 | Failed to get claims from JWT token | +| 401 | 1005 | JWT token does not have required claims | +| 403 | 1403 | No quota has been allocated for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will contact you. | | 403 | 1404 | Access to generating CSRs has not been granted for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will contact you. | -| 404 | 1419 | The custom CSR was not found. | -| 409 | 1420 | The custom CSR is associated with an active certificate pack. You will need to delete all associated active certificate packs before you can delete the custom CSR. | -| 500 | 1500 | Internal Server Error | +| 404 | 1419 | The custom CSR was not found. | +| 409 | 1420 | The custom CSR is associated with an active certificate pack. You will need to delete all associated active certificate packs before you can delete the custom CSR. | +| 500 | 1500 | Internal Server Error | diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-hostnames.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-hostnames.mdx index e55d19e7fac4ad4..fc889f9bb826a89 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-hostnames.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/status-codes/custom-hostnames.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Status codes - Custom hostnames - --- -*** +--- ## Success codes @@ -24,66 +23,66 @@ head: | `/v4/zones/:zone_id/custom_hostnames/:custom_hostname_id` | DELETE | 200 OK | | `/v4/zones/:zone_id/custom_hostnames/:custom_hostname_id` | PATCH | 202 Accepted | -*** +--- ## Error codes -| HTTP Status Code | API Error Code | Error Message | -| ---------------- | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 400 | 1400 | Unable to decode the JSON request body. Check your input and try again. | -| 400 | 1401 | Unable to encode the Custom Metadata as JSON. Check your input and try again. | -| 400 | 1402 | Zone ID is required. Check your input and try again. | -| 400 | 1403 | The request has no Authorization header. Check your input and try again. | -| 400 | 1407 | Invalid custom hostname. Custom hostnames have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as \`\`\~\`!@#$%^&\*()=+{}\[]\\ | -| 400 | 1408 | Custom hostnames with non-ASCII characters are not supported. Check your input and try again. | -| 400 | 1409 | Reserved top domain custom hostnames, such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | -| 400 | 1410 | Unable to parse custom hostname - `:reason`. Check your input and try again.
**Reasons:**
publicsuffix: cannot derive eTLD+1 for domain `:domain`
publicsuffix: invalid public suffix `:suffix` for domain `:domain` | -| 400 | 1411 | Custom hostnames ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | -| 400 | 1412 | Custom metadata for wildcard custom hostnames is not supported. Check your input and try again.
**Note:**
This message is only presented to customers who have opted out of wildcard support for custom metadata. | -| 400 | 1415 | Invalid custom origin hostname. Custom origin hostnames have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as ~~\`\`~~\`!@#$%^&\*()=+{}\[]\\ | -| 400 | 1416 | Custom origin hostnames with non-ASCII characters are not supported. Check your input and try again. | -| 400 | 1417 | Reserved top domain custom origin hostnames, such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | -| 400 | 1418 | Unable to parse custom origin hostname - `:reason`. Check your input and try again.
**Reasons:**
publicsuffix: cannot derive eTLD+1 for domain `:domain`
publicsuffix: invalid public suffix`:suffix`for domain`:domain` | -| 400 | 1419 | Custom origin hostnames ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | -| 400 | 1420 | Wildcard custom origin hostnames are not supported. Check your input and try again. | -| 400 | 1421 | The custom origin hostname you specified does not exist on Cloudflare as a DNS record (A, AAAA or CNAME) in your zone:`:zone\_tag`. Check your input and try again. | -| 400 | 1422 | Invalid `http2`setting. Only 'on' or 'off' is accepted. Check your input and try again. | -| 400 | 1423 | Invalid`tls\_1\_2\_only`setting. Only 'on' or 'off' is accepted. Check your input and try again. | -| 400 | 1424 | Invalid`tls\_1\_3`setting. Only 'on' or 'off' is accepted. Check your input and try again. | -| 400 | 1425 | Invalid`min\_tls\_version`setting. Only '1.0','1.1','1.2' or '1.3' is accepted. Check your input and try again. | -| 400 | 1426 | The certificate that you uploaded cannot be parsed. Check your input and try again. | -| 400 | 1427 | The certificate that you uploaded is empty. Check your input and try again. | -| 400 | 1428 | The private key you uploaded cannot be parsed. Check your input and try again. | -| 400 | 1429 | The private key you uploaded does not match the certificate. Check your input and try again. | -| 400 | 1430 | The custom CSR ID is invalid. Check your input and try again. | -| 404 | 1431 | The custom CSR was not found. | -| 400 | 1432 | The validation method is not supported. Only`http`, `email`, or `txt` are accepted. Check your input and try again. | -| 400 | 1433 | The validation type is not supported. Only 'dv' is accepted. Check your input and try again. | -| 400 | 1434 | The SSL attribute is invalid. Refer to the API documentation, check your input and try again. | -| 400 | 1435 | The custom hostname ID is invalid. Check your input and try again. | -| 404 | 1436 | The custom hostname was not found. | -| 400 | 1437 | Invalid hostname.contain query parameter. The hostname.contain query parameter has to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as \`\`\~\`!@#$%^&\*()=+{}\[]\\ | -| 400 | 1438 | Cannot specify other filter parameters in addition to `id`. Only one must be specified. Check your input and try again. | -| 409 | 1439 | Modifying the custom hostname is not supported. Check your input and try again. | -| 400 | 1440 | Both validation type and validation method are required. Check your input and try again. | -| 400 | 1441 | The certificate that you uploaded is having trouble bundling against the public trust store. Check your input and try again. | -| 400 | 1442 | Invalid `ciphers` setting. Refer to the documentation for the list of accepted cipher suites. Check your input and try again. | -| 400 | 1443 | Cipher suite selection is not supported for a minimum TLS version of 1.3. Check your input and try again. | -| 400 | 1444 | The certificate chain that you uploaded has multiple leaf certificates. Check your input and try again. | -| 400 | 1445 | The certificate chain that you uploaded has no leaf certificates. Check your input and try again. | -| 400 | 1446 | The certificate that you uploaded does not include the custom hostname - `:custom_hostname`. Review your input and try again. | -| 400 | 1447 | The certificate that you uploaded does not use a supported signature algorithm. Only SHA-256/ECDSA, SHA-256/RSA, and SHA-1/RSA signature algorithms are supported. Review your input and try again. | -| 400 | 1448 | Custom hostnames with wildcards are not supported for certificates managed by Cloudflare. Review your input and try again. | -| 400 | 1449 | The request input `bundle_method` must be one of: ubiquitous, optimal, force. | -| 401 | 1000 | Unable to extract bearer token | -| 401 | 1001 | Unable to parse JWT token | -| 401 | 1002 | Bad JWT header | -| 401 | 1003 | Failed to verify JWT token | -| 401 | 1004 | Failed to get claims from JWT token | -| 401 | 1005 | JWT token does not have required claims | -| 403 | 1404 | No quota has been allocated for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | -| 403 | 1405 | Quota exceeded. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | -| 403 | 1413 | No [custom metadata](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/custom-metadata/) access has been allocated for this zone. If you are already a paid customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | -| 403 | 1414 | Access to setting a custom origin server has not been granted for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | -| 409 | 1406 | Duplicate custom hostname found. | -| 500 | 1500 | Internal Server Error | +| HTTP Status Code | API Error Code | Error Message | +| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 400 | 1400 | Unable to decode the JSON request body. Check your input and try again. | +| 400 | 1401 | Unable to encode the Custom Metadata as JSON. Check your input and try again. | +| 400 | 1402 | Zone ID is required. Check your input and try again. | +| 400 | 1403 | The request has no Authorization header. Check your input and try again. | +| 400 | 1407 | Invalid custom hostname. Custom hostnames have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as \`\`\~\`!@#$%^&\*()=+{}\[]\\ | +| 400 | 1408 | Custom hostnames with non-ASCII characters are not supported. Check your input and try again. | +| 400 | 1409 | Reserved top domain custom hostnames, such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | +| 400 | 1410 | Unable to parse custom hostname - `:reason`. Check your input and try again.
**Reasons:**
publicsuffix: cannot derive eTLD+1 for domain `:domain`
publicsuffix: invalid public suffix `:suffix` for domain `:domain` | +| 400 | 1411 | Custom hostnames ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | +| 400 | 1412 | Custom metadata for wildcard custom hostnames is not supported. Check your input and try again.
**Note:**
This message is only presented to customers who have opted out of wildcard support for custom metadata. | +| 400 | 1415 | Invalid custom origin hostname. Custom origin hostnames have to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as ~~\`\`~~\`!@#$%^&\*()=+{}\[]\\ | +| 400 | 1416 | Custom origin hostnames with non-ASCII characters are not supported. Check your input and try again. | +| 400 | 1417 | Reserved top domain custom origin hostnames, such as 'test', 'example', 'invalid' or 'localhost', is not supported. Check your input and try again. | +| 400 | 1418 | Unable to parse custom origin hostname - `:reason`. Check your input and try again.
**Reasons:**
publicsuffix: cannot derive eTLD+1 for domain `:domain`
publicsuffix: invalid public suffix`:suffix`for domain`:domain` | +| 400 | 1419 | Custom origin hostnames ending in example.com, example.net, or example.org are prohibited. Check your input and try again. | +| 400 | 1420 | Wildcard custom origin hostnames are not supported. Check your input and try again. | +| 400 | 1421 | The custom origin hostname you specified does not exist on Cloudflare as a DNS record (A, AAAA or CNAME) in your zone:`:zone\_tag`. Check your input and try again. | +| 400 | 1422 | Invalid `http2`setting. Only 'on' or 'off' is accepted. Check your input and try again. | +| 400 | 1423 | Invalid`tls\_1\_2\_only`setting. Only 'on' or 'off' is accepted. Check your input and try again. | +| 400 | 1424 | Invalid`tls\_1\_3`setting. Only 'on' or 'off' is accepted. Check your input and try again. | +| 400 | 1425 | Invalid`min\_tls\_version`setting. Only '1.0','1.1','1.2' or '1.3' is accepted. Check your input and try again. | +| 400 | 1426 | The certificate that you uploaded cannot be parsed. Check your input and try again. | +| 400 | 1427 | The certificate that you uploaded is empty. Check your input and try again. | +| 400 | 1428 | The private key you uploaded cannot be parsed. Check your input and try again. | +| 400 | 1429 | The private key you uploaded does not match the certificate. Check your input and try again. | +| 400 | 1430 | The custom CSR ID is invalid. Check your input and try again. | +| 404 | 1431 | The custom CSR was not found. | +| 400 | 1432 | The validation method is not supported. Only`http`, `email`, or `txt` are accepted. Check your input and try again. | +| 400 | 1433 | The validation type is not supported. Only 'dv' is accepted. Check your input and try again. | +| 400 | 1434 | The SSL attribute is invalid. Refer to the API documentation, check your input and try again. | +| 400 | 1435 | The custom hostname ID is invalid. Check your input and try again. | +| 404 | 1436 | The custom hostname was not found. | +| 400 | 1437 | Invalid hostname.contain query parameter. The hostname.contain query parameter has to be smaller than 256 characters in length, cannot be IP addresses, cannot contain any special characters such as \`\`\~\`!@#$%^&\*()=+{}\[]\\ | +| 400 | 1438 | Cannot specify other filter parameters in addition to `id`. Only one must be specified. Check your input and try again. | +| 409 | 1439 | Modifying the custom hostname is not supported. Check your input and try again. | +| 400 | 1440 | Both validation type and validation method are required. Check your input and try again. | +| 400 | 1441 | The certificate that you uploaded is having trouble bundling against the public trust store. Check your input and try again. | +| 400 | 1442 | Invalid `ciphers` setting. Refer to the documentation for the list of accepted cipher suites. Check your input and try again. | +| 400 | 1443 | Cipher suite selection is not supported for a minimum TLS version of 1.3. Check your input and try again. | +| 400 | 1444 | The certificate chain that you uploaded has multiple leaf certificates. Check your input and try again. | +| 400 | 1445 | The certificate chain that you uploaded has no leaf certificates. Check your input and try again. | +| 400 | 1446 | The certificate that you uploaded does not include the custom hostname - `:custom_hostname`. Review your input and try again. | +| 400 | 1447 | The certificate that you uploaded does not use a supported signature algorithm. Only SHA-256/ECDSA, SHA-256/RSA, and SHA-1/RSA signature algorithms are supported. Review your input and try again. | +| 400 | 1448 | Custom hostnames with wildcards are not supported for certificates managed by Cloudflare. Review your input and try again. | +| 400 | 1449 | The request input `bundle_method` must be one of: ubiquitous, optimal, force. | +| 401 | 1000 | Unable to extract bearer token | +| 401 | 1001 | Unable to parse JWT token | +| 401 | 1002 | Bad JWT header | +| 401 | 1003 | Failed to verify JWT token | +| 401 | 1004 | Failed to get claims from JWT token | +| 401 | 1005 | JWT token does not have required claims | +| 403 | 1404 | No quota has been allocated for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | +| 403 | 1405 | Quota exceeded. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | +| 403 | 1413 | No [custom metadata](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/custom-metadata/) access has been allocated for this zone. If you are already a paid customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | +| 403 | 1414 | Access to setting a custom origin server has not been granted for this zone. If you are already a paid Cloudflare for SaaS customer, contact your Customer Success Manager for additional provisioning. If you are not yet enrolled, [fill out this contact form](https://www.cloudflare.com/plans/enterprise/contact/) and our sales team will reach out to you. | +| 409 | 1406 | Duplicate custom hostname found. | +| 500 | 1500 | Internal Server Error | diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/token-validity-periods.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/token-validity-periods.mdx index 51109dbc3c37bd3..7ecb44f98f46429 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/token-validity-periods.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/token-validity-periods.mdx @@ -6,10 +6,9 @@ products: - cloudflare-for-saas sidebar: order: 4 - --- -import { Render } from "~/components" +import { Render } from "~/components"; When you perform [TXT](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/txt/) domain control validation, you will need to share these tokens with your customers. @@ -19,8 +18,9 @@ However, these tokens expire after a certain amount of time, depending on your c | --------------------- | -------------- | | Let's Encrypt | 7 days | | Google Trust Services | 14 days | -| SSL.com | 14 days | +| SSL.com | 14 days | :::caution - + + ::: diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/versioning.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/versioning.mdx index 916488e61763006..b13acdc07c26874 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/versioning.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/reference/versioning.mdx @@ -32,13 +32,13 @@ Using a [TXT](#dns-txt-record) or [HTTP](#http-token) validation method helps yo #### DNS TXT Record -When creating a Custom Hostname with the TXT method through the [API](/api/resources/custom_hostnames/methods/create/), a TXT ownership\_verification record is provided for your customer to add to their DNS for the ownership validation check. When the TXT record is added, the Custom Hostname will be marked as **Active** in the Cloudflare SSL/TLS app under the Custom Hostnames tab. +When creating a Custom Hostname with the TXT method through the [API](/api/resources/custom_hostnames/methods/create/), a TXT ownership_verification record is provided for your customer to add to their DNS for the ownership validation check. When the TXT record is added, the Custom Hostname will be marked as **Active** in the Cloudflare SSL/TLS app under the Custom Hostnames tab. #### HTTP Token -When creating a Custom Hostname with the HTTP through the [API](/api/resources/custom_hostnames/methods/create/), an HTTP ownership\_verification token is provided. HTTP verification is used mainly by organizations with a large deployed base of custom domains with HTTPS support. Serving the HTTP token from your origin web server allows hostname verification before proxying domain traffic through Cloudflare. +When creating a Custom Hostname with the HTTP through the [API](/api/resources/custom_hostnames/methods/create/), an HTTP ownership_verification token is provided. HTTP verification is used mainly by organizations with a large deployed base of custom domains with HTTPS support. Serving the HTTP token from your origin web server allows hostname verification before proxying domain traffic through Cloudflare. -Cloudflare sends GET requests to the http\_url using `User-Agent: Cloudflare Custom Hostname Verification`. +Cloudflare sends GET requests to the http_url using `User-Agent: Cloudflare Custom Hostname Verification`. If you validated a hostname that is not proxying traffic through Cloudflare, the Custom Hostname will be marked as **Active** in the Cloudflare SSL/TLS app when the HTTP token is verified (under the **Custom Hostnames** tab). @@ -73,10 +73,8 @@ Once the migration has been started for your zone(s), Cloudflare will require ev :::note - You can revert the migration at any time. - ::: ### Before the migration @@ -85,15 +83,15 @@ Before your migration, you should: 1. To test validation methods, set up a test zone and ask your account team to enable SSL for SaaS v2. 2. Wait for your account team to run our pre-migration tool. This tool groups your hostnames into one of the following statuses: - * `test_pending`: In the process of being verified or was unable to be verified and re-queued for verification. A custom hostname will be re-queued 25 times before moving to the `test_failed` status. - * `test_active`: Passed CNAME verification - * `test_active_apex`: Passed Apex Proxy verification - * `test_blocked`: Hostname will be blocked during the migration because hostname belongs to a banned zone. Contact your account team to verify banned custom hostnames and proceed with the migration. - * `test_failed`: Failed hostname verification 25 times + - `test_pending`: In the process of being verified or was unable to be verified and re-queued for verification. A custom hostname will be re-queued 25 times before moving to the `test_failed` status. + - `test_active`: Passed CNAME verification + - `test_active_apex`: Passed Apex Proxy verification + - `test_blocked`: Hostname will be blocked during the migration because hostname belongs to a banned zone. Contact your account team to verify banned custom hostnames and proceed with the migration. + - `test_failed`: Failed hostname verification 25 times 3. Review the results of our pre-migration tool (run by your account team) using one of the following methods: - * Via the API: `https://api.cloudflare.com/client/v4/zones/{zone_tag}/custom_hostnames?hostname_status={status}` - * Via a CSV file (provided by your account team) - * Via the Cloudflare dashboard: + - Via the API: `https://api.cloudflare.com/client/v4/zones/{zone_tag}/custom_hostnames?hostname_status={status}` + - Via a CSV file (provided by your account team) + - Via the Cloudflare dashboard: ![Review SSL migration status in the dashboard](~/assets/images/cloudflare-for-platforms/ssl-migration-status.png) 4. Approve the migration. Your account team will work with you to schedule a migration window for each of your SSL for SaaS zones. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/index.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/index.mdx index edf8ce49e980942..2264ad62fa3dbc5 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/index.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/index.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Resources for SaaS customers - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Cloudflare partners with many [SaaS providers](/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/) to extend our performance and security benefits to your website. diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/product-compatibility.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/product-compatibility.mdx index 0681efe793946a6..63c9a0ce28c29a6 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/product-compatibility.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/product-compatibility.mdx @@ -30,12 +30,12 @@ This is not an exhaustive list of Cloudflare products and features. | [China Network](/china-network/) | No | No | | | [DNS](/dns/) | Yes\* | Yes | As a SaaS customer, do not remove the records related to your Cloudflare for SaaS setup.

Otherwise, your traffic will begin routing away from your SaaS provider. | | [HTTP/2 prioritization](https://blog.cloudflare.com/better-http-2-prioritization-for-a-faster-web/) | Yes | Yes\* | This feature must be enabled on the customer zone to function. | -| [Image resizing](/images/optimization/transformations/overview/) | Yes | Yes | | +| [Image resizing](/images/optimization/transformations/overview/) | Yes | Yes | | | IPv6 | Yes | Yes | | | [IPv6 Compatibility](/network/ipv6-compatibility/) | Yes | Yes\* | If the customer zone has **IPv6 Compatibility** enabled, generally the SaaS zone should as well.

If not, make sure the SaaS zone enables [Pseudo IPv4](/network/pseudo-ipv4/). | | [Load Balancing](/load-balancing/) | No | Yes | Customer zones can still use Load Balancing for non-O2O traffic. | | [Page Rules](/rules/page-rules/) | Yes\* | Yes | Page Rules that match the subdomain used for O2O may block or interfere with the flow of visitors to your website. | -| [Origin Rules](/rules/origin-rules/) | No | Yes | | +| [Origin Rules](/rules/origin-rules/) | No | Yes | | | [Client-side security](/client-side-security/) (formerly Page Shield) | Yes | Yes | | | [Polish](/images/polish/) | Yes\* | Yes | Polish only runs on cached assets. If the customer zone is bypassing cache for SaaS zone destined traffic, then images optimized by Polish will not be loaded from origin. | | [Rate Limiting](/waf/rate-limiting-rules/) | Yes\* | Yes | Rate Limiting rules that match the subdomain used for O2O may block or interfere with the flow of visitors to your website. | diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/webflow.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/webflow.mdx index 8f5c695a4ed8b46..cff52354c33fa79 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/webflow.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/provider-guides/webflow.mdx @@ -31,9 +31,9 @@ Webflow customers can enable O2O on any Cloudflare zone plan. To enable O2O for a specific hostname within a Cloudflare Zone, [create](/dns/manage-dns-records/how-to/create-dns-records/#create-dns-records) a Proxied `CNAME` DNS record with your Webflow site name as the target. Webflow's domain addition setup will walk you through other validation steps. -| Type | Name | Target | Proxy status | -| ------- | -------------------- | --------------------- | ------------ | -| `CNAME` | `` | `cdn.webflow.com` | Proxied | +| Type | Name | Target | Proxy status | +| ------- | --------------- | ----------------- | ------------ | +| `CNAME` | `` | `cdn.webflow.com` | Proxied | ## Zone hold diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/certificate-statuses.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/certificate-statuses.mdx index 5f503f70abb253c..38885b976200c1e 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/certificate-statuses.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/certificate-statuses.mdx @@ -7,5 +7,4 @@ products: external_link: /ssl/reference/certificate-statuses/ sidebar: order: 2 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/uploading-certificates.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/uploading-certificates.mdx index 541ee92bd1ce3a3..335795eba693675 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/uploading-certificates.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/uploading-certificates.mdx @@ -11,10 +11,9 @@ sidebar: head: - tag: title content: Manage custom certificates - --- -import { Render, TabItem, Tabs } from "~/components" +import { Render, TabItem, Tabs } from "~/components"; Learn how to manage custom certificates for your Cloudflare for SaaS custom hostnames. For use cases and limitations, refer to [custom certificates](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/). @@ -86,7 +85,7 @@ To replace a single custom certificate within a certificate pack that contains t You can only replace an RSA certificate with another RSA certificate, or an ECDSA certificate with another ECDSA certificate. -*** +--- ## Move to a Cloudflare certificate diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/delegated-dcv.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/delegated-dcv.mdx index 4a1ffdb4234511d..3b173935c952ce9 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/delegated-dcv.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/delegated-dcv.mdx @@ -11,16 +11,15 @@ sidebar: head: - tag: title content: Delegated domain control validation (DCV) - --- -import { Render } from "~/components" +import { Render } from "~/components"; Delegated DCV allows SaaS providers to delegate the DCV process to Cloudflare. DCV Delegation requires your customers to place a one-time record at their authoritative DNS that allows Cloudflare to auto-renew all future certificate orders, so that there is no manual intervention from you or your customers at the time of the renewal. -*** +--- ## Setup diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/troubleshooting.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/troubleshooting.mdx index 60f518c1628966e..e4cb716dca2b5d4 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/troubleshooting.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/troubleshooting.mdx @@ -11,7 +11,6 @@ sidebar: head: - tag: title content: Troubleshooting | Certificate validation - --- ## High-risk domains @@ -20,7 +19,7 @@ Occasionally, a domain will be flagged as “high risk” by Cloudflare’s CA p If a domain is flagged by the CA, you need to contact Support before validation can finish. The API call will return indicating the failure, along with a link to where the ticket can be filed. -*** +--- ## Certificate Authority Authorization (CAA) records @@ -44,26 +43,26 @@ In some cases, the validation may be prevented because your hostname points to a In this case you would need to either select a Certificate Authority whose CAA records are present at the target, or review the configuration with the service provider that owns the target. -*** +--- ## Time outs If a certificate issuance times out, the error message will indicate where the timeout occurred: -* Timed Out (Initializing) -* Timed Out (Validation) -* Timed Out (Issuance) -* Timed Out (Deployment) -* Timed Out (Deletion) +- Timed Out (Initializing) +- Timed Out (Validation) +- Timed Out (Issuance) +- Timed Out (Deployment) +- Timed Out (Deletion) To fix this error, send a [PATCH request](/api/resources/custom_hostnames/methods/edit/) through the API or select **Refresh** for the specific custom hostname in the dashboard. If using the API, make sure that the `--data` field contains an `ssl` object with the same `method` and `type` as the original request. If these return an error, delete and recreate the custom hostname. -*** +--- ## Immediate validation checks You can send a [PATCH request](/api/resources/custom_hostnames/methods/edit/) to request an immediate validation check on any certificate. The PATCH data should include the same `ssl` object as the original request. -*** +--- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/webhook-definitions.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/webhook-definitions.mdx index 3545c355b84844b..7ac9fd652e89438 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/webhook-definitions.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/webhook-definitions.mdx @@ -10,7 +10,7 @@ sidebar: order: 5 --- -import { AvailableNotifications, Render } from "~/components" +import { AvailableNotifications, Render } from "~/components"; When you [create a webhook notification](/notifications/get-started/configure-webhooks/) for **SSL for SaaS Custom Hostnames**, you may want to automate responses to specific events (certificate issuance, failed validation, etc.). @@ -26,38 +26,38 @@ Cloudflare sends this alert when certificates move from a status of `pending_val ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.validation.succeeded", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_issuance", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.validation.succeeded", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_issuance", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -67,49 +67,49 @@ Cloudflare sends this alert each time a certificate remains in a `pending_valida ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.validation.failed", - "created_at": "2018-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_validation", - "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", - "cname_target": "dcv.digicert.com", - "validation_errors": [ - { - "message": "blog.example.com reported as potential risk: google_safe_browsing" - } - ], - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.validation.failed", + "created_at": "2018-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_validation", + "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", + "cname_target": "dcv.digicert.com", + "validation_errors": [ + { + "message": "blog.example.com reported as potential risk: google_safe_browsing" + } + ], + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` -*** +--- ## Certificate issuance @@ -121,38 +121,38 @@ Cloudflare sends this alert when certificates move from a status of `pending_val ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.issuance.succeeded", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_deployment", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.issuance.succeeded", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_deployment", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -162,49 +162,49 @@ Cloudflare sends this alert each time a certificate remains in a status of `pend ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.issuance.failed", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_issuance", - "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", - "cname_target": "dcv.digicert.com", - "validation_errors": [ - { - "message": "caa_error: blog.example.com" - } - ], - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.issuance.failed", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_issuance", + "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", + "cname_target": "dcv.digicert.com", + "validation_errors": [ + { + "message": "caa_error: blog.example.com" + } + ], + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` -*** +--- ## Certificate deployment @@ -216,38 +216,38 @@ Cloudflare sends this alert when certificates move from a status of `pending_dep ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.deployment.succeeded", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "active", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.deployment.succeeded", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "active", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -257,42 +257,42 @@ Cloudflare sends this alert each time a certificate remains in a status of `pend ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.deployment.failed", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_deployment", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.deployment.failed", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_deployment", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` -*** +--- ## Certificate deletion @@ -302,34 +302,34 @@ Cloudflare sends this alert when certificates move from a status of `pending_del ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.deletion.succeeded", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "deleted" - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.deletion.succeeded", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "deleted" + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -339,38 +339,38 @@ Cloudflare sends this alert each time a certificate remains in status of `pendin ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.deletion.failed", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_deletion" - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.deletion.failed", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_deletion" + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` -*** +--- ## Certificate renewal @@ -382,43 +382,43 @@ The actions that you need to perform to renew certificates depend on your [valid ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.renewal.upcoming_certificate_expiration_notification", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "status": "active", - "hosts": ["blog.example.com"], - "issuer": "DigiCertInc", - "serial_number": "1001172778337169491", - "signature": "ECDSAWithSHA256", - "uploaded_on": "2021-11-17T04:33:54.561747Z", - "expires_on": "2022-11-21T12:00:00Z", - "custom_csr_id": "7b163417-1d2b-4c84-a38a-2fb7a0cd7752", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.renewal.upcoming_certificate_expiration_notification", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "status": "active", + "hosts": ["blog.example.com"], + "issuer": "DigiCertInc", + "serial_number": "1001172778337169491", + "signature": "ECDSAWithSHA256", + "uploaded_on": "2021-11-17T04:33:54.561747Z", + "expires_on": "2022-11-21T12:00:00Z", + "custom_csr_id": "7b163417-1d2b-4c84-a38a-2fb7a0cd7752", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -428,38 +428,38 @@ Cloudflare sends this alert when certificates move from a status of `active` to ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.renewal.succeeded", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_deployment", - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.renewal.succeeded", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_deployment", + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -469,45 +469,45 @@ Cloudflare sends this alert when certificates move from a status of `active` to ```json { - "metadata": { - "event": { - "id": "<", - "type": "ssl.custom_hostname_certificate.renewal.failed", - "created_at": "2022-02-09T00:03:28.385080Z" - }, - "account": { - "id": "<" - }, - "zone": { - "id": "<" - } - }, - "data": { - "id": "<", - "hostname": "blog.com", - "ssl": { - "id": "<", - "type": "dv", - "method": "cname", - "status": "pending_issuance", - "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", - "cname_target": "dcv.digicert.com", - "validation_errors": [ - { - "message": "caa_error: blog.example.com" - } - ], - "settings": { - "min_tls_version": "1.2", - "http2": "on" - } - }, - "custom_metadata": { - "key1": "value1", - "key2": "value2" - }, - "custom_origin_server": "0001.blog.com" - } + "metadata": { + "event": { + "id": "<", + "type": "ssl.custom_hostname_certificate.renewal.failed", + "created_at": "2022-02-09T00:03:28.385080Z" + }, + "account": { + "id": "<" + }, + "zone": { + "id": "<" + } + }, + "data": { + "id": "<", + "hostname": "blog.com", + "ssl": { + "id": "<", + "type": "dv", + "method": "cname", + "status": "pending_issuance", + "cname": "_ca3-64ce913ebfe74edeb2e8813e3928e359.app.example2.com", + "cname_target": "dcv.digicert.com", + "validation_errors": [ + { + "message": "caa_error: blog.example.com" + } + ], + "settings": { + "min_tls_version": "1.2", + "http2": "on" + } + }, + "custom_metadata": { + "key1": "value1", + "key2": "value2" + }, + "custom_origin_server": "0001.blog.com" + } } ``` @@ -521,6 +521,9 @@ This behavior is because each custom hostname can only have one certificate atta You can configure alerts to receive notifications for changes in your custom hostname certificates. - + diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/index.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/index.mdx index 79e692861ae83d3..dad31a4c49f6b78 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/index.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/index.mdx @@ -6,13 +6,12 @@ products: - cloudflare-for-saas sidebar: order: 3 - --- Cloudflare for SaaS provides increased security per custom hostname through: -* [Certificate management](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/) - * [Issue certificates through Cloudflare](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/) - * [Upload your own certificates](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/) -* Control your traffic's level of encryption with [TLS settings](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/enforce-mtls/) -* Create and deploy WAF custom rules, rate limiting rules, and managed rulesets using [WAF for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/) +- [Certificate management](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/) + - [Issue certificates through Cloudflare](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/) + - [Upload your own certificates](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/custom-certificates/) +- Control your traffic's level of encryption with [TLS settings](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/enforce-mtls/) +- Create and deploy WAF custom rules, rate limiting rules, and managed rulesets using [WAF for SaaS](/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/) diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/index.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/index.mdx index a9b88bc6d3f027e..8c044e098c1a507 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/index.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/index.mdx @@ -9,7 +9,7 @@ sidebar: label: Setup --- -import { DashButton, APIRequest, } from "~/components"; +import { DashButton, APIRequest } from "~/components"; [Web Application Firewall (WAF)](/waf/) allows you to create additional security measures through Cloudflare. As a SaaS provider, you can link custom rules, rate limiting rules, and managed rules to your custom hostnames. This provides more control to keep your domains safe from malicious traffic. @@ -74,40 +74,38 @@ This assigns custom metadata to your custom hostname so that it has a security t 2. Build your rules either [through the dashboard](/waf/custom-rules/create-dashboard/) or via the API. An example rate limiting rule, corresponding to `"security_level"` low, is shown below as an API call. To build rules through the dashboard: -1. In the Cloudflare dashboard, go to the **WAF** page. +1. In the Cloudflare dashboard, go to the **WAF** page. - + -2. Follow the instructions on the dashboard specific to custom rules, rate limiting rules, or managed rules, depending on your security goal. +2. Follow the instructions on the dashboard specific to custom rules, rate limiting rules, or managed rules, depending on your security goal. -3. Once the rule is active, you should see it under the applicable tab (custom rules, rate limiting, or managed rules). +3. Once the rule is active, you should see it under the applicable tab (custom rules, rate limiting, or managed rules). - :::caution - This API call will replace any existing rate limiting rules in the zone. - ::: + :::caution + This API call will replace any existing rate limiting rules in the zone. + ::: diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/regional-services-for-saas.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/regional-services-for-saas.mdx index 5f74db1bcc4eac2..44166be7219fb59 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/regional-services-for-saas.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/regional-services-for-saas.mdx @@ -7,5 +7,4 @@ products: external_link: /data-localization/how-to/cloudflare-for-saas/ sidebar: order: 2 - --- diff --git a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/worker-as-origin.mdx b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/worker-as-origin.mdx index b3bba3fd7a2c5ea..e385caf0bc3f783 100644 --- a/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/worker-as-origin.mdx +++ b/src/content/docs/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/worker-as-origin.mdx @@ -55,9 +55,9 @@ You do not need to add individual Worker routes for each custom hostname. The wi For example, if your zone is `saasprovider.com` and you want `api.saasprovider.com` to bypass the Worker, create an additional route `api.saasprovider.com/*` with no Worker assigned. More specific routes take precedence over wildcard routes. - - **Route only custom hostname traffic to the Worker**: - - **Route**: `vanity.customer.com` - - **Worker**: Select the Worker used for your SaaS application. + - **Route only custom hostname traffic to the Worker**: + - **Route**: `vanity.customer.com` + - **Worker**: Select the Worker used for your SaaS application. 5. Click **Save**. diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/bindings.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/bindings.mdx index b5e1b4537b932f3..7c32801c1a98fdd 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/bindings.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/bindings.mdx @@ -9,11 +9,13 @@ sidebar: products: - cloudflare-for-platforms --- + import { Aside } from "@astrojs/starlight/components"; When you deploy User Workers through Workers for Platforms, you can attach [bindings](/workers/runtime-apis/bindings/) to give them access to resources like [KV namespaces](/kv/), [D1 databases](/d1/), [R2 buckets](/r2/), and more. This enables your end customers to build more powerful applications without you having to build the infrastructure components yourself. With bindings, each of your users can have their own: + - [KV namespace](/kv/) that they can use to store and retrieve data - [R2 bucket](/r2/) that they can use to store files and assets - [Analytics Engine](/analytics/analytics-engine/) dataset that they can use to collect observability data @@ -26,9 +28,11 @@ Each User Worker can only access the bindings that are explicitly attached to it ![Resource Isolation Model](~/assets/images/reference-architecture/programmable-platforms/programmable-platforms-5.svg "Resource Isolation Model") ## Adding a KV Namespace to a User Worker + This example walks through how to create a [KV namespace](/kv/) and attach it to a User Worker. The same process can be used to attach to other [bindings](/workers/runtime-apis/bindings/). ### 1. Create a KV namespace + Create a KV namespace using the [Cloudflare API](/api/resources/kv/subresources/namespaces/methods/bulk_update/). ### 2. Attach the KV namespace to the User Worker @@ -58,6 +62,7 @@ curl -X PUT \ }' \ -F 'worker.js=@/path/to/worker.js' ``` + Now, the User Worker has can access the `USER_KV` binding through the `env` argument using `env.USER_DATA.get()`, `env.USER_DATA.put()`, and other KV methods. Note: If you plan to add new bindings to the Worker, use the `keep_bindings` parameter to ensure existing bindings are preserved while adding new ones. diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/observability.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/observability.mdx index 6a9982c4fc08bc4..9cdf87f9fd91826 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/observability.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/configuration/observability.mdx @@ -31,7 +31,7 @@ A [Tail Worker](/workers/observability/logs/tail-workers/) receives information Use [Tail Workers](/workers/observability/logs/tail-workers/) instead of Logpush if you want granular control over formatting before logs are sent to their destination to receive [diagnostics channel events](/workers/runtime-apis/nodejs/diagnostics-channel), or if you want logs delivered in real-time. -Adding a Tail Worker to your dispatch Worker collects logs for both the dispatch Worker and for any user Workers in the dispatch namespace. Logs are automatically collected for all new Workers added to a dispatch namespace. To enable logging for an individual user Worker rather than an entire dispatch namespace, add the [Tail Worker configuration](/workers/observability/logs/tail-workers/#configure-tail-workers) directly to the user Worker. +Adding a Tail Worker to your dispatch Worker collects logs for both the dispatch Worker and for any user Workers in the dispatch namespace. Logs are automatically collected for all new Workers added to a dispatch namespace. To enable logging for an individual user Worker rather than an entire dispatch namespace, add the [Tail Worker configuration](/workers/observability/logs/tail-workers/#configure-tail-workers) directly to the user Worker. ## Analytics diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/limits.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/limits.mdx index b5f72ee55754ce1..a5d3d76bafe414b 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/limits.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/limits.mdx @@ -8,7 +8,7 @@ products: - cloudflare-for-platforms --- -import { Render } from "~/components" +import { Render } from "~/components"; ## Script limits diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/platform-examples.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/platform-examples.mdx index 4ed59262b2ebb15..c7998ff2541bb30 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/platform-examples.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/platform-examples.mdx @@ -18,7 +18,7 @@ import { ResourcesBySelector, } from "~/components"; -The following examples show how to use Cloudflare's REST API and TypeScript SDK to deploy and manage Workers programmatically. +The following examples show how to use Cloudflare's REST API and TypeScript SDK to deploy and manage Workers programmatically. ### Prerequisites diff --git a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/worker-isolation.mdx b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/worker-isolation.mdx index 378810ebff4dd3e..4842b92536a2d6c 100644 --- a/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/worker-isolation.mdx +++ b/src/content/docs/cloudflare-for-platforms/workers-for-platforms/reference/worker-isolation.mdx @@ -18,11 +18,11 @@ In untrusted mode: - Each Worker has an isolated cache, when using the [Cache API](/workers/runtime-apis/cache/) or when making subrequests using `fetch()`, which egress via [Cloudflare's cache](/cache/) - [`caches.default`](/workers/reference/how-the-cache-works/#cache-api) is disabled for all Workers in the namespace -This mode ensures complete isolation between customer Workers, preventing any potential cross-tenant data access. +This mode ensures complete isolation between customer Workers, preventing any potential cross-tenant data access. ### Trusted Mode -If you control the Worker code and want to disable isolation mode, you can configure the namespace as "trusted". This is useful when building internal platforms where your company controls all Worker code. +If you control the Worker code and want to disable isolation mode, you can configure the namespace as "trusted". This is useful when building internal platforms where your company controls all Worker code. In trusted mode: @@ -31,9 +31,10 @@ In trusted mode: :::note In trusted mode, Workers can potentially access cached responses from other Workers in the namespace. Only enable this if you control all Worker code or have appropriate cache key isolation strategies. -::: +::: To convert a namespace from untrusted to trusted: + ```bash curl -X PUT "https://api.cloudflare.com/client/v4/accounts/{account_id}/workers/dispatch/namespaces/{namespace_name}" \ -H "Authorization: Bearer {api_token}" \ @@ -42,14 +43,16 @@ curl -X PUT "https://api.cloudflare.com/client/v4/accounts/{account_id}/workers/ "name": "{namespace_name}", "trusted_workers": true }' - ``` +``` -If you enable trusted mode for a namespace that already has deployed Workers, you'll need to redeploy those Workers for the `request.cf` object to become available. Any new Workers you deploy after enabling trusted mode will automatically have access to it. +If you enable trusted mode for a namespace that already has deployed Workers, you'll need to redeploy those Workers for the `request.cf` object to become available. Any new Workers you deploy after enabling trusted mode will automatically have access to it. ### Maintaining cache isolation in trusted mode -If you need access to `request.cf` but want to maintain cache isolation between customers, use customer-specific [cache keys](/workers/examples/cache-using-fetch/#custom-cache-keys) or the [Cache API](/workers/examples/cache-api/) with isolated keys. + +If you need access to `request.cf` but want to maintain cache isolation between customers, use customer-specific [cache keys](/workers/examples/cache-using-fetch/#custom-cache-keys) or the [Cache API](/workers/examples/cache-api/) with isolated keys. ## Related Resources -* [Platform Limits](/cloudflare-for-platforms/workers-for-platforms/reference/limits) - Understanding script and API limits -* [Cache API Documentation](/workers/runtime-apis/cache/) - Learn about cache behavior in Workers -* [Request cf object](/workers/runtime-apis/request/#the-cf-property-requestcf) - Details on the cf object properties \ No newline at end of file + +- [Platform Limits](/cloudflare-for-platforms/workers-for-platforms/reference/limits) - Understanding script and API limits +- [Cache API Documentation](/workers/runtime-apis/cache/) - Learn about cache behavior in Workers +- [Request cf object](/workers/runtime-apis/request/#the-cf-property-requestcf) - Details on the cf object properties diff --git a/src/content/docs/cloudflare-network-firewall/best-practices/minimal-ruleset.mdx b/src/content/docs/cloudflare-network-firewall/best-practices/minimal-ruleset.mdx index 1d4db0fb3f37d82..c2bc163fbb4b639 100644 --- a/src/content/docs/cloudflare-network-firewall/best-practices/minimal-ruleset.mdx +++ b/src/content/docs/cloudflare-network-firewall/best-practices/minimal-ruleset.mdx @@ -12,7 +12,6 @@ sidebar: head: - tag: title content: Minimal suggested ruleset - --- The suggested minimal ruleset blocks some known common vectors for DDoS attacks and permits all other ESP, TCP, UDP, GRE and ICMP traffic. @@ -66,17 +65,17 @@ The information below covers traffic type, how the port is used, and reasons for The list below is a common list of traffic types you should also consider blocking or restricting inbound. -* SFTP, TFTP -* SSH, Telnet -* RDP -* RCP -* SMCP -* NTP - * Common vector for reflection attacks. Consider using [Cloudflare Gateway](/web3/), [1.1.1.1's DNS over HTTPS (DoH)](/1.1.1.1/), or an internal DNS service if possible. Consider restricting your firewall rules to only allow the source and destination of DNS traffic. -* MS-SQL - * Common vector and [increasingly used as vector for DDoS attacks](https://blog.cloudflare.com/ddos-attack-trends-for-2021-q4/). Block if unused or consider restricting only to the required source IP addresses. -* HTTP and HTTPS - * If you only have servers on your Magic Transit prefixes, consider blocking ingress traffic on TCP source ports 80 and 443 from outside. If you have endpoints on your Magic Transit prefixes, you can allow traffic on the source ports but consider creating a disabled rule you can activate to respond to reflection attacks as needed. +- SFTP, TFTP +- SSH, Telnet +- RDP +- RCP +- SMCP +- NTP + - Common vector for reflection attacks. Consider using [Cloudflare Gateway](/web3/), [1.1.1.1's DNS over HTTPS (DoH)](/1.1.1.1/), or an internal DNS service if possible. Consider restricting your firewall rules to only allow the source and destination of DNS traffic. +- MS-SQL + - Common vector and [increasingly used as vector for DDoS attacks](https://blog.cloudflare.com/ddos-attack-trends-for-2021-q4/). Block if unused or consider restricting only to the required source IP addresses. +- HTTP and HTTPS + - If you only have servers on your Magic Transit prefixes, consider blocking ingress traffic on TCP source ports 80 and 443 from outside. If you have endpoints on your Magic Transit prefixes, you can allow traffic on the source ports but consider creating a disabled rule you can activate to respond to reflection attacks as needed. If relevant to your environment, consider blocking based on geolocation data, which blocks traffic based on the country or user when an end user's IP address is registered in the geolocation database. diff --git a/src/content/docs/cloudflare-network-firewall/index.mdx b/src/content/docs/cloudflare-network-firewall/index.mdx index f5c445fd27e1de4..f546e7f0e9b2faa 100644 --- a/src/content/docs/cloudflare-network-firewall/index.mdx +++ b/src/content/docs/cloudflare-network-firewall/index.mdx @@ -20,8 +20,8 @@ import { } from "~/components"; - Filter and block unwanted traffic at Cloudflare's global network, - before it reaches your infrastructure. + Filter and block unwanted traffic at Cloudflare's global network, before it + reaches your infrastructure. diff --git a/src/content/docs/cloudflare-network-firewall/packet-captures/collect-pcaps.mdx b/src/content/docs/cloudflare-network-firewall/packet-captures/collect-pcaps.mdx index 70c21d97f76d65a..53c0015446461f2 100644 --- a/src/content/docs/cloudflare-network-firewall/packet-captures/collect-pcaps.mdx +++ b/src/content/docs/cloudflare-network-firewall/packet-captures/collect-pcaps.mdx @@ -304,4 +304,4 @@ Due to the nature of Cloudflare network, your traffic may traverse various physi - Multiple PCAP Files: A single full PCAP capture may produce many small PCAP files, as a capture is taken for each physical server your traffic traverses in a Cloudflare location. - You can get more granular by applying packet-specific filters like protocol, port (and more) to target the traffic you need. -- Merging for Analysis: To view the traffic as a single flow, you can use a tool like mergecap to combine the individual files into one larger file for analysis in Wireshark. Refer to the [Wireshark mergecap documentation](https://www.wireshark.org/docs/wsug_html_chunked/AppToolsmergecap.html) for instructions. \ No newline at end of file +- Merging for Analysis: To view the traffic as a single flow, you can use a tool like mergecap to combine the individual files into one larger file for analysis in Wireshark. Refer to the [Wireshark mergecap documentation](https://www.wireshark.org/docs/wsug_html_chunked/AppToolsmergecap.html) for instructions. diff --git a/src/content/docs/cloudflare-network-firewall/packet-captures/pcaps-bucket-setup.mdx b/src/content/docs/cloudflare-network-firewall/packet-captures/pcaps-bucket-setup.mdx index 6f7330a2abce626..2ee588985ab4a4f 100644 --- a/src/content/docs/cloudflare-network-firewall/packet-captures/pcaps-bucket-setup.mdx +++ b/src/content/docs/cloudflare-network-firewall/packet-captures/pcaps-bucket-setup.mdx @@ -174,7 +174,7 @@ To start collecting packet captures with R2, you first need to configure it prop 1. In the Cloudflare dashboard, go to the **R2** page. - + 2. Select **Create bucket**. 3. Give your bucket a name > **Create bucket**. @@ -218,4 +218,4 @@ The [response](/api/resources/magic_transit/subresources/pcaps/subresources/owne ### Validate bucket ownership -Refer to the [Validate a bucket](#validate-a-bucket) API instructions for more details on the entire process to [validate your R2 bucket](/api/resources/magic_transit/subresources/pcaps/subresources/ownership/methods/validate/). When specifying the R2 destination for this validation, exclude the secret and access keys from the URL. \ No newline at end of file +Refer to the [Validate a bucket](#validate-a-bucket) API instructions for more details on the entire process to [validate your R2 bucket](/api/resources/magic_transit/subresources/pcaps/subresources/ownership/methods/validate/). When specifying the R2 destination for this validation, exclude the secret and access keys from the URL. diff --git a/src/content/docs/cloudflare-network-firewall/troubleshooting/diagnose-traffic-decisions.mdx b/src/content/docs/cloudflare-network-firewall/troubleshooting/diagnose-traffic-decisions.mdx index 190cc5e6da18dfa..1833bff8925d2c5 100644 --- a/src/content/docs/cloudflare-network-firewall/troubleshooting/diagnose-traffic-decisions.mdx +++ b/src/content/docs/cloudflare-network-firewall/troubleshooting/diagnose-traffic-decisions.mdx @@ -21,9 +21,9 @@ Traffic passing through Cloudflare's network is evaluated by several independent Each system operates independently. Traffic blocked by an earlier system never reaches later systems for evaluation. :::caution - Creating an allow rule in Network Firewall does **not** bypass DDoS - protection. If traffic is blocked by Advanced TCP Protection or DDoS managed - rules, you must configure bypasses in those systems separately. +Creating an allow rule in Network Firewall does **not** bypass DDoS +protection. If traffic is blocked by Advanced TCP Protection or DDoS managed +rules, you must configure bypasses in those systems separately. ::: To diagnose blocked traffic, use [Network Analytics](/analytics/network-analytics/) to identify which system is blocking the traffic and why. If Network Analytics does not provide enough information, you can use packet captures for deeper analysis. @@ -99,4 +99,4 @@ If you cannot identify the issue from Network Analytics, use [packet captures](/ - [Network Analytics](/analytics/network-analytics/) - [Advanced TCP Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-tcp-protection/) - [Network Firewall rule configuration](/cloudflare-network-firewall/how-to/add-policies/) -- [Packet captures](/cloudflare-network-firewall/packet-captures/) \ No newline at end of file +- [Packet captures](/cloudflare-network-firewall/packet-captures/) diff --git a/src/content/docs/cloudflare-one/access-controls/access-settings/index.mdx b/src/content/docs/cloudflare-one/access-controls/access-settings/index.mdx index 24eaf60c6cf1b66..3b09b3e2ad4da6e 100644 --- a/src/content/docs/cloudflare-one/access-controls/access-settings/index.mdx +++ b/src/content/docs/cloudflare-one/access-controls/access-settings/index.mdx @@ -13,4 +13,3 @@ sidebar: import { DirectoryListing } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/access-controls/access-settings/require-access-protection.mdx b/src/content/docs/cloudflare-one/access-controls/access-settings/require-access-protection.mdx index db274e1c338cdc3..69fc5cb5e2e1111 100644 --- a/src/content/docs/cloudflare-one/access-controls/access-settings/require-access-protection.mdx +++ b/src/content/docs/cloudflare-one/access-controls/access-settings/require-access-protection.mdx @@ -7,7 +7,7 @@ title: Require Access protection sidebar: order: 3 tags: -- Security + - Security --- Cloudflare Access allows you to require Access protection for all hostnames in your account. When this setting is turned on, traffic to any hostname without a matching [Access application](/cloudflare-one/access-controls/applications/) is automatically blocked. @@ -23,13 +23,13 @@ Turning on Access protection blocks traffic to any hostname that does not have a 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com) and go to **Zero Trust** > **Access controls** > **Access settings**. 2. Turn on **Block traffic to all domains in this account**. You will see a dialog confirming you understand the scope of this change. Select **Confirm**. - Traffic to all hostnames in the account is now blocked unless an Access application exists for the hostname. + Traffic to all hostnames in the account is now blocked unless an Access application exists for the hostname. 3. (Optional) Under **Hostnames to Exempt**, select specific domains to exempt from the **Block traffic to all domains in this account** setting. Traffic to exempted hostnames is allowed even if no Access application exists. - :::note - Cloudflare recommends limiting exemptions to hostnames that host only public-facing content. Internal applications should have an Access application configured. - ::: + :::note + Cloudflare recommends limiting exemptions to hostnames that host only public-facing content. Internal applications should have an Access application configured. + ::: ## Allow traffic to a hostname diff --git a/src/content/docs/cloudflare-one/access-controls/access-settings/session-management.mdx b/src/content/docs/cloudflare-one/access-controls/access-settings/session-management.mdx index d5cc04f026c092a..d74a4f8adf061e0 100644 --- a/src/content/docs/cloudflare-one/access-controls/access-settings/session-management.mdx +++ b/src/content/docs/cloudflare-one/access-controls/access-settings/session-management.mdx @@ -100,6 +100,7 @@ Users who match a policy configured with a _Same as application session timeout_ When [Authenticate with Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/client-sessions/#configure-client-sessions-in-access) is enabled for an Access application, the Cloudflare One Client session duration takes precedence over all other session durations (application, policy, and global). As long as the Cloudflare One Client session is valid and the user is running the Cloudflare One Client, the user will not be prompted to re-authenticate with the IdP — even if the global session has expired. ### MFA session duration + If you use [independent multi-factor authentication (MFA)](/cloudflare-one/access-controls/access-settings/independent-mfa/), the MFA session duration determines how long a user can log in to Cloudflare Access without being prompted for MFA. The MFA session is independent of the global, policy, and application session durations. When logging in to an Access app with [MFA enabled](/cloudflare-one/access-controls/policies/mfa-requirements/#configure-independent-mfa-for-an-application), users must complete an MFA challenge if their last MFA authentication falls outside the configured session duration. After authenticating with their identity provider, users are prompted for MFA. The [`CF_Device` cookie](/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/#cf_device) ensures both authentication steps occur on the same device. MFA session durations do not affect how long a user has access to the application (that is controlled by the [application token](#session-durations)). ### Order of enforcement diff --git a/src/content/docs/cloudflare-one/access-controls/ai-controls/index.mdx b/src/content/docs/cloudflare-one/access-controls/ai-controls/index.mdx index 603b94d330906d6..f387963685b0849 100644 --- a/src/content/docs/cloudflare-one/access-controls/ai-controls/index.mdx +++ b/src/content/docs/cloudflare-one/access-controls/ai-controls/index.mdx @@ -13,4 +13,3 @@ sidebar: import { DirectoryListing } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/access-controls/ai-controls/mcp-portals.mdx b/src/content/docs/cloudflare-one/access-controls/ai-controls/mcp-portals.mdx index cfff5ab05a7f8ee..f4dd978b1db79a4 100644 --- a/src/content/docs/cloudflare-one/access-controls/ai-controls/mcp-portals.mdx +++ b/src/content/docs/cloudflare-one/access-controls/ai-controls/mcp-portals.mdx @@ -179,9 +179,9 @@ You can assign aliases to tools to give them clearer names in the portal. Aliase Aliases can be set at two levels: -| Level | Field | Scope | -| ----- | ----- | ----- | -| **Server-level** | `alias` | Applies to the tool across all portals that include this server | +| Level | Field | Scope | +| ---------------- | -------------- | --------------------------------------------------------------------------------------- | +| **Server-level** | `alias` | Applies to the tool across all portals that include this server | | **Portal-level** | `portal_alias` | Applies only within this specific portal and takes priority over the server-level alias | When a tool has multiple names configured, the portal uses the following priority order: `portal_alias` > `server_alias` > `alias` > original tool name. @@ -245,11 +245,11 @@ Unlike the dashboard, the API does not automatically create a DNS record for you The `auth_type` field accepts the following values: -| Value | Description | -| ----- | ----------- | -| `oauth` | The server requires OAuth authentication. After creating the server, you will need to authenticate via the dashboard to establish admin credentials. | -| `bearer` | The server uses a static bearer token for authentication. Provide the token in `auth_credentials`. | -| `unauthenticated` | The server does not require authentication. | +| Value | Description | +| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| `oauth` | The server requires OAuth authentication. After creating the server, you will need to authenticate via the dashboard to establish admin credentials. | +| `bearer` | The server uses a static bearer token for authentication. Provide the token in `auth_credentials`. | +| `unauthenticated` | The server does not require authentication. | ### Force sync an MCP server diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token.mdx index b342006708c137a..8b12f3259058db0 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/application-token.mdx @@ -57,18 +57,18 @@ The payload contains the actual claim and user information to pass to the applic } ``` -| Field | Description | -| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| aud | [Application audience (AUD) tag](/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/#get-your-aud-tag) of the Access application. | -| email | The email address of the authenticated user, verified by the identity provider. | -| exp | The expiration timestamp for the token (Unix time). | -| iat | The issuance timestamp for the token (Unix time). | -| nbf | The not-before timestamp for the token (Unix time), used to check if the token was received before it should be used. | -| iss | The Cloudflare Access domain URL for the application. | -| type | The type of Access token (`app` for application token or `org` for global session token). | -| identity_nonce | A cache key used to get the [user's identity](#user-identity). | +| Field | Description | +| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| aud | [Application audience (AUD) tag](/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/#get-your-aud-tag) of the Access application. | +| email | The email address of the authenticated user, verified by the identity provider. | +| exp | The expiration timestamp for the token (Unix time). | +| iat | The issuance timestamp for the token (Unix time). | +| nbf | The not-before timestamp for the token (Unix time), used to check if the token was received before it should be used. | +| iss | The Cloudflare Access domain URL for the application. | +| type | The type of Access token (`app` for application token or `org` for global session token). | +| identity_nonce | A cache key used to get the [user's identity](#user-identity). | | sub | The ID of the user. This value is unique to an email address per account. The user would get a different `sub` if they are [removed](/cloudflare-one/team-and-resources/users/seat-management/#remove-a-user) and re-added to your Zero Trust organization, or if they log into a different organization. | -| country | The country where the user authenticated from. | +| country | The country where the user authenticated from. | #### Custom SAML attributes and OIDC claims @@ -86,26 +86,26 @@ curl -H 'cookie: CF_Authorization=' https://.cloudfl Access will return a JSON structure containing the following data: -| Field | Description | -| -------------------- | --------------------------------------------------------------------------- | -| email | The email address of the user. | -| idp | Data from your identity provider. | -| geo | The country where the user authenticated from. | -| user_uuid | The ID of the user. | -| devicePosture | The device posture attributes. | -| account_id | The account ID for your organization. | -| iat | The timestamp indicating when the user logged in. | -| ip | The IP address of the user. | -| auth_status | The status if authenticating with mTLS. | -| common_name | The common name on the mTLS client certificate. | -| service_token_id | The Client ID of the service token used for authentication. | -| service_token_status | True if authentication was through a service token instead of an IdP. | -| is_warp | True if the user enabled WARP. | -| is_gateway | True if the user enabled the Cloudflare One Client and authenticated to a Zero Trust team. | -| gateway_account_id | An ID generated by the Cloudflare One Client when authenticated to a Zero Trust team. | -| device_id | The ID of the device used for authentication. | -| version | The version of the `get-identity` object. | -| device_sessions | A list of all sessions initiated by the user. | +| Field | Description | +| -------------------- | ------------------------------------------------------------------------------------------ | +| email | The email address of the user. | +| idp | Data from your identity provider. | +| geo | The country where the user authenticated from. | +| user_uuid | The ID of the user. | +| devicePosture | The device posture attributes. | +| account_id | The account ID for your organization. | +| iat | The timestamp indicating when the user logged in. | +| ip | The IP address of the user. | +| auth_status | The status if authenticating with mTLS. | +| common_name | The common name on the mTLS client certificate. | +| service_token_id | The Client ID of the service token used for authentication. | +| service_token_status | True if authentication was through a service token instead of an IdP. | +| is_warp | True if the user enabled WARP. | +| is_gateway | True if the user enabled the Cloudflare One Client and authenticated to a Zero Trust team. | +| gateway_account_id | An ID generated by the Cloudflare One Client when authenticated to a Zero Trust team. | +| device_id | The ID of the device used for authentication. | +| version | The version of the `get-identity` object. | +| device_sessions | A list of all sessions initiated by the user. | ### Service token authentication @@ -121,15 +121,15 @@ Access will return a JSON structure containing the following data: } ``` -| Field | Description | -| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | -| type | The type of Access token (`app` for application token or `org` for global session token). | +| Field | Description | +| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| type | The type of Access token (`app` for application token or `org` for global session token). | | aud | The [application audience (AUD) tag](/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/#get-your-aud-tag) of the Access application. | -| exp | The expiration timestamp of the JWT (Unix time). | -| iss | The Cloudflare Access domain URL for the application. | -| common_name | The Client ID of the service token (`CF-Access-Client-Id`). | -| iat | The issuance timestamp of the JWT (Unix time). | -| sub | Contains an empty string when authentication was through a service token. | +| exp | The expiration timestamp of the JWT (Unix time). | +| iss | The Cloudflare Access domain URL for the application. | +| common_name | The Client ID of the service token (`CF-Access-Client-Id`). | +| iat | The issuance timestamp of the JWT (Unix time). | +| sub | Contains an empty string when authentication was through a service token. | ## Signature diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/cors.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/cors.mdx index 6ac256251bea1e9..3917b42fff99c6f 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/cors.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/cors.mdx @@ -197,7 +197,10 @@ export default { const newRequest = new Request(url.toString(), request); newRequest.headers.set("cf-access-client-id", env.CF_ACCESS_CLIENT_ID); - newRequest.headers.set("cf-access-client-secret", env.CF_ACCESS_CLIENT_SECRET); + newRequest.headers.set( + "cf-access-client-secret", + env.CF_ACCESS_CLIENT_SECRET, + ); try { const response = await fetch(newRequest); @@ -227,7 +230,7 @@ npx wrangler deploy 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to the **Workers & Pages** page. - + 2. Select your newly created Worker. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/managed-oauth.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/managed-oauth.mdx index 5b1182c9666a6e2..03576d37f7ff815 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/managed-oauth.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/managed-oauth.mdx @@ -188,13 +188,13 @@ The authorization flow proceeds as follows: Both managed OAuth and [service tokens](/cloudflare-one/access-controls/service-credentials/service-tokens/) allow non-browser clients to authenticate with Access-protected applications, but they serve different use cases: -| | Managed OAuth | Service tokens | -| --- | --- | --- | -| **Authentication model** | User-based — the end user logs in through their identity provider | Machine-based — a shared secret authenticates the service itself | -| **Best for** | Interactive CLI tools, AI agents, SDKs where a human initiates the request | Fully automated systems, cron jobs, CI/CD pipelines, server-to-server communication | -| **User identity** | Access knows which user made the request | No user identity — requests are attributed to the service token | -| **Policy enforcement** | Can use identity-based policies (for example, require specific groups or emails) | Requires a [Service Auth](/cloudflare-one/access-controls/policies/#service-auth) policy action | -| **Credential management** | No shared secrets to distribute — users authenticate with their own credentials | Requires distributing and rotating Client ID and Client Secret | +| | Managed OAuth | Service tokens | +| ------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| **Authentication model** | User-based — the end user logs in through their identity provider | Machine-based — a shared secret authenticates the service itself | +| **Best for** | Interactive CLI tools, AI agents, SDKs where a human initiates the request | Fully automated systems, cron jobs, CI/CD pipelines, server-to-server communication | +| **User identity** | Access knows which user made the request | No user identity — requests are attributed to the service token | +| **Policy enforcement** | Can use identity-based policies (for example, require specific groups or emails) | Requires a [Service Auth](/cloudflare-one/access-controls/policies/#service-auth) policy action | +| **Credential management** | No shared secrets to distribute — users authenticate with their own credentials | Requires distributing and rotating Client ID and Client Secret | Use managed OAuth when you want non-browser clients to authenticate users the same way a browser would — the user logs in once, and the client receives an OAuth token to make requests on their behalf. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/generic-oidc-saas.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/generic-oidc-saas.mdx index 52fef67da2246a1..cadc87d1fda6ab5 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/generic-oidc-saas.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/generic-oidc-saas.mdx @@ -59,12 +59,15 @@ Some SaaS applications provide the Redirect URL after you [configure the SSO pro 11. -12. +12. 13. (Optional) Go to **Additional settings** to customize the application experience: - - - **App Launcher customization**: Configure how this application appears to users in the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/). If **Show application in App Launcher** is enabled, then you must enter an **App Launcher URL**. The App Launcher URL is provided by the SaaS application. It may match the base URL portion of **Redirect URL** (`https://.example-app.com`) but could be a different value. - - + - **App Launcher customization**: Configure how this application appears to users in the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/). If **Show application in App Launcher** is enabled, then you must enter an **App Launcher URL**. The App Launcher URL is provided by the SaaS application. It may match the base URL portion of **Redirect URL** (`https://.example-app.com`) but could be a different value. + - 14. Select **Create**. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-cloud-saas-oidc.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-cloud-saas-oidc.mdx index c554be332b64448..cee76077b2de270 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-cloud-saas-oidc.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-cloud-saas-oidc.mdx @@ -8,7 +8,7 @@ reviewed: 2024-07-18 sidebar: order: 14 tags: -- SSO + - SSO --- This guide covers how to configure [Grafana Cloud](https://grafana.com/docs/grafana-cloud/account-management/authentication-and-permissions/authorization/#configure-oauth-20-with-generic-oauth) as an OIDC application in Cloudflare One. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-saas-oidc.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-saas-oidc.mdx index b7a904dc94c5681..c343d9ad68ce913 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-saas-oidc.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/grafana-saas-oidc.mdx @@ -8,7 +8,7 @@ reviewed: 2024-07-18 sidebar: order: 14 tags: -- SSO + - SSO --- This guide covers how to configure [Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/configure-security/configure-authentication/generic-oauth/) as an OIDC application in Cloudflare One. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/index.mdx b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/index.mdx index 3118fcac0cec9c2..01dc8bf2c1ccd20 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/index.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/http-apps/saas-apps/index.mdx @@ -6,10 +6,9 @@ products: title: SaaS applications sidebar: order: 1 - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Cloudflare Access allows you to add an additional authentication layer to your SaaS applications. When you integrate a SaaS application with Access, users log in to the application with Cloudflare as the Single Sign-On provider. The user is then redirected to the configured identity providers for that application and are only granted access if they pass your Access policies. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/non-http/browser-rendering.mdx b/src/content/docs/cloudflare-one/access-controls/applications/non-http/browser-rendering.mdx index ae83f5143d310dc..2cfa346e15fc6c3 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/non-http/browser-rendering.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/non-http/browser-rendering.mdx @@ -7,8 +7,8 @@ title: Browser-rendered terminal sidebar: order: 3 tags: -- SSH -- RDP + - SSH + - RDP --- import { Render } from "~/components"; @@ -31,7 +31,10 @@ To turn on browser rendering for an SSH or VNC application: 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Applications**. 2. Locate the SSH or VNC application you created when [connecting the server to Cloudflare](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/). Select **Configure**. 3. Turn on **Allow access through browser-based RDP, SSH, or VNC sessions**, then select _SSH_ or _VNC_. - + 4. Select **Save**. When users authenticate and visit the URL of the application, Cloudflare will render a terminal in their browser. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/arbitrary-tcp.mdx b/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/arbitrary-tcp.mdx index e0badb2c31fe6c0..203505a89c9fa0e 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/arbitrary-tcp.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/arbitrary-tcp.mdx @@ -7,8 +7,8 @@ title: Arbitrary TCP sidebar: order: 11 tags: -- TCP -- SSH + - TCP + - SSH --- Cloudflare Access provides a mechanism for end users to authenticate with their single sign-on (SSO) provider and connect to resources over arbitrary TCP without being on a virtual private network (VPN). diff --git a/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/automatic-cloudflared-authentication.mdx b/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/automatic-cloudflared-authentication.mdx index 0e09be8ca535069..242e714857c5c7a 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/automatic-cloudflared-authentication.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/non-http/cloudflared-authentication/automatic-cloudflared-authentication.mdx @@ -7,7 +7,7 @@ title: Enable automatic cloudflared authentication sidebar: order: 2 tags: -- Authentication + - Authentication --- When users connect to an Access application through `cloudflared`, the browser prompts them to allow access by displaying this page: diff --git a/src/content/docs/cloudflare-one/access-controls/applications/non-http/legacy-private-network-app.mdx b/src/content/docs/cloudflare-one/access-controls/applications/non-http/legacy-private-network-app.mdx index 2f0c700b0197311..7b753f951aa5916 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/non-http/legacy-private-network-app.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/non-http/legacy-private-network-app.mdx @@ -8,7 +8,7 @@ sidebar: order: 4 label: Private network applications (legacy) tags: -- Private networks + - Private networks --- :::caution @@ -35,7 +35,6 @@ Existing **Private Network** applications continue to function and can still be 7. Select **Next**. You will see two auto-generated Gateway Network policies: one that allows access to the destination IP and another that blocks access. 8. Modify the policies to include additional identity-based conditions. For example: - - **Policy 1** | Selector | Operator | Value | Logic | Action | @@ -53,4 +52,4 @@ Existing **Private Network** applications continue to function and can still be 9. Select **Add application**. -Your application will appear on the **Applications** page. \ No newline at end of file +Your application will appear on the **Applications** page. diff --git a/src/content/docs/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app.mdx b/src/content/docs/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app.mdx index 00a20e37e19d6cb..4b7341a9ec0afcb 100644 --- a/src/content/docs/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app.mdx +++ b/src/content/docs/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app.mdx @@ -11,7 +11,7 @@ sidebar: label: Add a self-hosted private application --- -import { Render, GlossaryTooltip, } from "~/components"; +import { Render, GlossaryTooltip } from "~/components"; You can configure a self-hosted Access application to manage access to specific IPs or hostnames on your private network. @@ -28,54 +28,59 @@ This feature replaces the legacy [private network app type](/cloudflare-one/acce ## Add your application to Access -1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Applications**. +1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Applications**. -2. Select **Create new application**. +2. Select **Create new application**. -3. Select **Self-hosted and private**. +3. Select **Self-hosted and private**. -4. To add an application using its private IP: - 1. Select **Add private IP**. - 2. In **IP address**, enter the private IP or CIDR range that represents the application (for example, `10.0.0.1` or `172.16.0.0/12`). - 3. In **Port**, enter a single port or a port range used by your application (for example, `22` or `8000-8099`). +4. To add an application using its private IP: 1. Select **Add private IP**. 2. In **IP address**, enter the private IP or CIDR range that represents the application (for example, `10.0.0.1` or `172.16.0.0/12`). 3. In **Port**, enter a single port or a port range used by your application (for example, `22` or `8000-8099`). - Comma-separated lists of ports (such as `80, 443`) are not supported. To add multiple ports for a specific IP, you can select **Add private IP** and repeat the IP address with the other port. Alternatively, create a new Access application for the other port. + Comma-separated lists of ports (such as `80, 443`) are not supported. To add multiple ports for a specific IP, you can select **Add private IP** and repeat the IP address with the other port. Alternatively, create a new Access application for the other port. -5. To add an application using its private hostname: - 1. Select **Add private hostname**. - 2. In **Hostname**, enter the private hostname of the application (for example, `wiki.internal.local`). You can use [wildcards](/cloudflare-one/access-controls/policies/app-paths/) with private hostnames to protect multiple parts of an application that share a root path. - 3. In **Port**, enter a single port or a port range used by your application (for example, `22` or `8000-8099`). +5. To add an application using its private hostname: + 1. Select **Add private hostname**. + 2. In **Hostname**, enter the private hostname of the application (for example, `wiki.internal.local`). You can use [wildcards](/cloudflare-one/access-controls/policies/app-paths/) with private hostnames to protect multiple parts of an application that share a root path. + 3. In **Port**, enter a single port or a port range used by your application (for example, `22` or `8000-8099`). - :::note - - **HTTPS applications**: Private hostnames explicitly set to port `443` (not including port ranges such as `441-444`) must have a valid Server Name Indicator (SNI). - - **Non-HTTPS applications**: Private hostnames on non-`443` ports do not require a valid SNI value will be assigned an initial resolved IP in the CGNAT space. Ensure that the following IP addresses are not blocked by any firewalls or excluded from Gateway traffic: + :::note + - **HTTPS applications**: Private hostnames explicitly set to port `443` (not including port ranges such as `441-444`) must have a valid Server Name Indicator (SNI). + - **Non-HTTPS applications**: Private hostnames on non-`443` ports do not require a valid SNI value will be assigned an initial resolved IP in the CGNAT space. Ensure that the following IP addresses are not blocked by any firewalls or excluded from Gateway traffic: - + - For more details on private hostname routing, refer to [Connect a private hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/#prerequisites) + For more details on private hostname routing, refer to [Connect a private hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/#prerequisites) 6. -7. +7. -8. +8. -9. +9. - If the application is non-HTTPS or you do not have TLS decryption turned on, the session is tracked by the Cloudflare One Client per application. + If the application is non-HTTPS or you do not have TLS decryption turned on, the session is tracked by the Cloudflare One Client per application. 10. (Optional) Go to the **Additional settings** tab to customize the application experience: + - **App Launcher customization**: Configure how this application appears to users in the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/). + - **Allow clientless access**: Allow users to access this private hostname or IP without the Cloudflare One Client. Users who pass your Access policies will see a tile in their App Launcher which points to a prefixed URL such as `https://.cloudflareaccess.com/browser/https://wiki.internal.local/`. The link will route traffic to the application through [Clientless Web Isolation](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/). This setting is useful for users on unmanaged devices or contractors who cannot install a device client. - - **App Launcher customization**: Configure how this application appears to users in the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/). - - **Allow clientless access**: Allow users to access this private hostname or IP without the Cloudflare One Client. Users who pass your Access policies will see a tile in their App Launcher which points to a prefixed URL such as `https://.cloudflareaccess.com/browser/https://wiki.internal.local/`. The link will route traffic to the application through [Clientless Web Isolation](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/). This setting is useful for users on unmanaged devices or contractors who cannot install a device client. - - :::note - Ensure your [remote browser permissions](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/) allow users of this application to open Clientless Web Isolation links. - ::: - - - - - The following settings only apply to private hostnames and require [Gateway TLS decryption](/cloudflare-one/traffic-policies/http-policies/tls-decryption/): - + :::note + Ensure your [remote browser permissions](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/) allow users of this application to open Clientless Web Isolation links. + ::: + - + - The following settings only apply to private hostnames and require [Gateway TLS decryption](/cloudflare-one/traffic-policies/http-policies/tls-decryption/): + 11. Select **Create**. @@ -113,8 +118,11 @@ An Access application defined by a private hostname takes precedence over an Acc ### Browser Isolation is not compatible with apps on non-`443` ports - + ### Google Chrome restricts access to private hostnames - + diff --git a/src/content/docs/cloudflare-one/access-controls/event-subscriptions.mdx b/src/content/docs/cloudflare-one/access-controls/event-subscriptions.mdx index 3dfe9164a038ef3..2de16fa32411bf7 100644 --- a/src/content/docs/cloudflare-one/access-controls/event-subscriptions.mdx +++ b/src/content/docs/cloudflare-one/access-controls/event-subscriptions.mdx @@ -19,4 +19,4 @@ import { Render } from "~/components"; ## Available Access events - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/access-controls/policies/app-paths.mdx b/src/content/docs/cloudflare-one/access-controls/policies/app-paths.mdx index 1c0b4d46c3a4704..899ed27993f86f3 100644 --- a/src/content/docs/cloudflare-one/access-controls/policies/app-paths.mdx +++ b/src/content/docs/cloudflare-one/access-controls/policies/app-paths.mdx @@ -6,7 +6,6 @@ products: title: Application paths sidebar: order: 5 - --- Application paths define the URLs protected by an Access policy. When adding a self-hosted application to Access, you can choose to protect the entire website by entering its apex domain, or alternatively, protect specific subdomains and paths. @@ -27,9 +26,9 @@ When you create an application for a specific subdomain or path, you can use ast A wildcard in the **Subdomain** field only matches that specific subdomain level. It does not cover the apex domain or multiple levels of the subdomain. If you want to cover multiple subdomain levels, you can use multiple wildcards. -| Application | Covers | Does not cover | -| --------------- | -------------------------------------------- | -------------- | -| `*.example.com` | `alpha.example.com`
`beta.example.com` | `example.com`
`foo.bar.example.com` | +| Application | Covers | Does not cover | +| --------------- | -------------------------------------------- | ----------------------------------------- | +| `*.example.com` | `alpha.example.com`
`beta.example.com` | `example.com`
`foo.bar.example.com` | #### Match all paths of an apex domain @@ -43,9 +42,9 @@ To protect an apex domain and all of the paths under it, leave the **Path** fiel Using a wildcard in the **Subdomain** field does not cover the parent subdomain nor the apex domain. -| Application | Covers | Does not cover | -| -------------------- | ------------------------------------------------------ | --------------------------------------- | -| `*.test.example.com` | `alpha.test.example.com`
`beta.test.example.com` | `test.example.com`
`example.com` | +| Application | Covers | Does not cover | +| -------------------- | ------------------------------------------------------ | -------------------------------------- | +| `*.test.example.com` | `alpha.test.example.com`
`beta.test.example.com` | `test.example.com`
`example.com` | #### Partially match subdomains @@ -73,8 +72,8 @@ Using a wildcard in the middle of the **Path** field covers multiple segments of ### Limitations -* At most one wildcard in between each dot in the **Subdomain**. For example, `foo*bar*baz.example.com` is not allowed. -* At most one wildcard in between each slash in the **Path**. For example, `example.com/foo*bar*baz` is not allowed. +- At most one wildcard in between each dot in the **Subdomain**. For example, `foo*bar*baz.example.com` is not allowed. +- At most one wildcard in between each slash in the **Path**. For example, `example.com/foo*bar*baz` is not allowed. ## Subdomain setups diff --git a/src/content/docs/cloudflare-one/access-controls/policies/index.mdx b/src/content/docs/cloudflare-one/access-controls/policies/index.mdx index c8ec944860e8d4b..e08ee885d64e235 100644 --- a/src/content/docs/cloudflare-one/access-controls/policies/index.mdx +++ b/src/content/docs/cloudflare-one/access-controls/policies/index.mdx @@ -145,29 +145,29 @@ When you add a rule to your Cloudflare Access policy, you will be asked to speci Non-identity attributes are polled continuously, meaning they are evaluated with each new HTTP request for changes during the [user session](/cloudflare-one/access-controls/access-settings/session-management/). If you have configured [SCIM provisioning](/cloudflare-one/team-and-resources/users/scim/), you can force a user to re-attest all attributes with Access whenever you revoke the user in the IdP or update their IdP group membership. -| Selector | Description | Checked at login | Checked continuously1 | Identity-based selector? | -| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | -------------------------------- | ------------------------ | -| Emails | `you@company.com` | ✅ | ❌ | ✅ | -| Emails ending in | `@company.com` | ✅ | ❌ | ✅ | -| External Evaluation | Allows or denies access based on [custom logic](/cloudflare-one/access-controls/policies/external-evaluation/) in an external API. | ✅ | ❌ | ✅ | -| IP ranges | `192.168.100.1/24` (supports IPv4/IPv6 addresses and CIDR ranges) | ✅ | ✅ | ❌ | -| Country | Uses the IP address to determine country. | ✅ | ✅ | ❌ | -| Everyone | Allows, denies, or bypasses access to everyone. | ✅ | ❌ | ❌ | -| Common Name | The request will need to present a valid certificate with an expected common name. | ✅ | ✅ | ❌ | -| Valid Certificate | The request will need to present any valid client certificate. | ✅ | ✅ | ❌ | -| Service Token | The request will need to present the correct service token headers configured for the specific application. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | -| Any Access Service Token | The request will need to present the headers for any [service token](/cloudflare-one/access-controls/service-credentials/service-tokens/) created for this account. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | -| User Risk Score | The user's current [risk score](/cloudflare-one/team-and-resources/users/risk-score/) (Low, Medium, or High). Acts as a threshold — users with a score at or below the specified level pass the check. This selector only displays for Enterprise plans. | ✅ | ✅ | ✅ | -| Linked App Token | Checks for a valid [OAuth access token](/cloudflare-one/access-controls/applications/linked-app-token/) issued to a specific Access application. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | -| Login Methods | Checks the identity provider used at the time of login. | ✅ | ❌ | ✅ | -| Authentication Method | Checks the [multi-factor authentication](/cloudflare-one/access-controls/policies/mfa-requirements/#identity-provider-based-mfa) method used by the user, if supported by the identity provider. To enforce MFA independently of your IdP, refer to [independent MFA](/cloudflare-one/access-controls/access-settings/independent-mfa/). | ✅ | ❌ | ✅ | -| Identity provider group | Checks the user groups configured with your identity provider (IdP). This selector only displays if you use Microsoft Entra ID, GitHub, Google, Okta, or an IdP that provisions groups with [SCIM](/cloudflare-one/team-and-resources/users/scim/). | ✅ | ❌ | ✅ | -| SAML Group | Checks a SAML attribute name / value pair. This selector only displays if you use a [generic SAML](/cloudflare-one/integrations/identity-providers/generic-saml/) identity provider. | ✅ | ❌ | ✅ | -| OIDC Claim | Checks an OIDC claim name / value pair. This selector only displays if you use a [generic OIDC](/cloudflare-one/integrations/identity-providers/generic-oidc/) identity provider. | ✅ | ❌ | ✅ | -| Device posture | Checks device posture signals from the Cloudflare One Client or a third-party service provider. This selector only displays after you create a [device posture check](/cloudflare-one/reusable-components/posture-checks/). | ✅ | ✅ | ❌ | -| Warp | Checks that the device is connected to the Cloudflare One Client, including the consumer version. This selector only displays after you enable the [WARP posture check](/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp/). | ✅ | ✅ | ❌ | -| Gateway | Checks that the device is connected to your Zero Trust instance through the Cloudflare One Client. This selector only displays after you enable the [Gateway posture check](/cloudflare-one/reusable-components/posture-checks/client-checks/require-gateway/). | ✅ | ✅ | ❌ | -| Cloudflare Account Member | Checks that the user is a member of a specific Cloudflare account. If no account ID is specified, defaults to the current account. This selector only displays if you use the [Cloudflare](/cloudflare-one/integrations/identity-providers/cloudflare/) identity provider. | ✅ | ❌ | ✅ | +| Selector | Description | Checked at login | Checked continuously1 | Identity-based selector? | +| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | -------------------------------- | ------------------------ | +| Emails | `you@company.com` | ✅ | ❌ | ✅ | +| Emails ending in | `@company.com` | ✅ | ❌ | ✅ | +| External Evaluation | Allows or denies access based on [custom logic](/cloudflare-one/access-controls/policies/external-evaluation/) in an external API. | ✅ | ❌ | ✅ | +| IP ranges | `192.168.100.1/24` (supports IPv4/IPv6 addresses and CIDR ranges) | ✅ | ✅ | ❌ | +| Country | Uses the IP address to determine country. | ✅ | ✅ | ❌ | +| Everyone | Allows, denies, or bypasses access to everyone. | ✅ | ❌ | ❌ | +| Common Name | The request will need to present a valid certificate with an expected common name. | ✅ | ✅ | ❌ | +| Valid Certificate | The request will need to present any valid client certificate. | ✅ | ✅ | ❌ | +| Service Token | The request will need to present the correct service token headers configured for the specific application. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | +| Any Access Service Token | The request will need to present the headers for any [service token](/cloudflare-one/access-controls/service-credentials/service-tokens/) created for this account. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | +| User Risk Score | The user's current [risk score](/cloudflare-one/team-and-resources/users/risk-score/) (Low, Medium, or High). Acts as a threshold — users with a score at or below the specified level pass the check. This selector only displays for Enterprise plans. | ✅ | ✅ | ✅ | +| Linked App Token | Checks for a valid [OAuth access token](/cloudflare-one/access-controls/applications/linked-app-token/) issued to a specific Access application. Requires the [Service Auth](#service-auth) action. | ✅ | ✅ | ❌ | +| Login Methods | Checks the identity provider used at the time of login. | ✅ | ❌ | ✅ | +| Authentication Method | Checks the [multi-factor authentication](/cloudflare-one/access-controls/policies/mfa-requirements/#identity-provider-based-mfa) method used by the user, if supported by the identity provider. To enforce MFA independently of your IdP, refer to [independent MFA](/cloudflare-one/access-controls/access-settings/independent-mfa/). | ✅ | ❌ | ✅ | +| Identity provider group | Checks the user groups configured with your identity provider (IdP). This selector only displays if you use Microsoft Entra ID, GitHub, Google, Okta, or an IdP that provisions groups with [SCIM](/cloudflare-one/team-and-resources/users/scim/). | ✅ | ❌ | ✅ | +| SAML Group | Checks a SAML attribute name / value pair. This selector only displays if you use a [generic SAML](/cloudflare-one/integrations/identity-providers/generic-saml/) identity provider. | ✅ | ❌ | ✅ | +| OIDC Claim | Checks an OIDC claim name / value pair. This selector only displays if you use a [generic OIDC](/cloudflare-one/integrations/identity-providers/generic-oidc/) identity provider. | ✅ | ❌ | ✅ | +| Device posture | Checks device posture signals from the Cloudflare One Client or a third-party service provider. This selector only displays after you create a [device posture check](/cloudflare-one/reusable-components/posture-checks/). | ✅ | ✅ | ❌ | +| Warp | Checks that the device is connected to the Cloudflare One Client, including the consumer version. This selector only displays after you enable the [WARP posture check](/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp/). | ✅ | ✅ | ❌ | +| Gateway | Checks that the device is connected to your Zero Trust instance through the Cloudflare One Client. This selector only displays after you enable the [Gateway posture check](/cloudflare-one/reusable-components/posture-checks/client-checks/require-gateway/). | ✅ | ✅ | ❌ | +| Cloudflare Account Member | Checks that the user is a member of a specific Cloudflare account. If no account ID is specified, defaults to the current account. This selector only displays if you use the [Cloudflare](/cloudflare-one/integrations/identity-providers/cloudflare/) identity provider. | ✅ | ❌ | ✅ | 1 For SaaS applications, Access can only enforce policies at the time of initial sign on and when reissuing the SaaS session. Once the user has diff --git a/src/content/docs/cloudflare-one/access-controls/policies/policy-management.mdx b/src/content/docs/cloudflare-one/access-controls/policies/policy-management.mdx index 7213c910db20077..11eeaa22045b223 100644 --- a/src/content/docs/cloudflare-one/access-controls/policies/policy-management.mdx +++ b/src/content/docs/cloudflare-one/access-controls/policies/policy-management.mdx @@ -54,7 +54,7 @@ To delete a reusable Access policy: ## Test your policies -You can test your Access policies against all existing user identities in your Zero Trust organization. For the policy tester to work, users must have logged into the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/) or any other Access application at some point in time. +You can test your Access policies against all existing user identities in your Zero Trust organization. For the policy tester to work, users must have logged into the [App Launcher](/cloudflare-one/access-controls/access-settings/app-launcher/) or any other Access application at some point in time. Cloudflare will use the most recent device that was authenticated with Access to test your policies. @@ -76,25 +76,22 @@ You can test your Access application policies against your user population befor To test if users have access to an application: -1. In [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Applications**. -2. Locate the application you want to test and select **Configure**. -3. Go to **Policies** > **Policy tester**. -4. To test all active users in your organization, select **Test policies**. +1. In [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Applications**. +2. Locate the application you want to test and select **Configure**. +3. Go to **Policies** > **Policy tester**. +4. To test all active users in your organization, select **Test policies**. - The policy tester reports the percentage of users who are allowed or denied access to this application based on all configured policies. You can expand the test results to view a list of allowed or blocked users. + The policy tester reports the percentage of users who are allowed or denied access to this application based on all configured policies. You can expand the test results to view a list of allowed or blocked users. -5. To perform a detailed test on a single user: +5. To perform a detailed test on a single user: - a. If you made any changes to your policies, first save the application. + a. If you made any changes to your policies, first save the application. - b. Select **testing a single user**. + b. Select **testing a single user**. - c. Enter their email address and select **Test policies**. + c. Enter their email address and select **Test policies**. - The single user test results will show: - - Whether the user is allowed or denied access to this application based on all configured policies. - - The user's identity from their most recent Access login attempt. - - Whether the user matches individual Allow, Block, or Bypass policies. + The single user test results will show: - Whether the user is allowed or denied access to this application based on all configured policies. - The user's identity from their most recent Access login attempt. - Whether the user matches individual Allow, Block, or Bypass policies. ## Legacy policies @@ -114,8 +111,8 @@ To migrate legacy policies to reusable policies: You can use the API to convert a legacy policy into a reusable policy. To convert a legacy policy, make a `PUT` request with an empty request body: The policy is now removed from the applications endpoint (`/access/apps/$APP_ID/policies`) and managed using the [reusable policies endpoints](/api/resources/zero_trust/subresources/access/subresources/policies/)(`/access/policies/$POLICY_ID`). diff --git a/src/content/docs/cloudflare-one/access-controls/policies/require-purpose-justification.mdx b/src/content/docs/cloudflare-one/access-controls/policies/require-purpose-justification.mdx index ef3c106a4c83c56..3759f0ffb3db29b 100644 --- a/src/content/docs/cloudflare-one/access-controls/policies/require-purpose-justification.mdx +++ b/src/content/docs/cloudflare-one/access-controls/policies/require-purpose-justification.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Require purpose justification after login - --- Cloudflare Access allows security and IT teams to present users with a purpose justification screen directly after they log in to an Access application. This allows organizations to audit not only for who is accessing their resources, but also for why they are requesting access. diff --git a/src/content/docs/cloudflare-one/access-controls/policies/temporary-auth.mdx b/src/content/docs/cloudflare-one/access-controls/policies/temporary-auth.mdx index 3c320499e0997ac..a3fccad67a5f5e6 100644 --- a/src/content/docs/cloudflare-one/access-controls/policies/temporary-auth.mdx +++ b/src/content/docs/cloudflare-one/access-controls/policies/temporary-auth.mdx @@ -7,7 +7,7 @@ title: Temporary authentication sidebar: order: 11 tags: -- Authentication + - Authentication --- With Cloudflare Access, you can require that users obtain approval before they can access a specific self-hosted application or SaaS application. The administrator will receive an email notification to approve or deny the request. Unlike a typical Allow policy, the user will have to request access at the end of each session. This allows you to define the users who should have persistent access and those who must request temporary access. @@ -20,9 +20,9 @@ With Cloudflare Access, you can require that users obtain approval before they c 4. Under **Additional settings**, turn on [**Purpose justification**](/cloudflare-one/access-controls/policies/require-purpose-justification/). 5. Turn on **Temporary authentication**. 6. Enter the **Email addresses of the approvers**. - :::note - Your approvers must be authenticated by Access. If they do not have an active session, Access will verify their identity against your [App Launcher Access policy](/cloudflare-one/access-controls/access-settings/app-launcher/). - ::: + :::note + Your approvers must be authenticated by Access. If they do not have an active session, Access will verify their identity against your [App Launcher Access policy](/cloudflare-one/access-controls/access-settings/app-launcher/). + ::: 7. Save the policy. Temporary authentication is now enabled for users who match this policy. You can optionally add a second **Allow** policy for users who should have persistent access. Be sure the policy order is set to allow persistent users through. diff --git a/src/content/docs/cloudflare-one/access-controls/service-credentials/index.mdx b/src/content/docs/cloudflare-one/access-controls/service-credentials/index.mdx index 7ff124cd8eb6d90..a9f7713dccc5a33 100644 --- a/src/content/docs/cloudflare-one/access-controls/service-credentials/index.mdx +++ b/src/content/docs/cloudflare-one/access-controls/service-credentials/index.mdx @@ -13,4 +13,3 @@ sidebar: import { DirectoryListing } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/access-controls/service-credentials/service-tokens.mdx b/src/content/docs/cloudflare-one/access-controls/service-credentials/service-tokens.mdx index 64603599f027224..28d4336eca249b9 100644 --- a/src/content/docs/cloudflare-one/access-controls/service-credentials/service-tokens.mdx +++ b/src/content/docs/cloudflare-one/access-controls/service-credentials/service-tokens.mdx @@ -7,8 +7,8 @@ title: Service tokens sidebar: order: 6 tags: -- JSON web token (JWT) -- Authentication + - JSON web token (JWT) + - Authentication --- import { diff --git a/src/content/docs/cloudflare-one/account-limits.mdx b/src/content/docs/cloudflare-one/account-limits.mdx index e29b38b2b415178..2b66eb6b6433481 100644 --- a/src/content/docs/cloudflare-one/account-limits.mdx +++ b/src/content/docs/cloudflare-one/account-limits.mdx @@ -62,19 +62,19 @@ This page lists the default account limits for rules, applications, fields, and ## Cloudflare Tunnel -| Feature | Limit | -| -------------------------------------------------- | ----- | -| `cloudflared` tunnels per account | 1,000 | +| Feature | Limit | +| -------------------------------------------------- | ----------------------------------- | +| `cloudflared` tunnels per account | 1,000 | | Routes (CIDR routes + Hostname routes) per account | 1,000 (shared with Cloudflare Mesh) | -| Active `cloudflared` replicas per tunnel | 25 | -| Virtual networks per account | 1,000 | +| Active `cloudflared` replicas per tunnel | 25 | +| Virtual networks per account | 1,000 | ## Cloudflare Mesh -| Feature | Limit | -| -------------------------------------------------- | ----- | -| Mesh nodes per account | 50 | -| Routes (CIDR routes) per account | 1,000 (shared with Cloudflare Tunnel) | +| Feature | Limit | +| -------------------------------- | ------------------------------------- | +| Mesh nodes per account | 50 | +| Routes (CIDR routes) per account | 1,000 (shared with Cloudflare Tunnel) | ## Digital Experience Monitoring (DEX) @@ -106,6 +106,7 @@ This page lists the default account limits for rules, applications, fields, and | Gateway API policy expression | 140,000 | ## Cloudflare One Client + | Feature | Limit | | -------------------------------------------------------------------------- | ------ | | Characters per device profile expression | 10,000 | diff --git a/src/content/docs/cloudflare-one/changelog/tunnel.mdx b/src/content/docs/cloudflare-one/changelog/tunnel.mdx index 7d4677d85c9b423..5c1f6285b4348a4 100644 --- a/src/content/docs/cloudflare-one/changelog/tunnel.mdx +++ b/src/content/docs/cloudflare-one/changelog/tunnel.mdx @@ -13,10 +13,7 @@ import { ProductChangelog, Render } from "~/components"; {/* db node --> printer ``` + ## Manage routes Use CIDR routes to forward traffic from your mesh node to devices on your local network. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cipher-suites.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cipher-suites.mdx index 4d20096eb33e2fd..98f1c0ce87d79e1 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cipher-suites.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/cipher-suites.mdx @@ -15,8 +15,8 @@ Cloudflare Tunnel connections use the cipher suites supported by `cloudflared`, The following table lists the cipher suites supported by `cloudflared`: -| Protocol support | Cipher suites | -|------------------|----------------| -| TLS 1.3 only | `TLS_AES_128_GCM_SHA256`
`TLS_AES_256_GCM_SHA384`
`TLS_CHACHA20_POLY1305_SHA256` | -| TLS 1.2 only | `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
`TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
`TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
`TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256`
`TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` | -| Up to and including TLS 1.2 | `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
`TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
`TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
`TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA` | +| Protocol support | Cipher suites | +| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| TLS 1.3 only | `TLS_AES_128_GCM_SHA256`
`TLS_AES_256_GCM_SHA384`
`TLS_CHACHA20_POLY1305_SHA256` | +| TLS 1.2 only | `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
`TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
`TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
`TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
`TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256`
`TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256` | +| Up to and including TLS 1.2 | `TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA`
`TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA`
`TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA`
`TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA` | diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/index.mdx index f60f0eecf786013..e0edd83ad74e895 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/index.mdx @@ -8,7 +8,7 @@ sidebar: order: 3 --- -import { DirectoryListing } from "~/components"; +import { DirectoryListing } from "~/components"; After [creating your Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/), you can configure various aspects of how `cloudflared` runs and connects your infrastructure to Cloudflare's network. This section covers advanced configuration options to optimize tunnel performance, security, and availability. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters.mdx index b6e4ec71f36882d..19d5f191ab29920 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters.mdx @@ -13,11 +13,13 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/remote-tunnel-permissions.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/remote-tunnel-permissions.mdx index 3b9c067dddd114d..f6088ef1050edb8 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/remote-tunnel-permissions.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/remote-tunnel-permissions.mdx @@ -65,70 +65,70 @@ To rotate a tunnel token: 1. Refresh the token on Cloudflare: - - - 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Networks** > **Connectors** > **Cloudflare Tunnels**. - 2. Select a `cloudflared` tunnel and select **Edit**. - 3. Select **Refresh token**. - 4. Copy the `cloudflared` installation command for your operating system. This command contains the new token. - - - - 1. Generate a random base64 string (minimum size 32 bytes) to use as a tunnel secret: - - ```sh - openssl rand -base64 32 - ``` - - ```sh output - AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg= - ``` - - 2. Make a `PATCH` request to the [Cloudflare Tunnel](/api/resources/zero_trust/subresources/tunnels/methods/edit/) endpoint: - - - - - After refreshing the token, `cloudflared` can no longer establish new connections to Cloudflare using the old token. However, existing connectors will remain active and the tunnel will continue serving traffic. + + + 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Networks** > **Connectors** > **Cloudflare Tunnels**. + 2. Select a `cloudflared` tunnel and select **Edit**. + 3. Select **Refresh token**. + 4. Copy the `cloudflared` installation command for your operating system. This command contains the new token. + + + + 1. Generate a random base64 string (minimum size 32 bytes) to use as a tunnel secret: + + ```sh + openssl rand -base64 32 + ``` + + ```sh output + AQIDBAUGBwgBAgMEBQYHCAECAwQFBgcIAQIDBAUGBwg= + ``` + + 2. Make a `PATCH` request to the [Cloudflare Tunnel](/api/resources/zero_trust/subresources/tunnels/methods/edit/) endpoint: + + + + + After refreshing the token, `cloudflared` can no longer establish new connections to Cloudflare using the old token. However, existing connectors will remain active and the tunnel will continue serving traffic. 2. On half of your `cloudflared` replicas, reinstall the `cloudflared` service with the new token. For example, on a Linux host: ```sh - sudo cloudflared service uninstall + sudo cloudflared service uninstall sudo cloudflared service install ``` @@ -140,9 +140,9 @@ To rotate a tunnel token: While these replicas are connecting to Cloudflare with the new token, traffic will automatically route through the other replicas. -5. Wait 10 minutes for traffic to route through the new connectors. +4. Wait 10 minutes for traffic to route through the new connectors. -6. Repeat steps 2, 3, and 4 for the second half of the replicas. +5. Repeat steps 2, 3, and 4 for the second half of the replicas. The tunnel token is now fully rotated. The old token is no longer in use. @@ -163,7 +163,7 @@ If your tunnel token is compromised, we recommend taking the following steps: 3. On each `cloudflared` replica, update `cloudflared` to use the new token. For example, on a Linux host: ```sh - sudo cloudflared service uninstall + sudo cloudflared service uninstall sudo cloudflared service install ``` diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters.mdx index 6840e8a166897b2..c545b148afb32c3 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters.mdx @@ -14,15 +14,21 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements.mdx index 0a7cbccf1dcbcbc..81564acce0df5df 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements.mdx @@ -32,7 +32,10 @@ When `cloudflared` receives a request from a device, it uses the ports on the ho - `cloudflared` should be deployed on a dedicated host machine. This model is typically appropriate, but there may be serverless or clustered workflows where a dedicated host is not possible. - The host machine should allocate 50,000 ports to be available for use by the `cloudflared` service. The remaining ports are reserved for system administrative processes. - + ### Private DNS diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall.mdx index 5954dd3c2bbff27..73321967dcd5876 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall.mdx @@ -35,22 +35,29 @@ Ensure port `7844` is allowed for both TCP and UDP protocols (for `http2` and `q #### SNI-enforcing firewalls + ### Region US ### Region FedRAMP High ### Optional diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/index.mdx index 57b31886ddd0a26..a02784740a89917 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/index.mdx @@ -8,7 +8,7 @@ sidebar: order: 6 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Deploy Cloudflare Tunnel in your environment — from cloud VMs to Kubernetes clusters, with Infrastructure as Code support. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/terraform.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/terraform.mdx index 1c27eaad46459cc..2e42733bf93cb6e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/terraform.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/deployment-guides/terraform.mdx @@ -86,7 +86,6 @@ Refer to the [Terraform installation guide](https://developer.hashicorp.com/terr ### Create a startup script - ## 6. Deploy Terraform diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/tunnel-useful-commands.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/tunnel-useful-commands.mdx index 60b688f0c55e95a..6dad6b29b8df2dc 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/tunnel-useful-commands.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/local-management/tunnel-useful-commands.mdx @@ -31,12 +31,12 @@ import { Render } from "~/components"; ## Manage private networks -| Command | Description | -| ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Command | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `cloudflared tunnel route ip add ` | Adds any network route space (represented as a CIDR) to your routing table. That network space becomes reachable for requests egressing from a user's machine as long as it is using the Cloudflare One Client and is enrolled in the same account that is running the tunnel chosen here. Further, those requests will be proxied to the specified tunnel, and reach an IP in the given CIDR, as long as that IP is reachable from the tunnel. To assign the IP route to a specific [Virtual Network](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/), use the `--vnet` option. | -| `cloudflared tunnel route ip show` (or `list`) | Shows your organization's private routing table. You can use additional flags to filter the results. | +| `cloudflared tunnel route ip show` (or `list`) | Shows your organization's private routing table. You can use additional flags to filter the results. | | `cloudflared tunnel route ip delete` | Deletes the row for a given CIDR from your routing table. That portion of your network will no longer be reachable by the Cloudflare One Client. | -| `cloudflared tunnel route ip get ` | Checks which row of the routing table will be used to proxy a given IP. This helps check and validate your configuration. | -| `cloudflared tunnel vnet add ` | Creates a Virtual Network to which IP routes can be assigned. To make this Virtual Network the default for your Zero Trust organization, use the `-d` flag. | -| `cloudflared tunnel vnet delete ` | Deletes the Virtual Network with the given name or UUID. Before you can delete a Virtual Network, you must first delete all IP routes assigned to the Virtual Network. | -| `cloudflared tunnel vnet list` | Displays all active Virtual Networks, the default Virtual Network, and their creation times. | +| `cloudflared tunnel route ip get ` | Checks which row of the routing table will be used to proxy a given IP. This helps check and validate your configuration. | +| `cloudflared tunnel vnet add ` | Creates a Virtual Network to which IP routes can be assigned. To make this Virtual Network the default for your Zero Trust organization, use the `-d` flag. | +| `cloudflared tunnel vnet delete ` | Deletes the Virtual Network with the given name or UUID. Before you can delete a Virtual Network, you must first delete all IP routes assigned to the Virtual Network. | +| `cloudflared tunnel vnet list` | Displays all active Virtual Networks, the default Virtual Network, and their creation times. | diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/copyrights.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/copyrights.mdx index e79d92232542499..75fdb3581cab640 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/copyrights.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/copyrights.mdx @@ -7,10 +7,9 @@ sidebar: order: 102 head: [] description: View associated copyrights. - --- -*** +--- [https://github.com/BurntSushi/toml](https://github.com/BurntSushi/toml) @@ -36,7 +35,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/Sirupsen/logrus](https://github.com/Sirupsen/logrus) @@ -62,7 +61,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/beorn7/perks/](https://github.com/beorn7/perks/) @@ -87,7 +86,7 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/certifi/gocertifi](https://github.com/certifi/gocertifi) @@ -95,7 +94,7 @@ This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at [http://mozilla.org/MPL/2.0/](http://mozilla.org/MPL/2.0/). -*** +--- [https://github.com/coreos/go-oidc/](https://github.com/coreos/go-oidc/) [https://github.com/coreos/go-systemd/](https://github.com/coreos/go-systemd/) @@ -306,7 +305,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*** +--- [https://github.com/facebookgo/grace](https://github.com/facebookgo/grace) @@ -319,14 +318,14 @@ Copyright (c) 2015, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, this +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name Facebook nor the names of its contributors may be used to +- Neither the name Facebook nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -341,7 +340,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*** +--- [https://github.com/getsentry/raven-go](https://github.com/getsentry/raven-go) @@ -352,13 +351,13 @@ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. -* Neither the name of Apollic Software, LLC nor the names of its +- Neither the name of Apollic Software, LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. @@ -374,7 +373,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*** +--- [https://github.com/glycerine/rbtree](https://github.com/glycerine/rbtree) @@ -398,7 +397,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/golang/protobuf](https://github.com/golang/protobuf) @@ -434,7 +433,7 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*** +--- [https://github.com/lib/pq](https://github.com/lib/pq) @@ -447,9 +446,9 @@ The above copyright notice and this permission notice shall be included in all c THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- -[https://godoc.org/github.com/matttproud/golang\\\_protobuf\\\_extensions/pbutil](https://godoc.org/github.com/matttproud/golang\\_protobuf\\_extensions/pbutil) +[https://godoc.org/github.com/matttproud/golang\\\_protobuf\\\_extensions/pbutil](https://godoc.org/github.com/matttproud/golang\_protobuf\_extensions/pbutil) ``` Apache License @@ -659,7 +658,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*** +--- [https://github.com/mitchellh/go-homedir](https://github.com/mitchellh/go-homedir) @@ -685,7 +684,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/pkg/errors](https://github.com/pkg/errors) @@ -695,10 +694,10 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright notice, this +- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, +- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. @@ -713,10 +712,10 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*** +--- -[https://github.com/prometheus/client\_golang](https://github.com/prometheus/client_golang) -[https://github.com/prometheus/client\_model](https://github.com/prometheus/client_model) +[https://github.com/prometheus/client_golang](https://github.com/prometheus/client_golang) +[https://github.com/prometheus/client_model](https://github.com/prometheus/client_model) [https://github.com/prometheus/common](https://github.com/prometheus/common) [https://github.com/prometheus/procfs](https://github.com/prometheus/procfs) @@ -928,7 +927,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*** +--- [https://github.com/urfave/cli](https://github.com/urfave/cli) @@ -954,7 +953,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*** +--- [https://github.com/go-yaml/yaml](https://github.com/go-yaml/yaml) @@ -1166,7 +1165,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -*** +--- [https://zombiezen.com/go/capnproto2](https://zombiezen.com/go/capnproto2) diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/license.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/license.mdx index c3079b110404278..6299a916a068aac 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/license.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/license.mdx @@ -6,7 +6,6 @@ products: title: License sidebar: order: 51 - --- Apache License diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel-api.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel-api.mdx index e880dc05a8955b9..1004578cbdb1b59 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel-api.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel-api.mdx @@ -30,12 +30,12 @@ Follow this guide to set up a Cloudflare Tunnel using the API. Make a `POST` request to the [Cloudflare Tunnel](/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/methods/create/) endpoint: ```sh output @@ -80,46 +80,47 @@ Before you publish an application through your tunnel, you must: Follow these steps to publish an application to the Internet. If you are looking to connect a private resource, skip to the [Connect a network](#3b-connect-a-network) section. -1. Make a [`PUT` request](/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/subresources/configurations/methods/update/) to route your [local service URL](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols/) to a public hostname. For example, - - - :::note - If you add a multi-level subdomain (more than one level of subdomain), you must [order an Advanced Certificate for the hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors/#i-see-this-site-cant-provide-a-secure-connection). - ::: - - Your ingress rules must include a catch-all rule at the end. In this example, `cloudflared` will respond with a 404 status code when the request does not match any of the previous hostnames. - -2. [Create a DNS record](/api/resources/dns/subresources/records/methods/create/) for your application: - - - - This DNS record allows Cloudflare to proxy `app.example.com` traffic to your Cloudflare Tunnel (`.cfargotunnel.com`). +1. Make a [`PUT` request](/api/resources/zero_trust/subresources/tunnels/subresources/cloudflared/subresources/configurations/methods/update/) to route your [local service URL](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols/) to a public hostname. For example, + + + + :::note + If you add a multi-level subdomain (more than one level of subdomain), you must [order an Advanced Certificate for the hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors/#i-see-this-site-cant-provide-a-secure-connection). + ::: + + Your ingress rules must include a catch-all rule at the end. In this example, `cloudflared` will respond with a 404 status code when the request does not match any of the previous hostnames. + +2. [Create a DNS record](/api/resources/dns/subresources/records/methods/create/) for your application: + + + + This DNS record allows Cloudflare to proxy `app.example.com` traffic to your Cloudflare Tunnel (`.cfargotunnel.com`). This application will be publicly available on the Internet once you [run the tunnel](#4-install-and-run-the-tunnel). To allow or block specific users, [create an Access application](/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/). @@ -128,13 +129,13 @@ This application will be publicly available on the Internet once you [run the tu To connect a private network through your tunnel, [add a tunnel route](/api/resources/zero_trust/subresources/networks/subresources/routes/methods/create/): `cloudflared` can now route traffic to these destination IPs. To configure Zero Trust policies and connect as a user, refer to [Connect private networks](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/). @@ -150,11 +151,11 @@ Install `cloudflared` on your server and run the tunnel using the `token` value To check if the tunnel is serving traffic: ```sh output diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel.mdx index 87b44a017b40937..18e2da263fc28c1 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel.mdx @@ -18,7 +18,11 @@ Follow this step-by-step guide to create your first [remotely-managed tunnel](/c ## 1. Create a tunnel - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/index.mdx index ca65ff18a9887ff..2482ef654c8cfb8 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/index.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Set up your first tunnel - --- -import { DirectoryListing, GlossaryTooltip } from "~/components" +import { DirectoryListing, GlossaryTooltip } from "~/components"; To create and manage tunnels, you will need to install and authenticate cloudflared on your origin server. `cloudflared` is what connects your server to Cloudflare's global network. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/index.mdx index 017e02c4b363879..6dda076ed46e587 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/index.mdx @@ -13,8 +13,8 @@ tags: import { Render, Stream } from "~/components"; -:::note[Looking to expose public applications?] -This documentation covers Cloudflare Tunnel use cases for private networking and Zero Trust, like VPN replacement and private network access. For publishing public web applications, APIs, and services to the Internet through Cloudflare refer to the [Cloudflare Tunnel documentation](/tunnel). +:::note[Looking to expose public applications?] +This documentation covers Cloudflare Tunnel use cases for private networking and Zero Trust, like VPN replacement and private network access. For publishing public web applications, APIs, and services to the Internet through Cloudflare refer to the [Cloudflare Tunnel documentation](/tunnel). ::: Cloudflare Tunnel provides you with a secure way to connect your resources to Cloudflare without a publicly routable IP address. With Tunnel, you do not send traffic to an external IP — instead, a lightweight daemon in your infrastructure (`cloudflared`) creates [outbound-only connections](#outbound-only-connections) to Cloudflare's global network. Cloudflare Tunnel can connect HTTP web servers, [SSH servers](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/), [remote desktops](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/), and other protocols safely to Cloudflare. This way, your origins can serve traffic through Cloudflare without being vulnerable to attacks that bypass Cloudflare. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/index.mdx index 25b86d04e55286d..d346bec2114ef0d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/index.mdx @@ -6,9 +6,8 @@ products: title: Monitor tunnels sidebar: order: 9 - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications.mdx index a23a3c04da466a9..90b446cff03deba 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications.mdx @@ -6,10 +6,9 @@ products: title: Notifications sidebar: order: 1 - --- -import { AvailableNotifications } from "~/components" +import { AvailableNotifications } from "~/components"; Administrators can receive an alert when Cloudflare Tunnels in an account change their health or deployment status. Notifications can be delivered via email, webhook, and third-party services. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr.mdx index b2dd6df9595c190..e80b571a1bbc009 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr.mdx @@ -24,9 +24,9 @@ To connect your infrastructure with Cloudflare Tunnel: 4. (Optional) Under **Additional settings**, select a [virtual network](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/) for this tunnel route. This step is only needed if the route's IP/CIDR range overlaps with another route in your account. If you do not select a virtual network, the IP route will be assigned to the `default` network. - :::note - To create a new virtual network, select **Manage virtual networks**. - ::: + :::note + To create a new virtual network, select **Manage virtual networks**. + ::: ## 2. Set up the client @@ -34,7 +34,11 @@ To connect your infrastructure with Cloudflare Tunnel: ## 3. Route private network IPs through the Cloudflare One Client - + ## 4. (Recommended) Filter network traffic with Gateway @@ -46,7 +50,7 @@ To connect your infrastructure with Cloudflare Tunnel: ### Zero Trust policies - + If you have applications clearly defined by IPs or hostnames, we recommend [creating an Access application](/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/) and managing user access alongside your SaaS and other web apps. Alternatively, if you prefer to secure a private network using a traditional firewall model, you can build Gateway network and DNS policies for IP ranges and domains. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/index.mdx index 9322c427b9241f5..03dd3b5c2c280f9 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/index.mdx @@ -18,5 +18,6 @@ On the client side, end users connect to Cloudflare's global network using the C ![Diagram displaying connections between a device, Cloudflare, and a private network.](~/assets/images/cloudflare-one/connections/private-ips-diagram.png) To enable remote access to your private network, refer to the following guides: + - [**Connect a private hostname**](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/): Route network traffic to an internal application using its hostname. -- [**Connect an IP/CIDR**](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/): Route traffic to an internal IP address or CIDR range. \ No newline at end of file +- [**Connect an IP/CIDR**](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/): Route traffic to an internal IP address or CIDR range. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/private-dns.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/private-dns.mdx index 180ab16892b1bcf..f4e9849be0a0224 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/private-dns.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/private-dns.mdx @@ -10,7 +10,7 @@ sidebar: order: 4 --- -import { Render } from "~/components" +import { Render } from "~/components"; By default, all DNS requests on the user device are resolved by Cloudflare's [public DNS resolver](/1.1.1.1/) except for common top level domains used for local resolution (such as `localhost`). You can connect an internal DNS resolver to Cloudflare and use it to resolve non-publicly routed domains. @@ -18,24 +18,23 @@ By default, all DNS requests on the user device are resolved by Cloudflare's [pu To resolve private DNS queries: -1. [Connect your private network](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/) with Cloudflare Tunnel. +1. [Connect your private network](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/) with Cloudflare Tunnel. -2. Under **Networks** > **Routes**, verify that the IP address of your internal DNS resolver is included in the tunnel. +2. Under **Networks** > **Routes**, verify that the IP address of your internal DNS resolver is included in the tunnel. - :::note + :::note - Ensure that **Split Tunnels** are configured to [include traffic to private IPs and hostnames](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/#3-route-private-network-ips-through-the-cloudflare-one-client). + Ensure that **Split Tunnels** are configured to [include traffic to private IPs and hostnames](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/#3-route-private-network-ips-through-the-cloudflare-one-client). - ::: + ::: -3. Route specific DNS queries to your internal DNS resolver using one of the following options: +3. Route specific DNS queries to your internal DNS resolver using one of the following options: + - [Create a Local Domain Fallback entry](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/) that points to the internal DNS resolver. For example, you can instruct the Cloudflare One Client to resolve all requests for `myorg.privatecorp` through an internal resolver at `10.0.0.25` rather than attempting to resolve this publicly. + - Alternatively, [create a resolver policy](/cloudflare-one/traffic-policies/resolver-policies/#create-a-resolver-policy) that points to the internal DNS resolver. - - [Create a Local Domain Fallback entry](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/) that points to the internal DNS resolver. For example, you can instruct the Cloudflare One Client to resolve all requests for `myorg.privatecorp` through an internal resolver at `10.0.0.25` rather than attempting to resolve this publicly. - - Alternatively, [create a resolver policy](/cloudflare-one/traffic-policies/resolver-policies/#create-a-resolver-policy) that points to the internal DNS resolver. +4. [Enable the Gateway proxy](/cloudflare-one/traffic-policies/proxy/#turn-on-the-gateway-proxy) for TCP and UDP. -4. [Enable the Gateway proxy](/cloudflare-one/traffic-policies/proxy/#turn-on-the-gateway-proxy) for TCP and UDP. - -5. Finally, ensure that your tunnel uses QUIC as the default [transport protocol](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters/#protocol). This will enable `cloudflared` to proxy UDP-based traffic which is required in most cases to resolve DNS queries. +5. Finally, ensure that your tunnel uses QUIC as the default [transport protocol](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/run-parameters/#protocol). This will enable `cloudflared` to proxy UDP-based traffic which is required in most cases to resolve DNS queries. The Cloudflare One Client will now send DNS queries to your internal DNS resolver for resolution. To learn more, refer to [How the Cloudflare One Client handles DNS requests](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/#how-the-warp-client-handles-dns-requests). diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns.mdx index 98430c7fdc1b90a..99d934881a0f10d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns.mdx @@ -17,13 +17,14 @@ import { Render } from "~/components"; ## Create a DNS record ## Cloudflare settings - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols.mdx index 17cb132130adfc8..f658fb166750775 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols.mdx @@ -15,10 +15,12 @@ import { Render } from "~/components"; When you [add a published application route](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/#2a-publish-an-application) to a Cloudflare Tunnel, you are instructing Cloudflare to proxy requests for your public hostname to a service running privately behind `cloudflared`. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers.mdx index 05468c98e98ec02..cbb16832f033141 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers.mdx @@ -25,12 +25,14 @@ When you add a [published application route](/cloudflare-one/networks/connectors ### Create a load balancer **Networks** > **Connectors** > **Cloudflare Tunnels**" - }} + file="tunnel/availability/load-balancer-create" + product="cloudflare-one" + params={{ + publishedAppRouteURL: + "/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/#2a-publish-an-application", + tunnelIdLocation: + "the [Cloudflare dashboard](https://dash.cloudflare.com/) under **Zero Trust** > **Networks** > **Connectors** > **Cloudflare Tunnels**", + }} /> Refer to the [Load Balancing documentation](/load-balancing/) for more details on load balancer settings and configurations. @@ -79,6 +81,7 @@ graph LR ``` As shown in the diagram, a typical setup includes: + - A dedicated Cloudflare Tunnel per data center. - One load balancer pool per tunnel. The load balancer hostname is set to the user-facing application hostname (`app.example.com`). - One load balancer endpoint per pool. The endpoint host header is set to the `cloudflared` published application hostname (`server1.example.com`) @@ -146,12 +149,12 @@ Here is an example of what your DNS records will look like before and after sett | CNAME | app1 | `.cfargotunnel.com` | | CNAME | app2 | `.cfargotunnel.com` | | CNAME | app1 | `.cfargotunnel.com` | -| CNAME | app2 | `.cfargotunnel.com` | +| CNAME | app2 | `.cfargotunnel.com` | **After**: | Type | Name | Content | | ---- | ---- | ------- | -| LB | `lb.example.com` | n/a | +| LB | `lb.example.com` | n/a | | CNAME | app1 | `lb.example.com` | | CNAME | app2 | `lb.example.com` | @@ -160,11 +163,12 @@ Here is an example of what your DNS records will look like before and after sett ### Monitors and TCP tunnel origins ### Session affinity and replicas @@ -174,9 +178,10 @@ The load balancer does not distinguish between [replicas](/cloudflare-one/networ ### Local connection preference diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors.mdx index d9c0787deeffdfa..ee3c9509de79961 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors.mdx @@ -74,5 +74,4 @@ If you see an error with the title `This site can't provide a secure connection` If you added a [multi-level subdomain](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/#2a-connect-an-application) (more than one level of subdomain), you must [order an Advanced Certificate for the hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/#2a-connect-an-application) as Cloudflare's Universal certificate will not cover the public hostname by default. - For more information on Tunnel errors, view your [Tunnel logs](/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/logs/) or [contact Cloudflare Support](/support/contacting-cloudflare-support/). diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs.mdx index 04c3693aabbaeb1..0c3a0e8a6720af6 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs.mdx @@ -28,44 +28,53 @@ The steps for getting diagnostic logs depend on your `cloudflared` deployment en These instructions apply to remotely-managed and locally-managed tunnels running directly on the host machine. ### Docker ### Kubernetes ## cloudflared-diag files diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/index.mdx index 281adab55837939..61105e303be197e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/index.mdx @@ -8,7 +8,7 @@ sidebar: order: 10 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Explore resources to help you resolve issues with Cloudflare Tunnel connectivity and configuration. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/index.mdx index 465c95783571898..19b86f3981d6630 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/index.mdx @@ -7,12 +7,11 @@ title: Use cases hidden: false sidebar: order: 4 - --- Cloudflare Tunnel creates a secure, outbound-only connection between your services and Cloudflare by deploying a lightweight connector in your environment. Here is how to use tunnels with some specific services: -* [SSH](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/) -* [RDP](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/) -* [SMB](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/smb/) -* [gRPC](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/grpc/) +- [SSH](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/) +- [RDP](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/) +- [SMB](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/smb/) +- [gRPC](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/grpc/) diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/index.mdx index c39aca829aac5a9..8ae62963190d27f 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/index.mdx @@ -17,4 +17,4 @@ Cloudflare offers three ways to secure RDP: - [Browser-based RDP](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-browser/) - [RDP with Cloudflare One Client](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-device-client/) -- [RDP with client-side cloudflared](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-cloudflared-authentication/) \ No newline at end of file +- [RDP with client-side cloudflared](/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-cloudflared-authentication/) diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-device-client.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-device-client.mdx index 7830923733b5e59..e9787ea4da56ea5 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-device-client.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/rdp/rdp-device-client.mdx @@ -57,7 +57,7 @@ By default, Internet Explorer will be installed and configured in [Enhanced Secu -3. In the **CIDR** tab for the tunnel, enter the private IP or CIDR address of your server. In GCP, the server IP is the **Internal IP** of the VM instance. +3. In the **CIDR** tab for the tunnel, enter the private IP or CIDR address of your server. In GCP, the server IP is the **Internal IP** of the VM instance. 4. (Optional) [Set up Zero Trust policies](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/#4-recommended-filter-network-traffic-with-gateway) to fine-tune access to your server. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/vnc-browser-rendering.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/vnc-browser-rendering.mdx index dfb0e2feed3b4db..de8d6a6065a81b3 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/vnc-browser-rendering.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/vnc-browser-rendering.mdx @@ -31,160 +31,159 @@ There are a number of different VNC server versions, deployments, and instances. For demonstration purposes, we will create a TightVNC server on an Ubuntu virtual machine (VM) hosted in Google Cloud Project (GCP). We will configure the VNC server to run XFCE, a lightweight desktop environment suitable for remote access. If you already have a VNC server installed, you can skip this step and [go to Step 2](#2-connect-the-server-to-cloudflare). -1. Open a terminal window for your Ubuntu VM. +1. Open a terminal window for your Ubuntu VM. -2. Install XFCE and TightVNC by running the following command: +2. Install XFCE and TightVNC by running the following command: - ```sh - sudo apt update - sudo apt install xfce4 xfce4-goodies dbus-x11 tightvncserver -y + ```sh + sudo apt update + sudo apt install xfce4 xfce4-goodies dbus-x11 tightvncserver -y - ``` + ``` - This command installs the desktop, some helpful utilities, and the VNC server software. + This command installs the desktop, some helpful utilities, and the VNC server software. -3. To initialize the VNC server: +3. To initialize the VNC server: + 1. Create a VNC server instance: - 1. Create a VNC server instance: + ```sh + vncserver + ``` - ```sh - vncserver - ``` + 2. You will be prompted to set a password. This password will be used to connect to your VNC server. It is limited to 8 characters. - 2. You will be prompted to set a password. This password will be used to connect to your VNC server. It is limited to 8 characters. + TightVNC will now create configuration files and start a VNC session on display `:1` (which uses port `5901`). - TightVNC will now create configuration files and start a VNC session on display `:1` (which uses port `5901`). + 3. You will be asked if you want to create a view-only password. You can press `n` for no. - 3. You will be asked if you want to create a view-only password. You can press `n` for no. + 4. Kill this initial session so that you can edit its configuration: - 4. Kill this initial session so that you can edit its configuration: + ```sh + vncserver -kill :1 + ``` - ```sh - vncserver -kill :1 - ``` -4. Configure VNC to launch the XFCE desktop: +4. Configure VNC to launch the XFCE desktop: + 1. Create a VNC configuration directory if it is missing: - 1. Create a VNC configuration directory if it is missing: + ```sh + mkdir -p ~/.vnc + ``` - ```sh - mkdir -p ~/.vnc - ``` + 2. Open the `xstartup` file using a text editor. For example, - 2. Open the `xstartup` file using a text editor. For example, + ```sh + vim ~/.vnc/xstartup + ``` - ```sh - vim ~/.vnc/xstartup - ``` + 3. Update the file to the following configuration: - 3. Update the file to the following configuration: + ```bash + #!/bin/sh + unset SESSION_MANAGER + unset DBUS_SESSION_BUS_ADDRESS + startxfce4 + ``` - ```bash - #!/bin/sh - unset SESSION_MANAGER - unset DBUS_SESSION_BUS_ADDRESS - startxfce4 - ``` + 4. Make the file executable: - 4. Make the file executable: + ```sh + chmod +x ~/.vnc/xstartup + ``` - ```sh - chmod +x ~/.vnc/xstartup - ``` +5. Start the VNC server again: -5. Start the VNC server again: - ```sh - vncserver -localhost :1 - ``` + ```sh + vncserver -localhost :1 + ``` - The `-localhost` flag ensures the VNC server only listens for connections from the VM itself, not from the public Internet. Your VNC server is now running on port `5901`, but it is only accessible from `localhost` (`127.0.0.1`) inside the VM. + The `-localhost` flag ensures the VNC server only listens for connections from the VM itself, not from the public Internet. Your VNC server is now running on port `5901`, but it is only accessible from `localhost` (`127.0.0.1`) inside the VM. -6. (Recommended) Test the VNC server with an existing VNC client to verify any missing packages or configuration changes. For example, to test a VNC server hosted on GCP: +6. (Recommended) Test the VNC server with an existing VNC client to verify any missing packages or configuration changes. For example, to test a VNC server hosted on GCP: + 1. Open a terminal on the client machine. - 1. Open a terminal on the client machine. + 2. Connect to the VNC server over SSH, forwarding your local port `5901` to the VNC server's listening port: - 2. Connect to the VNC server over SSH, forwarding your local port `5901` to the VNC server's listening port: + ```sh + gcloud compute ssh [YOUR_VM_NAME] --zone=[YOUR_ZONE] -- -L 5901:localhost:5901 + ``` - ```sh - gcloud compute ssh [YOUR_VM_NAME] --zone=[YOUR_ZONE] -- -L 5901:localhost:5901 - ``` + 3. Open your preferred VNC viewer application. - 3. Open your preferred VNC viewer application. + 4. In the VNC viewer, connect to the address `localhost:5901` and enter your VNC server password. - 4. In the VNC viewer, connect to the address `localhost:5901` and enter your VNC server password. + You should see the Ubuntu VM desktop. - You should see the Ubuntu VM desktop. +7. (Optional) Configure the VNC server to start on boot: + 1. Find the full path to the `vncserver` command: -7. (Optional) Configure the VNC server to start on boot: + ```sh + which vncserver + ``` - 1. Find the full path to the `vncserver` command: + ```sh output + /usr/bin/vncserver + ``` - ```sh - which vncserver - ``` - ```sh output - /usr/bin/vncserver - ``` - 2. Create a new service configuration file: + 2. Create a new service configuration file: - ```sh - sudo vim /etc/systemd/system/vncserver@.service - ``` + ```sh + sudo vim /etc/systemd/system/vncserver@.service + ``` - 3. Copy and paste the following content. Replace `[YOUR_USERNAME]` with the VNC server user. If needed, update `/usr/bin/vncserver` to your `vncserver` path. + 3. Copy and paste the following content. Replace `[YOUR_USERNAME]` with the VNC server user. If needed, update `/usr/bin/vncserver` to your `vncserver` path. - ```toml - [Unit] - Description=Start TightVNC server at startup - After=syslog.target network.target + ```toml + [Unit] + Description=Start TightVNC server at startup + After=syslog.target network.target - [Service] - Type=forking - User=[YOUR_USERNAME] - WorkingDirectory=/home/[YOUR_USERNAME] + [Service] + Type=forking + User=[YOUR_USERNAME] + WorkingDirectory=/home/[YOUR_USERNAME] - PIDFile=/home/[YOUR_USERNAME]/.vnc/%H:%i.pid + PIDFile=/home/[YOUR_USERNAME]/.vnc/%H:%i.pid - ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 - ExecStart=/usr/bin/vncserver -localhost :%i - ExecStop=/usr/bin/vncserver -kill :%i + ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1 + ExecStart=/usr/bin/vncserver -localhost :%i + ExecStop=/usr/bin/vncserver -kill :%i - [Install] - WantedBy=multi-user.target - ``` + [Install] + WantedBy=multi-user.target + ``` - 4. Reload `systemd` to read in the new service file: + 4. Reload `systemd` to read in the new service file: - ```sh - sudo systemctl daemon-reload - ``` + ```sh + sudo systemctl daemon-reload + ``` - 5. Enable the service to start at boot: + 5. Enable the service to start at boot: - ```sh - sudo systemctl enable vncserver@1.service - ``` + ```sh + sudo systemctl enable vncserver@1.service + ``` - The `1` variable configures the VNC service to use display `:1` (which runs on port `5901`). + The `1` variable configures the VNC service to use display `:1` (which runs on port `5901`). + 6. By default, `systemd` user services only run when that user is logged in. To allow your VNC service to start on boot (before you log in), enable user linger for your user: - 6. By default, `systemd` user services only run when that user is logged in. To allow your VNC service to start on boot (before you log in), enable user linger for your user: + ```sh + sudo loginctl enable-linger [YOUR_USERNAME] + ``` - ```sh - sudo loginctl enable-linger [YOUR_USERNAME] - ``` + 7. Start the service: - 7. Start the service: + ```sh + sudo systemctl start vncserver@1.service + ``` - ```sh - sudo systemctl start vncserver@1.service - ``` + 8. Check its status: - 8. Check its status: + ```sh + sudo systemctl status vncserver@1.service + ``` - ```sh - sudo systemctl status vncserver@1.service - ``` - - The VNC server will now start automatically every time the VM boots. + The VNC server will now start automatically every time the VM boots. ## 2. Connect the server to Cloudflare @@ -198,7 +197,7 @@ For demonstration purposes, we will create a TightVNC server on an Ubuntu virtua 5. For **Service**, select _TCP_ and enter `localhost:<5901>`. If the VNC server is on a different machine from where you installed the tunnel, enter `:5901`. - Replace `5901` with your VNC server's listening port. To determine your VNC listening port, run `sudo ss -lnpt` and look for `vnc` in the list of processes. + Replace `5901` with your VNC server's listening port. To determine your VNC listening port, run `sudo ss -lnpt` and look for `vnc` in the list of processes. 6. Save the route. @@ -220,7 +219,10 @@ Create a Cloudflare Access application that users can access through their brows 6. - + 7. Select **Create**. diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/index.mdx index 621709d181b4715..7f5b8371def9c4d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/index.mdx @@ -6,7 +6,8 @@ products: sidebar: order: 10 head: [] -description: Use Cloudflare WAN's different analytic options for an overview of the +description: + Use Cloudflare WAN's different analytic options for an overview of the performance of your sites, or to troubleshoot potential issues. tags: - Analytics @@ -16,15 +17,21 @@ import { Render } from "~/components"; Use Cloudflare WAN (formerly Magic WAN) analytics to monitor site performance and troubleshoot issues. - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/netflow-analytics.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/netflow-analytics.mdx index d3c2fff924b3af7..f685696ff741fda 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/netflow-analytics.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/netflow-analytics.mdx @@ -15,4 +15,11 @@ head: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics.mdx index 4694b2188d10e76..81bc27fef3b688e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics.mdx @@ -15,9 +15,10 @@ tags: import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/packet-captures.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/packet-captures.mdx index c7a0918e9e4281f..0a93283b55966af 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/packet-captures.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/packet-captures.mdx @@ -7,5 +7,4 @@ title: Packet captures external_link: /cloudflare-network-firewall/packet-captures/ sidebar: order: 5 - --- diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-bandwidth.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-bandwidth.mdx index 761d5ad3c83ef95..12fc47ede0c7643 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-bandwidth.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-bandwidth.mdx @@ -12,9 +12,10 @@ tags: - IPsec --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health.mdx index 6c2c604b49fd3c4..a7cdd1152a38d1e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health.mdx @@ -12,8 +12,10 @@ tags: - IPsec --- -import { Render } from "~/components" +import { Render } from "~/components"; - + params={{ productName: "Cloudflare WAN" }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/site-analytics.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/site-analytics.mdx index 9a1e57ebda7c9dd..294f9511dcdaaa2 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/site-analytics.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/analytics/site-analytics.mdx @@ -13,18 +13,21 @@ tags: - Analytics --- -import { Render } from "~/components" +import { Render } from "~/components"; ### Set thresholds for site health @@ -34,6 +37,7 @@ import { Render } from "~/components" product="networking-services" params={{ productName: "Cloudflare WAN", - magicTunnelHcsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/" + magicTunnelHcsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx index e934890d0601507..e5c5a9d02461bc1 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx @@ -11,35 +11,59 @@ sidebar: import { Render } from "~/components"; - If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. Refer to [SFP+ port information](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/) for more information on the hardware supported.", - lan: "refers to the physical Connector Ethernet port that you are using for your LAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose a number corresponding to the port that you are using in Connector.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. Refer to [SFP+ port information](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/) for more information on the hardware supported.", - noConnectorShows: "You need to have bought a Connector already for it to show up here. Refer to [Prerequisites](#prerequisites) if no Connector shows up in this list.", - networkSegmentationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", - dhcpServerURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", - dhcpRelayURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", - reserveIpAddressesURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", - shippedLanguage: "The Connector is shipped to you deactivated", - hardSoftConn: "You need to deploy two Connectors in your premises before you can set up a site in high availability.", - hcConfigsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", - ipsecTunnelsRefURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", - trafficSteeringURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", - vlanIdURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#vlan-id", - healthCheckFrequencyURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", - routedSubnetsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", - interruptWindowURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", - tunnelHealthChecksURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", - wanSettingsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#wan-settings", - sitesURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites/", - networkOptionsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/", - maintenanceURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/", - referenceInformationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/", - troubleshootingURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/" - }} /> + magicWord: "hardware", + productName: "Cloudflare One Appliance", + maintenanceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/", + dashName: "CF1 Cloudflare WAN", + sfpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/", + wan: "refers to the physical Connector Ethernet port that you are using for your WAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose the number corresponding to the port that you are using in Connector.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. Refer to [SFP+ port information](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/) for more information on the hardware supported.", + lan: "refers to the physical Connector Ethernet port that you are using for your LAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose a number corresponding to the port that you are using in Connector.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. Refer to [SFP+ port information](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/) for more information on the hardware supported.", + noConnectorShows: + "You need to have bought a Connector already for it to show up here. Refer to [Prerequisites](#prerequisites) if no Connector shows up in this list.", + networkSegmentationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", + dhcpServerURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", + dhcpRelayURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", + reserveIpAddressesURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", + shippedLanguage: "The Connector is shipped to you deactivated", + hardSoftConn: + "You need to deploy two Connectors in your premises before you can set up a site in high availability.", + hcConfigsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", + ipsecTunnelsRefURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + vlanIdURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#vlan-id", + healthCheckFrequencyURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + routedSubnetsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", + interruptWindowURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", + tunnelHealthChecksURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + wanSettingsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#wan-settings", + sitesURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites/", + networkOptionsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/", + maintenanceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/", + referenceInformationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/", + troubleshootingURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx index e8ca4f7240d425e..7d8436c9226ce40 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx @@ -4,10 +4,8 @@ description: Reference information for SFP+ port information in Zero Trust netwo products: - cloudflare-one title: SFP+ port information - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance.mdx index 6a1b94bdb249832..5299a10b9e18f37 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance.mdx @@ -10,34 +10,56 @@ sidebar: import { Render } from "~/components"; -
  • VMWare: Have already obtained your OVA package and license keys if you are installing on VMWare.
  • Proxmox: Have already obtained your Virtual Appliance Script and license keys if you are installing on Proxmox.
\nFor more information, refer to [Configure a virtual machine](#configure-a-virtual-machine) and select the appropriate tab.\n", - networkSegmentationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", - dhcpServerURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", - dhcpRelayURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", - reserveIpAddressesURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", - shippedLanguage: "Virtual Appliance is deactivated after you install it", - hardSoftConn: "You need to install two Virtual Appliances before you can set up a site in high availability.", - hcConfigsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", - ipsecTunnelsRefURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", - trafficSteeringURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", - vlanIdURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#vlan-id", - healthCheckFrequencyURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", - routedSubnetsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", - interruptWindowURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", - tunnelHealthChecksURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", - wanSettingsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#wan-settings", - sitesURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites/", - networkOptionsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/", - referenceInformationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/", - troubleshootingURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/" - }} /> + magicWord: "virtual", + productName: "Cloudflare One Appliance", + productNameVirtual: "Virtual Appliance", + maintenanceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/", + dashName: "CF1 Cloudflare WAN", + wan: "needs to correspond to the virtual network interface on the Virtual Appliance instance you have set up in VMware. Following our example from the previous steps, you need to choose port `1` since that is what corresponds to the `eno1` port we set up in VMware.", + lan: "needs to correspond to the virtual LAN interface on the Virtual Appliance instance you have set up in VMware. Following our example from the previous steps, you need to choose port `2` since that is what corresponds to the `eno2` port we set up in VMware.", + noConnectorShows: + "For a Virtual Appliance to show up you need to:
  • VMWare: Have already obtained your OVA package and license keys if you are installing on VMWare.
  • Proxmox: Have already obtained your Virtual Appliance Script and license keys if you are installing on Proxmox.
\nFor more information, refer to [Configure a virtual machine](#configure-a-virtual-machine) and select the appropriate tab.\n", + networkSegmentationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", + dhcpServerURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", + dhcpRelayURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", + reserveIpAddressesURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", + shippedLanguage: "Virtual Appliance is deactivated after you install it", + hardSoftConn: + "You need to install two Virtual Appliances before you can set up a site in high availability.", + hcConfigsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", + ipsecTunnelsRefURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + vlanIdURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#vlan-id", + healthCheckFrequencyURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + routedSubnetsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", + interruptWindowURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", + tunnelHealthChecksURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + wanSettingsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#wan-settings", + sitesURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites/", + networkOptionsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/", + referenceInformationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/", + troubleshootingURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/device-metrics.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/device-metrics.mdx index ffd0a4c4b645784..c0051513debf6e3 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/device-metrics.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/device-metrics.mdx @@ -14,6 +14,7 @@ import { Render } from "~/components"; file="mconn/device-metrics" product="networking-services" params={{ - troubleshootingURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/" + troubleshootingURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/index.mdx index fb436734ed7d217..cb114ce2b99fa6c 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/index.mdx @@ -15,9 +15,12 @@ import { Render } from "~/components"; product="networking-services" params={{ hardwareProductName: "Cloudflare One Appliance", - ipsecRefUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#security-and-other-information", - hardwareUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + ipsecRefUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference/#security-and-other-information", + hardwareUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", virtualProductName: "Virtual Appliance", - virtualUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", - }} + virtualUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", + }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx index ac563378234270b..c7cbae7c3ceabbf 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx @@ -14,6 +14,9 @@ import { Render } from "~/components"; file="mconn/maintenance/activate-connectors" product="networking-services" params={{ - hardwareConnectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", - virtualConnectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#activate-appliance", - }} /> + hardwareConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#activate-appliance", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/deactivate-appliance.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/deactivate-appliance.mdx index 35e5bf0f59c7313..6bcfc54764da629 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/deactivate-appliance.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/deactivate-appliance.mdx @@ -6,7 +6,6 @@ products: title: Deactivate Connector sidebar: order: 8 - --- import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat.mdx index f2b21ce17eccf65..490ed326c212d3f 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat.mdx @@ -6,7 +6,6 @@ products: title: Heartbeat sidebar: order: 9 - --- import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/index.mdx index 922634423e75753..630305e6d60c767 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 7 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window.mdx index c7b5151598427ee..056b0ca5a650163 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window.mdx @@ -6,7 +6,6 @@ title: Interrupt window description: Learn how to set up when Connector can update its systems. sidebar: order: 10 - --- import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx index 3949eb19c151c2e..98554bc18b3cf72 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx @@ -15,5 +15,5 @@ import { Render } from "~/components"; product="networking-services" params={{ dashName: "CF1 Cloudflare WAN", - }} + }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx index b7f774b674a7b81..3a9310c33020487 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx @@ -9,12 +9,16 @@ description: Breakout traffic allows you to define which applications should import { Render } from "~/components"; - \ No newline at end of file + magicWord: "breakout", + featureName: "Breakout traffic", + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + whatHappensApp: + "will now go directly to the Internet and bypass Cloudflare's filtering", + dashName: "CF1 Cloudflare WAN", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/index.mdx index b12153e883b952b..0468257e119128d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/index.mdx @@ -4,14 +4,16 @@ description: How Application-aware policies works in Zero Trust networking. products: - cloudflare-one title: Application-aware policies - --- -import { Render } from "~/components" +import { Render } from "~/components"; - + gatewayPoliciesURL: "/cloudflare-one/policies/gateway/", + appTypesGatewayURL: + "/cloudflare-one/policies/gateway/application-app-types/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx index 4067d211b871836..5aac85459c295d4 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx @@ -9,11 +9,13 @@ description: Prioritized traffic allows you to define which applications are import { Render } from "~/components"; - \ No newline at end of file + magicWord: "prioritized", + featureName: "Prioritized traffic", + whatHappensApp: "is now processed first by Connector", + dashName: "CF1 Cloudflare WAN", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx index 2c0fe51a6772f0b..fb14bed9a02c912 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx @@ -8,11 +8,13 @@ title: DHCP relay import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx index c8a992aa8ac61b7..54ddbc7c233c16a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx @@ -8,9 +8,10 @@ title: DHCP server import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx index a3ba4bd0341904e..525082ff11a2ee0 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx @@ -8,9 +8,11 @@ title: DHCP static address reservation import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/index.mdx index bda0220b0ebbf27..d3bb4e7b3f2a648 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx index b6dc835b4894396..bfd8e592fdc15f9 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx @@ -8,11 +8,15 @@ sidebar: badge: Beta --- -import { Render } from "~/components" +import { Render } from "~/components"; - + hardConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx index 1ccd87afb778419..5405768ac68156c 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx @@ -4,14 +4,17 @@ products: - cloudflare-one title: Enable NAT for a subnet description: Enable static NAT for subnets in Connector to re-use address spaces locally. - --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + hardConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-lan", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#create-a-lan", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx index 43b9ee7508fbdd0..b5133cb7577975e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx @@ -6,12 +6,16 @@ title: Network segmentation description: Define policies to define if traffic should flow between your LANs without leaving your local premises, or if traffic should be forwarded to Cloudflare for additional security configurations. --- -import { Render } from "~/components" +import { Render } from "~/components"; - + hardConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx index 741b251ec5b73f3..00ebfc4681edb6c 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx @@ -4,15 +4,19 @@ products: - cloudflare-one title: Routed subnets description: Learn how to configure routed subnets on a Connector, including setting static routes and next-hop addresses for complex LAN setups. - --- -import { Render } from "~/components" +import { Render } from "~/components"; - + netSubnetURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/nat-subnet/", + hardConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-lan", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#create-a-lan", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference.mdx index 63e642f8fee211d..be5fdb923289884 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/reference.mdx @@ -16,17 +16,28 @@ import { Render } from "~/components"; params={{ dashName: "CF1 Cloudflare WAN", gatewayURL: "/cloudflare-one/traffic-policies/", - hardConnectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", - virtualConnectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", - haSetupURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-high-availability-configuration", - ecmpRoutingURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#equal-cost-multi-path-routing", - multipleWansURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-wan", - sfpURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/", + hardConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + virtualConnectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", + haSetupURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-high-availability-configuration", + ecmpRoutingURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#equal-cost-multi-path-routing", + multipleWansURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-wan", + sfpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/", vlanIdURL: "#vlan-id", - trafficSteeringURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", - hcFrequencyURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", - dhcpURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/", - routedSubnetsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", - networkSegmentationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/" + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + hcFrequencyURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + dhcpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/dhcp/", + routedSubnetsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", + networkSegmentationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting.mdx index 3806aad41029a92..bec67a3bb4ce2d5 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/troubleshooting.mdx @@ -17,8 +17,11 @@ import { Render } from "~/components"; product="networking-services" params={{ dashName: "CF1 Cloudflare WAN", - activateURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", - firewallURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#firewall-settings-required", - heartbeatURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat/" + activateURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", + firewallURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#firewall-settings-required", + heartbeatURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard.mdx index 5c087c6432ea87f..854c24e84e725b5 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard.mdx @@ -16,12 +16,14 @@ import { Render } from "~/components"; params={{ dashInfo: "The dashboard shows the view of tunnel health as measured from each Cloudflare location where your traffic is likely to land.", - graphQL: "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health/", + graphQL: + "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/query-tunnel-health/", notificationsPath: "[notifications wizard](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/)", packetCaptures: "/cloudflare-network-firewall/packet-captures/", - networkAnalytics: "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", - magicWord: "CF1 Cloudflare WAN" + networkAnalytics: + "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", + magicWord: "CF1 Cloudflare WAN", }} /> @@ -39,7 +41,8 @@ import { Render } from "~/components"; file="tunnel-health/mconn-heartbeat-health" product="networking-services" params={{ - heartbeatURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat/" + heartbeatURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/maintenance/heartbeat/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts.mdx index 3b09a3fa29ff311..5c56ccb5ff6fcbf 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts.mdx @@ -18,7 +18,9 @@ import { Render } from "~/components"; productName: "Cloudflare WAN", magicTunnelHealthCheckCalculation: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts/", - networkAnalyticsPath: "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", - healthChecks: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + networkAnalyticsPath: + "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", + healthChecks: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx index 4a5d426468f3433..33927b2f361233a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx @@ -12,4 +12,7 @@ sidebar: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites.mdx index 066c118ccf4222d..e3d0145968a7905 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/sites.mdx @@ -15,10 +15,14 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "CF1 Cloudflare WAN", - greIpsecTunnelsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - connectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", - cniURL: "/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect/", + greIpsecTunnelsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + connectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", + cniURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect/", connectorName: "Cloudflare One Appliance", - magicTunnelHcsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/" + magicTunnelHcsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency.mdx index f9858038dbd480e..d1d59be9414d68b 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency.mdx @@ -16,7 +16,8 @@ import { Render } from "~/components"; params={{ magicWord: "CF1 Cloudflare WAN", productName: "Cloudflare WAN", - healthChecksUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + healthChecksUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", addTunnelsPath: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", }} diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx index 26d6f25b6a74b55..ca3e788d025bd8b 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx @@ -13,10 +13,11 @@ description: Configure the Cloudflare source IP range used when you receive traf import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes.mdx index 2fd957397c1f902..334a23c9167b3af 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes.mdx @@ -6,29 +6,37 @@ products: sidebar: order: 2 description: Cloudflare WAN uses a static configuration to route your traffic through anycast tunnels from Cloudflare's global network to your locations. If you are connected through CNI with Dataplane v2, you also have access to BGP peering (beta). Learn how to configure routing. - --- -import { Render } from "~/components" +import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx index 1f5ce39957c3508..d615ab646878dd7 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx @@ -12,26 +12,41 @@ tags: import { GlossaryTooltip, Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/index.mdx index 478096429eb0edf..8d38559e9f784a5 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 2 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute.mdx index 91c321110a4e9fa..006aa7559219809 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute.mdx @@ -15,8 +15,11 @@ import { Render } from "~/components"; file="routing/traceroute" product="networking-services" params={{ - greIpsecURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - warpURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", - cfTunnelURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/" + greIpsecURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + warpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", + cfTunnelURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/index.mdx index ee5e8e31b67dd5d..7cfe5c8a32d1f27 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx index 2e3362c2297a304..c44c422d412e3e9 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx @@ -10,10 +10,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aruba-edgeconnect.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aruba-edgeconnect.mdx index 47bdff355de0e2a..53f7609c41d4c0e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aruba-edgeconnect.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aruba-edgeconnect.mdx @@ -10,10 +10,13 @@ tags: import { Render } from "~/components"; - + gatewayUrl: "/cloudflare-one/traffic-policies/", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aws.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aws.mdx index dd27825eb60ed8a..4dde9787ebca0b6 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aws.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/aws.mdx @@ -6,14 +6,17 @@ products: title: Amazon AWS Transit Gateway tags: - AWS - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx index 6e4f1a3573cbf12..b02d849640387d0 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx @@ -10,11 +10,17 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx index 6308449fc485359..e3af7916ddaaf15 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx @@ -10,11 +10,17 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/index.mdx index 3692dd21b4e45ca..61a653693d0b777 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/azure/index.mdx @@ -11,8 +11,8 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Microsoft Azure integration guides currently available: - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx index 26cd14b751b3d81..df5158c103fe80f 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx @@ -10,6 +10,7 @@ tags: import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx index 2bf5636cbdce15a..b752d4f85dab6f7 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx @@ -10,15 +10,25 @@ tags: import { Render } from "~/components"; - + antiReplayProtectionUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection/", + mssClampingUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss/#mss-clamping", + unifiedRoutingUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#unified-routing-mode-beta", + automaticReturnRoutingUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#automatic-return-routing-beta", + trafficSteeringUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + supportedConfigParametersUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", + paloAltoGuideUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/palo-alto/", + configureTunnelEndpointsUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", + }} +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fitelnet.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fitelnet.mdx index 4af42ab35a2bc43..0da4cb37c63d84d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fitelnet.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fitelnet.mdx @@ -10,10 +10,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fortinet.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fortinet.mdx index 3869ebd7e5a01ea..e71cf29b9f07669 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fortinet.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/fortinet.mdx @@ -10,12 +10,19 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/google.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/google.mdx index e35533f9aa61fae..e8e6fe1d8fc944a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/google.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/google.mdx @@ -12,9 +12,13 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/index.mdx index 28c8eb38103e3a7..88548b31947b629 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/index.mdx @@ -11,9 +11,8 @@ head: - tag: title content: Third-party integration tutorials description: Learn how to integrate Cloudflare WAN with third-party products. - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/juniper.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/juniper.mdx index 9041812a55d647d..f3b4d51ebae092c 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/juniper.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/juniper.mdx @@ -10,10 +10,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/oracle.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/oracle.mdx index 544a2fd71e1b10b..4fe095992306cb0 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/oracle.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/oracle.mdx @@ -10,9 +10,13 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/palo-alto.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/palo-alto.mdx index 74648ea559442b1..d3a02cd42315066 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/palo-alto.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/palo-alto.mdx @@ -13,10 +13,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/pfsense.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/pfsense.mdx index 5c7329f8bb2a15d..8beb36669a01a5a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/pfsense.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/pfsense.mdx @@ -11,10 +11,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sonicwall.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sonicwall.mdx index 681705328bc2479..e2236e3c62ec88c 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sonicwall.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sonicwall.mdx @@ -10,11 +10,17 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sophos-firewall.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sophos-firewall.mdx index b2a4c4249e87375..afc7910dc9d12af 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sophos-firewall.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/sophos-firewall.mdx @@ -10,11 +10,17 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/strongswan.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/strongswan.mdx index ceba0f994025298..bb005e68632169a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/strongswan.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/strongswan.mdx @@ -11,8 +11,11 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/ubiquiti.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/ubiquiti.mdx index a97b5659741e9d7..9a96fafe0bfa4ab 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/ubiquiti.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/ubiquiti.mdx @@ -11,9 +11,9 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/velocloud.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/velocloud.mdx index f944858befeffef..736fbd873bbdd38 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/velocloud.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/velocloud.mdx @@ -10,8 +10,11 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/viptela.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/viptela.mdx index 1d4fe3f1866abf4..c7dc2d9c75ba0a6 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/viptela.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/viptela.mdx @@ -11,10 +11,15 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/vyos.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/vyos.mdx index 75be63a9bfe72a6..e79d26181aeb494 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/vyos.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/vyos.mdx @@ -10,6 +10,4 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/yamaha.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/yamaha.mdx index 77d9af6a973237c..b2355afb2d6994d 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/yamaha.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/yamaha.mdx @@ -10,9 +10,13 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/get-started.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/get-started.mdx index f8e8f7694c90053..8cf6de52ad11759 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/get-started.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/get-started.mdx @@ -16,12 +16,19 @@ import { Render } from "~/components"; params={{ productNameManual: "Cloudflare WAN", productNameConnector: "Cloudflare One Appliance", - configureConnectorUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", - configureMwanManually: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - greReferenceURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/", - ipsecReferenceUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", - ipsecReferenceConfigParams: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", - mtuReferenceURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss/", - wanTransformationUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/" + configureConnectorUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", + configureMwanManually: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + greReferenceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/", + ipsecReferenceUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", + ipsecReferenceConfigParams: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", + mtuReferenceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss/", + wanTransformationUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/index.mdx index 8aac7ee6d2a4275..c804130785b3a29 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/index.mdx @@ -20,13 +20,19 @@ import { Render } from "~/components"; productName: "Cloudflare WAN", connectorName: "Cloudflare One Appliance", connectorCta: "Use Cloudflare One Appliance", - getStartedUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/", + getStartedUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/", onRampsUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps/", - connectorUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", - thirdPartyUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/", - zeroTrustUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/", - bgpRoutesUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#configure-bgp-routes", - wanTransformationUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/", - virtualNetworksUrl: "/cloudflare-one/networks/virtual-networks/" + connectorUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", + thirdPartyUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/", + zeroTrustUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/", + bgpRoutesUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#configure-bgp-routes", + wanTransformationUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/", + virtualNetworksUrl: "/cloudflare-one/networks/virtual-networks/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/3rdparty.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/3rdparty.mdx index a8d18b418df7a40..c54c3b324cf1b28 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/3rdparty.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/3rdparty.mdx @@ -5,7 +5,6 @@ pcx_content_type: reference description: Reference information for Third party licenses in Zero Trust networking. products: - cloudflare-one - --- import text from "./3rdparty.txt?raw"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/index.mdx index 70f7ed48d19fc64..653b31922480265 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/legal/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 12 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect.mdx index b6c275104b79281..475873e33440e3a 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect.mdx @@ -13,14 +13,21 @@ head: import { Render } from "~/components"; - + +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps.mdx index 0e0944033ed0838..506e7260402fd54 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps.mdx @@ -17,11 +17,17 @@ import { Render } from "~/components"; magicWord: "CF1 Cloudflare WAN", productNameWAN: "Cloudflare WAN", productNameConnector: "Cloudflare One Appliance", - connectorURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", - thirdPartyURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/", - cniURL: "/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect/", - cfTunnelURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", - warpURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", - thirdPartyIntegrationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/" + connectorURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", + thirdPartyURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/", + cniURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/network-interconnect/", + cfTunnelURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", + warpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", + thirdPartyIntegrationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/third-party/", }} - /> +/> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection.mdx index f827135b0192839..bdb55cdaa44ca58 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection.mdx @@ -5,7 +5,8 @@ products: title: Anti-replay protection tags: - IPsec -description: If you use Cloudflare WAN and anycast IPsec tunnels, you will need to +description: + If you use Cloudflare WAN and anycast IPsec tunnels, you will need to disable anti-replay protection. Review the information here to learn more. sidebar: order: 1 diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/bandwidth-measurement.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/bandwidth-measurement.mdx index 6a168b9730c3943..32b8afa7e6f4527 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/bandwidth-measurement.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/bandwidth-measurement.mdx @@ -14,6 +14,7 @@ import { Render } from "~/components"; file="cloudflare-wan/reference/bandwidth-measurement" product="networking-services" params={{ - cloudflareTunnelURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/" + cloudflareTunnelURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/device-compatibility.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/device-compatibility.mdx index 4fa1452c2f1d01c..a51b28317cfdf42 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/device-compatibility.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/device-compatibility.mdx @@ -12,29 +12,53 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels.mdx index e48aacf091b3898..32c6047307e94c8 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels.mdx @@ -19,14 +19,18 @@ import { Render } from "~/components"; product="networking-services" params={{ productName: "Cloudflare WAN", - mssURL: "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/#set-maximum-segment-size", - productURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection/", - tunnelEndpoints: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/" + mssURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/#set-maximum-segment-size", + productURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/anti-replay-protection/", + tunnelEndpoints: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", }} /> ## Troubleshooting For help resolving tunnel issues: + - [Troubleshoot tunnel health](/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health/) - Diagnose and fix health check failures - [Troubleshoot with IPsec logs](/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/ipsec-troubleshoot/) - Use Logpush to analyze IPsec handshake issues diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx index f4b1ec66d7f87c2..c08c54539b5b3b6 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx @@ -8,9 +8,13 @@ sidebar: order: 8 --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/index.mdx index c9bbdad031b4e3d..936eef5bb11c21b 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 11 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss.mdx index dad3b9a5d8d8777..a6693ef9af219d6 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/mtu-mss.mdx @@ -16,6 +16,6 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "CF1 Cloudflare WAN", - productName: "Cloudflare WAN" + productName: "Cloudflare WAN", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering.mdx index 354bdbd705088a9..c5d20719e86eb64 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering.mdx @@ -17,22 +17,30 @@ import { Render } from "~/components"; file="reference/traffic-steering" product="networking-services" params={{ - magicWord: "CF1 Cloudflare WAN", - productName: "Cloudflare WAN", + magicWord: "CF1 Cloudflare WAN", + productName: "Cloudflare WAN", routingTableName: "Cloudflare Virtual Network routing table", mFirewallName: "Cloudflare Network Firewall", mFirewallURL: "/cloudflare-network-firewall/", - warpClientURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + warpClientURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", remoteBrowserURL: "/cloudflare-one/remote-browser-isolation/", accessURL: "/cloudflare-one/access-controls/policies/", gatewayURL: "/cloudflare-one/traffic-policies/", - cfTunnelURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", - greIpsecReferenceURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/", - createStaticRoute: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#create-a-static-route", - editStaticRoute: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#edit-a-static-route", - setupBgpPeering: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#set-up-bgp-peering", - legacyHCs: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/#legacy-bidirectional-health-checks", - tunnelHCsPage: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + cfTunnelURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel/", + greIpsecReferenceURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/", + createStaticRoute: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#create-a-static-route", + editStaticRoute: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#edit-a-static-route", + setupBgpPeering: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/#set-up-bgp-peering", + legacyHCs: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/#legacy-bidirectional-health-checks", + tunnelHCsPage: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", sourceIPsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips/", virtualNetworkName: "Cloudflare Virtual Network", diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks.mdx index 276bc867f82dcd8..f8b615e6070db55 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks.mdx @@ -18,12 +18,16 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "CF1 Cloudflare WAN", - addTunnels: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", - changeHealthCheckRate: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + addTunnels: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", + changeHealthCheckRate: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", probeHealth: "#health-state-and-prioritization", productName: "Cloudflare WAN", - staticRoutes: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/", - tunnelEndpoints: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/" + staticRoutes: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/", + tunnelEndpoints: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/security.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/security.mdx index d122736e9eeaedc..eace55f088f5192 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/security.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/security.mdx @@ -9,14 +9,15 @@ sidebar: head: - tag: title content: Enable security filters - --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/connectivity.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/connectivity.mdx index 2eb4a9483c2622f..e5bc049482c1740 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/connectivity.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/connectivity.mdx @@ -17,10 +17,15 @@ import { Render } from "~/components"; product="networking-services" params={{ productName: "Cloudflare WAN", - tunnelHealthLink: "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health/", - routingBgpLink: "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp/", - checkHealthDashLink: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", - tunnelHealthChecksLink: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", - networkAnalyticsLink: "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/" + tunnelHealthLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health/", + routingBgpLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp/", + checkHealthDashLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", + tunnelHealthChecksLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + networkAnalyticsLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/index.mdx index 1e718eb8e9c31ce..fb5782e5fef4adf 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 10 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx index 3f0cd1c1f120d63..23dbe5aa1465d70 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx @@ -10,14 +10,19 @@ sidebar: order: 1 --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp.mdx index 41ea7fb74a080e1..dd1b594c265542e 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp.mdx @@ -13,14 +13,18 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health.mdx index 49a3d8aef991d65..fca3b17df568c35 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health.mdx @@ -14,17 +14,24 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation.mdx index a1fce7bc5634d3c..0dcfa150778deae 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation.mdx @@ -17,11 +17,15 @@ import { Render } from "~/components"; file="cloudflare-wan/wan-transformation" product="networking-services" params={{ - getStartedUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/", + getStartedUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/", connectivityOptionsUrl: "/cloudflare-one/networks/connectivity-options/", onRampsUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps/", - zeroTrustUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/", - applianceUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", - secureWanTrafficUrl: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services/", + zeroTrustUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/", + applianceUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/appliance/", + secureWanTrafficUrl: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway.mdx index 37ab275a843c03d..c39636c40320181 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway.mdx @@ -18,21 +18,36 @@ import { Render } from "~/components"; product="networking-services" params={{ gatewayURL: "/cloudflare-one/traffic-policies/", - warpURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", - cfAutoCertificatesURL: "/cloudflare-one/team-and-resources/devices/user-side-certificates/automated-deployment/", - cfManualCertificatesURL: "/cloudflare-one/team-and-resources/devices/user-side-certificates/manual-deployment/", - decryptTlsURL: "/cloudflare-one/traffic-policies/http-policies/tls-decryption/", - doNotInspectURL: "/cloudflare-one/traffic-policies/http-policies/#do-not-inspect", - warpChecksURL: "/cloudflare-one/reusable-components/posture-checks/client-checks/", - osVersionChecks: "/cloudflare-one/reusable-components/posture-checks/client-checks/os-version/", - mwanOnrampsURL: "/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps/", - gatewayResolverPoliciesURL: "/cloudflare-one/traffic-policies/resolver-policies/", - gatewayInternalDnsURL: "/cloudflare-one/traffic-policies/resolver-policies/#internal-dns", + warpURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client/", + cfAutoCertificatesURL: + "/cloudflare-one/team-and-resources/devices/user-side-certificates/automated-deployment/", + cfManualCertificatesURL: + "/cloudflare-one/team-and-resources/devices/user-side-certificates/manual-deployment/", + decryptTlsURL: + "/cloudflare-one/traffic-policies/http-policies/tls-decryption/", + doNotInspectURL: + "/cloudflare-one/traffic-policies/http-policies/#do-not-inspect", + warpChecksURL: + "/cloudflare-one/reusable-components/posture-checks/client-checks/", + osVersionChecks: + "/cloudflare-one/reusable-components/posture-checks/client-checks/os-version/", + mwanOnrampsURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/on-ramps/", + gatewayResolverPoliciesURL: + "/cloudflare-one/traffic-policies/resolver-policies/", + gatewayInternalDnsURL: + "/cloudflare-one/traffic-policies/resolver-policies/#internal-dns", egressPoliciesURL: "/cloudflare-one/traffic-policies/egress-policies/", - gatewayLogsURL: "/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/#http-logs", - tcpMssClampingURL: "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/#set-maximum-segment-size", - ikeURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", - greIpsecURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - tracerouteURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/" + gatewayLogsURL: + "/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/#http-logs", + tcpMssClampingURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/get-started/#set-maximum-segment-size", + ikeURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", + greIpsecURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + tracerouteURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client.mdx index 021d27ca4f6f08d..a6aa06e27222024 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-one-client.mdx @@ -18,15 +18,23 @@ import { Render } from "~/components"; file="cloudflare-wan/zero-trust/warp" product="networking-services" params={{ - warpURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", - greIpsecURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", - setupZeroTrustAccountURL: "/cloudflare-one/setup/#2-create-a-zero-trust-organization", + warpURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + greIpsecURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", + setupZeroTrustAccountURL: + "/cloudflare-one/setup/#2-create-a-zero-trust-organization", ztDashPath: "My Team > Devices", - splitTunnelsURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/split-tunnels/", - warpDeploymentURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/", - warpIngressIpURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#warp-ingress-ip", + splitTunnelsURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/split-tunnels/", + warpDeploymentURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/", + warpIngressIpURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#warp-ingress-ip", mwanConnectorName: "Cloudflare One Appliance", - domainFallbackURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#add-a-domain", - tracerouteURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/" + domainFallbackURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/local-domains/#add-a-domain", + tracerouteURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx index d1ca77abe7c8a72..0d372fbdcc0d99f 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx @@ -15,10 +15,15 @@ import { Render } from "~/components"; product="networking-services" params={{ gatewayURL: "/cloudflare-one/traffic-policies/", - greIpsecURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - warpURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", - tracerouteURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/", - trafficSteeringURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#route-evaluation-with-zero-trust-connections", - arrURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#automatic-return-routing-beta" + greIpsecURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + warpURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + tracerouteURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/traceroute/", + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#route-evaluation-with-zero-trust-connections", + arrURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/#automatic-return-routing-beta", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/index.mdx index 86daf36cc1a9660..510e6bd01921e87 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/index.mdx @@ -9,7 +9,6 @@ head: - tag: title content: Cloudflare One integration tutorials description: Learn how to integrate Cloudflare WAN with other Cloudflare One products, such as Cloudflare Gateway and the Cloudflare One Client. - --- import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services.mdx b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services.mdx index 1bcbcba64603e90..a634aba89cca3ac 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/security-services.mdx @@ -16,8 +16,11 @@ import { Render } from "~/components"; file="cloudflare-wan/zero-trust/security-services" product="networking-services" params={{ - networkFirewallURL: "/cloudflare-one/traffic-policies/packet-filtering/network-firewall-overview/", - gatewaySetupURL: "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway/", - wanTransformationURL: "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/", + networkFirewallURL: + "/cloudflare-one/traffic-policies/packet-filtering/network-firewall-overview/", + gatewaySetupURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/zero-trust/cloudflare-gateway/", + wanTransformationURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/wan-transformation/", }} /> diff --git a/src/content/docs/cloudflare-one/networks/connectors/granular-permissions.mdx b/src/content/docs/cloudflare-one/networks/connectors/granular-permissions.mdx index 1db111952cb9cd0..21c15ec9d2d739b 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/granular-permissions.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/granular-permissions.mdx @@ -8,7 +8,7 @@ products: - cloudflare-one --- -import { Steps } from '~/components'; +import { Steps } from "~/components"; You can scope Cloudflare member permissions to individual [Cloudflare Tunnel](/tunnel/) instances and [Cloudflare Mesh](/cloudflare-one/networks/connectors/cloudflare-mesh/) nodes, instead of granting account-wide access to every Tunnel and Mesh node. This enables least-privilege delegation for private networking operations — for example, letting a support operator stream logs from a single Tunnel without exposing the rest of your account. diff --git a/src/content/docs/cloudflare-one/networks/connectors/index.mdx b/src/content/docs/cloudflare-one/networks/connectors/index.mdx index 24eaa0394bc62b2..7c6fe57320f8f26 100644 --- a/src/content/docs/cloudflare-one/networks/connectors/index.mdx +++ b/src/content/docs/cloudflare-one/networks/connectors/index.mdx @@ -10,7 +10,6 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" - +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/networks/routes/add-routes.mdx b/src/content/docs/cloudflare-one/networks/routes/add-routes.mdx index 8bfca8fb0871aec..189b65dec009c19 100644 --- a/src/content/docs/cloudflare-one/networks/routes/add-routes.mdx +++ b/src/content/docs/cloudflare-one/networks/routes/add-routes.mdx @@ -29,9 +29,9 @@ To add a CIDR route: 3. In **CIDR**, enter the IP address or CIDR range that you wish to route through the tunnel (for example, `10.0.0.1` or `10.0.0.0/24`). This can be a private or public IP. 4. For **Tunnel**, select the Cloudflare Tunnel that is being used to connect your private network to Cloudflare. 5. (Optional) Under **Additional settings**, select a [virtual network](/cloudflare-one/networks/virtual-networks/) for this tunnel route. A virtual network is a private routing domain that provides routing isolation within your account. This step is only needed if the route's IP/CIDR range overlaps with another route in your account. If you do not select a virtual network, the IP route will be assigned to the `default` network. - :::note - Virtual networks are only supported for `cloudflared` tunnels. - ::: + :::note + Virtual networks are only supported for `cloudflared` tunnels. + ::: 6. Select **Create**. Cloudflare will now route requests to your private network. However, the route does not automatically capture traffic from end users. To enable client-side connectivity, refer to the [cloudflared](/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-cidr/) or @@ -61,9 +61,10 @@ Published application routes expose applications to the Internet via a domain th :::note[Prerequisites] Before you publish an application, ensure you have: + - [Created a Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/get-started/create-remote-tunnel/) using `cloudflared`. - [Added a website to Cloudflare](/fundamentals/manage-domains/add-site/). -::: + ::: To add a published application route to an existing tunnel: @@ -74,13 +75,13 @@ To add a published application route to an existing tunnel: 3. Go to the **Published application routes** tab and select **Add a published application route**. 4. Enter a subdomain and select a **Domain** from the drop-down menu. Specify any subdomain or path information. - :::note - If you add a multi-level subdomain (more than one level of subdomain), you must [order an Advanced Certificate for the hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors/#i-see-this-site-cant-provide-a-secure-connection). - ::: + :::note + If you add a multi-level subdomain (more than one level of subdomain), you must [order an Advanced Certificate for the hostname](/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/common-errors/#i-see-this-site-cant-provide-a-secure-connection). + ::: 5. Under **Service**, choose a [service type](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/protocols/) and specify its URL. For example: - - **Type**: _HTTP_ - - **URL**: `localhost:8000` + - **Type**: _HTTP_ + - **URL**: `localhost:8000` 6. Under **Additional application settings**, specify any [parameters](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters/) you would like to add to your tunnel configuration. @@ -91,4 +92,3 @@ Anyone on the Internet can now access the application at the specified hostname. ## Add a WAN route WAN routes define the IP network segments (such as `10.0.0.0/24`) that are reachable via a GRE or IPsec tunnel. To add a WAN route, refer to the [WAN Connectors documentation](/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/). - diff --git a/src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx b/src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx index 90e480866276de9..308de57b07e7f48 100644 --- a/src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx +++ b/src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx @@ -23,14 +23,14 @@ When planning your private network addressing and configuring [Split Tunnel](/cl | ------------------------------------------------------------- | ---------------- | ------------ | | [Cloudflare source IPs](#cloudflare-source-ips) | `100.64.0.0/12` | Yes | | [Gateway initial resolved IPs](#gateway-initial-resolved-ips) | `100.80.0.0/16` | No | -| [Device IPs](#device-ips) | `100.96.0.0/12` | Yes | +| [Device IPs](#device-ips) | `100.96.0.0/12` | Yes | | [Private Load Balancer IPs](#private-load-balancer-ips) | `100.112.0.0/16` | Yes | ## IPv6 ranges | Name | Default CIDR | Configurable | | ------------------------------------------------------------- | -------------------------- | ------------ | -| [Device IPs](#device-ips) | `2606:4700:0cf1:1000::/64` | No | +| [Device IPs](#device-ips) | `2606:4700:0cf1:1000::/64` | No | | [Gateway initial resolved IPs](#gateway-initial-resolved-ips) | `2606:4700:0cf1:4000::/64` | No | | [Cloudflare source IPs](#cloudflare-source-ips) | `2606:4700:0cf1:5000::/64` | No | diff --git a/src/content/docs/cloudflare-one/networks/virtual-networks.mdx b/src/content/docs/cloudflare-one/networks/virtual-networks.mdx index 6a8f6c283d0c8b1..be5f7bea46c3b41 100644 --- a/src/content/docs/cloudflare-one/networks/virtual-networks.mdx +++ b/src/content/docs/cloudflare-one/networks/virtual-networks.mdx @@ -17,11 +17,15 @@ import { Render } from "~/components"; product="networking-services" params={{ productName: "Cloudflare One", - tunnelConfigURL: "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/", + tunnelConfigURL: + "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/", addRoutesURL: "/cloudflare-one/networks/routes/add-routes/", - configureRoutesURL: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/", - trafficSteeringURL: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", - privateNetworksURL: "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", + configureRoutesURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/how-to/configure-routes/", + trafficSteeringURL: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/traffic-steering/", + privateNetworksURL: + "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", routesURL: "/cloudflare-one/networks/routes/", }} /> diff --git a/src/content/docs/cloudflare-one/remote-browser-isolation/accessibility.mdx b/src/content/docs/cloudflare-one/remote-browser-isolation/accessibility.mdx index 0749407053febed..c3ff67b1fdb0308 100644 --- a/src/content/docs/cloudflare-one/remote-browser-isolation/accessibility.mdx +++ b/src/content/docs/cloudflare-one/remote-browser-isolation/accessibility.mdx @@ -24,4 +24,4 @@ Alternatively, to use a keyboard shortcut, press `CTRL + ALT + Z`. ## Languages -The isolated browser supports keyboard inputs in all languages. Users can use their native keyboard to type in languages that use diacritics (for example, `á` or `ç`) or character-based scripts (for example, Chinese, Japanese, or Korean). \ No newline at end of file +The isolated browser supports keyboard inputs in all languages. Users can use their native keyboard to type in languages that use diacritics (for example, `á` or `ç`) or character-based scripts (for example, Chinese, Japanese, or Korean). diff --git a/src/content/docs/cloudflare-one/remote-browser-isolation/index.mdx b/src/content/docs/cloudflare-one/remote-browser-isolation/index.mdx index c608dbdef4888a2..3ad4acc8218df86 100644 --- a/src/content/docs/cloudflare-one/remote-browser-isolation/index.mdx +++ b/src/content/docs/cloudflare-one/remote-browser-isolation/index.mdx @@ -12,7 +12,6 @@ tags: import { Render } from "~/components"; - :::note Remote browser isolation is available as an add-on to Zero Trust Pay-as-you-go and Enterprise plans. ::: @@ -30,4 +29,3 @@ Cloudflare Browser Isolation is a security product. In order to serve transparen ## Troubleshooting For help resolving common issues with Browser Isolation, refer to [Troubleshoot Browser Isolation](/cloudflare-one/remote-browser-isolation/troubleshooting/). - diff --git a/src/content/docs/cloudflare-one/remote-browser-isolation/known-limitations.mdx b/src/content/docs/cloudflare-one/remote-browser-isolation/known-limitations.mdx index b4040d192dbbf47..e7f230098916d61 100644 --- a/src/content/docs/cloudflare-one/remote-browser-isolation/known-limitations.mdx +++ b/src/content/docs/cloudflare-one/remote-browser-isolation/known-limitations.mdx @@ -83,4 +83,7 @@ You no longer need to isolate both the Identity Provider (IdP) and Service Provi ## Browser Isolation is not compatible with private apps on non-`443` ports - + diff --git a/src/content/docs/cloudflare-one/remote-browser-isolation/network-dependencies.mdx b/src/content/docs/cloudflare-one/remote-browser-isolation/network-dependencies.mdx index a74778b93fcbd01..21df1128ff02665 100644 --- a/src/content/docs/cloudflare-one/remote-browser-isolation/network-dependencies.mdx +++ b/src/content/docs/cloudflare-one/remote-browser-isolation/network-dependencies.mdx @@ -34,8 +34,8 @@ Browser Isolation uses WebRTC (a real-time communication protocol) for low-laten In order to pass WebRTC traffic, the remoting client must be able to connect to the following IP addresses: -| IP range | Port range | Protocol | -| ------------------------------------------------------------------------ | ------------- | -------- | +| IP range | Port range | Protocol | +| ------------------------------------------------------------------------------------------------------------------ | ------------- | -------- | | IPv4: `162.159.201.10 - 162.159.201.255`
IPv4: `172.64.73.0 - 172.64.73.255`
IPv6: `2606:4700:f2::/48` | 10000 - 59999 | UDP | Each remote browser instance is randomly assigned a port, and the port that a user is allocated to will change often and without notice. diff --git a/src/content/docs/cloudflare-one/remote-browser-isolation/setup/index.mdx b/src/content/docs/cloudflare-one/remote-browser-isolation/setup/index.mdx index c45a25eaf8d13b8..9e910279a1fe9a8 100644 --- a/src/content/docs/cloudflare-one/remote-browser-isolation/setup/index.mdx +++ b/src/content/docs/cloudflare-one/remote-browser-isolation/setup/index.mdx @@ -15,13 +15,13 @@ Browser Isolation is enabled through [Secure Web Gateway HTTP policies](/cloudfl Setup instructions vary depending on how you want to connect your devices to Cloudflare. Refer to the links below to view the setup guide for each deployment option. -| Connection | Mode | Description | -| --------------------------------------------------------------------------------------------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------- | -| [Traffic and DNS mode](/cloudflare-one/traffic-policies/get-started/http/) | In-line | Apply identity-based HTTP policies to traffic proxied through the Cloudflare One Client. | -| [Access](/cloudflare-one/access-controls/policies/isolate-application/) | In-line | Apply identity-based HTTP policies to Access applications that are rendered in a remote browser. | -| [Gateway proxy endpoint](/cloudflare-one/remote-browser-isolation/setup/non-identity/) | In-line | Apply non-identity HTTP policies to traffic forwarded to a [proxy endpoint](/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/). | -| [Cloudflare WAN](/cloudflare-one/remote-browser-isolation/setup/non-identity/) | In-line | Apply non-identity HTTP policies to traffic connected through a GRE or IPsec tunnel (site-to-site encrypted connections to Cloudflare's network). | -| [Clientless remote browser](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/) | Prefixed URL | Render web pages in a remote browser when users go to `https://.cloudflareaccess.com/browser/`. | +| Connection | Mode | Description | +| --------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Traffic and DNS mode](/cloudflare-one/traffic-policies/get-started/http/) | In-line | Apply identity-based HTTP policies to traffic proxied through the Cloudflare One Client. | +| [Access](/cloudflare-one/access-controls/policies/isolate-application/) | In-line | Apply identity-based HTTP policies to Access applications that are rendered in a remote browser. | +| [Gateway proxy endpoint](/cloudflare-one/remote-browser-isolation/setup/non-identity/) | In-line | Apply non-identity HTTP policies to traffic forwarded to a [proxy endpoint](/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/). | +| [Cloudflare WAN](/cloudflare-one/remote-browser-isolation/setup/non-identity/) | In-line | Apply non-identity HTTP policies to traffic connected through a GRE or IPsec tunnel (site-to-site encrypted connections to Cloudflare's network). | +| [Clientless remote browser](/cloudflare-one/remote-browser-isolation/setup/clientless-browser-isolation/) | Prefixed URL | Render web pages in a remote browser when users go to `https://.cloudflareaccess.com/browser/`. | **In-line** mode means traffic is inspected as it flows through Gateway — users browse to websites using normal URLs, not a special Cloudflare prefix. Some in-line methods require device or network configuration, such as installing the Cloudflare One Client or configuring a PAC file. **Prefixed URL** mode requires users to visit a Cloudflare-hosted URL that wraps the target website. diff --git a/src/content/docs/cloudflare-one/reusable-components/custom-pages/gateway-block-page.mdx b/src/content/docs/cloudflare-one/reusable-components/custom-pages/gateway-block-page.mdx index f0ab810ee252406..318f06a6fc92ed4 100644 --- a/src/content/docs/cloudflare-one/reusable-components/custom-pages/gateway-block-page.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/custom-pages/gateway-block-page.mdx @@ -79,7 +79,7 @@ You can add a Mailto link to your custom block page, which allows users to direc | Source IP | The public source IP of the user device. | | Account ID | The Cloudflare account associated with the block policy. | | User ID | The ID of the user who visited the page. Currently, User IDs are not surfaced in the dashboard and can only be viewed by calling the [API](/api/resources/zero_trust/subresources/access/subresources/users/methods/list/). | -| Device ID | The ID of the device that visited the page. This is generated by the Cloudflare One Client. | +| Device ID | The ID of the device that visited the page. This is generated by the Cloudflare One Client. | | Block Reason | Your policy-specific block message. | ## Configure policy block behavior diff --git a/src/content/docs/cloudflare-one/reusable-components/custom-pages/index.mdx b/src/content/docs/cloudflare-one/reusable-components/custom-pages/index.mdx index c7cde6525fc3b70..96799f2d3e915f6 100644 --- a/src/content/docs/cloudflare-one/reusable-components/custom-pages/index.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/custom-pages/index.mdx @@ -10,6 +10,6 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus.mdx index 1b02eaa266e0cf7..ccfd4fb9efc2beb 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus.mdx @@ -49,24 +49,23 @@ You can use the following commands to validate if the posture check is working a 1. Open a PowerShell window. 2. List all installed antivirus products registered with Windows Security Center: - ```powershell - Get-WmiObject -Namespace "root\SecurityCenter2" -ClassName "AntiVirusProduct" - ``` - - ```powershell output - - displayName : Windows Defender - instanceGuid : {00000000-0000-0000-0000-000000000000} - pathToSignedProductExe : windowsdefender:// - pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe - productState : 397568 - timestamp : Fri, 09 Jan 2026 12:00:00 GMT - PSComputerName : ENDPOINT-01 - ``` + ```powershell + Get-WmiObject -Namespace "root\SecurityCenter2" -ClassName "AntiVirusProduct" + ``` + + ```powershell output + + displayName : Windows Defender + instanceGuid : {00000000-0000-0000-0000-000000000000} + pathToSignedProductExe : windowsdefender:// + pathToSignedReportingExe : %ProgramFiles%\Windows Defender\MsMpeng.exe + productState : 397568 + timestamp : Fri, 09 Jan 2026 12:00:00 GMT + PSComputerName : ENDPOINT-01 + ``` 3. Microsoft does not support decoding the `productState` from the `SecurityCenter2` namespace. To verify that an antivirus product is active, open the [Windows Security app](https://support.microsoft.com/en-us/windows/stay-protected-with-the-windows-security-app-2ae0363d-0ada-c064-8b56-6a39afb6a963). The **Virus & threat protection** panel should say `No action needed` with a green checkmark. - To determine which antivirus product is running, select **Virus & threat protection** > **Manage providers**. You will see the name of the antivirus product (for example, `Windows Defender Antivirus`) and its current state. + To determine which antivirus product is running, select **Virus & threat protection** > **Manage providers**. You will see the name of the antivirus product (for example, `Windows Defender Antivirus`) and its current state. 4. If you configured a maximum antivirus signature age in your posture check, compare the `timestamp` in the PowerShell output against the current system time. If the difference exceeds the configured number of days, the posture check will fail. - diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/application-check.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/application-check.mdx index daec64a910742b5..6e24b6094c78b8c 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/application-check.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/application-check.mdx @@ -38,12 +38,12 @@ The Application Check device posture attribute checks that a specific applicatio 2. **Operating system**: Select your operating system. 3. **Application path**: Enter the file path for the executable that will be running (for example, `C:\Program Files\myfolder\myfile.exe`). - + :::note - Be sure to enter the binary file path, not the application launch path. When checking for an application on macOS, a common mistake is to enter `/Applications/ApplicationName.app`. This will not work as `ApplicationName.app` is a folder. The executable file that will be running is located within the folder, for example `ApplicationName.app/Contents/MacOS/ApplicationName`. - Some applications change their file path after an update. Ensure that the application is always in a stable location or use environment variables. - ::: + ::: 5. **Signing certificate thumbprint (recommended)**: Enter the [thumbprint of the publishing certificate](#determine-the-signing-thumbprint) used to sign the binary. Adding this information will enable the check to ensure that the application was signed by the expected software developer. 6. **SHA-256 (optional)**: Enter the [SHA-256 value](#determine-the-sha-256-value) of the binary. This is used to ensure the integrity of the binary file on the device. diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/file-check.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/file-check.mdx index bcf50cd88967c96..d0a1f568446a035 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/file-check.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/file-check.mdx @@ -38,7 +38,8 @@ The File Check device posture attribute checks for the presence of a file on a d 2. **Operating system**: Select your operating system. 3. **File Path**: Enter a file path (for example, `c:\my folder\myfile.exe`). - + + 4. **Signing certificate thumbprint (recommended)**: Enter the [thumbprint](/cloudflare-one/reusable-components/posture-checks/client-checks/application-check/#determine-the-signing-thumbprint) of the publishing certificate used to sign the file. Adding this information will enable the check to ensure that the file was signed by the expected software developer. 5. **SHA-256 (optional)**: Enter the [SHA-256 value](/cloudflare-one/reusable-components/posture-checks/client-checks/application-check/#determine-the-sha-256-value) of the file. This is used to ensure the integrity of the file on the device. diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/firewall.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/firewall.mdx index 1d1d08a80225a0d..b580c8ae61cbeb2 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/firewall.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/firewall.mdx @@ -36,12 +36,13 @@ The Firewall device posture attribute ensures that a firewall is running on a de 4. Enter a descriptive name for the check. 5. Select your operating system. 6. Configure **Enable firewall check** based on your desired security policy: - - **Enabled**: (Recommended) The posture check passes only if the firewall is running. - - **Disabled**: The posture check passes only if the firewall is turned off. + - **Enabled**: (Recommended) The posture check passes only if the firewall is running. + - **Disabled**: The posture check passes only if the firewall is turned off. + + :::note + The **Enable firewall check** toggle does not turn the posture check on or off; rather, the toggle determines whether the Cloudflare One Client looks for an active or inactive firewall. + ::: - :::note - The **Enable firewall check** toggle does not turn the posture check on or off; rather, the toggle determines whether the Cloudflare One Client looks for an active or inactive firewall. - ::: 7. Select **Save**. Next, go to **Insights** > **Logs** > **Posture logs** and verify that the firewall check is returning the expected results. diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/index.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/index.mdx index 1ceee1540f5307e..00d1b33264aa55e 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/index.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/index.mdx @@ -6,33 +6,32 @@ products: title: Cloudflare One Client checks sidebar: order: 1 - --- These device posture checks are performed by the [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/). To use this feature, you must [deploy the Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/) to your devices and enable the desired posture checks. ## Supported Client modes -* Traffic and DNS mode -* Traffic only mode -* Posture only mode +- Traffic and DNS mode +- Traffic only mode +- Posture only mode ## Supported operating systems -| Device posture check | macOS | Windows | Linux | iOS | Android/ChromeOS | -| --------------------------------------------------------------------------------------------- | ----- | ------- | ----------- | --- | ---------------- | -| [Antivirus](/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus/) | ❌ | ✅ | ❌ | ❌ | ❌ | -| [Application check](/cloudflare-one/reusable-components/posture-checks/client-checks/application-check/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Carbon Black](/cloudflare-one/reusable-components/posture-checks/client-checks/carbon-black/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Client certificate](/cloudflare-one/reusable-components/posture-checks/client-checks/client-certificate/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Device serial numbers](/cloudflare-one/reusable-components/posture-checks/client-checks/corp-device/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Device UUID](/cloudflare-one/reusable-components/posture-checks/client-checks/device-uuid/) | ❌ | ❌ | ❌ | ✅ | ✅ | -| [Disk encryption](/cloudflare-one/reusable-components/posture-checks/client-checks/disk-encryption/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Domain joined](/cloudflare-one/reusable-components/posture-checks/client-checks/domain-joined/) | ❌ | ✅ | ❌ | ❌ | ❌ | -| [File check](/cloudflare-one/reusable-components/posture-checks/client-checks/file-check/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Firewall](/cloudflare-one/reusable-components/posture-checks/client-checks/firewall/) | ✅ | ✅ | ❌ | ❌ | ❌ | -| [OS version](/cloudflare-one/reusable-components/posture-checks/client-checks/os-version/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Require Gateway](/cloudflare-one/reusable-components/posture-checks/client-checks/require-gateway/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [Require WARP](/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp/) | ✅ | ✅ | ✅ | ✅ | ✅ | -| [SentinelOne](/cloudflare-one/reusable-components/posture-checks/client-checks/sentinel-one/) | ✅ | ✅ | ✅ | ❌ | ❌ | -| [Tanium (legacy)](/cloudflare-one/reusable-components/posture-checks/client-checks/tanium/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| Device posture check | macOS | Windows | Linux | iOS | Android/ChromeOS | +| ---------------------------------------------------------------------------------------------------------- | ----- | ------- | ----- | --- | ---------------- | +| [Antivirus](/cloudflare-one/reusable-components/posture-checks/client-checks/antivirus/) | ❌ | ✅ | ❌ | ❌ | ❌ | +| [Application check](/cloudflare-one/reusable-components/posture-checks/client-checks/application-check/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Carbon Black](/cloudflare-one/reusable-components/posture-checks/client-checks/carbon-black/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Client certificate](/cloudflare-one/reusable-components/posture-checks/client-checks/client-certificate/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Device serial numbers](/cloudflare-one/reusable-components/posture-checks/client-checks/corp-device/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Device UUID](/cloudflare-one/reusable-components/posture-checks/client-checks/device-uuid/) | ❌ | ❌ | ❌ | ✅ | ✅ | +| [Disk encryption](/cloudflare-one/reusable-components/posture-checks/client-checks/disk-encryption/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Domain joined](/cloudflare-one/reusable-components/posture-checks/client-checks/domain-joined/) | ❌ | ✅ | ❌ | ❌ | ❌ | +| [File check](/cloudflare-one/reusable-components/posture-checks/client-checks/file-check/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Firewall](/cloudflare-one/reusable-components/posture-checks/client-checks/firewall/) | ✅ | ✅ | ❌ | ❌ | ❌ | +| [OS version](/cloudflare-one/reusable-components/posture-checks/client-checks/os-version/) | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Require Gateway](/cloudflare-one/reusable-components/posture-checks/client-checks/require-gateway/) | ✅ | ✅ | ✅ | ✅ | ✅ | +| [Require WARP](/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp/) | ✅ | ✅ | ✅ | ✅ | ✅ | +| [SentinelOne](/cloudflare-one/reusable-components/posture-checks/client-checks/sentinel-one/) | ✅ | ✅ | ✅ | ❌ | ❌ | +| [Tanium (legacy)](/cloudflare-one/reusable-components/posture-checks/client-checks/tanium/) | ✅ | ✅ | ✅ | ❌ | ❌ | diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/os-version.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/os-version.mdx index e30d916ac2409c1..92e23f910d1ba59 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/os-version.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/os-version.mdx @@ -36,7 +36,7 @@ The OS Version device posture attribute checks whether the version of a device's 5. (Optional) Configure additional OS-specific fields: - + To check that Windows devices have required security patches and features installed, include an Update Build Revision (UBR) number in the OS version check. - **Update Build Revision**: Enter the Windows UBR you want devices to match (for example, `3803`). The UBR is the fourth part of the full Windows version number (for example, in `10.0.19045.3803`, the UBR is `3803`). @@ -77,6 +77,7 @@ Operating systems display version numbers in different ways. This section covers ### Windows Windows version numbers consist of four parts: `Major.Minor.Build.UBR`. For example, `10.0.19045.3803` where: + - `10.0` is the **Version** (Major.Minor) - `19045` is the **Build** number - `3803` is the **UBR** (Update Build Revision) diff --git a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp.mdx b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp.mdx index fe3b97910a59def..14c460754260543 100644 --- a/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/posture-checks/client-checks/require-warp.mdx @@ -37,7 +37,7 @@ Cloudflare One enables you to restrict access to your applications to devices ru ## 1. Enable the WARP check 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Traffic policies** > **Traffic settings**. -2. Ensure that *Allow Secure Web Gateway to proxy traffic** is enabled. +2. Ensure that \*Allow Secure Web Gateway to proxy traffic\*\* is enabled. 3. Go to **Reusable components** > **Posture checks**. 4. In **Cloudflare One Client checks**, select **Add a check**. 5. Select **WARP**, then select **Save**. diff --git a/src/content/docs/cloudflare-one/reusable-components/tags.mdx b/src/content/docs/cloudflare-one/reusable-components/tags.mdx index affffb57c1a52f9..9cf337c0f0573e9 100644 --- a/src/content/docs/cloudflare-one/reusable-components/tags.mdx +++ b/src/content/docs/cloudflare-one/reusable-components/tags.mdx @@ -11,4 +11,3 @@ sidebar: import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/index.mdx b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/index.mdx index 06e26a64c28ed43..be1e46ccc11fec2 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/index.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/index.mdx @@ -109,8 +109,8 @@ Use when you only want to enforce [Cloudflare One Client device posture checks]( Each client mode offers a different set of Zero Trust features. -| Client mode | Best for | DNS Filtering | Network Filtering | HTTP Filtering | Service mode (displayed in `warp-cli settings`) | -| --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------- | ----------------- | -------------- | ----------------------------------------------- | +| Client mode | Best for | DNS Filtering | Network Filtering | HTTP Filtering | Service mode (displayed in `warp-cli settings`) | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ------------- | ----------------- | -------------- | ----------------------------------------------- | | [**Traffic and DNS mode (default)**](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#traffic-and-dns-mode-default) | Full security with all filtering capabilities | ✅ | ✅ | ✅ | `WarpWithDnsOverHttps` | | [**DNS only mode**](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#dns-only-mode) | DNS filtering without routing device traffic | ✅ | ❌ | ❌ | `DnsOverHttps` | | [**Traffic only mode**](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#traffic-only-mode) | Traffic routing with existing DNS infrastructure | ❌ | ✅ | ✅ | `TunnelOnly` | diff --git a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/common-issues.mdx b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/common-issues.mdx index 3ddfb9848c66291..7042d96a25bd81b 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/common-issues.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/common-issues.mdx @@ -19,6 +19,7 @@ This section covers the most common issues you might encounter as you deploy the ## Connectivity and registration ### Stuck on "Disconnected" or frequent flapping + If the Cloudflare One Client is stuck in the `Disconnected` state or frequently changes between `Connected` and `Disconnected`, this indicates that the client cannot establish a connection to Cloudflare's global network. In your [client diagnostic logs](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/), `daemon.log` will typically show one or more of the following errors: @@ -27,61 +28,75 @@ In your [client diagnostic logs](/cloudflare-one/team-and-resources/devices/clou - Connectivity checks timing out for `connectivity.cloudflareclient.com`. **Common causes**: + - **Firewall blocks**: A local or network firewall is blocking the [required IP addresses](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/). - **VPN interference**: A third-party VPN is fighting for control over the routing table or DNS. Refer to the [VPN compatibility guide](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/vpn/). - **ISP blocks**: Your country or ISP may be explicitly blocking client traffic. ### Registration error (Authentication Expired) + When registering the client, you may see `Authentication Expired` or `Registration error. Please try again later`. **Common causes**: + - **System clock out of sync**: Your computer system clock must be properly synced via NTP. If your clock is off by more than 20 seconds, the authentication token (JWT) will be invalid. - **Prompt timeout**: You must complete the registration in your browser and return to the client within one minute of the prompt. ### (Linux) DNS connectivity check failed + This error often means that `systemd-resolved` is not allowing the client to resolve DNS requests. In `daemon.log`, you will see `DNS connectivity check failed to resolve host="warp-svc."`. **Solution**: + 1. Add `ResolveUnicastSingleLabel=yes` to `/etc/systemd/resolved.conf`. 2. Ensure no other DNS servers are explicitly configured in that file. 3. Restart the service: `sudo systemctl restart systemd-resolved.service`. ### (Mac/Linux) Invalid character in resolv.conf + The client cannot parse `resolv.conf` files containing invalid characters like `!@#$%^&*()<>?` in `search` directives. Remove these characters to restore service. ## Browser and certificate issues ### "Your connection is not private" or untrusted warnings + Advanced security features require the [Cloudflare root certificate](/cloudflare-one/team-and-resources/devices/user-side-certificates/) to be trusted on the device. - **Chrome/Edge**: These browsers cache certificates. If you installed the certificate while the browser was running, you must restart the browser. - **Root certificate expiry**: The default Cloudflare root certificate expired on February 2, 2025. If you are seeing errors, [generate and activate a new certificate](/cloudflare-one/team-and-resources/devices/user-side-certificates/#generate-a-cloudflare-root-certificate) in the dashboard. ### 2025 Certificate migration + Starting with version 2024.12.554.0, the client can automatically install new certificates as soon as they are **Available** in the dashboard. For older versions, certificates had to be marked **In-Use** first. Ensure **Install CA to system certificate store** is enabled in your [Device settings](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/). ## Windows-specific issues ### Windows shows "No Internet access" + This is often a cosmetic error with Windows Network Connectivity Status Indicator (NCSI). Apps like Outlook or JumpCloud may refuse to connect because of this status. **Solution**: Configure NCSI to detect the client's local DNS proxy and use active probing by setting these registry keys to `1`: + - `HKEY_LOCAL_MACHINE\SOFTWARE\POLICIES\MICROSOFT\Windows\NetworkConnectivityStatusIndicator\UseGlobalDNS` - `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet\EnableActiveProbing` ### Setup Wizard ends prematurely + This usually indicates a missing dependency, such as .NET Framework `4.7.2` or later. Legacy systems (like Windows 10 Enterprise 1607) may require a manual update of the [.NET Framework Runtime](https://dotnet.microsoft.com/en-us/download/dotnet-framework/net472). ## Other environment issues ### WSL2 connectivity + If WSL2 loses connectivity, check your [split tunnel configuration](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/split-tunnels/). The IP range used by WSL to communicate with the host may be accidentally included in the tunnel. Exclude the WSL network range to restore connectivity. ### SMTP port 25 blocked + By default, the client blocks outgoing traffic on port `25` to prevent spam. Use port `587` or `465` for encrypted email, or contact your account team to request an unblock. ### Admin override codes expired + [Admin override codes](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/#allow-admin-override-codes) are time-sensitive and adhere to fixed-hour blocks. A code generated at 9:30 AM with a 1-hour timeout will expire at 10:00 AM because its validity is counted within the 9:00 AM-10:00 AM window. --- diff --git a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/connectivity-status.mdx b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/connectivity-status.mdx index 41e24ebbe3edf84..57570302af9994e 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/connectivity-status.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/connectivity-status.mdx @@ -16,22 +16,22 @@ The Cloudflare One Client (formerly WARP) GUI displays the following status mess To print status messages to the console, run the `warp-cli -l status` command before connecting the client. -| Status message | Description | -| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Verifying connection settings | Initializes connection components based on your [device client settings](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/). | -| Validating network | Validates Ethernet and/or Wi-Fi network connectivity. | -| Initializing IP connection | Checks for IPv4 and IPv6 connectivity to Cloudflare using the [Happy Eyeballs algorithm](https://datatracker.ietf.org/doc/html/rfc6555). | -| Establishing a connection | Connects to the endpoint discovered by Happy Eyeballs. | -| Building a Tunnel | Creates a [virtual network interface](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#virtual-interface) on the operating system for the WARP tunnel. | -| Configuring the firewall | Configures the system firewall to allow WARP tunnel traffic. | +| Status message | Description | +| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Verifying connection settings | Initializes connection components based on your [device client settings](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/settings/). | +| Validating network | Validates Ethernet and/or Wi-Fi network connectivity. | +| Initializing IP connection | Checks for IPv4 and IPv6 connectivity to Cloudflare using the [Happy Eyeballs algorithm](https://datatracker.ietf.org/doc/html/rfc6555). | +| Establishing a connection | Connects to the endpoint discovered by Happy Eyeballs. | +| Building a Tunnel | Creates a [virtual network interface](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#virtual-interface) on the operating system for the WARP tunnel. | +| Configuring the firewall | Configures the system firewall to allow WARP tunnel traffic. | | Setting up your routing table | Updates the [system routing table](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#routing-table) based on your [Split Tunnel rules](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/split-tunnels/). | -| Configuring your firewall rules | Configures the [system firewall](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#system-firewall) based on your Split Tunnel rules. | -| Checking connectivity to DNS | Checks connectivity to the DNS endpoint (`.cloudflare-gateway.com`). | -| Setting local endpoint communication | Configures local DNS proxy sockets. | -| Configuring local DNS proxy | Creates a [local DNS proxy](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#dns-traffic) for DNS resolution. | -| Applying DNS settings | Sets the local DNS proxy as the default DNS server on the device. | -| Configuring forward proxy | (Only in [Local proxy mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode)) Configures the SOCKS proxy. | -| Confirming Tunnel connection | Checks connectivity to [destinations](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks) inside and outside of the WARP tunnel. | -| Validating DNS configuration | Verifies that DNS requests are answered by WARP's local DNS proxy. | -| Verifying SOCKS proxy configuration | (Only in [Local proxy mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode)) Verifies the SOCKS proxy configuration. | -| Ensuring MTLS identity | (Only in [Posture only mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/device-information-only/)) Installs a client certificate for mTLS authentication. | +| Configuring your firewall rules | Configures the [system firewall](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#system-firewall) based on your Split Tunnel rules. | +| Checking connectivity to DNS | Checks connectivity to the DNS endpoint (`.cloudflare-gateway.com`). | +| Setting local endpoint communication | Configures local DNS proxy sockets. | +| Configuring local DNS proxy | Creates a [local DNS proxy](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/route-traffic/client-architecture/#dns-traffic) for DNS resolution. | +| Applying DNS settings | Sets the local DNS proxy as the default DNS server on the device. | +| Configuring forward proxy | (Only in [Local proxy mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode)) Configures the SOCKS proxy. | +| Confirming Tunnel connection | Checks connectivity to [destinations](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/deployment/firewall/#connectivity-checks) inside and outside of the WARP tunnel. | +| Validating DNS configuration | Verifies that DNS requests are answered by WARP's local DNS proxy. | +| Verifying SOCKS proxy configuration | (Only in [Local proxy mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/#local-proxy-mode)) Verifies the SOCKS proxy configuration. | +| Ensuring MTLS identity | (Only in [Posture only mode](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/modes/device-information-only/)) Installs a client certificate for mTLS authentication. | diff --git a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs.mdx b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs.mdx index 1a48f5bece5c008..2bff092a3e7064e 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs.mdx @@ -59,82 +59,82 @@ You can collect client diagnostic logs remotely from the Zero Trust dashboard by The `warp-debugging-info-- + + + + To add the certificate to your Docker Compose file to install it during runtime: + 1. Add the certificate install directions to your `docker-compose.yml` file. For example: + + ```yaml title="Red Hat-based containers" + version: '3' + services: + redhat-app: + image: registry.access.redhat.com/ubi9/ubi:latest + volumes: + - certs/certificate.pem:/etc/pki/ca-trust/source/anchors/certificate.pem + entrypoint: /bin/sh -c "dnf install -y ca-certificates && update-ca-trust extract && app start" + ``` + + ```yaml title="Debian-based containers" + version: '3' + services: + debian-app: + image: debian:12 + volumes: + - certs/certificate.pem:/usr/local/share/ca-certificates/certificate.crt + entrypoint: /bin/sh -c "apt-get update && apt-get install -y ca-certificates && update-ca-certificates && app start" + ``` + + ```yaml title="Alpine-based containers" + version: '3' + services: + alpine-app: + image: alpine:3.18 + volumes: + - certs/certificate.pem:/usr/local/share/ca-certificates/certificate.pem + entrypoint: /bin/sh -c "apk add --no-cache ca-certificates && update-ca-certificates && app start" + ``` + + 2. Run the container: + + ```sh + docker-compose up + ``` + + 3. Verify the certificate was installed: + + ```sh title="Red Hat-based containers" + docker exec -it sh -c "cat /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem | grep Cloudflare" + ``` + + ```sh title="Debian and Alpine-based containers" + docker exec -it sh -c "cat /etc/ssl/certs/ca-certificates.crt | grep Cloudflare" + ``` + + ### Command-line tools diff --git a/src/content/docs/cloudflare-one/team-and-resources/users/risk-score.mdx b/src/content/docs/cloudflare-one/team-and-resources/users/risk-score.mdx index 5ec0ab6973dad12..442499bd33c48ff 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/users/risk-score.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/users/risk-score.mdx @@ -61,16 +61,17 @@ While the Okta integration is turned on, Cloudflare One will send any user risk ## Predefined risk behaviors By default, all predefined behaviors are disabled. When a behavior is enabled, Cloudflare One will continuously evaluate all users within the organization for the behavior. You can [change the risk level](#change-risk-behavior-risk-levels) for predefined behaviors if the default assignment does not suit your environment. -| Risk behavior | Requirements | Description | Evaluation timing | +| Risk behavior | Requirements | Description | Evaluation timing | | -------------------------------------- | ----------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------- | -| Impossible travel | [A configured Access application](/cloudflare-one/access-controls/applications/http-apps/) | User has a successful login from two different locations that they could not have traveled between in that period of time. Matches will appear in your [Access authentication logs](/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/). | Evaluated at each authentication and session-refresh event. | -| High number of DLP policies triggered | [A configured DLP profile](/cloudflare-one/data-loss-prevention/dlp-profiles/) | User has created a high number of DLP policy matches within a narrow frame of time. Matches will appear in your [Gateway activity logs](/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/). | Evaluated per-request in milliseconds. | -| SentinelOne threat detected on machine | [SentinelOne service provider integration](/cloudflare-one/integrations/service-providers/sentinelone/) | SentinelOne returns one or more configured [device posture attributes](/cloudflare-one/integrations/service-providers/sentinelone/#device-posture-attributes) for a user. | Ingested via service-to-service API. Frequency is administrator-configurable during device posture setup to align with SentinelOne's API rate limits. | +| Impossible travel | [A configured Access application](/cloudflare-one/access-controls/applications/http-apps/) | User has a successful login from two different locations that they could not have traveled between in that period of time. Matches will appear in your [Access authentication logs](/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/). | Evaluated at each authentication and session-refresh event. | +| High number of DLP policies triggered | [A configured DLP profile](/cloudflare-one/data-loss-prevention/dlp-profiles/) | User has created a high number of DLP policy matches within a narrow frame of time. Matches will appear in your [Gateway activity logs](/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/). | Evaluated per-request in milliseconds. | +| SentinelOne threat detected on machine | [SentinelOne service provider integration](/cloudflare-one/integrations/service-providers/sentinelone/) | SentinelOne returns one or more configured [device posture attributes](/cloudflare-one/integrations/service-providers/sentinelone/#device-posture-attributes) for a user. | Ingested via service-to-service API. Frequency is administrator-configurable during device posture setup to align with SentinelOne's API rate limits. | | CrowdStrike Low ZTA security score| [CrowdStrike integration](/cloudflare-one/integrations/service-providers/crowdstrike/)| A user's device reports a score between 0-50 for any CrowdStrike Zero Trust Assessment attribute (OS Score, Overall Score, or Sensor Config score). Refer to [CrowdStrike device posture attributes](/cloudflare-one/integrations/service-providers/crowdstrike/#device-posture-attributes) for more information.| Ingested via service-to-service API. Frequency is administrator-configurable during device posture setup to align with CrowdStrike's API rate limits. | | CrowdStrike Medium ZTA security score| [CrowdStrike integration](/cloudflare-one/integrations/service-providers/crowdstrike/)| A user's device reports a score between 50-79 for any CrowdStrike Zero Trust Assessment attribute (OS Score, Overall Score, or Sensor Config score). Refer to [CrowdStrike device posture attributes](/cloudflare-one/integrations/service-providers/crowdstrike/#device-posture-attributes) for more information. | Ingested via service-to-service API. Frequency is administrator-configurable during device posture setup to align with CrowdStrike's API rate limits. | | Interaction with Malicious File | [Gateway AV scanning](/cloudflare-one/traffic-policies/http-policies/antivirus-scanning/) or [File sandboxing](/cloudflare-one/traffic-policies/http-policies/file-sandboxing/) | User uploads or downloads a file flagged as malicious by Gateway's AV scanner or file sandboxing. Risk is elevated even if the file is blocked. | Evaluated per-request in milliseconds. | -| Suspicious Security Domain Visited | [Gateway DNS policies](/cloudflare-one/traffic-policies/dns-policies/) | User visits a domain categorized as a security risk or security threat. Refer to [domain categories](/cloudflare-one/traffic-policies/domain-categories/) for the full list. Risk is elevated even if the traffic is blocked. | Evaluated per-request in milliseconds. | -| High Risk Domain Visited | [Gateway DNS policies](/cloudflare-one/traffic-policies/dns-policies/) | User visits a domain categorized as questionable content, violence, or CIPA. Refer to [domain categories](/cloudflare-one/traffic-policies/domain-categories/) for the full list. Risk is elevated even if the traffic is blocked. | Evaluated per-request in milliseconds. | +| Suspicious Security Domain Visited | [Gateway DNS policies](/cloudflare-one/traffic-policies/dns-policies/) | User visits a domain categorized as a security risk or security threat. Refer to [domain categories](/cloudflare-one/traffic-policies/domain-categories/) for the full list. Risk is elevated even if the traffic is blocked. | Evaluated per-request in milliseconds. | +| High Risk Domain Visited | [Gateway DNS policies](/cloudflare-one/traffic-policies/dns-policies/) | User visits a domain categorized as questionable content, violence, or CIPA. Refer to [domain categories](/cloudflare-one/traffic-policies/domain-categories/) for the full list. Risk is elevated even if the traffic is blocked. | Evaluated per-request in milliseconds. | + ## Manage risk behaviors To toggle risk behaviors, go to **Risk score** > **Risk behaviors**. @@ -92,9 +93,9 @@ You can change the risk level for a behavior at any time. 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Teams & Resources**. 2. Go to **Users**. 3. Select **Risk score** > **Risk behaviors**. -2. Select the risk behavior you want to modify. -3. In the drop-down menu, choose your desired risk level. -4. Select **Save**. +4. Select the risk behavior you want to modify. +5. In the drop-down menu, choose your desired risk level. +6. Select **Save**. ## Use risk scores in Access policies diff --git a/src/content/docs/cloudflare-one/team-and-resources/users/scim.mdx b/src/content/docs/cloudflare-one/team-and-resources/users/scim.mdx index c8ace201fdac273..2ce86cab7d6270b 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/users/scim.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/users/scim.mdx @@ -8,10 +8,9 @@ tags: - SCIM sidebar: order: 3 - --- -import { Render } from "~/components" +import { Render } from "~/components"; System for Cross-domain Identity Management (SCIM) is an open standard protocol that allows identity providers to synchronize user identity information with cloud applications and services. After configuring SCIM, user identities that you create, edit, or delete in the identity provider are automatically updated across all supported applications. This makes it easier for IT admins to onboard new users, update their groups and permissions, and revoke access in the event of an employee termination or security breach. diff --git a/src/content/docs/cloudflare-one/team-and-resources/users/users.mdx b/src/content/docs/cloudflare-one/team-and-resources/users/users.mdx index 1cf937a40bfe8b7..2f4b39bfbcd969d 100644 --- a/src/content/docs/cloudflare-one/team-and-resources/users/users.mdx +++ b/src/content/docs/cloudflare-one/team-and-resources/users/users.mdx @@ -8,7 +8,7 @@ sidebar: order: 4 --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; User logs show a list of all users who have authenticated to Cloudflare One. For each user who has logged in, you can view their enrolled devices, login history, seat usage, and identity used for policy enforcement. @@ -20,7 +20,7 @@ This page lists all users who have registered the Cloudflare One Client or authe ### Available logs -* **User Registry identity**: Select the user's name to view their last seen identity. This identity is used to evaluate Gateway policies and Cloudflare One Client [device profiles](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles/). A refresh occurs when the user re-authenticates the device client, logs into an Access application, or has their IdP group membership updated via SCIM provisioning. To track how the user's identity has changed over time, go to the **Audit logs** tab. -* **Session identities**: The user's active sessions, the identity used to authenticate each session, and when each session will [expire](/cloudflare-one/access-controls/access-settings/session-management/). -* **Devices**: Devices registered to the user via the Cloudflare One Client. -* **Recent activities**: The user's five most recent Access login attempts. For more details, refer to your [authentication audit logs](/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/#authentication-logs). +- **User Registry identity**: Select the user's name to view their last seen identity. This identity is used to evaluate Gateway policies and Cloudflare One Client [device profiles](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/configure/device-profiles/). A refresh occurs when the user re-authenticates the device client, logs into an Access application, or has their IdP group membership updated via SCIM provisioning. To track how the user's identity has changed over time, go to the **Audit logs** tab. +- **Session identities**: The user's active sessions, the identity used to authenticate each session, and when each session will [expire](/cloudflare-one/access-controls/access-settings/session-management/). +- **Devices**: Devices registered to the user via the Cloudflare One Client. +- **Recent activities**: The user's five most recent Access login attempts. For more details, refer to your [authentication audit logs](/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/#authentication-logs). diff --git a/src/content/docs/cloudflare-one/traffic-policies/global-policies.mdx b/src/content/docs/cloudflare-one/traffic-policies/global-policies.mdx index 64308a2ccb340c0..f788aa791bdb0b6 100644 --- a/src/content/docs/cloudflare-one/traffic-policies/global-policies.mdx +++ b/src/content/docs/cloudflare-one/traffic-policies/global-policies.mdx @@ -38,8 +38,8 @@ Gateway enforces global DNS and resolver policies before any other policies. Thi | Resolve nel.cloudflare.com through 1.1.1.1 | `00000001-0034-45a0-8333-f339451fba46` | `nel.cloudflare.com` | resolve | | Allow DNS queries for api.cloudflare.com domain | `00000001-5eea-4932-8dd5-8e1ec9770396` | `api.cloudflare.com` | allow | | Resolve api.cloudflare.com through 1.1.1.1 | `00000001-4f0c-4f86-9b96-5d26123a194b` | `api.cloudflare.com` | resolve | -| Allow DNS queries for one.dash.cloudflare.com domain | `00000001-0f75-48a9-b3e1-925a974d2b65` | `one.dash.cloudflare.com` | allow | -| Resolve one.dash.cloudflare.com through 1.1.1.1 | `00000001-3d84-41a6-bc84-3014685c0d81` | `one.dash.cloudflare.com` | resolve | +| Allow DNS queries for one.dash.cloudflare.com domain | `00000001-0f75-48a9-b3e1-925a974d2b65` | `one.dash.cloudflare.com` | allow | +| Resolve one.dash.cloudflare.com through 1.1.1.1 | `00000001-3d84-41a6-bc84-3014685c0d81` | `one.dash.cloudflare.com` | resolve | | Allow DNS queries for one.dash.cloudflare.com domain | `00000001-a9fd-40de-a662-51d3a3ae0ad8` | `one.dash.cloudflare.com` and `one.dash.fed.cloudflare.com` | allow | | Resolve one.dash.cloudflare.com through 1.1.1.1 | `00000001-70f2-4eea-b711-201bca434ed4` | `one.dash.cloudflare.com` and `one.dash.fed.cloudflare.com` | resolve | | Allow DNS queries for dash.cloudflare.com domain | `00000001-0c2a-4b31-8606-3e5a1d87c1bf` | `dash.cloudflare.com` and `dash.fed.cloudflare.com` | allow | @@ -59,14 +59,14 @@ Gateway enforces global DNS and resolver policies before any other policies. Thi ## Network proxy policies -| Name | ID | Criteria | Value | Action | Description | -| --------------------------------------------------- | -------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Allow CF Network Error Logging L4 | `00000001-e4af-4b82-8f8c-c79c1d5d212e` | Hostname | `*.nel.cloudflare.com` | allow | Allows SNI domains for Cloudflare One Client registration. | -| Allow CF Client | `00000001-8c3d-4e27-a01b-af8418000077` | Hostname | `*.cloudflareclient.com` and `*.fed.cloudflareclient.com` | allow | Allows Zero Trust client. | -| Allow Gateway Proxy PAC | `00000001-776e-438d-9856-987d7053762b` | Hostname | `*.cloudflare-gateway.com` and `*.fed.cloudflare-gateway.com` | allow | Allows Gateway proxy with [PAC files](/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/). | +| Name | ID | Criteria | Value | Action | Description | +| --------------------------------------------------- | -------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Allow CF Network Error Logging L4 | `00000001-e4af-4b82-8f8c-c79c1d5d212e` | Hostname | `*.nel.cloudflare.com` | allow | Allows SNI domains for Cloudflare One Client registration. | +| Allow CF Client | `00000001-8c3d-4e27-a01b-af8418000077` | Hostname | `*.cloudflareclient.com` and `*.fed.cloudflareclient.com` | allow | Allows Zero Trust client. | +| Allow Gateway Proxy PAC | `00000001-776e-438d-9856-987d7053762b` | Hostname | `*.cloudflare-gateway.com` and `*.fed.cloudflare-gateway.com` | allow | Allows Gateway proxy with [PAC files](/cloudflare-one/networks/resolvers-and-proxies/proxy-endpoints/). | | Allow Zero Trust Services | `00000001-e1e8-421b-a0fe-895397489f28` | Hostname | `one.dash.cloudflare.com`, `help.teams.cloudflare.com`, `blocked.teams.cloudflare.com`, `blocked.teams.fed.cloudflare.com`, `api.cloudflare.com`, `api.fed.cloudflare.com`, `cloudflarestatus.com`, `www.cloudflarestatus.com`, `one.dash.cloudflare.com`, `one.dash.fed.cloudflare.com`, `help.one.cloudflare.com`, `dash.cloudflare.com`, `dash.fed.cloudflare.com`, and `developers.cloudflare.com` | allow | Allows Cloudflare Zero Trust services. | -| Allow Access Apps L4 | `00000001-daa2-41e2-8a88-698af4066951` | Hostname | `*.cloudflareaccess.com` and `*.fed.cloudflareaccess.com` | allow | Allows [Cloudflare Access](/cloudflare-one/access-controls/policies/) applications. | -| Allow HTTP requests to browser-rendered Access Apps | `00000001-1f93-4476-8f92-9aa4407d1c5f` | Hostname | `*.zero-trust-apps.cfdata.org`, `*.zero-trust-apps-staging.cfdata.org`, `*.zero-trust-apps.fed.cfdata.org`, or `*.zero-trust-apps-staging.fed.cfdata.org` | allow | Allows Cloudflare Access terminal applications [rendered in a browser](/cloudflare-one/access-controls/applications/non-http/browser-rendering/#ssh-and-vnc). | +| Allow Access Apps L4 | `00000001-daa2-41e2-8a88-698af4066951` | Hostname | `*.cloudflareaccess.com` and `*.fed.cloudflareaccess.com` | allow | Allows [Cloudflare Access](/cloudflare-one/access-controls/policies/) applications. | +| Allow HTTP requests to browser-rendered Access Apps | `00000001-1f93-4476-8f92-9aa4407d1c5f` | Hostname | `*.zero-trust-apps.cfdata.org`, `*.zero-trust-apps-staging.cfdata.org`, `*.zero-trust-apps.fed.cfdata.org`, or `*.zero-trust-apps-staging.fed.cfdata.org` | allow | Allows Cloudflare Access terminal applications [rendered in a browser](/cloudflare-one/access-controls/applications/non-http/browser-rendering/#ssh-and-vnc). | ## HTTP inspection policies diff --git a/src/content/docs/cloudflare-one/traffic-policies/network-policies/protocol-detection.mdx b/src/content/docs/cloudflare-one/traffic-policies/network-policies/protocol-detection.mdx index 84848c8086de50c..2df964a6c3a878e 100644 --- a/src/content/docs/cloudflare-one/traffic-policies/network-policies/protocol-detection.mdx +++ b/src/content/docs/cloudflare-one/traffic-policies/network-policies/protocol-detection.mdx @@ -50,15 +50,15 @@ To use HTTP policies to filter all HTTPS traffic on all ports when using a defau Gateway supports detection and filtering of the following protocols: -| Protocol | Notes | -| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| HTTP | Hypertext Transfer Protocol (HTTP/1.1). | -| HTTP2 | Hypertext Transfer Protocol Version 2. | -| SSH | Secure Shell Protocol — remote login and command execution. | -| TLS | Transport Layer Security. Gateway detects TLS versions 1.1 through 1.3 with the _TLS_ value. | -| DCERPC | Distributed Computing Environment / Remote Procedure Call. | -| MQTT | Message Queuing Telemetry Transport — lightweight IoT messaging protocol. | -| TPKT | TPKT commonly initiates RDP sessions, so you can use it to identify and filter RDP traffic. | +| Protocol | Notes | +| ------------ | -------------------------------------------------------------------------------------------- | +| HTTP | Hypertext Transfer Protocol (HTTP/1.1). | +| HTTP2 | Hypertext Transfer Protocol Version 2. | +| SSH | Secure Shell Protocol — remote login and command execution. | +| TLS | Transport Layer Security. Gateway detects TLS versions 1.1 through 1.3 with the _TLS_ value. | +| DCERPC | Distributed Computing Environment / Remote Procedure Call. | +| MQTT | Message Queuing Telemetry Transport — lightweight IoT messaging protocol. | +| TPKT | TPKT commonly initiates RDP sessions, so you can use it to identify and filter RDP traffic. | | IMAP | Internet Message Access Protocol — email retrieval. | | POP3 | Post Office Protocol v3 — email retrieval. | | SMTP | Simple Mail Transfer Protocol — email sending. | diff --git a/src/content/docs/cloudflare-one/traffic-policies/packet-filtering/best-practices/magic-transit-egress.mdx b/src/content/docs/cloudflare-one/traffic-policies/packet-filtering/best-practices/magic-transit-egress.mdx index 61657d39a175ca7..da83a0d0f8b94ed 100644 --- a/src/content/docs/cloudflare-one/traffic-policies/packet-filtering/best-practices/magic-transit-egress.mdx +++ b/src/content/docs/cloudflare-one/traffic-policies/packet-filtering/best-practices/magic-transit-egress.mdx @@ -17,7 +17,7 @@ For Magic Transit egress traffic, consider the following: - Network Firewall rules apply to both Magic Transit ingress and egress traffic passing through Cloudflare. - If you have a "default drop" catchall rule (a final rule that blocks all traffic not matched by earlier rules) for ingress traffic, you must add an earlier rule to permit traffic sourced from your Magic Transit prefix with the destination as **any** to allow outbound egress traffic. - For example, place the following allow rule before any default-drop catchall rule: + For example, place the following allow rule before any default-drop catchall rule: - **Match**: `ip.src in {}`
- **Action**: Allow + **Match**: `ip.src in {}`
+ **Action**: Allow diff --git a/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/index.mdx b/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/index.mdx index 353d64288db846e..7ad5f83b0ccb97c 100644 --- a/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/index.mdx +++ b/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/index.mdx @@ -22,9 +22,9 @@ There are two approaches for setting up tiered policies, depending on your deplo ## Organizations vs. Tenant API | Feature | [Cloudflare Organizations](/cloudflare-one/traffic-policies/tiered-policies/organizations/) | [Tenant API](/cloudflare-one/traffic-policies/tiered-policies/tenant-api/) | -| -------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -| **Supported policy types** | DNS, Network, HTTP, Resolver | DNS only | -| **Account model** | Source / Recipient accounts | Parent / Child accounts | -| **Shareable settings** | Block pages, extended email matching | Block pages | -| **Setup** | Dashboard (self-serve) | API-only | -| **Availability** | Enterprise (beta) | Enterprise (GA) | +| -------------------------- | ------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| **Supported policy types** | DNS, Network, HTTP, Resolver | DNS only | +| **Account model** | Source / Recipient accounts | Parent / Child accounts | +| **Shareable settings** | Block pages, extended email matching | Block pages | +| **Setup** | Dashboard (self-serve) | API-only | +| **Availability** | Enterprise (beta) | Enterprise (GA) | diff --git a/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/tenant-api.mdx b/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/tenant-api.mdx index 61dee092052c3ac..558bcf16daff10b 100644 --- a/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/tenant-api.mdx +++ b/src/content/docs/cloudflare-one/traffic-policies/tiered-policies/tenant-api.mdx @@ -21,7 +21,6 @@ The Tenant API platform only supports [DNS policies](/cloudflare-one/traffic-pol For more information, refer to the [Cloudflare Zero Trust for managed service providers](https://blog.cloudflare.com/gateway-managed-service-provider/) blog post. - ## Get started To set up the Tenant API, refer to [Get started](/tenant/get-started/). Once you have provisioned and configured your customer's Cloudflare accounts, you can create [DNS policies](/cloudflare-one/traffic-policies/dns-policies/). diff --git a/src/content/docs/cloudflare-one/troubleshooting/access.mdx b/src/content/docs/cloudflare-one/troubleshooting/access.mdx index b6396e705f97636..b8ece1182ed0454 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/access.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/access.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Access troubleshooting guide. - Full Access troubleshooting guide ❯ + Full Access troubleshooting guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/browser-isolation.mdx b/src/content/docs/cloudflare-one/troubleshooting/browser-isolation.mdx index c31dd68373abe7a..e4cf3238d0cd8bd 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/browser-isolation.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/browser-isolation.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Browser Isolation documentation. - Browser Isolation troubleshooting ❯ + Browser Isolation troubleshooting ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/casb.mdx b/src/content/docs/cloudflare-one/troubleshooting/casb.mdx index 064db32c9b01121..72cda8b9e748c03 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/casb.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/casb.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full CASB documentation. - CASB troubleshooting ❯ + CASB troubleshooting ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/contact-support.mdx b/src/content/docs/cloudflare-one/troubleshooting/contact-support.mdx index 304a4016752f5ba..a15cd8ee067f5b5 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/contact-support.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/contact-support.mdx @@ -32,12 +32,15 @@ For all issues, please include: Depending on the product, providing diagnostic files is critical for a technical investigation. ### Cloudflare One Client (WARP) + If the issue involves the Cloudflare One Client, run the `warp-diag` command on the affected device and attach the resulting `.zip` file to your case. For more information, refer to [Diagnostic logs](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/troubleshooting/diagnostic-logs/). ### Cloudflare Tunnel + If the issue involves Cloudflare Tunnel, run the `cloudflared tunnel diag` command and provide the generated report. For more information, refer to [Tunnel diagnostic logs](/cloudflare-one/networks/connectors/cloudflare-tunnel/troubleshoot-tunnels/diag-logs/). ### Access and Gateway + For issues related to authentication loops, blocked websites, or policy enforcement: - **HAR file**: Provide a [HAR file](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/#generate-a-har-file) captured while reproducing the issue. @@ -46,6 +49,7 @@ For issues related to authentication loops, blocked websites, or policy enforcem - **Request ID**: For Gateway issues, you can find the `request_id` (HTTP logs) or `query_id` (DNS logs) in your [Gateway logs](/cloudflare-one/traffic-policies/troubleshooting/). ### Digital Experience Monitoring (DEX) + For issues with DEX tests or device monitoring, provide a [remote capture](/cloudflare-one/insights/dex/diagnostics/client-packet-capture/) from the Zero Trust dashboard. --- diff --git a/src/content/docs/cloudflare-one/troubleshooting/dex.mdx b/src/content/docs/cloudflare-one/troubleshooting/dex.mdx index 731999d5fb8036d..8c96f5ab4305ba3 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/dex.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/dex.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full DEX documentation. - DEX troubleshooting ❯ + DEX troubleshooting ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/email-security.mdx b/src/content/docs/cloudflare-one/troubleshooting/email-security.mdx index c84e1260e343735..690763e57e48c08 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/email-security.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/email-security.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Email Security documentation. - Email Security troubleshooting ❯ + Email Security troubleshooting ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/gateway.mdx b/src/content/docs/cloudflare-one/troubleshooting/gateway.mdx index e38ab6f5acae44e..0d5841ea8bb17d1 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/gateway.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/gateway.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Gateway troubleshooting guide. - Full Gateway troubleshooting guide ❯ + Full Gateway troubleshooting guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/tunnel.mdx b/src/content/docs/cloudflare-one/troubleshooting/tunnel.mdx index 1d692f0aa4341e2..eb881c4c7e9300a 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/tunnel.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/tunnel.mdx @@ -12,18 +12,25 @@ import { Render, LinkButton } from "~/components"; Explore common issues and solutions for Cloudflare Tunnel. - --- @@ -33,5 +40,5 @@ Explore common issues and solutions for Cloudflare Tunnel. For more information, refer to the full Tunnel troubleshooting guide. - Full Tunnel troubleshooting guide ❯ + Full Tunnel troubleshooting guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/wan/connectivity.mdx b/src/content/docs/cloudflare-one/troubleshooting/wan/connectivity.mdx index 82128a0306e3847..4012b24a1e816aa 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/wan/connectivity.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/wan/connectivity.mdx @@ -15,11 +15,16 @@ import { Render, LinkButton } from "~/components"; product="networking-services" params={{ productName: "Cloudflare WAN", - tunnelHealthLink: "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health/", - routingBgpLink: "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp/", - checkHealthDashLink: "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", - tunnelHealthChecksLink: "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", - networkAnalyticsLink: "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/" + tunnelHealthLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/tunnel-health/", + routingBgpLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/troubleshooting/routing-and-bgp/", + checkHealthDashLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", + tunnelHealthChecksLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/reference/tunnel-health-checks/", + networkAnalyticsLink: + "/cloudflare-one/networks/connectors/cloudflare-wan/analytics/network-analytics/", }} /> @@ -30,5 +35,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Cloudflare WAN documentation. - Full connectivity troubleshooting guide ❯ + Full connectivity troubleshooting guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/wan/index.mdx b/src/content/docs/cloudflare-one/troubleshooting/wan/index.mdx index 0c2b64583258ccf..7cbca452e33919a 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/wan/index.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/wan/index.mdx @@ -8,7 +8,7 @@ sidebar: order: 32 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Explore resources to help you resolve issues with Cloudflare WAN (formerly Magic WAN) connectivity, routing, and tunnel health. diff --git a/src/content/docs/cloudflare-one/troubleshooting/wan/ipsec.mdx b/src/content/docs/cloudflare-one/troubleshooting/wan/ipsec.mdx index 2499d5ff7d77041..2787fccd3b01cf7 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/wan/ipsec.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/wan/ipsec.mdx @@ -8,15 +8,20 @@ sidebar: order: 33 --- -import { Render, LinkButton } from "~/components" +import { Render, LinkButton } from "~/components"; - @@ -27,5 +32,5 @@ import { Render, LinkButton } from "~/components" For more information, refer to the full Cloudflare WAN documentation. - Full IPsec troubleshooting guide ❯ + Full IPsec troubleshooting guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/wan/routing-bgp.mdx b/src/content/docs/cloudflare-one/troubleshooting/wan/routing-bgp.mdx index 6766ee8164db987..732752846b608d7 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/wan/routing-bgp.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/wan/routing-bgp.mdx @@ -11,16 +11,20 @@ sidebar: import { Render, LinkButton } from "~/components"; --- @@ -30,5 +34,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Cloudflare WAN documentation. - Full routing and BGP guide ❯ + Full routing and BGP guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/wan/tunnel-health.mdx b/src/content/docs/cloudflare-one/troubleshooting/wan/tunnel-health.mdx index 4ed284bd72ee49e..b2a3db82e0e9e8d 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/wan/tunnel-health.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/wan/tunnel-health.mdx @@ -11,19 +11,26 @@ sidebar: import { Render, LinkButton } from "~/components"; --- @@ -33,5 +40,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Cloudflare WAN documentation. - Full tunnel health guide ❯ + Full tunnel health guide ❯ diff --git a/src/content/docs/cloudflare-one/troubleshooting/warp-client.mdx b/src/content/docs/cloudflare-one/troubleshooting/warp-client.mdx index 4511789b45bde5c..a5fe18d5dcf8599 100644 --- a/src/content/docs/cloudflare-one/troubleshooting/warp-client.mdx +++ b/src/content/docs/cloudflare-one/troubleshooting/warp-client.mdx @@ -19,5 +19,5 @@ import { Render, LinkButton } from "~/components"; For more information, refer to the full Cloudflare One Client documentation. - Cloudflare One Client troubleshooting ❯ + Cloudflare One Client troubleshooting ❯ diff --git a/src/content/docs/cloudflare-one/tutorials/entra-id-risky-users.mdx b/src/content/docs/cloudflare-one/tutorials/entra-id-risky-users.mdx index fbfa9dc10b86312..8758982fe37aa85 100644 --- a/src/content/docs/cloudflare-one/tutorials/entra-id-risky-users.mdx +++ b/src/content/docs/cloudflare-one/tutorials/entra-id-risky-users.mdx @@ -91,26 +91,26 @@ To get started quickly, deploy our example Cloudflare Workers script by followin - ``: your Entra ID **Application (client) ID**, obtained when [setting up Entra ID as an identity provider](#1-set-up-entra-id-as-an-identity-provider). - - ```jsonc - { - "$schema": "./node_modules/wrangler/config-schema.json", - "name": "risky-users", - "compatibility_date": "$today", - "main": "src/index.js", - "workers_dev": false, - "account_id": "", - "vars": { - "AZURE_AD_TENANT_ID": "", - "AZURE_AD_CLIENT_ID": "", - }, - "triggers": { - "crons": ["* * * * *"], - }, - } - ``` - - + + ```jsonc + { + "$schema": "./node_modules/wrangler/config-schema.json", + "name": "risky-users", + "compatibility_date": "$today", + "main": "src/index.js", + "workers_dev": false, + "account_id": "", + "vars": { + "AZURE_AD_TENANT_ID": "", + "AZURE_AD_CLIENT_ID": "", + }, + "triggers": { + "crons": ["* * * * *"], + }, + } + ``` + + :::note diff --git a/src/content/docs/cloudflare-wan/analytics/index.mdx b/src/content/docs/cloudflare-wan/analytics/index.mdx index 7591d777198e731..8730a735f15a9f2 100644 --- a/src/content/docs/cloudflare-wan/analytics/index.mdx +++ b/src/content/docs/cloudflare-wan/analytics/index.mdx @@ -12,7 +12,8 @@ import { Render } from "~/components"; Use Cloudflare WAN (formerly Magic WAN) analytics to monitor site performance and troubleshoot issues. - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/analytics/netflow-analytics.mdx b/src/content/docs/cloudflare-wan/analytics/netflow-analytics.mdx index c961a9e26011107..d02a87f11d097c0 100644 --- a/src/content/docs/cloudflare-wan/analytics/netflow-analytics.mdx +++ b/src/content/docs/cloudflare-wan/analytics/netflow-analytics.mdx @@ -17,6 +17,7 @@ import { Render } from "~/components"; file="mconn/network-options/app-aware-policies/netflow" product="networking-services" params={{ - breakoutTrafficURL: "/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic/" + breakoutTrafficURL: + "/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/analytics/network-analytics.mdx b/src/content/docs/cloudflare-wan/analytics/network-analytics.mdx index adb2d9fc1ad3f0a..3694ed5590489c3 100644 --- a/src/content/docs/cloudflare-wan/analytics/network-analytics.mdx +++ b/src/content/docs/cloudflare-wan/analytics/network-analytics.mdx @@ -13,9 +13,10 @@ head: import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/analytics/packet-captures.mdx b/src/content/docs/cloudflare-wan/analytics/packet-captures.mdx index 84a4a80f0ea9f2d..34889d808b65f54 100644 --- a/src/content/docs/cloudflare-wan/analytics/packet-captures.mdx +++ b/src/content/docs/cloudflare-wan/analytics/packet-captures.mdx @@ -7,5 +7,4 @@ title: Packet captures external_link: /cloudflare-network-firewall/packet-captures/ sidebar: order: 5 - --- diff --git a/src/content/docs/cloudflare-wan/analytics/query-bandwidth.mdx b/src/content/docs/cloudflare-wan/analytics/query-bandwidth.mdx index f62f8a3cac1ad1a..7ec650366209348 100644 --- a/src/content/docs/cloudflare-wan/analytics/query-bandwidth.mdx +++ b/src/content/docs/cloudflare-wan/analytics/query-bandwidth.mdx @@ -6,12 +6,12 @@ products: title: Querying Cloudflare WAN IPsec/GRE tunnel bandwidth analytics with GraphQL sidebar: order: 6 - --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/analytics/query-tunnel-health.mdx b/src/content/docs/cloudflare-wan/analytics/query-tunnel-health.mdx index 8c71bfa0ecc6910..2c6eea69fb48cbe 100644 --- a/src/content/docs/cloudflare-wan/analytics/query-tunnel-health.mdx +++ b/src/content/docs/cloudflare-wan/analytics/query-tunnel-health.mdx @@ -6,11 +6,12 @@ products: title: Querying Cloudflare WAN IPsec/GRE tunnel health check results with GraphQL sidebar: order: 7 - --- -import { Render } from "~/components" +import { Render } from "~/components"; - + params={{ productName: "Cloudflare WAN" }} +/> diff --git a/src/content/docs/cloudflare-wan/analytics/site-analytics.mdx b/src/content/docs/cloudflare-wan/analytics/site-analytics.mdx index 8a916f198158f40..a3c3c203418a701 100644 --- a/src/content/docs/cloudflare-wan/analytics/site-analytics.mdx +++ b/src/content/docs/cloudflare-wan/analytics/site-analytics.mdx @@ -9,21 +9,23 @@ sidebar: head: - tag: title content: Cloudflare WAN network overview - --- -import { Render } from "~/components" +import { Render } from "~/components"; ### Set thresholds for site health @@ -33,6 +35,7 @@ import { Render } from "~/components" product="networking-services" params={{ productName: "Cloudflare WAN", - magicTunnelHcsURL: "/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/" + magicTunnelHcsURL: + "/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/changelog.mdx b/src/content/docs/cloudflare-wan/changelog.mdx index 5e8580b361df863..dab8b24716303bb 100644 --- a/src/content/docs/cloudflare-wan/changelog.mdx +++ b/src/content/docs/cloudflare-wan/changelog.mdx @@ -12,7 +12,10 @@ import { ProductChangelog } from "~/components"; {/* */} - + ## 2025-02-14 @@ -78,4 +81,4 @@ Customers using Gateway to filter traffic to Magic WAN destinations will now see **Network segmentation** -You can define policies in your Connector to either allow traffic to flow between your LANs without it leaving your local premises or to forward it via the Cloudflare network where you can add additional security features. \ No newline at end of file +You can define policies in your Connector to either allow traffic to flow between your LANs without it leaving your local premises or to forward it via the Cloudflare network where you can add additional security features. diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx index 1ae5d831a62d218..6e7bcd9b792dfd6 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/index.mdx @@ -11,35 +11,54 @@ sidebar: import { Render } from "~/components"; - If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. For details on hardware support, refer to [SFP+ port information](/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/).", - lan: "refers to the physical Cloudflare One Appliance Ethernet port that you are using for your LAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose a number corresponding to the port that you are using in Appliance.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. For details on hardware support, refer to [SFP+ port information](/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/).", - noConnectorShows: "You need to have bought an Appliance already for it to appear here. Refer to [Prerequisites](#prerequisites) if no Appliance appears in this list.", - networkSegmentationURL: "/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", - dhcpServerURL: "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", - dhcpRelayURL: "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", - reserveIpAddressesURL: "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", - shippedLanguage: "The Cloudflare One Appliance is shipped to you deactivated", - hardSoftConn: "You need to deploy two Appliances in your premises before you can set up a site in high availability.", - hcConfigsURL: "/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", - ipsecTunnelsRefURL: "/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", - trafficSteeringURL: "/cloudflare-wan/reference/traffic-steering/", - vlanIdURL: "/cloudflare-wan/configuration/appliance/reference/#vlan-id", - healthCheckFrequencyURL: "/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", - routedSubnetsURL: "/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", - interruptWindowURL: "/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", - tunnelHealthChecksURL: "/cloudflare-wan/reference/tunnel-health-checks/", - wanSettingsURL: "/cloudflare-wan/configuration/appliance/reference/#wan-settings", - sitesURL: "/cloudflare-wan/configuration/common-settings/sites/", - networkOptionsURL: "/cloudflare-wan/configuration/appliance/network-options/", - maintenanceURL: "/cloudflare-wan/configuration/appliance/maintenance/", - referenceInformationURL: "/cloudflare-wan/configuration/appliance/reference/", - troubleshootingURL: "/cloudflare-wan/configuration/appliance/troubleshooting/" - }} /> + magicWord: "hardware", + productName: "Cloudflare One Appliance", + maintenanceURL: "/cloudflare-wan/configuration/appliance/maintenance/", + dashName: "Cloudflare WAN", + sfpURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/", + wan: "refers to the physical Cloudflare One Appliance Ethernet port that you are using for your WAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose the number corresponding to the port that you are using in Appliance.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. For details on hardware support, refer to [SFP+ port information](/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/).", + lan: "refers to the physical Cloudflare One Appliance Ethernet port that you are using for your LAN. The ports are labeled `GE1`, `GE2`, `GE3`, `GE4`, `GE5`, and `GE6`. Choose a number corresponding to the port that you are using in Appliance.
If you need a throughput higher than 1 Gbps, you can use one of the SFP+ ports. For details on hardware support, refer to [SFP+ port information](/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information/).", + noConnectorShows: + "You need to have bought an Appliance already for it to appear here. Refer to [Prerequisites](#prerequisites) if no Appliance appears in this list.", + networkSegmentationURL: + "/cloudflare-wan/configuration/appliance/network-options/network-segmentation/", + dhcpServerURL: + "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server/", + dhcpRelayURL: + "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay/", + reserveIpAddressesURL: + "/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation/", + shippedLanguage: + "The Cloudflare One Appliance is shipped to you deactivated", + hardSoftConn: + "You need to deploy two Appliances in your premises before you can set up a site in high availability.", + hcConfigsURL: + "/cloudflare-wan/configuration/appliance/reference/#high-availability-configurations", + ipsecTunnelsRefURL: + "/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", + trafficSteeringURL: "/cloudflare-wan/reference/traffic-steering/", + vlanIdURL: "/cloudflare-wan/configuration/appliance/reference/#vlan-id", + healthCheckFrequencyURL: + "/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + routedSubnetsURL: + "/cloudflare-wan/configuration/appliance/network-options/routed-subnets/", + interruptWindowURL: + "/cloudflare-wan/configuration/appliance/maintenance/interrupt-service-window/", + tunnelHealthChecksURL: "/cloudflare-wan/reference/tunnel-health-checks/", + wanSettingsURL: + "/cloudflare-wan/configuration/appliance/reference/#wan-settings", + sitesURL: "/cloudflare-wan/configuration/common-settings/sites/", + networkOptionsURL: + "/cloudflare-wan/configuration/appliance/network-options/", + maintenanceURL: "/cloudflare-wan/configuration/appliance/maintenance/", + referenceInformationURL: + "/cloudflare-wan/configuration/appliance/reference/", + troubleshootingURL: + "/cloudflare-wan/configuration/appliance/troubleshooting/", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx index 71ca26721aa0603..b3fa278d08bae29 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/configure-hardware-appliance/sfp-port-information.mdx @@ -4,10 +4,8 @@ description: SFP+ port specifications for the hardware Appliance. products: - cloudflare-wan title: SFP+ port information - --- import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/device-metrics.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/device-metrics.mdx index c37e1581eefa1cb..8f201a38e5455a4 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/device-metrics.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/device-metrics.mdx @@ -14,6 +14,7 @@ import { Render } from "~/components"; file="mconn/device-metrics" product="networking-services" params={{ - troubleshootingURL: "/cloudflare-wan/configuration/appliance/troubleshooting/" + troubleshootingURL: + "/cloudflare-wan/configuration/appliance/troubleshooting/", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/index.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/index.mdx index 2de202a6c0d9a45..ffbd3902d481e2e 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/index.mdx @@ -15,9 +15,12 @@ import { Render } from "~/components"; product="networking-services" params={{ hardwareProductName: "Cloudflare One Appliance", - ipsecRefUrl: "/cloudflare-wan/configuration/appliance/reference/#security-and-other-information", - hardwareUrl: "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + ipsecRefUrl: + "/cloudflare-wan/configuration/appliance/reference/#security-and-other-information", + hardwareUrl: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", virtualProductName: "Cloudflare One Virtual Appliance", - virtualUrl: "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/" + virtualUrl: + "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx index f2cfc7422c36ccd..75d2c374e500dc1 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/activate-appliance.mdx @@ -12,6 +12,9 @@ import { Render } from "~/components"; file="mconn/maintenance/activate-connectors" product="networking-services" params={{ - hardwareConnectorURL: "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", - virtualConnectorURL: "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#activate-appliance", - }} /> + hardwareConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", + virtualConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#activate-appliance", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/index.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/index.mdx index d4cbc5987d03273..2b74af67e463be6 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 7 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/register-appliance.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/register-appliance.mdx index 071ef98749d5405..967aa8ccb663c13 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/register-appliance.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/register-appliance.mdx @@ -14,6 +14,6 @@ import { Render } from "~/components"; file="mconn/maintenance/register-hardware-appliance" product="networking-services" params={{ - dashName: "Cloudflare WAN (formerly Magic WAN)" + dashName: "Cloudflare WAN (formerly Magic WAN)", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx index b53cd5b9f9965c3..5b789f4f9046d5d 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/maintenance/remove-appliances.mdx @@ -12,6 +12,6 @@ import { Render } from "~/components"; file="mconn/maintenance/remove-connectors" product="networking-services" params={{ - dashName: "Cloudflare WAN (formerly Magic WAN)" + dashName: "Cloudflare WAN (formerly Magic WAN)", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx index 9bdf18008a25f54..46c95fb5d790192 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/breakout-traffic.mdx @@ -9,15 +9,18 @@ description: Breakout traffic allows you to define which applications should import { Render } from "~/components"; - + magicWord: "breakout", + featureName: "Breakout traffic", + trafficSteeringURL: "/cloudflare-wan/reference/traffic-steering/", + whatHappensApp: + "will now go directly to the Internet and bypass Cloudflare's filtering", + dashName: "Cloudflare WAN", + }} +/> ## Breakout by source @@ -27,11 +30,11 @@ Source-based breakout is configured via the API and Terraform. ### Match criteria -| Criterion | Behavior | -| --------------------- | ------------------------------------------------------------------------------------------------- | -| Source LAN interface | All traffic originating on the selected LAN is broken out. Any VLAN attached to that LAN is included automatically. | -| Source CIDR / IP range| All traffic with a source IP in the specified range is broken out. Accepts a single IP, a range, or a CIDR block. | +| Criterion | Behavior | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------- | +| Source LAN interface | All traffic originating on the selected LAN is broken out. Any VLAN attached to that LAN is included automatically. | +| Source CIDR / IP range | All traffic with a source IP in the specified range is broken out. Accepts a single IP, a range, or a CIDR block. | The same criteria can be used to mark traffic as **prioritized** instead of broken out. Refer to [Prioritized traffic](/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic/) for details. -Source-based and destination-based (managed app or custom app) rules can co-exist on the same appliance and are evaluated independently. If a flow matches both a source-based breakout rule and a destination-based breakout rule, the appliance breaks it out. \ No newline at end of file +Source-based and destination-based (managed app or custom app) rules can co-exist on the same appliance and are evaluated independently. If a flow matches both a source-based breakout rule and a destination-based breakout rule, the appliance breaks it out. diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx index 709867b882cbf6b..dce54b18e5ae528 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/application-based-policies/prioritized-traffic.mdx @@ -9,11 +9,13 @@ description: Prioritized traffic allows you to define which applications are import { Render } from "~/components"; - \ No newline at end of file + magicWord: "prioritized", + featureName: "Prioritized traffic", + whatHappensApp: "is now processed first by Connector", + dashName: "Cloudflare WAN", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-options.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-options.mdx index 1625f2d8f072527..cdde5b9bfd22fea 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-options.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-options.mdx @@ -20,35 +20,35 @@ DHCP options are configured via the API and Terraform. Each option is defined by three fields: -| Field | Description | Example | -| --------------- | --------------------------------------------------- | ---------------------- | -| `option_number` | The DHCP option code (1–254). | `67` | -| `type` | The value encoding: `text`, `integer`, `hex`, `ip`. | `text` | -| `value` | The option value, encoded per `type`. | `boot/x64/pxelinux.0` | +| Field | Description | Example | +| --------------- | --------------------------------------------------- | --------------------- | +| `option_number` | The DHCP option code (1–254). | `67` | +| `type` | The value encoding: `text`, `integer`, `hex`, `ip`. | `text` | +| `value` | The option value, encoded per `type`. | `boot/x64/pxelinux.0` | ### Value type encoding -| Type | Format | Example value | -| --------- | ----------------------------------------------------------- | ----------------------------- | -| `ip` | A dotted-quad IPv4 address. | `10.20.30.40` | -| `integer` | A decimal integer. | `0` | -| `text` | A UTF-8 string. | `boot/x64/pxelinux.0` | -| `hex` | A colon-separated sequence of bytes, used for sub-options. | `01:04:aa:bb:cc` | +| Type | Format | Example value | +| --------- | ---------------------------------------------------------- | --------------------- | +| `ip` | A dotted-quad IPv4 address. | `10.20.30.40` | +| `integer` | A decimal integer. | `0` | +| `text` | A UTF-8 string. | `boot/x64/pxelinux.0` | +| `hex` | A colon-separated sequence of bytes, used for sub-options. | `01:04:aa:bb:cc` | ## Common PXE / iPXE options The most frequently used options for PXE / iPXE boot are: -| Option | Type | Purpose | -| ------ | ------- | ------------------------------------------------------------------------------------ | -| 60 | `text` | Vendor class identifier (typically `PXEClient`). | -| 66 | `ip` or `text` | TFTP server name or IP address (boot server). | -| 67 | `text` | Bootfile name to load (for example `ipxe.pxe` or `undionly.kpxe`). | -| 43 | `hex` | Vendor-specific information; sub-option layout is vendor-defined. | -| 175 | `hex` | iPXE-specific encapsulated options (HTTP/HTTPS boot, iSCSI, DNS, and more). | -| 209 | `text` | iPXE configuration file URI. | -| 210 | `text` | iPXE configuration file path prefix. | -| 211 | `text` | iPXE configuration file path. | +| Option | Type | Purpose | +| ------ | -------------- | --------------------------------------------------------------------------- | +| 60 | `text` | Vendor class identifier (typically `PXEClient`). | +| 66 | `ip` or `text` | TFTP server name or IP address (boot server). | +| 67 | `text` | Bootfile name to load (for example `ipxe.pxe` or `undionly.kpxe`). | +| 43 | `hex` | Vendor-specific information; sub-option layout is vendor-defined. | +| 175 | `hex` | iPXE-specific encapsulated options (HTTP/HTTPS boot, iSCSI, DNS, and more). | +| 209 | `text` | iPXE configuration file URI. | +| 210 | `text` | iPXE configuration file path prefix. | +| 211 | `text` | iPXE configuration file path. | For a complete list of standard DHCP option codes, refer to the [IANA BOOTP/DHCP parameters registry](https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml). diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx index 7a2bc1beac7de02..46f826cc1ad4c6b 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-relay.mdx @@ -8,11 +8,13 @@ title: DHCP relay import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx index 2d895e9f31c584b..6577eeb5272f5ce 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-server.mdx @@ -8,9 +8,10 @@ title: DHCP server import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx index 5c0bcbed619c268..f5fed31c4c5855e 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/dhcp/dhcp-static-address-reservation.mdx @@ -8,9 +8,11 @@ title: DHCP static address reservation import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/index.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/index.mdx index b651bbe1b01b881..a9f4fad888935fe 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx index 3eab8ea9a7bb2bf..2cbcd17985e02d7 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/link-aggregation.mdx @@ -8,11 +8,15 @@ sidebar: badge: Beta --- -import { Render } from "~/components" +import { Render } from "~/components"; - + hardConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/", + virtualConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx index 007bef4f404e26e..8f1cbe1ed9a4b20 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/nat-subnet.mdx @@ -4,14 +4,17 @@ products: - cloudflare-wan title: Enable NAT for a subnet description: Enable static NAT for subnets in Cloudflare One Appliance to re-use address spaces locally. - --- -import { Render } from "~/components" +import { Render } from "~/components"; - + hardConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-lan", + virtualConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#create-a-lan", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx index 32603d94e6a92ca..822619f84e0b5cf 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/network-segmentation.mdx @@ -6,13 +6,16 @@ title: Network segmentation description: Define policies to determine if traffic should flow between your LANs without leaving your local premises, or if traffic should be forwarded to Cloudflare for additional security configurations. --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx index a7d739e9540ba6a..caa93793bc8278e 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/network-options/routed-subnets.mdx @@ -4,15 +4,19 @@ products: - cloudflare-wan title: Routed subnets description: Learn how to configure routed subnets on a Cloudflare One Appliance, including setting static routes and next-hop addresses for complex LAN setups. - --- -import { Render } from "~/components" +import { Render } from "~/components"; - + netSubnetURL: + "/cloudflare-wan/configuration/appliance/network-options/nat-subnet/", + hardConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#create-a-lan", + virtualConnectorURL: + "/cloudflare-wan/configuration/appliance/configure-virtual-appliance/#create-a-lan", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/appliance/troubleshooting.mdx b/src/content/docs/cloudflare-wan/configuration/appliance/troubleshooting.mdx index 0190821520209fd..17809b37e6377e7 100644 --- a/src/content/docs/cloudflare-wan/configuration/appliance/troubleshooting.mdx +++ b/src/content/docs/cloudflare-wan/configuration/appliance/troubleshooting.mdx @@ -15,8 +15,11 @@ import { Render } from "~/components"; product="networking-services" params={{ dashName: "Cloudflare WAN (formerly Magic WAN)", - activateURL: "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", - firewallURL: "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#firewall-settings-required", - heartbeatURL: "/cloudflare-wan/configuration/appliance/maintenance/heartbeat/" + activateURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#activate-appliance", + firewallURL: + "/cloudflare-wan/configuration/appliance/configure-hardware-appliance/#firewall-settings-required", + heartbeatURL: + "/cloudflare-wan/configuration/appliance/maintenance/heartbeat/", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx b/src/content/docs/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx index eca36e5f7e8eb4b..bdbd8aaf1e5dec4 100644 --- a/src/content/docs/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx +++ b/src/content/docs/cloudflare-wan/configuration/common-settings/custom-ike-id-ipsec.mdx @@ -10,4 +10,7 @@ sidebar: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/common-settings/sites.mdx b/src/content/docs/cloudflare-wan/configuration/common-settings/sites.mdx index 5e0399f52cb9889..b4d9501da0d4693 100644 --- a/src/content/docs/cloudflare-wan/configuration/common-settings/sites.mdx +++ b/src/content/docs/cloudflare-wan/configuration/common-settings/sites.mdx @@ -15,10 +15,12 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "Cloudflare WAN", - greIpsecTunnelsURL: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + greIpsecTunnelsURL: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", connectorURL: "/cloudflare-wan/configuration/appliance/", cniURL: "/cloudflare-wan/network-interconnect/", connectorName: "Cloudflare One Appliance", - magicTunnelHcsURL: "/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/" + magicTunnelHcsURL: + "/cloudflare-wan/configuration/common-settings/configure-tunnel-health-alerts/", }} - /> +/> diff --git a/src/content/docs/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx b/src/content/docs/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx index 9a7d3b257246a34..0432393f1f1c0ca 100644 --- a/src/content/docs/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx +++ b/src/content/docs/cloudflare-wan/configuration/how-to/configure-cloudflare-source-ips.mdx @@ -13,10 +13,11 @@ description: Configure the Cloudflare source IP range used when you receive traf import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/configuration/how-to/configure-routes.mdx b/src/content/docs/cloudflare-wan/configuration/how-to/configure-routes.mdx index 8335fb6e9cf3559..e5b02b3a5366e73 100644 --- a/src/content/docs/cloudflare-wan/configuration/how-to/configure-routes.mdx +++ b/src/content/docs/cloudflare-wan/configuration/how-to/configure-routes.mdx @@ -7,10 +7,9 @@ sidebar: order: 2 head: [] description: Cloudflare WAN uses a static configuration to route your traffic through anycast tunnels from Cloudflare's global network to your locations. If you are connected through CNI with Dataplane v2, you also have access to BGP peering (beta). Learn how to configure routing. - --- -import { Render } from "~/components" +import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx b/src/content/docs/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx index 41b3800804ce8c9..9fb7c93867e3747 100644 --- a/src/content/docs/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx +++ b/src/content/docs/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints.mdx @@ -11,26 +11,36 @@ description: Learn how to configure IPsec or GRE tunnels for Cloudflare WAN. import { GlossaryTooltip, Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/configuration/how-to/index.mdx b/src/content/docs/cloudflare-wan/configuration/how-to/index.mdx index 4a554e27b3969b6..9e7d62f8d1aeab1 100644 --- a/src/content/docs/cloudflare-wan/configuration/how-to/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/how-to/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 2 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/how-to/traceroute.mdx b/src/content/docs/cloudflare-wan/configuration/how-to/traceroute.mdx index ac5910dadeb36ca..38b42c7e4dd0350 100644 --- a/src/content/docs/cloudflare-wan/configuration/how-to/traceroute.mdx +++ b/src/content/docs/cloudflare-wan/configuration/how-to/traceroute.mdx @@ -16,8 +16,9 @@ import { Render } from "~/components"; file="routing/traceroute" product="networking-services" params={{ - greIpsecURL: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + greIpsecURL: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", warpURL: "/cloudflare-wan/zero-trust/cloudflare-one-client/", - cfTunnelURL: "/cloudflare-wan/zero-trust/cloudflare-tunnel/" + cfTunnelURL: "/cloudflare-wan/zero-trust/cloudflare-tunnel/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/configuration/index.mdx b/src/content/docs/cloudflare-wan/configuration/index.mdx index 13702b827029038..5ddfb172a16c533 100644 --- a/src/content/docs/cloudflare-wan/configuration/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/configuration/multi-cloud-networking.mdx b/src/content/docs/cloudflare-wan/configuration/multi-cloud-networking.mdx index 76af852c660c808..4a444cbdbff83f9 100644 --- a/src/content/docs/cloudflare-wan/configuration/multi-cloud-networking.mdx +++ b/src/content/docs/cloudflare-wan/configuration/multi-cloud-networking.mdx @@ -17,6 +17,7 @@ import { Render } from "~/components"; file="routing/mcn-cloudflare-wan-on-ramps" product="networking-services" params={{ - mwanAccount: "Have a Multi-Cloud Networking account. Contact your account team to learn more.", + mwanAccount: + "Have a Multi-Cloud Networking account. Contact your account team to learn more.", }} /> diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx index bb10e2869c1ee67..ff1a38a9ff1a28e 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/alibaba-cloud.mdx @@ -4,15 +4,19 @@ pcx_content_type: integration-guide description: Connect Alibaba Cloud VPN Gateway to Cloudflare WAN. products: - cloudflare-wan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/aws.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/aws.mdx index f9028eefecd609a..58ce92bd34520fd 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/aws.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/aws.mdx @@ -4,14 +4,17 @@ description: Connect Amazon AWS Transit Gateway to Cloudflare WAN. products: - cloudflare-wan title: Amazon AWS Transit Gateway - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx index f041179a7d471bc..a76d15bdf214c1a 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-virtual-wan.mdx @@ -8,11 +8,16 @@ title: Microsoft Azure Virtual WAN import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx index 79e3ab4a2c3e78e..f424bafbae91997 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/azure/azure-vpn-gateway.mdx @@ -8,11 +8,16 @@ title: Microsoft Azure VPN Gateway import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/azure/index.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/azure/index.mdx index be31f60acc7149a..2cc5b0788919598 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/azure/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/azure/index.mdx @@ -9,8 +9,8 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Microsoft Azure integration guides currently available: - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx index cba0f106bf12657..8831ea12bbf6ea5 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/cisco-ios-xe.mdx @@ -4,11 +4,11 @@ description: Connect Cisco IOS XE to Cloudflare WAN. products: - cloudflare-wan title: Cisco IOS XE - --- import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx index 896e02c855659fd..4191b38bc630e29 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/cisco-meraki-static.mdx @@ -8,15 +8,22 @@ title: Cisco Meraki MX (static routing) import { Render } from "~/components"; - + configureTunnelEndpointsUrl: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", + }} +/> diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/fitelnet.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/fitelnet.mdx index e28d8ba4847ab6f..4ab6dfd8b7b76e9 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/fitelnet.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/fitelnet.mdx @@ -4,15 +4,19 @@ description: Connect Furukawa Electric FITELnet to Cloudflare WAN. products: - cloudflare-wan title: Furukawa Electric FITELnet - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/fortinet.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/fortinet.mdx index 5a12895743cb66e..cf11763d0a341ab 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/fortinet.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/fortinet.mdx @@ -8,12 +8,19 @@ title: Fortinet import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/google.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/google.mdx index 6f89300b8494e05..2ae56b6dbe49b81 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/google.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/google.mdx @@ -4,14 +4,17 @@ description: Connect Google Cloud VPN to Cloudflare WAN. products: - cloudflare-wan title: Google Cloud VPN - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/index.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/index.mdx index f6e508d000a5d0d..c73eca34c84c602 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/index.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/index.mdx @@ -11,9 +11,8 @@ head: - tag: title content: Third-party integration tutorials description: Learn how to integrate Cloudflare WAN with third-party products. - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/juniper.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/juniper.mdx index 3818804b0252018..85e683e79c81b16 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/juniper.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/juniper.mdx @@ -10,10 +10,14 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/oracle.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/oracle.mdx index 78849f6cad28825..1f2ddeaeeefca8f 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/oracle.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/oracle.mdx @@ -4,14 +4,17 @@ description: Connect Oracle Cloud to Cloudflare WAN. products: - cloudflare-wan title: Oracle Cloud - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/palo-alto.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/palo-alto.mdx index 110c15959491f36..a95d9f3fabecc02 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/palo-alto.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/palo-alto.mdx @@ -13,10 +13,14 @@ tags: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/pfsense.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/pfsense.mdx index d86dc81c4715843..862ad0f4b4e8284 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/pfsense.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/pfsense.mdx @@ -5,15 +5,19 @@ products: - cloudflare-wan title: pfSense reviewed: 2024-06-20 - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/sonicwall.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/sonicwall.mdx index 26a76c80f25db4e..536b6c9ff0ab552 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/sonicwall.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/sonicwall.mdx @@ -4,16 +4,21 @@ pcx_content_type: integration-guide description: Connect SonicWall to Cloudflare WAN. products: - cloudflare-wan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/sophos-firewall.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/sophos-firewall.mdx index b6d0e9a1f52a074..1d3ab31ab967c03 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/sophos-firewall.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/sophos-firewall.mdx @@ -4,16 +4,21 @@ pcx_content_type: integration-guide description: Connect Sophos Firewall to Cloudflare WAN. products: - cloudflare-wan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/strongswan.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/strongswan.mdx index fc4d45f5469a352..bac9233cb7a5f21 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/strongswan.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/strongswan.mdx @@ -4,13 +4,15 @@ description: Connect strongSwan to Cloudflare WAN. products: - cloudflare-wan title: strongSwan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/ubiquiti.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/ubiquiti.mdx index 868c273f24c50f6..5f49238ade5259c 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/ubiquiti.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/ubiquiti.mdx @@ -9,9 +9,9 @@ title: Ubiquiti import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/velocloud.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/velocloud.mdx index fc2441a6857269e..03266a7985edc32 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/velocloud.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/velocloud.mdx @@ -4,13 +4,15 @@ pcx_content_type: integration-guide description: Connect Velocloud to Cloudflare WAN. products: - cloudflare-wan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/viptela.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/viptela.mdx index b6b97c01cebaf9d..cbcaa056c559724 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/viptela.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/viptela.mdx @@ -4,15 +4,18 @@ pcx_content_type: integration-guide description: Connect Cisco SD-WAN to Cloudflare WAN. products: - cloudflare-wan - --- import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/vyos.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/vyos.mdx index 0ccbceefbb7c339..da8b1fef607c6af 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/vyos.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/vyos.mdx @@ -8,6 +8,4 @@ title: VyOS import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/configuration/third-party/yamaha.mdx b/src/content/docs/cloudflare-wan/configuration/third-party/yamaha.mdx index c117c2a4435efd5..3e0e9e8caca4dee 100644 --- a/src/content/docs/cloudflare-wan/configuration/third-party/yamaha.mdx +++ b/src/content/docs/cloudflare-wan/configuration/third-party/yamaha.mdx @@ -8,9 +8,13 @@ title: Yamaha RTX Router import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/get-started.mdx b/src/content/docs/cloudflare-wan/get-started.mdx index b2f98f780c0e192..50110e083ff7170 100644 --- a/src/content/docs/cloudflare-wan/get-started.mdx +++ b/src/content/docs/cloudflare-wan/get-started.mdx @@ -17,11 +17,14 @@ import { Render } from "~/components"; productNameManual: "Cloudflare WAN", productNameConnector: "Cloudflare One Appliance", configureConnectorUrl: "/cloudflare-wan/configuration/appliance/", - configureMwanManually: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + configureMwanManually: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", greReferenceURL: "/cloudflare-wan/reference/gre-ipsec-tunnels/", - ipsecReferenceUrl: "/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", - ipsecReferenceConfigParams: "/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", + ipsecReferenceUrl: + "/cloudflare-wan/reference/gre-ipsec-tunnels/#ipsec-tunnels", + ipsecReferenceConfigParams: + "/cloudflare-wan/reference/gre-ipsec-tunnels/#supported-configuration-parameters", mtuReferenceURL: "/cloudflare-wan/reference/mtu-mss/", - wanTransformationUrl: "/cloudflare-wan/wan-transformation/" + wanTransformationUrl: "/cloudflare-wan/wan-transformation/", }} /> diff --git a/src/content/docs/cloudflare-wan/glossary.mdx b/src/content/docs/cloudflare-wan/glossary.mdx index 9707d04db10e16a..5b50582a0620f31 100644 --- a/src/content/docs/cloudflare-wan/glossary.mdx +++ b/src/content/docs/cloudflare-wan/glossary.mdx @@ -6,10 +6,9 @@ products: - cloudflare-wan sidebar: order: 14 - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare WAN (formerly Magic WAN) documentation. diff --git a/src/content/docs/cloudflare-wan/index.mdx b/src/content/docs/cloudflare-wan/index.mdx index 5eac1897c216694..9a0cea6bca082c4 100644 --- a/src/content/docs/cloudflare-wan/index.mdx +++ b/src/content/docs/cloudflare-wan/index.mdx @@ -27,8 +27,9 @@ import { Render } from "~/components"; connectorUrl: "/cloudflare-wan/configuration/appliance/", thirdPartyUrl: "/cloudflare-wan/configuration/third-party/", zeroTrustUrl: "/cloudflare-wan/zero-trust/", - bgpRoutesUrl: "/cloudflare-wan/configuration/how-to/configure-routes/#configure-bgp-routes", + bgpRoutesUrl: + "/cloudflare-wan/configuration/how-to/configure-routes/#configure-bgp-routes", wanTransformationUrl: "/cloudflare-wan/wan-transformation/", - virtualNetworksUrl: "/cloudflare-wan/reference/virtual-networks/" + virtualNetworksUrl: "/cloudflare-wan/reference/virtual-networks/", }} /> diff --git a/src/content/docs/cloudflare-wan/legal/3rdparty.mdx b/src/content/docs/cloudflare-wan/legal/3rdparty.mdx index de5decbd83487cb..9d694953eaa9562 100644 --- a/src/content/docs/cloudflare-wan/legal/3rdparty.mdx +++ b/src/content/docs/cloudflare-wan/legal/3rdparty.mdx @@ -5,10 +5,9 @@ pcx_content_type: reference description: Third-party licenses used in Cloudflare WAN. products: - cloudflare-wan - --- import text from "./3rdparty.txt?raw"; import { Markdown } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/legal/index.mdx b/src/content/docs/cloudflare-wan/legal/index.mdx index e2e9dc5f914a078..907e5abf6f28688 100644 --- a/src/content/docs/cloudflare-wan/legal/index.mdx +++ b/src/content/docs/cloudflare-wan/legal/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 12 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/network-interconnect.mdx b/src/content/docs/cloudflare-wan/network-interconnect.mdx index 2f3024d241fa36f..86be9e7f16b6297 100644 --- a/src/content/docs/cloudflare-wan/network-interconnect.mdx +++ b/src/content/docs/cloudflare-wan/network-interconnect.mdx @@ -13,14 +13,20 @@ head: import { Render } from "~/components"; - + +/> diff --git a/src/content/docs/cloudflare-wan/on-ramps.mdx b/src/content/docs/cloudflare-wan/on-ramps.mdx index 86da6b248ebe042..32fdec0f6eabfab 100644 --- a/src/content/docs/cloudflare-wan/on-ramps.mdx +++ b/src/content/docs/cloudflare-wan/on-ramps.mdx @@ -22,6 +22,6 @@ import { Render } from "~/components"; cniURL: "/cloudflare-wan/network-interconnect/", cfTunnelURL: "/cloudflare-wan/zero-trust/cloudflare-tunnel/", warpURL: "/cloudflare-wan/zero-trust/cloudflare-one-client/", - thirdPartyIntegrationURL: "/cloudflare-wan/configuration/third-party/" + thirdPartyIntegrationURL: "/cloudflare-wan/configuration/third-party/", }} - /> +/> diff --git a/src/content/docs/cloudflare-wan/reference/anti-replay-protection.mdx b/src/content/docs/cloudflare-wan/reference/anti-replay-protection.mdx index a081ee8130d1870..9ed3368c2c98be2 100644 --- a/src/content/docs/cloudflare-wan/reference/anti-replay-protection.mdx +++ b/src/content/docs/cloudflare-wan/reference/anti-replay-protection.mdx @@ -4,7 +4,8 @@ products: - cloudflare-wan title: Anti-replay protection head: [] -description: If you use Cloudflare WAN and anycast IPsec tunnels, you will need to +description: + If you use Cloudflare WAN and anycast IPsec tunnels, you will need to disable anti-replay protection. Review the information here to learn more. sidebar: order: 1 diff --git a/src/content/docs/cloudflare-wan/reference/bandwidth-measurement.mdx b/src/content/docs/cloudflare-wan/reference/bandwidth-measurement.mdx index fbec0cd8573df1d..cc92b6c823ab972 100644 --- a/src/content/docs/cloudflare-wan/reference/bandwidth-measurement.mdx +++ b/src/content/docs/cloudflare-wan/reference/bandwidth-measurement.mdx @@ -14,6 +14,6 @@ import { Render } from "~/components"; file="cloudflare-wan/reference/bandwidth-measurement" product="networking-services" params={{ - cloudflareTunnelURL: "/cloudflare-wan/zero-trust/cloudflare-tunnel/" + cloudflareTunnelURL: "/cloudflare-wan/zero-trust/cloudflare-tunnel/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/cloudflare-wan/reference/device-compatibility.mdx b/src/content/docs/cloudflare-wan/reference/device-compatibility.mdx index a504caad9990939..dbcdf9a17252a75 100644 --- a/src/content/docs/cloudflare-wan/reference/device-compatibility.mdx +++ b/src/content/docs/cloudflare-wan/reference/device-compatibility.mdx @@ -10,29 +10,35 @@ sidebar: import { Render } from "~/components"; - + diff --git a/src/content/docs/cloudflare-wan/reference/gre-ipsec-tunnels.mdx b/src/content/docs/cloudflare-wan/reference/gre-ipsec-tunnels.mdx index 68d4b4a66826115..6cf088b347f6d36 100644 --- a/src/content/docs/cloudflare-wan/reference/gre-ipsec-tunnels.mdx +++ b/src/content/docs/cloudflare-wan/reference/gre-ipsec-tunnels.mdx @@ -20,12 +20,14 @@ import { Render } from "~/components"; productName: "Cloudflare WAN", mssURL: "/cloudflare-wan/get-started/#set-maximum-segment-size", productURL: "/cloudflare-wan/reference/anti-replay-protection/", - tunnelEndpoints: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/" + tunnelEndpoints: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", }} /> ## Troubleshooting For help resolving tunnel issues: + - [Troubleshoot tunnel health](/cloudflare-wan/troubleshooting/tunnel-health/) - Diagnose and fix health check failures - [Troubleshoot with IPsec logs](/cloudflare-wan/troubleshooting/ipsec-troubleshoot/) - Use Logpush to analyze IPsec handshake issues diff --git a/src/content/docs/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx b/src/content/docs/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx index 6a4cb0f5b700132..0251f5066fd362c 100644 --- a/src/content/docs/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx +++ b/src/content/docs/cloudflare-wan/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx @@ -8,9 +8,12 @@ sidebar: order: 8 --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/reference/index.mdx b/src/content/docs/cloudflare-wan/reference/index.mdx index ae239f4ddfc37af..1de78f741d45c97 100644 --- a/src/content/docs/cloudflare-wan/reference/index.mdx +++ b/src/content/docs/cloudflare-wan/reference/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 11 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/cloudflare-wan/reference/mtu-mss.mdx b/src/content/docs/cloudflare-wan/reference/mtu-mss.mdx index c0e144ba5def202..433a4d677c2c8b1 100644 --- a/src/content/docs/cloudflare-wan/reference/mtu-mss.mdx +++ b/src/content/docs/cloudflare-wan/reference/mtu-mss.mdx @@ -16,6 +16,6 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "Cloudflare WAN", - productName: "Cloudflare WAN" - }} -/> \ No newline at end of file + productName: "Cloudflare WAN", + }} +/> diff --git a/src/content/docs/cloudflare-wan/reference/traffic-steering.mdx b/src/content/docs/cloudflare-wan/reference/traffic-steering.mdx index 5f34c73baea554a..9d1d78aca887206 100644 --- a/src/content/docs/cloudflare-wan/reference/traffic-steering.mdx +++ b/src/content/docs/cloudflare-wan/reference/traffic-steering.mdx @@ -23,7 +23,8 @@ import { Render } from "~/components"; routingTableName: "Cloudflare Virtual Network routing table", mFirewallName: "Cloudflare Network Firewall", mFirewallURL: "/cloudflare-network-firewall/", - warpClientURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + warpClientURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", remoteBrowserURL: "/cloudflare-one/remote-browser-isolation/", accessURL: "/cloudflare-one/access-controls/policies/", gatewayURL: "/cloudflare-one/traffic-policies/", diff --git a/src/content/docs/cloudflare-wan/reference/tunnel-health-checks.mdx b/src/content/docs/cloudflare-wan/reference/tunnel-health-checks.mdx index 98d45cc88d50519..af8dd8496a2775f 100644 --- a/src/content/docs/cloudflare-wan/reference/tunnel-health-checks.mdx +++ b/src/content/docs/cloudflare-wan/reference/tunnel-health-checks.mdx @@ -17,12 +17,15 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "Cloudflare WAN", - addTunnels: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", - changeHealthCheckRate: "/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", + addTunnels: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels", + changeHealthCheckRate: + "/cloudflare-wan/configuration/common-settings/update-tunnel-health-checks-frequency/", probeHealth: "#health-state-and-prioritization", productName: "Cloudflare WAN", staticRoutes: "/cloudflare-wan/configuration/how-to/configure-routes/", - tunnelEndpoints: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/" + tunnelEndpoints: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", }} /> diff --git a/src/content/docs/cloudflare-wan/reference/virtual-networks.mdx b/src/content/docs/cloudflare-wan/reference/virtual-networks.mdx index cb97c92d8e4803d..7a88bf96e8c4a54 100644 --- a/src/content/docs/cloudflare-wan/reference/virtual-networks.mdx +++ b/src/content/docs/cloudflare-wan/reference/virtual-networks.mdx @@ -15,11 +15,14 @@ import { Render } from "~/components"; product="networking-services" params={{ productName: "Cloudflare WAN", - tunnelConfigURL: "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/", + tunnelConfigURL: + "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/tunnel-virtual-networks/", addRoutesURL: "/cloudflare-one/networks/routes/add-routes/", - configureRoutesURL: "/cloudflare-wan/configuration/how-to/configure-routes/", + configureRoutesURL: + "/cloudflare-wan/configuration/how-to/configure-routes/", trafficSteeringURL: "/cloudflare-wan/reference/traffic-steering/", - privateNetworksURL: "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", + privateNetworksURL: + "/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/", routesURL: "/cloudflare-one/networks/routes/", }} /> diff --git a/src/content/docs/cloudflare-wan/security.mdx b/src/content/docs/cloudflare-wan/security.mdx index 20d951ee8b334c0..8a6e3df9eaad074 100644 --- a/src/content/docs/cloudflare-wan/security.mdx +++ b/src/content/docs/cloudflare-wan/security.mdx @@ -9,14 +9,14 @@ sidebar: head: - tag: title content: Enable security filters - --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/troubleshooting/connectivity.mdx b/src/content/docs/cloudflare-wan/troubleshooting/connectivity.mdx index a190ec5d61db5ed..220b98e58c0e0a5 100644 --- a/src/content/docs/cloudflare-wan/troubleshooting/connectivity.mdx +++ b/src/content/docs/cloudflare-wan/troubleshooting/connectivity.mdx @@ -17,8 +17,9 @@ import { Render } from "~/components"; productName: "Cloudflare WAN", tunnelHealthLink: "/cloudflare-wan/troubleshooting/tunnel-health/", routingBgpLink: "/cloudflare-wan/troubleshooting/routing-and-bgp/", - checkHealthDashLink: "/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", + checkHealthDashLink: + "/cloudflare-wan/configuration/common-settings/check-tunnel-health-dashboard/", tunnelHealthChecksLink: "/cloudflare-wan/reference/tunnel-health-checks/", - networkAnalyticsLink: "/cloudflare-wan/analytics/network-analytics/" + networkAnalyticsLink: "/cloudflare-wan/analytics/network-analytics/", }} /> diff --git a/src/content/docs/cloudflare-wan/troubleshooting/index.mdx b/src/content/docs/cloudflare-wan/troubleshooting/index.mdx index 905787c40bc06f3..5d7bf235ac3cb37 100644 --- a/src/content/docs/cloudflare-wan/troubleshooting/index.mdx +++ b/src/content/docs/cloudflare-wan/troubleshooting/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 13 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx b/src/content/docs/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx index 274a58ce5258d51..dc1236e65423f20 100644 --- a/src/content/docs/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx +++ b/src/content/docs/cloudflare-wan/troubleshooting/ipsec-troubleshoot.mdx @@ -8,14 +8,16 @@ sidebar: order: 1 --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/cloudflare-wan/troubleshooting/routing-and-bgp.mdx b/src/content/docs/cloudflare-wan/troubleshooting/routing-and-bgp.mdx index ed25cd90faf8949..a43339acccd25e2 100644 --- a/src/content/docs/cloudflare-wan/troubleshooting/routing-and-bgp.mdx +++ b/src/content/docs/cloudflare-wan/troubleshooting/routing-and-bgp.mdx @@ -11,14 +11,16 @@ sidebar: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/troubleshooting/tunnel-health.mdx b/src/content/docs/cloudflare-wan/troubleshooting/tunnel-health.mdx index 807fee1aad43dc6..485d6bb04a1e428 100644 --- a/src/content/docs/cloudflare-wan/troubleshooting/tunnel-health.mdx +++ b/src/content/docs/cloudflare-wan/troubleshooting/tunnel-health.mdx @@ -11,17 +11,21 @@ sidebar: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx b/src/content/docs/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx index ad22094662587ee..095f4976ce553d9 100644 --- a/src/content/docs/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx +++ b/src/content/docs/cloudflare-wan/zero-trust/cloudflare-tunnel.mdx @@ -13,10 +13,14 @@ import { Render } from "~/components"; product="networking-services" params={{ gatewayURL: "/cloudflare-one/traffic-policies/", - greIpsecURL: "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", - warpURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + greIpsecURL: + "/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/", + warpURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", tracerouteURL: "/cloudflare-wan/configuration/how-to/traceroute/", - trafficSteeringURL: "/cloudflare-wan/reference/traffic-steering/#route-evaluation-with-zero-trust-connections", - arrURL: "/cloudflare-wan/reference/traffic-steering/#automatic-return-routing-beta" + trafficSteeringURL: + "/cloudflare-wan/reference/traffic-steering/#route-evaluation-with-zero-trust-connections", + arrURL: + "/cloudflare-wan/reference/traffic-steering/#automatic-return-routing-beta", }} /> diff --git a/src/content/docs/cloudflare-wan/zero-trust/connectivity-options.mdx b/src/content/docs/cloudflare-wan/zero-trust/connectivity-options.mdx index 7a6e010f13f8f63..566bc65d5095477 100644 --- a/src/content/docs/cloudflare-wan/zero-trust/connectivity-options.mdx +++ b/src/content/docs/cloudflare-wan/zero-trust/connectivity-options.mdx @@ -11,13 +11,14 @@ sidebar: import { Render } from "~/components"; diff --git a/src/content/docs/cloudflare-wan/zero-trust/index.mdx b/src/content/docs/cloudflare-wan/zero-trust/index.mdx index 039a590ad02f2f0..52b072c14394b76 100644 --- a/src/content/docs/cloudflare-wan/zero-trust/index.mdx +++ b/src/content/docs/cloudflare-wan/zero-trust/index.mdx @@ -8,9 +8,9 @@ sidebar: head: - tag: title content: Cloudflare One integration tutorials -description: Learn how to integrate Cloudflare WAN (formerly Magic WAN) with other Cloudflare +description: + Learn how to integrate Cloudflare WAN (formerly Magic WAN) with other Cloudflare Cloudflare One products, such as Cloudflare Gateway and the Cloudflare One Client. - --- import { Render } from "~/components"; diff --git a/src/content/docs/constellation/platform/index.mdx b/src/content/docs/constellation/platform/index.mdx index 8d627d53915bd45..1b6cdafb1ff1640 100644 --- a/src/content/docs/constellation/platform/index.mdx +++ b/src/content/docs/constellation/platform/index.mdx @@ -7,6 +7,6 @@ products: - constellation --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/containers/examples/cron.mdx b/src/content/docs/containers/examples/cron.mdx index beb5c71d036990a..fa89b747782586a 100644 --- a/src/content/docs/containers/examples/cron.mdx +++ b/src/content/docs/containers/examples/cron.mdx @@ -57,32 +57,37 @@ Use a cron expression in your Wrangler config to specify the schedule: Then in your Worker, call your Container from the "scheduled" handler: ```ts -import { Container, getContainer } from '@cloudflare/containers'; +import { Container, getContainer } from "@cloudflare/containers"; export class CronContainer extends Container { - sleepAfter = '10s'; + sleepAfter = "10s"; - override onStart() { - console.log('Starting container'); - } + override onStart() { + console.log("Starting container"); + } - override onStop() { - console.log('Container stopped'); - } + override onStop() { + console.log("Container stopped"); + } } export default { - async fetch(): Promise { - return new Response("This Worker runs a cron job to execute a container on a schedule."); - }, + async fetch(): Promise { + return new Response( + "This Worker runs a cron job to execute a container on a schedule.", + ); + }, - async scheduled(_controller: any, env: { CRON_CONTAINER: DurableObjectNamespace }) { - let container = getContainer(env.CRON_CONTAINER); - await container.start({ - envVars: { + async scheduled( + _controller: any, + env: { CRON_CONTAINER: DurableObjectNamespace }, + ) { + let container = getContainer(env.CRON_CONTAINER); + await container.start({ + envVars: { MESSAGE: "Start Time: " + new Date().toISOString(), - } - }) - }, + }, + }); + }, }; ``` diff --git a/src/content/docs/containers/examples/durable-object-interface.mdx b/src/content/docs/containers/examples/durable-object-interface.mdx index f957451fa12358b..d54c84506542fc7 100644 --- a/src/content/docs/containers/examples/durable-object-interface.mdx +++ b/src/content/docs/containers/examples/durable-object-interface.mdx @@ -1,5 +1,4 @@ --- - summary: Various examples calling Containers directly from Durable Objects pcx_content_type: example title: Using Durable Objects Directly diff --git a/src/content/docs/containers/examples/index.mdx b/src/content/docs/containers/examples/index.mdx index eb6ca3b44e7d6f7..5cf608f97ac0ecc 100644 --- a/src/content/docs/containers/examples/index.mdx +++ b/src/content/docs/containers/examples/index.mdx @@ -1,5 +1,4 @@ --- - hideChildren: false pcx_content_type: navigation title: Examples diff --git a/src/content/docs/containers/platform-details/placement.mdx b/src/content/docs/containers/platform-details/placement.mdx index bcb40145e1c38a1..67d5a76095272fe 100644 --- a/src/content/docs/containers/platform-details/placement.mdx +++ b/src/content/docs/containers/platform-details/placement.mdx @@ -34,10 +34,10 @@ Limited capacity regions (ME, OC, AFR) cannot be used exclusively. Include at le Use the `jurisdiction` constraint to restrict containers to compliance boundaries: -| Jurisdiction | Regions | Use case | -| ------------ | ---------- | ------------------ | -| `eu` | EEUR, WEUR | EU data residency | -| `fedramp` | ENAM, WNAM | FedRAMP regions | +| Jurisdiction | Regions | Use case | +| ------------ | ---------- | ----------------- | +| `eu` | EEUR, WEUR | EU data residency | +| `fedramp` | ENAM, WNAM | FedRAMP regions | When you specify both `jurisdiction` and `regions`, the regions must be valid for that jurisdiction. For example, specifying `jurisdiction: "eu"` with `regions: ["ENAM"]` is invalid. diff --git a/src/content/docs/containers/pricing.mdx b/src/content/docs/containers/pricing.mdx index a26fc07ae355276..504db4e7c197e95 100644 --- a/src/content/docs/containers/pricing.mdx +++ b/src/content/docs/containers/pricing.mdx @@ -22,7 +22,7 @@ Containers are billed for every 10ms that they are actively running at the follo You only pay for what you use — charges start when a request is sent to the container or when it is manually started. Charges stop after the container instance goes to sleep, which can happen automatically after a timeout. This makes it easy to scale to zero, and allows you to get high utilization even with bursty traffic. -Memory and disk usage are based on the *provisioned resources* for the instance type you select, while CPU usage is based on *active usage* only. +Memory and disk usage are based on the _provisioned resources_ for the instance type you select, while CPU usage is based on _active usage_ only. #### Instance Types diff --git a/src/content/docs/containers/ssh.mdx b/src/content/docs/containers/ssh.mdx index fab40ae97a43594..bc91bd0cdc3968d 100644 --- a/src/content/docs/containers/ssh.mdx +++ b/src/content/docs/containers/ssh.mdx @@ -58,4 +58,4 @@ wrangler containers ssh ## Process visibility -Without the [`containers_pid_namespace`](/workers/configuration/compatibility-flags/#use-an-isolated-pid-namespace-for-containers) compatibility flag, all processes inside the VM are visible when you connect to your Container through SSH. This flag is turned on by default for Workers with a [compatibility date](/workers/configuration/compatibility-dates/) of `2026-04-01` or later. \ No newline at end of file +Without the [`containers_pid_namespace`](/workers/configuration/compatibility-flags/#use-an-isolated-pid-namespace-for-containers) compatibility flag, all processes inside the VM are visible when you connect to your Container through SSH. This flag is turned on by default for Workers with a [compatibility date](/workers/configuration/compatibility-dates/) of `2026-04-01` or later. diff --git a/src/content/docs/d1/best-practices/local-development.mdx b/src/content/docs/d1/best-practices/local-development.mdx index f6f28cdf1259255..a225fec2f2d3b74 100644 --- a/src/content/docs/d1/best-practices/local-development.mdx +++ b/src/content/docs/d1/best-practices/local-development.mdx @@ -137,8 +137,6 @@ Users of wrangler `2.x` must use the `--persist` flag: previous versions of wran You can use Miniflare's [support for D1](https://miniflare.dev/storage/d1) to create D1 databases you can use for testing: - - ```jsonc diff --git a/src/content/docs/d1/best-practices/query-d1.mdx b/src/content/docs/d1/best-practices/query-d1.mdx index 74e5a405162b2c2..6f4eddbd73c830b 100644 --- a/src/content/docs/d1/best-practices/query-d1.mdx +++ b/src/content/docs/d1/best-practices/query-d1.mdx @@ -52,15 +52,16 @@ Given the following JSON object (`type:blob`) in a column named `sensor_reading` ```json { - "measurement": { - "temp_f": "77.4", - "aqi": [21, 42, 58], - "o3": [18, 500], - "wind_mph": "13", - "location": "US-NY" - } + "measurement": { + "temp_f": "77.4", + "aqi": [21, 42, 58], + "o3": [18, 500], + "wind_mph": "13", + "location": "US-NY" + } } ``` + ```sql -- Extract the temperature value SELECT json_extract(sensor_reading, '$.measurement.temp_f')-- returns "77.4" as TEXT @@ -80,22 +81,24 @@ This requires you to: ```js title="index.js" export default { - async fetch(request, env) { - const {pathname} = new URL(request.url); - const companyName1 = `Bs Beverages`; - const companyName2 = `Around the Horn`; - const stmt = env.DB.prepare(`SELECT * FROM Customers WHERE CompanyName = ?`); - - if (pathname === `/RUN`) { - const returnValue = await stmt.bind(companyName1).run(); - return Response.json(returnValue); - } - - return new Response( - `Welcome to the D1 API Playground! + async fetch(request, env) { + const { pathname } = new URL(request.url); + const companyName1 = `Bs Beverages`; + const companyName2 = `Around the Horn`; + const stmt = env.DB.prepare( + `SELECT * FROM Customers WHERE CompanyName = ?`, + ); + + if (pathname === `/RUN`) { + const returnValue = await stmt.bind(companyName1).run(); + return Response.json(returnValue); + } + + return new Response( + `Welcome to the D1 API Playground! \nChange the URL to test the various methods inside your index.js file.`, - ); - }, + ); + }, }; ``` @@ -114,6 +117,7 @@ You can use Wrangler commands to query a D1 database. Note that Wrangler command ```sh npx wrangler d1 execute prod-d1-tutorial --command="SELECT * FROM Customers" ``` + ```sh output 🌀 Mapping SQL input into an array of statements 🌀 Executing on local database production-db-backend () from .wrangler/state/v3/d1: @@ -128,4 +132,4 @@ npx wrangler d1 execute prod-d1-tutorial --command="SELECT * FROM Customers" ├────────────┼─────────────────────┼───────────────────┤ │ 13 │ Bs Beverages │ Random Name │ └────────────┴─────────────────────┴───────────────────┘ -``` \ No newline at end of file +``` diff --git a/src/content/docs/d1/best-practices/remote-development.mdx b/src/content/docs/d1/best-practices/remote-development.mdx index 40be666bf1fb1f5..4efe9586181686f 100644 --- a/src/content/docs/d1/best-practices/remote-development.mdx +++ b/src/content/docs/d1/best-practices/remote-development.mdx @@ -17,17 +17,16 @@ D1 supports remote development using the [dashboard playground](/workers/playgro :::note - This guide assumes you have previously created a Worker, and a D1 database. Users new to D1 and/or Cloudflare Workers should read the [D1 tutorial](/d1/get-started/) to install `wrangler` and deploy their first database. - ::: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select an existing Worker. 3. Go to the **Bindings** tab. 4. Select **Add binding**. @@ -44,14 +43,14 @@ Use the following Worker script to verify that the Worker has access to the boun ```js export default { - async fetch(request, env, ctx) { - const res = await env.DB.prepare("SELECT 1;").run(); - return new Response(JSON.stringify(res, null, 2)); - }, + async fetch(request, env, ctx) { + const res = await env.DB.prepare("SELECT 1;").run(); + return new Response(JSON.stringify(res, null, 2)); + }, }; ``` ## Related resources -* Learn [how to debug D1](/d1/observability/debug-d1/). -* Understand how to [access logs](/workers/observability/logs/) generated from your Worker and D1. +- Learn [how to debug D1](/d1/observability/debug-d1/). +- Understand how to [access logs](/workers/observability/logs/) generated from your Worker and D1. diff --git a/src/content/docs/d1/best-practices/retry-queries.mdx b/src/content/docs/d1/best-practices/retry-queries.mdx index 02bc218ed30d67e..0dafe17addbbd3c 100644 --- a/src/content/docs/d1/best-practices/retry-queries.mdx +++ b/src/content/docs/d1/best-practices/retry-queries.mdx @@ -27,20 +27,20 @@ You can use libraries abstracting that already like [`@cloudflare/actors`](https import { tryWhile } from "@cloudflare/actors"; function queryD1Example(d1: D1Database, sql: string) { - return await tryWhile(async () => { - return await d1.prepare(sql).run(); - }, shouldRetry); + return await tryWhile(async () => { + return await d1.prepare(sql).run(); + }, shouldRetry); } function shouldRetry(err: unknown, nextAttempt: number) { - const errMsg = String(err); - const isRetryableError = - errMsg.includes("Network connection lost") || - errMsg.includes("storage caused object to be reset") || - errMsg.includes("reset because its code was updated"); - if (nextAttempt <= 5 && isRetryableError) { - return true; - } - return false; + const errMsg = String(err); + const isRetryableError = + errMsg.includes("Network connection lost") || + errMsg.includes("storage caused object to be reset") || + errMsg.includes("reset because its code was updated"); + if (nextAttempt <= 5 && isRetryableError) { + return true; + } + return false; } -``` \ No newline at end of file +``` diff --git a/src/content/docs/d1/best-practices/use-d1-from-pages.mdx b/src/content/docs/d1/best-practices/use-d1-from-pages.mdx index cf575cec298ffee..5ba46a35c327eba 100644 --- a/src/content/docs/d1/best-practices/use-d1-from-pages.mdx +++ b/src/content/docs/d1/best-practices/use-d1-from-pages.mdx @@ -7,5 +7,5 @@ sidebar: order: 11 products: - d1 - - pages + - pages --- diff --git a/src/content/docs/d1/best-practices/use-indexes.mdx b/src/content/docs/d1/best-practices/use-indexes.mdx index dc25d04079a3170..b363212f5718cc1 100644 --- a/src/content/docs/d1/best-practices/use-indexes.mdx +++ b/src/content/docs/d1/best-practices/use-indexes.mdx @@ -16,9 +16,9 @@ Indexes enable D1 to improve query performance over the indexed columns for comm Indexes are useful: -* When you want to improve the read performance over columns that are regularly used in predicates - for example, a `WHERE email_address = ?` or `WHERE user_id = 'a793b483-df87-43a8-a057-e5286d3537c5'` - email addresses, usernames, user IDs and/or dates are good choices for columns to index in typical web applications or services. -* For enforcing uniqueness constraints on a column or columns - for example, an email address or user ID via the `CREATE UNIQUE INDEX`. -* In cases where you query over multiple columns together - `(customer_id, transaction_date)`. +- When you want to improve the read performance over columns that are regularly used in predicates - for example, a `WHERE email_address = ?` or `WHERE user_id = 'a793b483-df87-43a8-a057-e5286d3537c5'` - email addresses, usernames, user IDs and/or dates are good choices for columns to index in typical web applications or services. +- For enforcing uniqueness constraints on a column or columns - for example, an email address or user ID via the `CREATE UNIQUE INDEX`. +- In cases where you query over multiple columns together - `(customer_id, transaction_date)`. Indexes are automatically updated when the table and column(s) they reference are inserted, updated or deleted. You do not need to manually update an index after you write to the table it references. @@ -114,7 +114,7 @@ Using an index can reduce the number of rows read by a query. Use the `meta` obj ## Multi-column indexes -For a multi-column index (an index that specifies multiple columns), queries will only use the index if they specify either *all* of the columns, or a subset of the columns provided all columns to the "left" are also within the query. +For a multi-column index (an index that specifies multiple columns), queries will only use the index if they specify either _all_ of the columns, or a subset of the columns provided all columns to the "left" are also within the query. Given an index of `CREATE INDEX idx_customer_id_transaction_date ON transactions(customer_id, transaction_date)`, the following table shows when the index is used (or not): @@ -126,16 +126,16 @@ Given an index of `CREATE INDEX idx_customer_id_transaction_date ON transactions Notes: -* If you created an index over three columns instead — `customer_id`, `transaction_date` and `shipping_status` — a query that uses both `customer_id` and `transaction_date` would use the index, as you are including all columns "to the left". -* With the same index, a query that uses only `transaction_date` and `shipping_status` would *not* use the index, as you have not used `customer_id` (the leftmost column) in the query. +- If you created an index over three columns instead — `customer_id`, `transaction_date` and `shipping_status` — a query that uses both `customer_id` and `transaction_date` would use the index, as you are including all columns "to the left". +- With the same index, a query that uses only `transaction_date` and `shipping_status` would _not_ use the index, as you have not used `customer_id` (the leftmost column) in the query. ## Partial indexes Partial indexes are indexes over a subset of rows in a table. Partial indexes are defined by the use of a `WHERE` clause when creating the index. A partial index can be useful to omit certain rows, such as those where values are `NULL` or where rows with a specific value are present across queries. -* A concrete example of a partial index would be on a table with a `order_status INTEGER` column, where `6` might represent `"order complete"` in your application code. -* This would allow queries against orders that are yet to be fulfilled, shipped or are in-progress, which are likely to be some of the most common users (users checking their order status). -* Partial indexes also keep the index from growing unbounded over time. The index does not need to keep a row for every completed order, and completed orders are likely to be queried far fewer times than in-progress orders. +- A concrete example of a partial index would be on a table with a `order_status INTEGER` column, where `6` might represent `"order complete"` in your application code. +- This would allow queries against orders that are yet to be fulfilled, shipped or are in-progress, which are likely to be some of the most common users (users checking their order status). +- Partial indexes also keep the index from growing unbounded over time. The index does not need to keep a row for every completed order, and completed orders are likely to be queried far fewer times than in-progress orders. A partial index that filters out completed orders from the index would resemble the following: @@ -153,7 +153,7 @@ Use `DROP INDEX` to remove an index. Dropped indexes cannot be restored. Take note of the following considerations when creating indexes: -* Indexes are not always a free performance boost. You should create indexes only on columns that reflect your most-queried columns. Indexes themselves need to be maintained. When you write to an indexed column, the database needs to write to the table and the index. The performance benefit of an index and reduction in rows read will, in nearly all cases, offset this additional write. -* You cannot create indexes that reference other tables or use non-deterministic functions, since the index would not be stable. -* Indexes cannot be updated. To add or remove a column from an index, [remove](#remove-indexes) the index and then [create a new index](#create-an-index) with the new columns. -* Indexes contribute to the overall storage required by your database: an index is effectively a table itself. +- Indexes are not always a free performance boost. You should create indexes only on columns that reflect your most-queried columns. Indexes themselves need to be maintained. When you write to an indexed column, the database needs to write to the table and the index. The performance benefit of an index and reduction in rows read will, in nearly all cases, offset this additional write. +- You cannot create indexes that reference other tables or use non-deterministic functions, since the index would not be stable. +- Indexes cannot be updated. To add or remove a column from an index, [remove](#remove-indexes) the index and then [create a new index](#create-an-index) with the new columns. +- Indexes contribute to the overall storage required by your database: an index is effectively a table itself. diff --git a/src/content/docs/d1/configuration/environments.mdx b/src/content/docs/d1/configuration/environments.mdx index d006e54c8c8878d..9211ae269c77fa0 100644 --- a/src/content/docs/d1/configuration/environments.mdx +++ b/src/content/docs/d1/configuration/environments.mdx @@ -78,22 +78,20 @@ Therefore, the above binding is equivalent to: ```json { - "production": { - "d1_databases": [ - { - "binding": "DB", - "database_name": "DATABASE_NAME", - "database_id": "DATABASE_ID" - } - ] - } + "production": { + "d1_databases": [ + { + "binding": "DB", + "database_name": "DATABASE_NAME", + "database_id": "DATABASE_ID" + } + ] + } } ``` ### Example - - ```jsonc @@ -127,25 +125,25 @@ The above is equivalent to the following structure in JSON: ```json { - "env": { - "production": { - "d1_databases": [ - { - "binding": "BINDING_NAME_2", - "database_id": "UUID_2", - "database_name": "DATABASE_NAME_2" - } - ] - }, - "staging": { - "d1_databases": [ - { - "binding": "BINDING_NAME_1", - "database_id": "UUID_1", - "database_name": "DATABASE_NAME_1" - } - ] - } - } + "env": { + "production": { + "d1_databases": [ + { + "binding": "BINDING_NAME_2", + "database_id": "UUID_2", + "database_name": "DATABASE_NAME_2" + } + ] + }, + "staging": { + "d1_databases": [ + { + "binding": "BINDING_NAME_1", + "database_id": "UUID_1", + "database_name": "DATABASE_NAME_1" + } + ] + } + } } ``` diff --git a/src/content/docs/d1/get-started.mdx b/src/content/docs/d1/get-started.mdx index c5ee956264ad848..5d22a0fe3363f7c 100644 --- a/src/content/docs/d1/get-started.mdx +++ b/src/content/docs/d1/get-started.mdx @@ -9,7 +9,17 @@ products: - d1 --- -import { Render, PackageManagers, Steps, FileTree, Tabs, TabItem, TypeScriptExample, WranglerConfig, DashButton } from "~/components"; +import { + Render, + PackageManagers, + Steps, + FileTree, + Tabs, + TabItem, + TypeScriptExample, + WranglerConfig, + DashButton, +} from "~/components"; This guide instructs you through: diff --git a/src/content/docs/d1/observability/billing.mdx b/src/content/docs/d1/observability/billing.mdx index 31ef2103ba9196a..1a4a8d3fffc9712 100644 --- a/src/content/docs/d1/observability/billing.mdx +++ b/src/content/docs/d1/observability/billing.mdx @@ -21,6 +21,7 @@ Total account billable usage analytics for D1 are available in the Cloudflare da 1. In the Cloudflare dashboard, go to the **Billing** page. + 2. Go to **Billable Usage**. From here you can view charts of your account's D1 usage on a daily or month-to-date timeframe. @@ -32,5 +33,6 @@ Note that billable usage history is stored for a maximum of 30 days. Usage-based billing notifications are available within the [Cloudflare dashboard](https://dash.cloudflare.com) for users looking to monitor their total account usage. Notifications on the following metrics are available: + - Rows Read -- Rows Written \ No newline at end of file +- Rows Written diff --git a/src/content/docs/d1/platform/limits.mdx b/src/content/docs/d1/platform/limits.mdx index 4c61da8679fd68e..21cb95db52dfab3 100644 --- a/src/content/docs/d1/platform/limits.mdx +++ b/src/content/docs/d1/platform/limits.mdx @@ -10,24 +10,24 @@ products: import { Render } from "~/components"; -| Feature | Limit | -| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | -| Databases per account | 50,000 (Workers Paid) [^1] / 10 (Free) | -| Maximum database size | 10 GB (Workers Paid) / 500 MB (Free) | -| Maximum storage per account | 1 TB (Workers Paid) [^2] / 5 GB (Free) | -| [Time Travel](/d1/reference/time-travel/) duration (point-in-time recovery) | 30 days (Workers Paid) / 7 days (Free) | -| Maximum Time Travel restore operations | 10 restores per 10 minutes (per database) | +| Feature | Limit | +| ----------------------------------------------------------------------------------------------- | ------------------------------------------------- | +| Databases per account | 50,000 (Workers Paid) [^1] / 10 (Free) | +| Maximum database size | 10 GB (Workers Paid) / 500 MB (Free) | +| Maximum storage per account | 1 TB (Workers Paid) [^2] / 5 GB (Free) | +| [Time Travel](/d1/reference/time-travel/) duration (point-in-time recovery) | 30 days (Workers Paid) / 7 days (Free) | +| Maximum Time Travel restore operations | 10 restores per 10 minutes (per database) | | Queries per Worker invocation (read [subrequest limits](/workers/platform/limits/#subrequests)) | 1000 (Workers Paid) / 50 (Free) | -| Maximum number of columns per table | 100 | -| Maximum number of rows per table | Unlimited (excluding per-database storage limits) | -| Maximum string, `BLOB` or table row size | 2,000,000 bytes (2 MB) | -| Maximum SQL statement length | 100,000 bytes (100 KB) | -| Maximum bound parameters per query | 100 | -| Maximum arguments per SQL function | 32 | -| Maximum characters (bytes) in a `LIKE` or `GLOB` pattern | 50 bytes | -| Maximum bindings per Workers script | Approximately 5,000 [^3] | -| Maximum SQL query duration | 30 seconds [^4] | -| Maximum file import (`d1 execute`) size | 5 GB [^5] | +| Maximum number of columns per table | 100 | +| Maximum number of rows per table | Unlimited (excluding per-database storage limits) | +| Maximum string, `BLOB` or table row size | 2,000,000 bytes (2 MB) | +| Maximum SQL statement length | 100,000 bytes (100 KB) | +| Maximum bound parameters per query | 100 | +| Maximum arguments per SQL function | 32 | +| Maximum characters (bytes) in a `LIKE` or `GLOB` pattern | 50 bytes | +| Maximum bindings per Workers script | Approximately 5,000 [^3] | +| Maximum SQL query duration | 30 seconds [^4] | +| Maximum file import (`d1 execute`) size | 5 GB [^5] | :::note[Batch limits] Limits for individual queries (listed above) apply to each individual statement contained within a batch statement. For example, the maximum SQL statement length of 100 KB applies to each statement inside a `db.batch()`. diff --git a/src/content/docs/d1/reference/community-projects.mdx b/src/content/docs/d1/reference/community-projects.mdx index a095bb554ffe1f5..2974e7452d65edb 100644 --- a/src/content/docs/d1/reference/community-projects.mdx +++ b/src/content/docs/d1/reference/community-projects.mdx @@ -12,10 +12,8 @@ Members of the Cloudflare developer community and broader developer ecosystem ha :::note - Community projects are not maintained by the Cloudflare D1 team. They are managed and updated by the project authors. - ::: ## Projects @@ -37,57 +35,57 @@ knex-cloudflare-d1 is the Cloudflare D1 dialect for Knex.js. Note that this is n [Prisma ORM](https://www.prisma.io/orm) is a next-generation JavaScript and TypeScript ORM that unlocks a new level of developer experience when working with databases thanks to its intuitive data model, automated migrations, type-safety and auto-completion. -* [Tutorial](/d1/tutorials/d1-and-prisma-orm/) -* [Docs](https://www.prisma.io/docs/orm/prisma-client/deployment/edge/deploy-to-cloudflare#d1) +- [Tutorial](/d1/tutorials/d1-and-prisma-orm/) +- [Docs](https://www.prisma.io/docs/orm/prisma-client/deployment/edge/deploy-to-cloudflare#d1) ### D1 adapter for Kysely ORM Kysely is a type-safe and autocompletion-friendly typescript SQL query builder. With this adapter you can interact with D1 with the familiar Kysely interface. -* [Kysely GitHub](https://github.com/koskimas/kysely) -* [D1 adapter](https://github.com/aidenwallis/kysely-d1) +- [Kysely GitHub](https://github.com/koskimas/kysely) +- [D1 adapter](https://github.com/aidenwallis/kysely-d1) ### feathers-kysely The `feathers-kysely` database adapter follows the FeathersJS Query Syntax standard and works with any framework. It is built on the D1 adapter for Kysely and supports passing queries directly from client applications. Since the FeathersJS query syntax is a subset of MongoDB's syntax, this is a great tool for MongoDB users to use Cloudflare D1 without previous SQL experience. -* [feathers-kysely on npm](https://www.npmjs.com/package/feathers-kysely) -* [feathers-kysely on GitHub](https://github.com/marshallswain/feathers-kysely) +- [feathers-kysely on npm](https://www.npmjs.com/package/feathers-kysely) +- [feathers-kysely on GitHub](https://github.com/marshallswain/feathers-kysely) ### Drizzle ORM Drizzle is a headless TypeScript ORM with a head which runs on Node, Bun and Deno. Drizzle ORM lives on the Edge and it is a JavaScript ORM too. It comes with a drizzle-kit CLI companion for automatic SQL migrations generation. Drizzle automatically generates your D1 schema based on types you define in TypeScript, and exposes an API that allows you to query your database directly. -* [Docs](https://orm.drizzle.team/docs) -* [GitHub](https://github.com/drizzle-team/drizzle-orm) -* [D1 example](https://orm.drizzle.team/docs/connect-cloudflare-d1) +- [Docs](https://orm.drizzle.team/docs) +- [GitHub](https://github.com/drizzle-team/drizzle-orm) +- [D1 example](https://orm.drizzle.team/docs/connect-cloudflare-d1) ### workers-qb `workers-qb` is a zero-dependency query builder that provides a simple standardized interface while keeping the benefits and speed of using raw queries over a traditional ORM. While not intended to provide ORM-like functionality, `workers-qb` makes it easier to interact with your database from code for direct SQL access. -* [GitHub](https://github.com/G4brym/workers-qb) -* [Documentation](https://workers-qb.massadas.com/) +- [GitHub](https://github.com/G4brym/workers-qb) +- [Documentation](https://workers-qb.massadas.com/) ### d1-console Instead of running the `wrangler d1 execute` command in your terminal every time you want to interact with your database, you can interact with D1 from within the `d1-console`. Created by a Discord Community Champion, this gives the benefit of executing multi-line queries, obtaining command history, and viewing a cleanly formatted table output. -* [GitHub](https://github.com/isaac-mcfadyen/d1-console) +- [GitHub](https://github.com/isaac-mcfadyen/d1-console) ### L1 `L1` is a package that brings some Cloudflare Worker ecosystem bindings into PHP and Laravel via the Cloudflare API. It provides interaction with D1 via PDO, KV and Queues, with more services to add in the future, making PHP integration with Cloudflare a real breeze. -* [GitHub](https://github.com/renoki-co/l1) -* [Packagist](https://packagist.org/packages/renoki-co/l1) +- [GitHub](https://github.com/renoki-co/l1) +- [Packagist](https://packagist.org/packages/renoki-co/l1) ### Staff Directory - a D1-based demo Staff Directory is a demo project using D1, [HonoX](https://github.com/honojs/honox), and [Cloudflare Pages](/pages/). It uses D1 to store employee data, and is an example of a full-stack application built on top of D1. -* [GitHub](https://github.com/lauragift21/staff-directory) -* [D1 functionality](https://github.com/lauragift21/staff-directory/blob/main/app/db.ts) +- [GitHub](https://github.com/lauragift21/staff-directory) +- [D1 functionality](https://github.com/lauragift21/staff-directory/blob/main/app/db.ts) ### NuxtHub @@ -95,9 +93,9 @@ Staff Directory is a demo project using D1, [HonoX](https://github.com/honojs/ho `NuxtHub` also provides a way to use your remote D1 database in development using the `npx nuxt dev --remote` command. -* [GitHub](https://github.com/nuxt-hub/core) -* [Documentation](https://hub.nuxt.com) -* [Example](https://github.com/Atinux/nuxt-todos-edge) +- [GitHub](https://github.com/nuxt-hub/core) +- [Documentation](https://hub.nuxt.com) +- [Example](https://github.com/Atinux/nuxt-todos-edge) ## Feedback diff --git a/src/content/docs/d1/reference/data-security.mdx b/src/content/docs/d1/reference/data-security.mdx index 810de22ec7f45ea..ab79357a7114750 100644 --- a/src/content/docs/d1/reference/data-security.mdx +++ b/src/content/docs/d1/reference/data-security.mdx @@ -10,9 +10,9 @@ products: This page details the data security properties of D1, including: -* Encryption-at-rest (EAR). -* Encryption-in-transit (EIT). -* Cloudflare's compliance certifications. +- Encryption-at-rest (EAR). +- Encryption-in-transit (EIT). +- Cloudflare's compliance certifications. ## Encryption at Rest diff --git a/src/content/docs/d1/reference/faq.mdx b/src/content/docs/d1/reference/faq.mdx index 112c665dd4004ad..e86017db8b829fa 100644 --- a/src/content/docs/d1/reference/faq.mdx +++ b/src/content/docs/d1/reference/faq.mdx @@ -12,8 +12,8 @@ import { Render } from "~/components"; ## Pricing - + ## Limits - \ No newline at end of file + diff --git a/src/content/docs/d1/reference/generated-columns.mdx b/src/content/docs/d1/reference/generated-columns.mdx index 5d116b3321076a7..ccadcdb1b12d227 100644 --- a/src/content/docs/d1/reference/generated-columns.mdx +++ b/src/content/docs/d1/reference/generated-columns.mdx @@ -18,8 +18,8 @@ Generated columns can also have [indexes defined](/d1/best-practices/use-indexes There are two types of generated columns: -* `VIRTUAL` (default): the column is generated when read. This has the benefit of not consuming storage, but can increase compute time (and thus reduce query performance), especially for larger queries. -* `STORED`: the column is generated when the row is written. The column takes up storage space just as a regular column would, but the column does not need to be generated on every read, which can improve read query performance. +- `VIRTUAL` (default): the column is generated when read. This has the benefit of not consuming storage, but can increase compute time (and thus reduce query performance), especially for larger queries. +- `STORED`: the column is generated when the row is written. The column takes up storage space just as a regular column would, but the column does not need to be generated on every read, which can improve read query performance. When omitted from a generated column expression, generated columns default to the `VIRTUAL` type. The `STORED` type is recommended when the generated column is compute intensive. For example, when parsing large JSON structures. @@ -40,13 +40,13 @@ As a concrete example, to automatically extract the `location` value from the fo ```json { - "measurement": { - "temp_f": "77.4", - "aqi": [21, 42, 58], - "o3": [18, 500], - "wind_mph": "13", - "location": "US-NY" - } + "measurement": { + "temp_f": "77.4", + "aqi": [21, 42, 58], + "o3": [18, 500], + "wind_mph": "13", + "location": "US-NY" + } } ``` @@ -100,6 +100,6 @@ ADD COLUMN expires_at AS (date(timestamp, '+30 days')); ## Additional considerations -* Tables must have at least one non-generated column. You cannot define a table with only generated column(s). -* Expressions can only reference other columns in the same table and row, and must only use [deterministic functions](https://www.sqlite.org/deterministic.html). Functions like `random()`, sub-queries or aggregation functions cannot be used to define a generated column. -* Columns added to an existing table via `ALTER TABLE ... ADD COLUMN` must be `VIRTUAL`. You cannot add a `STORED` column to an existing table. +- Tables must have at least one non-generated column. You cannot define a table with only generated column(s). +- Expressions can only reference other columns in the same table and row, and must only use [deterministic functions](https://www.sqlite.org/deterministic.html). Functions like `random()`, sub-queries or aggregation functions cannot be used to define a generated column. +- Columns added to an existing table via `ALTER TABLE ... ADD COLUMN` must be `VIRTUAL`. You cannot add a `STORED` column to an existing table. diff --git a/src/content/docs/d1/reference/glossary.mdx b/src/content/docs/d1/reference/glossary.mdx index 5fe0afff9a376e2..87e1a98504fae41 100644 --- a/src/content/docs/d1/reference/glossary.mdx +++ b/src/content/docs/d1/reference/glossary.mdx @@ -8,7 +8,7 @@ products: - d1 --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's D1 documentation. diff --git a/src/content/docs/d1/reference/migrations.mdx b/src/content/docs/d1/reference/migrations.mdx index 50d3292c20ea584..20dc9869915cbc2 100644 --- a/src/content/docs/d1/reference/migrations.mdx +++ b/src/content/docs/d1/reference/migrations.mdx @@ -16,9 +16,9 @@ Database migrations are a way of versioning your database. Each migration is sto Currently, the migrations system aims to be simple yet effective. With the current implementation, you can: -* [Create](/workers/wrangler/commands/d1/#d1-migrations-create) an empty migration file. -* [List](/workers/wrangler/commands/d1/#d1-migrations-list) unapplied migrations. -* [Apply](/workers/wrangler/commands/d1/#d1-migrations-apply) remaining migrations. +- [Create](/workers/wrangler/commands/d1/#d1-migrations-create) an empty migration file. +- [List](/workers/wrangler/commands/d1/#d1-migrations-list) unapplied migrations. +- [Apply](/workers/wrangler/commands/d1/#d1-migrations-apply) remaining migrations. Every migration file in the `migrations` folder has a specified version number in the filename. Files are listed in sequential order. Every migration file is an SQL file where you can specify queries to be run. diff --git a/src/content/docs/d1/sql-api/foreign-keys.mdx b/src/content/docs/d1/sql-api/foreign-keys.mdx index 1c38b8d8d995ec3..fdc9e715186ae46 100644 --- a/src/content/docs/d1/sql-api/foreign-keys.mdx +++ b/src/content/docs/d1/sql-api/foreign-keys.mdx @@ -47,13 +47,13 @@ A foreign key relationship can be defined when creating a table via `CREATE TABL To illustrate this with an example based on an e-commerce website with two tables: -* A `users` table that defines common properties about a user account, including a unique `user_id` identifier. -* An `orders` table that maps an order back to a `user_id` in the user table. +- A `users` table that defines common properties about a user account, including a unique `user_id` identifier. +- An `orders` table that maps an order back to a `user_id` in the user table. This mapping is defined as `FOREIGN KEY`, which ensures that: -* You cannot delete a row from the `users` table that would violate the foreign key constraint. This means that you cannot end up with orders that do not have a valid user to map back to. -* `orders` are always defined against a valid `user_id`, mitigating the risk of creating orders that refer to invalid (or non-existent) users. +- You cannot delete a row from the `users` table that would violate the foreign key constraint. This means that you cannot end up with orders that do not have a valid user to map back to. +- `orders` are always defined against a valid `user_id`, mitigating the risk of creating orders that refer to invalid (or non-existent) users. ```sql CREATE TABLE users ( @@ -77,22 +77,22 @@ You can define multiple foreign key relationships per-table, and foreign key def ## Foreign key actions -You can define *actions* as part of your foreign key definitions to either limit or propagate changes to a parent row (`REFERENCES table(column)`). Defining *actions* makes using foreign key constraints in your application easier to reason about, and help either clean up related data or prevent data from being islanded. +You can define _actions_ as part of your foreign key definitions to either limit or propagate changes to a parent row (`REFERENCES table(column)`). Defining _actions_ makes using foreign key constraints in your application easier to reason about, and help either clean up related data or prevent data from being islanded. There are five actions you can set when defining the `ON UPDATE` and/or `ON DELETE` clauses as part of a foreign key relationship. You can also define different actions for `ON UPDATE` and `ON DELETE` depending on your requirements. -* `CASCADE` - Updating or deleting a parent key deletes all child keys (rows) associated to it. -* `RESTRICT` - A parent key cannot be updated or deleted when *any* child key refers to it. Unlike the default foreign key enforcement, relationships with `RESTRICT` applied return errors immediately, and not at the end of the transaction. -* `SET DEFAULT` - Set the child column(s) referred to by the foreign key definition to the `DEFAULT` value defined in the schema. If no `DEFAULT` is set on the child columns, you cannot use this action. -* `SET NULL` - Set the child column(s) referred to by the foreign key definition to SQL `NULL`. -* `NO ACTION` - Take no action. +- `CASCADE` - Updating or deleting a parent key deletes all child keys (rows) associated to it. +- `RESTRICT` - A parent key cannot be updated or deleted when _any_ child key refers to it. Unlike the default foreign key enforcement, relationships with `RESTRICT` applied return errors immediately, and not at the end of the transaction. +- `SET DEFAULT` - Set the child column(s) referred to by the foreign key definition to the `DEFAULT` value defined in the schema. If no `DEFAULT` is set on the child columns, you cannot use this action. +- `SET NULL` - Set the child column(s) referred to by the foreign key definition to SQL `NULL`. +- `NO ACTION` - Take no action. :::caution[CASCADE usage] Although `CASCADE` can be the desired behavior in some cases, deleting child rows across tables can have undesirable effects and/or result in unintended side effects for your users. ::: -In the following example, deleting a user from the `users` table will delete all related rows in the `scores` table as you have defined `ON DELETE CASCADE`. Delete all related rows in the `scores` table if you do not want to retain the scores for any users you have deleted entirely. This might mean that *other* users can no longer look up or refer to scores that were still valid. +In the following example, deleting a user from the `users` table will delete all related rows in the `scores` table as you have defined `ON DELETE CASCADE`. Delete all related rows in the `scores` table if you do not want to retain the scores for any users you have deleted entirely. This might mean that _other_ users can no longer look up or refer to scores that were still valid. ```sql CREATE TABLE users ( @@ -111,6 +111,6 @@ CREATE TABLE scores ( ## Next Steps -* Read the SQLite [`FOREIGN KEY`](https://www.sqlite.org/foreignkeys.html) documentation. -* Learn how to [use the D1 Workers Binding API](/d1/worker-api/) from within a Worker. -* Understand how [database migrations work](/d1/reference/migrations/) with D1. +- Read the SQLite [`FOREIGN KEY`](https://www.sqlite.org/foreignkeys.html) documentation. +- Learn how to [use the D1 Workers Binding API](/d1/worker-api/) from within a Worker. +- Understand how [database migrations work](/d1/reference/migrations/) with D1. diff --git a/src/content/docs/d1/sql-api/query-json.mdx b/src/content/docs/d1/sql-api/query-json.mdx index 9b44068ab62c958..82c65b749bd3e7f 100644 --- a/src/content/docs/d1/sql-api/query-json.mdx +++ b/src/content/docs/d1/sql-api/query-json.mdx @@ -12,10 +12,10 @@ products: D1 has built-in support for querying and parsing JSON data stored within a database. This enables you to: -* [Query paths](#extract-values) within a stored JSON object - for example, extracting the value of named key or array index directly, which is especially useful with larger JSON objects. -* Insert and/or replace values within an object or array. -* [Expand the contents of a JSON object](#expand-arrays-for-in-queries) or array into multiple rows - for example, for use as part of a `WHERE ... IN` predicate. -* Create [generated columns](/d1/reference/generated-columns/) that are automatically populated with values from JSON objects you insert. +- [Query paths](#extract-values) within a stored JSON object - for example, extracting the value of named key or array index directly, which is especially useful with larger JSON objects. +- Insert and/or replace values within an object or array. +- [Expand the contents of a JSON object](#expand-arrays-for-in-queries) or array into multiple rows - for example, for use as part of a `WHERE ... IN` predicate. +- Create [generated columns](/d1/reference/generated-columns/) that are automatically populated with values from JSON objects you insert. One of the biggest benefits to parsing JSON within D1 directly is that it can directly reduce the number of round-trips (queries) to your database. It reduces the cases where you have to read a JSON object into your application (1), parse it, and then write it back (2). @@ -25,18 +25,18 @@ This allows you to more precisely query over data and reduce the result set your JSON data is stored as a `TEXT` column in D1. JSON types follow the same [type conversion rules](/d1/worker-api/#type-conversion) as D1 in general, including: -* A JSON null is treated as a D1 `NULL`. -* A JSON number is treated as an `INTEGER` or `REAL`. -* Booleans are treated as `INTEGER` values: `true` as `1` and `false` as `0`. -* Object and array values as `TEXT`. +- A JSON null is treated as a D1 `NULL`. +- A JSON number is treated as an `INTEGER` or `REAL`. +- Booleans are treated as `INTEGER` values: `true` as `1` and `false` as `0`. +- Object and array values as `TEXT`. ## Supported functions The following table outlines the JSON functions built into D1 and example usage. -* The `json` argument placeholder can be a JSON object, array, string, number or a null value. -* The `value` argument accepts string literals (only) and treats input as a string, even if it is well-formed JSON. The exception to this rule is when nesting `json_*` functions: the outer (wrapping) function will interpret the inner (wrapped) functions return value as JSON. -* The `path` argument accepts path-style traversal syntax - for example, `$` to refer to the top-level object/array, `$.key1.key2` to refer to a nested object, and `$.key[2]` to index into an array. +- The `json` argument placeholder can be a JSON object, array, string, number or a null value. +- The `value` argument accepts string literals (only) and treats input as a string, even if it is well-formed JSON. The exception to this rule is when nesting `json_*` functions: the outer (wrapping) function will interpret the inner (wrapped) functions return value as JSON. +- The `path` argument accepts path-style traversal syntax - for example, `$` to refer to the top-level object/array, `$.key1.key2` to refer to a nested object, and `$.key[2]` to index into an array. | Function | Description | Example | | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | @@ -53,7 +53,7 @@ The following table outlines the JSON functions built into D1 and example usage. | `json_replace(json, path, value)` | Insert a value at the given path. Overwrites an existing value, but does not create a new key if it doesn't exist. | | | `json_set(json, path, value)` | Insert a value at the given path. Overwrites an existing value. | | | `json_type(json)` - `json_type(json, path)` | Return the type of the provided value or value at the specified path. Returns one of `null`, `true`, `false`, `integer`, `real`, `text`, `array`, or `object`. | `json_type('{"temperatures":[73.6, 77.8, 80.2]}', '$.temperatures')` returns `array` | -| `json_valid(json)` | Returns 0 (false) for invalid JSON, and 1 (true) for valid JSON. | `json_valid({invalid:json})`returns`0\` | +| `json_valid(json)` | Returns 0 (false) for invalid JSON, and 1 (true) for valid JSON. | `json_valid({invalid:json})`returns`0\` | | `json_quote(value)` | Converts the provided SQL value into its JSON representation. | `json_quote('[1, 2, 3]')` returns `[1,2,3]` | | `json_group_array(value)` | Returns the provided value(s) as a JSON array. | | | `json_each(value)` - `json_each(value, path)` | Returns each element within the object as an individual row. It will only traverse the top-level object. | | @@ -102,9 +102,9 @@ Refer to [Generated columns](/d1/reference/generated-columns/) to learn more abo There are three ways to extract a value from a JSON object in D1: -* The `json_extract()` function - for example, `json_extract(text_column_containing_json, '$.path.to.value)`. -* The `->` operator, which returns a JSON representation of the value. -* The `->>` operator, which returns an SQL representation of the value. +- The `json_extract()` function - for example, `json_extract(text_column_containing_json, '$.path.to.value)`. +- The `->` operator, which returns a JSON representation of the value. +- The `->>` operator, which returns an SQL representation of the value. The `->` and `->>` operators functions both operate similarly to the same operators in PostgreSQL and MySQL/MariaDB. @@ -112,13 +112,13 @@ Given the following JSON object in a column named `sensor_reading`, you can extr ```json { - "measurement": { - "temp_f": "77.4", - "aqi": [21, 42, 58], - "o3": [18, 500], - "wind_mph": "13", - "location": "US-NY" - } + "measurement": { + "temp_f": "77.4", + "aqi": [21, 42, 58], + "o3": [18, 500], + "wind_mph": "13", + "location": "US-NY" + } } ``` @@ -148,8 +148,12 @@ For example, given the following JSON object stored in a column called `login_hi ```json { - "user_id": "abc12345", - "previous_logins": ["2023-03-31T21:07:14-05:00", "2023-03-28T08:21:02-05:00", "2023-03-28T05:52:11-05:00"] + "user_id": "abc12345", + "previous_logins": [ + "2023-03-31T21:07:14-05:00", + "2023-03-28T08:21:02-05:00", + "2023-03-28T05:52:11-05:00" + ] } ``` @@ -164,7 +168,13 @@ You can also use `json_array_length` as a predicate in a more complex query - fo You can insert a value into an existing JSON object or array using `json_insert()`. For example, if you have a `TEXT` column called `login_history` in a `users` table containing the following object: ```json -{"history": ["2023-05-13T15:13:02+00:00", "2023-05-14T07:11:22+00:00", "2023-05-15T15:03:51+00:00"]} +{ + "history": [ + "2023-05-13T15:13:02+00:00", + "2023-05-14T07:11:22+00:00", + "2023-05-15T15:03:51+00:00" + ] +} ``` To add a new timestamp to the `history` array within our `login_history` column, write a query resembling the following: @@ -197,11 +207,11 @@ This would extract only the `value` column from the table returned by `json_each `json_each` effectively returns a table with multiple columns, with the most relevant being: -* `key` - the key (or index). -* `value` - the literal value of each element parsed by `json_each`. -* `type` - the type of the value: one of `null`, `true`, `false`, `integer`, `real`, `text`, `array`, or `object`. -* `fullkey` - the full path to the element: e.g. `$[1]` for the second element in an array, or `$.path.to.key` for a nested object. -* `path` - the top-level path - `$` as the path for an element with a `fullkey` of `$[0]`. +- `key` - the key (or index). +- `value` - the literal value of each element parsed by `json_each`. +- `type` - the type of the value: one of `null`, `true`, `false`, `integer`, `real`, `text`, `array`, or `object`. +- `fullkey` - the full path to the element: e.g. `$[1]` for the second element in an array, or `$.path.to.key` for a nested object. +- `path` - the top-level path - `$` as the path for an element with a `fullkey` of `$[0]`. In this example, `SELECT * FROM json_each('[183183, 13913, 94944]')` would return a table resembling the below: @@ -215,12 +225,12 @@ key|value|type|id|fullkey|path You can use `json_each` with [D1 Workers Binding API](/d1/worker-api/) in a Worker by creating a statement and using `JSON.stringify` to pass an array as a [bound parameter](/d1/worker-api/d1-database/#guidance): ```ts -const stmt = context.env.DB - .prepare("UPDATE users SET last_audited = ? WHERE id IN (SELECT value FROM json_each(?1))") -const resp = await stmt.bind( - "2023-05-16T11:24:08+00:00", - JSON.stringify([183183, 13913, 94944]) - ).run() +const stmt = context.env.DB.prepare( + "UPDATE users SET last_audited = ? WHERE id IN (SELECT value FROM json_each(?1))", +); +const resp = await stmt + .bind("2023-05-16T11:24:08+00:00", JSON.stringify([183183, 13913, 94944])) + .run(); ``` This would only update rows in your `users` table where the `id` matches one of the three provided. diff --git a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx index 986d25d5413005e..2a203c8cb9975a9 100644 --- a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx +++ b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx @@ -12,7 +12,13 @@ description: >- This tutorial shows how to create an API that allows you to securely run queries against a D1 database. The API can be used to customize access controls and/or limit what tables can be queried. --- -import { Render, PackageManagers, Steps, Details, WranglerConfig } from "~/components"; +import { + Render, + PackageManagers, + Steps, + Details, + WranglerConfig, +} from "~/components"; In this tutorial, you will learn how to create an API that allows you to securely run queries against a D1 database. diff --git a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx index 3ae7982d8bf2cca..64bb7a1593def46 100644 --- a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx +++ b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx @@ -230,7 +230,7 @@ npx prisma migrate diff --from-empty --to-schema-datamodel ./prisma/schema.prism
- + This stores a SQL statement to create a new `User` table in your migration file from before, here is what it looks like: +
```mermaid sequenceDiagram @@ -41,6 +40,6 @@ sequenceDiagram User-->>CloudflarePoP: Subsequent requests use the Session Key ``` -
+
For detailed information on setup and supported options, refer to [Geo Key Manager documentation](/ssl/edge-certificates/geokey-manager/). diff --git a/src/content/docs/ddos-protection/about/components.mdx b/src/content/docs/ddos-protection/about/components.mdx index fdad5713c8a928e..9161b6dd7d87b5a 100644 --- a/src/content/docs/ddos-protection/about/components.mdx +++ b/src/content/docs/ddos-protection/about/components.mdx @@ -6,10 +6,9 @@ products: - ddos-protection sidebar: order: 2 - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; ![Diagram with the main components providing protection against DDoS attacks at Cloudflare](~/assets/images/ddos-protection/ddos-diagram.png) diff --git a/src/content/docs/ddos-protection/about/how-ddos-protection-works.mdx b/src/content/docs/ddos-protection/about/how-ddos-protection-works.mdx index 2be132500131a7d..921203e498c7fda 100644 --- a/src/content/docs/ddos-protection/about/how-ddos-protection-works.mdx +++ b/src/content/docs/ddos-protection/about/how-ddos-protection-works.mdx @@ -9,10 +9,9 @@ sidebar: learning_center: title: What is a DDoS attack? link: https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/ - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; To detect and mitigate DDoS attacks, Cloudflare's autonomous edge and centralized DDoS systems analyze traffic samples out of path, which allows Cloudflare to asynchronously detect DDoS attacks without causing latency or impacting performance. @@ -31,13 +30,13 @@ You can set an override expression for the [HTTP DDoS Attack Protection](/ddos-p Once attack traffic matches a rule, Cloudflare's systems will track that traffic and generate a real-time signature to surgically match against the attack pattern and mitigate the attack without impacting legitimate traffic. The rules are able to generate different signatures based on various properties of the attacks and the signal strength of each attribute. For example, if the attack is distributed — that is, originating from many source IPs — then the source IP field will not serve as a strong indicator, and the rule will not choose the source IP field as part of the attack signature. Once generated, the fingerprint is propagated as a mitigation rule to the most optimal location on the Cloudflare global network for cost-efficient mitigation. These mitigation rules are ephemeral and will expire shortly after the attack has ended, which happens when no additional traffic has been matched to the rule. -| Actions | Description | -| --- | --- | -| Block | Matching requests are denied access to the site. | -| Managed Challenge | Depending on the characteristics of a request, Cloudflare will choose an appropriate type of challenge. | -| Interactive Challenge | The client that made the request must pass an interactive Challenge. | -| Log | Records matching requests in the Cloudflare Logs. | -| Use rule defaults | Uses the default action that is pre-defined for each rule. | +| Actions | Description | +| --------------------- | ------------------------------------------------------------------------------------------------------- | +| Block | Matching requests are denied access to the site. | +| Managed Challenge | Depending on the characteristics of a request, Cloudflare will choose an appropriate type of challenge. | +| Interactive Challenge | The client that made the request must pass an interactive Challenge. | +| Log | Records matching requests in the Cloudflare Logs. | +| Use rule defaults | Uses the default action that is pre-defined for each rule. | ## Thresholds diff --git a/src/content/docs/ddos-protection/about/index.mdx b/src/content/docs/ddos-protection/about/index.mdx index 65805b05908aecd..c294dbc5482978b 100644 --- a/src/content/docs/ddos-protection/about/index.mdx +++ b/src/content/docs/ddos-protection/about/index.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: About Cloudflare DDoS protection - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Cloudflare provides unmetered and unlimited distributed denial-of-service (DDoS) protection at layers 3, 4, and 7 to all customers on all plans and services. @@ -20,4 +19,4 @@ The protection is enabled by Cloudflare's [Autonomous DDoS Protection Edge](/ddo The Autonomous Edge includes multiple dynamic mitigation rules exposed as [managed rulesets](/ddos-protection/managed-rulesets/), which provide comprehensive protection against a variety of DDoS attacks across layers 3/4 and layer 7 of the OSI model. -[Adaptive DDoS Protection](/ddos-protection/managed-rulesets/adaptive-protection/) also learns your unique traffic patterns and adapts to them to provide better protection against sophisticated DDoS attacks on layer 7 and layers 3/4. Your Internet properties can be secured from sophisticated TCP and DNS DDoS attacks using [Advanced DDoS Protection](/ddos-protection/advanced-ddos-systems/overview/) that leverages stateful inspection and traffic profiling. \ No newline at end of file +[Adaptive DDoS Protection](/ddos-protection/managed-rulesets/adaptive-protection/) also learns your unique traffic patterns and adapts to them to provide better protection against sophisticated DDoS attacks on layer 7 and layers 3/4. Your Internet properties can be secured from sophisticated TCP and DNS DDoS attacks using [Advanced DDoS Protection](/ddos-protection/advanced-ddos-systems/overview/) that leverages stateful inspection and traffic profiling. diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/index.mdx index 80a1257af1beb09..011867f5ba98440 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/index.mdx @@ -10,7 +10,6 @@ sidebar: head: - tag: title content: Configure Advanced DNS Protection via API - --- Use the [Cloudflare API](/api/) to configure Advanced DNS Protection via API. @@ -29,11 +28,11 @@ The `{account_id}` argument is the [account ID](/fundamentals/account/find-accou The following table summarizes the available operations. -| Operation | Verb + Endpoint | -| --- | --- | -| List DNS protection rules |

`GET accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Fetches all DNS protection rules in the account. | -| Add a DNS protection rule |

`POST accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Adds a DNS protection rule to the account. | -| Get a DNS protection rule |

`GET accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Fetches the details of an existing DNS protection rule in the account. | -| Update a DNS protection rule |

`PATCH accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Updates an existing DNS protection rule in the account. | -| Delete a DNS protection rule |

`DELETE accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Deletes an existing DNS protection rule from the account. | -| Delete all DNS protection rules |

`DELETE accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Deletes all existing DNS protection rules from the account. | \ No newline at end of file +| Operation | Verb + Endpoint | +| ------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| List DNS protection rules |

`GET accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Fetches all DNS protection rules in the account. | +| Add a DNS protection rule |

`POST accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Adds a DNS protection rule to the account. | +| Get a DNS protection rule |

`GET accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Fetches the details of an existing DNS protection rule in the account. | +| Update a DNS protection rule |

`PATCH accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Updates an existing DNS protection rule in the account. | +| Delete a DNS protection rule |

`DELETE accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules/{rule_id}`

Deletes an existing DNS protection rule from the account. | +| Delete all DNS protection rules |

`DELETE accounts/{account_id}/magic/advanced_dns_protection/configs/dns_protection/rules`

Deletes all existing DNS protection rules from the account. | diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/json-objects.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/json-objects.mdx index 1c556c9c56533bc..803a3e818448f83 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/json-objects.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/dns-protection/json-objects.mdx @@ -11,7 +11,6 @@ sidebar: head: - tag: title content: Advanced TCP Protection API - JSON objects - --- # JSON object @@ -20,15 +19,15 @@ This page contains an example of the DNS protection rule JSON object used in the ```json { - "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "scope": "region", - "name": "WEUR", - "mode": "monitoring", - "profile_sensitivity": "medium", - "rate_sensitivity": "medium", - "burst_sensitivity": "medium", - "created_on": "2023-10-01T13:10:38.762503+01:00", - "modified_on": "2023-10-01T13:10:38.762503+01:00" + "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "scope": "region", + "name": "WEUR", + "mode": "monitoring", + "profile_sensitivity": "medium", + "rate_sensitivity": "medium", + "burst_sensitivity": "medium", + "created_on": "2023-10-01T13:10:38.762503+01:00", + "modified_on": "2023-10-01T13:10:38.762503+01:00" } ``` @@ -40,4 +39,4 @@ The `profile_sensitivity` field value must be one of `low` (default), `medium`, The `rate_sensitivity` and `burst_sensitivity` field values must be one of `low`, `medium`, or `high`. -For more information on the rule settings, refer to [Rule settings](/ddos-protection/advanced-ddos-systems/concepts/#rule-settings). \ No newline at end of file +For more information on the rule settings, refer to [Rule settings](/ddos-protection/advanced-ddos-systems/concepts/#rule-settings). diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/index.mdx index 703796d727a36f1..52ffefc830a024b 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/index.mdx @@ -11,10 +11,9 @@ sidebar: head: - tag: title content: Configure Advanced TCP Protection and Advanced DNS Protection via the API - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages to configure Advanced TCP Protection and Advanced DNS Protection via the API. diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/examples.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/examples.mdx index 75c5ed4d2392138..2783ca32b25243f 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/examples.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/examples.mdx @@ -8,7 +8,6 @@ tags: - REST API sidebar: order: 2 - --- The following sections contain example requests for common API calls. For a list of available API endpoints, refer to [Endpoints](/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/#endpoints). @@ -24,18 +23,18 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma ```json title="Response" { - "result": [ - { - "id": "", - "name": "rate-limiter", - "status": "success", - "created_on": "", - "modified_on": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "name": "rate-limiter", + "status": "success", + "created_on": "", + "modified_on": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -52,16 +51,16 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma ```json title="Response" { - "result": { - "id": "", - "name": "program", - "status": "success", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "name": "program", + "status": "success", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -69,15 +68,15 @@ If the program fails compilation or verification, the API returns a detailed err ```json title="Example error response" { - "result": null, - "success": false, - "errors": [ - { - "code": 1001, - "message": "Program verification failed: invalid memory access at line 42" - } - ], - "messages": [] + "result": null, + "success": false, + "errors": [ + { + "code": 1001, + "message": "Program verification failed: invalid memory access at line 42" + } + ], + "messages": [] } ``` @@ -95,16 +94,16 @@ curl --request PATCH \ ```json title="Response" { - "result": { - "id": "", - "name": "program", - "status": "success", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "name": "program", + "status": "success", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -120,10 +119,10 @@ curl --request DELETE \ ```json title="Response" { - "result": null, - "success": true, - "errors": [], - "messages": [] + "result": null, + "success": true, + "errors": [], + "messages": [] } ``` @@ -138,21 +137,21 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma ```json title="Response" { - "result": [ - { - "id": "", - "program_id": "", - "scope": "global", - "name": "global", - "mode": "enabled", - "expression": "", - "created_on": "", - "modified_on": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "program_id": "", + "scope": "global", + "name": "global", + "mode": "enabled", + "expression": "", + "created_on": "", + "modified_on": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -174,19 +173,19 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma ```json title="Response" { - "result": { - "id": "", - "program_id": "", - "scope": "global", - "name": "global", - "mode": "monitoring", - "expression": "", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "program_id": "", + "scope": "global", + "name": "global", + "mode": "monitoring", + "expression": "", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -211,19 +210,19 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma ```json title="Response" { - "result": { - "id": "", - "program_id": "", - "scope": "region", - "name": "WEUR", - "mode": "enabled", - "expression": "ip.dst in { 192.0.2.0/24 }", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "program_id": "", + "scope": "region", + "name": "WEUR", + "mode": "enabled", + "expression": "ip.dst in { 192.0.2.0/24 }", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -245,19 +244,19 @@ curl --request PATCH \ ```json title="Response" { - "result": { - "id": "", - "program_id": "", - "scope": "global", - "name": "global", - "mode": "enabled", - "expression": "", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "program_id": "", + "scope": "global", + "name": "global", + "mode": "enabled", + "expression": "", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -275,10 +274,10 @@ curl --request DELETE \ ```json title="Response" { - "result": null, - "success": true, - "errors": [], - "messages": [] + "result": null, + "success": true, + "errors": [], + "messages": [] } ``` @@ -299,7 +298,7 @@ curl "https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/programma The output PCAP file contains the same packets as the input file, but with annotations on each packet. The Packet Comment annotation may contain: -- Program return value: `CF_EBPF_PASS` or `CF_EBPF_DROP` +- Program return value: `CF_EBPF_PASS` or `CF_EBPF_DROP` - `Ignored`: if the incoming packet is not UDP - `Analytics tag`: the custom network analytics tag set by the program on this packet, if any - `Challenge packet`: the challenge packet emitted from the program back to the client, if any diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/index.mdx index e9ea67979faf416..5a3cb4ee6ba3756 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/index.mdx @@ -12,7 +12,6 @@ sidebar: head: - tag: title content: Configure Programmable Flow Protection via API - --- Use the [Cloudflare API](/api/) to configure Programmable Flow Protection. @@ -33,30 +32,30 @@ The tables in the following sections summarize the available operations. ### Program operations -| Operation | Method and endpoint / Description | -| --- | --- | -| List programs |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Fetches all Programmable Flow Protection programs in the account. | -| Upload a program |

`POST accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Uploads a new program to the account. | -| Get a program |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Fetches the details of an existing program. | -| Update a program |

`PATCH accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Updates an existing program. | -| Delete a program |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Deletes an existing program from the account. | -| Delete all programs |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Deletes all existing programs from the account. | +| Operation | Method and endpoint / Description | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| List programs |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Fetches all Programmable Flow Protection programs in the account. | +| Upload a program |

`POST accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Uploads a new program to the account. | +| Get a program |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Fetches the details of an existing program. | +| Update a program |

`PATCH accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Updates an existing program. | +| Delete a program |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}`

Deletes an existing program from the account. | +| Delete all programs |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/programs`

Deletes all existing programs from the account. | ### Rule operations -| Operation | Method and endpoint / Description | -| --- | --- | -| List rules |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Fetches all Programmable Flow Protection rules in the account. | -| Create a rule |

`POST accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Creates a new rule in the account. | -| Get a rule |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Fetches the details of an existing rule. | -| Update a rule |

`PATCH accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Updates an existing rule in the account. | -| Delete a rule |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Deletes an existing rule from the account. | -| Delete all rules |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Deletes all existing rules from the account. | +| Operation | Method and endpoint / Description | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| List rules |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Fetches all Programmable Flow Protection rules in the account. | +| Create a rule |

`POST accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Creates a new rule in the account. | +| Get a rule |

`GET accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Fetches the details of an existing rule. | +| Update a rule |

`PATCH accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Updates an existing rule in the account. | +| Delete a rule |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/rules/{rule_id}`

Deletes an existing rule from the account. | +| Delete all rules |

`DELETE accounts/{account_id}/magic/programmable_flow_protection/configs/rules`

Deletes all existing rules from the account. | ### Debug operations -| Operation | Method and endpoint / Description | -| --- | --- | +| Operation | Method and endpoint / Description | +| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Debug with PCAP |

`POST accounts/{account_id}/magic/programmable_flow_protection/configs/programs/{program_id}/pcap`

Runs a program against a PCAP file and returns an annotated PCAP with program verdicts. | ## Pagination diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/json-objects.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/json-objects.mdx index f0fffca40457798..7857e0cab2af7ad 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/json-objects.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/programmable-flow-protection/json-objects.mdx @@ -11,7 +11,6 @@ sidebar: head: - tag: title content: Programmable Flow Protection API - JSON objects - --- This page contains examples of the JSON objects used in the Programmable Flow Protection API. @@ -20,47 +19,47 @@ This page contains examples of the JSON objects used in the Programmable Flow Pr ```json { - "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "name": "rate-limiter", - "status": "success", - "created_on": "2024-01-01T13:06:04.721954+01:00", - "modified_on": "2024-01-01T13:06:04.721954+01:00" + "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "name": "rate-limiter", + "status": "success", + "created_on": "2024-01-01T13:06:04.721954+01:00", + "modified_on": "2024-01-01T13:06:04.721954+01:00" } ``` -| Field | Description | -| --- | --- | -| `id` | Unique identifier for the program. | -| `name` | Name of the program, derived from the uploaded filename. | -| `status` | Compilation and verification status. One of `success` or `failed`. Programs with `failed` status are automatically deleted after 30 days of inactivity. | -| `created_on` | Timestamp when the program was created. | -| `modified_on` | Timestamp when the program was last modified. | +| Field | Description | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Unique identifier for the program. | +| `name` | Name of the program, derived from the uploaded filename. | +| `status` | Compilation and verification status. One of `success` or `failed`. Programs with `failed` status are automatically deleted after 30 days of inactivity. | +| `created_on` | Timestamp when the program was created. | +| `modified_on` | Timestamp when the program was last modified. | ## Rule ```json { - "id": "20b99eb6-8b48-48dd-a5b9-a995a0843b57", - "program_id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "scope": "region", - "name": "WEUR", - "mode": "enabled", - "expression": "ip.dst in { 192.0.2.0/24 }", - "created_on": "2024-01-01T13:10:38.762503+01:00", - "modified_on": "2024-01-01T13:10:38.762503+01:00" + "id": "20b99eb6-8b48-48dd-a5b9-a995a0843b57", + "program_id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "scope": "region", + "name": "WEUR", + "mode": "enabled", + "expression": "ip.dst in { 192.0.2.0/24 }", + "created_on": "2024-01-01T13:10:38.762503+01:00", + "modified_on": "2024-01-01T13:10:38.762503+01:00" } ``` -| Field | Description | -| --- | --- | -| `id` | Unique identifier for the rule. | -| `program_id` | The ID of the program this rule executes. | -| `scope` | The scope of the rule. Must be one of `global`, `region`, or `datacenter`. | -| `name` | For `global` scope, use `global`. For `region` or `datacenter` scope, provide the region code or datacenter code. | -| `mode` | The rule mode. Must be one of `enabled`, `disabled`, or `monitoring`. | -| `expression` | A [Rules language expression](/ruleset-engine/rules-language/expressions/) to filter which packets the rule applies to. Optional. | -| `created_on` | Timestamp when the rule was created. | -| `modified_on` | Timestamp when the rule was last modified. | +| Field | Description | +| ------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| `id` | Unique identifier for the rule. | +| `program_id` | The ID of the program this rule executes. | +| `scope` | The scope of the rule. Must be one of `global`, `region`, or `datacenter`. | +| `name` | For `global` scope, use `global`. For `region` or `datacenter` scope, provide the region code or datacenter code. | +| `mode` | The rule mode. Must be one of `enabled`, `disabled`, or `monitoring`. | +| `expression` | A [Rules language expression](/ruleset-engine/rules-language/expressions/) to filter which packets the rule applies to. Optional. | +| `created_on` | Timestamp when the rule was created. | +| `modified_on` | Timestamp when the rule was last modified. | ### Scope diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/examples.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/examples.mdx index 8e87b35dd014b57..c8ce427c16455cb 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/examples.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/examples.mdx @@ -8,7 +8,6 @@ tags: - REST API sidebar: order: 2 - --- The following sections contain example requests for common API calls. For a list of available API endpoints, refer to [Endpoints](/ddos-protection/advanced-ddos-systems/api/tcp-protection/#endpoints). @@ -24,12 +23,12 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json title="Example response" { - "result": { - "enabled": false - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "enabled": false + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -58,16 +57,16 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": [ - { - "prefix": "203.0.113/24", - "comment": "My prefix", - "excluded": false - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "prefix": "203.0.113/24", + "comment": "My prefix", + "excluded": false + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -95,27 +94,27 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": [ - { - "id": "", - "prefix": "192.0.2.0/24", - "excluded": false, - "comment": "Game ranges", - "created_on": "", - "modified_on": "" - }, - { - "id": "", - "prefix": "192.0.2.2/26", - "excluded": true, - "comment": "Range for a specific game", - "created_on": "", - "modified_on": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "prefix": "192.0.2.0/24", + "excluded": false, + "comment": "Game ranges", + "created_on": "", + "modified_on": "" + }, + { + "id": "", + "prefix": "192.0.2.2/26", + "excluded": true, + "comment": "Range for a specific game", + "created_on": "", + "modified_on": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -130,19 +129,19 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": [ - { - "id": "", - "prefix": "192.0.2.127", - "comment": "Single IP address in allowlist", - "enabled": true, - "created_on": "", - "modified_on": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "prefix": "192.0.2.127", + "comment": "Single IP address in allowlist", + "enabled": true, + "created_on": "", + "modified_on": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -163,17 +162,17 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": { - "id": "", - "prefix": "203.0.113.0/26", - "comment": "Partner range", - "enabled": true, - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "prefix": "203.0.113.0/26", + "comment": "Partner range", + "enabled": true, + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -196,19 +195,19 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": { - "id": "", - "scope": "region", - "name": "WEUR", - "mode": "monitoring", - "rate_sensitivity": "medium", - "burst_sensitivity": "medium", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "scope": "region", + "name": "WEUR", + "mode": "monitoring", + "rate_sensitivity": "medium", + "burst_sensitivity": "medium", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -233,19 +232,19 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": { - "id": "", - "scope": "region", - "name": "WEUR", - "mode": "monitoring", - "rate_sensitivity": "low", - "burst_sensitivity": "low", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "scope": "region", + "name": "WEUR", + "mode": "monitoring", + "rate_sensitivity": "low", + "burst_sensitivity": "low", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -267,16 +266,16 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": { - "id": "", - "expression": "ip.dst in { 192.0.2.0/24 }", - "mode": "monitoring", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "expression": "ip.dst in { 192.0.2.0/24 }", + "mode": "monitoring", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -298,17 +297,17 @@ curl https://api.cloudflare.com/client/v4/accounts/{account_id}/magic/advanced_t ```json output { - "result": { - "id": "", - "expression": "ip.dst in { 203.0.113.0/24 } and tcp.dstport in { 8000..8081 }", - "mode": "disabled", - "created_on": "", - "modified_on": "" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "expression": "ip.dst in { 203.0.113.0/24 } and tcp.dstport in { 8000..8081 }", + "mode": "disabled", + "created_on": "", + "modified_on": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` -Refer to [JSON objects](/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects/) for more information on the fields in the JSON body. \ No newline at end of file +Refer to [JSON objects](/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects/) for more information on the fields in the JSON body. diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/index.mdx index 54d00d15660f858..5af3cfacb95b70f 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/index.mdx @@ -12,7 +12,6 @@ head: content: Configure Advanced TCP Protection via API tags: - TCP - --- You can configure Advanced TCP Protection using the Advanced TCP Protection API. @@ -37,81 +36,81 @@ The tables in the following sections summarize the available operations. ### General operations -| Operation | Method and endpoint / Description | -| --- | --- | -| Get Advanced TCP Protection status |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_protection_status`

Gets the global Advanced TCP Protection status (enabled or disabled). | +| Operation | Method and endpoint / Description | +| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Get Advanced TCP Protection status |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_protection_status`

Gets the global Advanced TCP Protection status (enabled or disabled). | | Update Advanced TCP Protection status |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_protection_status`

Enables or disables Advanced TCP Protection. | ### Prefix operations -| Operation | Method and endpoint / Description | -| --- | --- | -| List prefixes |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes`

Fetches all Advanced TCP Protection prefixes in the account. | +| Operation | Method and endpoint / Description | +| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| List prefixes |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes`

Fetches all Advanced TCP Protection prefixes in the account. | | Add prefixes in bulk |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/bulk`

Adds prefixes in bulk to the account (up to 300 prefixes per request). | -| Get a prefix |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Fetches the details of an existing prefix. | -| Update a prefix |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Updates an existing prefix. | -| Delete a prefix |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Deletes an existing prefix. | -| Delete all prefixes |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes`

Deletes all existing prefixes from the account. | +| Get a prefix |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Fetches the details of an existing prefix. | +| Update a prefix |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Updates an existing prefix. | +| Delete a prefix |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes/{prefix_id}`

Deletes an existing prefix. | +| Delete all prefixes |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/prefixes`

Deletes all existing prefixes from the account. | ### Allowlist operations -| Operation | Method and endpoint / Description | -| --- | --- | -| List allowlisted prefixes |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Fetches all prefixes in the account allowlist. | -| Add an allowlisted prefix |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Adds a prefix to the allowlist. | -| Get an allowlisted prefix |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Fetches the details of an existing prefix in the allowlist. | -| Update an allowlisted prefix |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Updates an existing prefix in the allowlist. | -| Delete an allowlisted prefix |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Deletes an existing prefix from the allowlist. | -| Delete all allowlisted prefixes |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Deletes all existing prefixes from the allowlist. | +| Operation | Method and endpoint / Description | +| ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| List allowlisted prefixes |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Fetches all prefixes in the account allowlist. | +| Add an allowlisted prefix |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Adds a prefix to the allowlist. | +| Get an allowlisted prefix |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Fetches the details of an existing prefix in the allowlist. | +| Update an allowlisted prefix |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Updates an existing prefix in the allowlist. | +| Delete an allowlisted prefix |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist/{allowlist_id}`

Deletes an existing prefix from the allowlist. | +| Delete all allowlisted prefixes |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/allowlist`

Deletes all existing prefixes from the allowlist. | ### SYN Flood Protection operations #### Rules -| Operation | Method and endpoint / Description | -| --- | --- | -| List SYN flood rules |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Fetches all SYN flood rules in the account. | -| Add a SYN flood rule |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Adds a SYN flood rule to the account. | -| Get a SYN flood rule |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Fetches the details of an existing SYN flood rule in the account. | -| Update a SYN flood rule |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Updates an existing SYN flood rule in the account. | -| Delete a SYN flood rule |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Deletes an existing SYN flood rule from the account. | -| Delete all SYN flood rules |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Deletes all existing SYN flood rules from the account. | +| Operation | Method and endpoint / Description | +| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| List SYN flood rules |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Fetches all SYN flood rules in the account. | +| Add a SYN flood rule |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Adds a SYN flood rule to the account. | +| Get a SYN flood rule |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Fetches the details of an existing SYN flood rule in the account. | +| Update a SYN flood rule |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Updates an existing SYN flood rule in the account. | +| Delete a SYN flood rule |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules/{rule_id}`

Deletes an existing SYN flood rule from the account. | +| Delete all SYN flood rules |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/rules`

Deletes all existing SYN flood rules from the account. | #### Filters -| Operation | Method and endpoint / Description | -| --- | --- | -| List SYN flood filters |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Fetches all SYN flood filters in the account. | -| Add a SYN flood filter |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Adds a SYN flood filter to the account. | -| Get a SYN flood filter |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Fetches the details of an existing SYN flood filter in the account. | -| Update a SYN flood filter |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Updates an existing SYN flood filter in the account. | -| Delete a SYN flood filter |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Deletes an existing SYN flood filter from the account. | -| Delete all SYN flood filters |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Deletes all existing SYN flood filters from the account. | +| Operation | Method and endpoint / Description | +| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| List SYN flood filters |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Fetches all SYN flood filters in the account. | +| Add a SYN flood filter |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Adds a SYN flood filter to the account. | +| Get a SYN flood filter |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Fetches the details of an existing SYN flood filter in the account. | +| Update a SYN flood filter |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Updates an existing SYN flood filter in the account. | +| Delete a SYN flood filter |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters/{filter_id}`

Deletes an existing SYN flood filter from the account. | +| Delete all SYN flood filters |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/syn_protection/filters`

Deletes all existing SYN flood filters from the account. | ### Out-of-state TCP Protection operations #### Rules -| Operation | Method and endpoint / Description | -| --- | --- | -| List out-of-state TCP rules |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Fetches all out-of-state TCP rules in the account. | -| Add an out-of-state TCP rule |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Adds an out-of-state TCP rule to the account. | -| Get an out-of-state TCP rule |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Fetches the details of an existing out-of-state TCP rule in the account. | -| Update an out-of-state TCP rule |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Updates an existing out-of-state TCP rule in the account. | -| Delete an out-of-state TCP rule |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Deletes an existing out-of-state TCP rule from the account. | -| Delete all out-of-state TCP rules |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Deletes all existing out-of-state TCP rules from the account. | +| Operation | Method and endpoint / Description | +| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| List out-of-state TCP rules |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Fetches all out-of-state TCP rules in the account. | +| Add an out-of-state TCP rule |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Adds an out-of-state TCP rule to the account. | +| Get an out-of-state TCP rule |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Fetches the details of an existing out-of-state TCP rule in the account. | +| Update an out-of-state TCP rule |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Updates an existing out-of-state TCP rule in the account. | +| Delete an out-of-state TCP rule |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules/{rule_id}`

Deletes an existing out-of-state TCP rule from the account. | +| Delete all out-of-state TCP rules |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/rules`

Deletes all existing out-of-state TCP rules from the account. | #### Filters -| Operation | Method and endpoint / Description | -| --- | --- | -| List out-of-state TCP filters |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Fetches all out-of-state TCP filters in the account. | -| Add an out-of-state TCP filter |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Adds an out-of-state TCP filter to the account. | -| Get an out-of-state TCP filter |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Fetches the details of an existing out-of-state TCP filter in the account. | -| Update an out-of-state TCP filter |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Updates an existing out-of-state TCP filter in the account. | -| Delete an out-of-state TCP filter |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Deletes an existing out-of-state TCP filter from the account. | -| Delete all out-of-state TCP filters |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Deletes all existing out-of-state TCP filters from the account. | +| Operation | Method and endpoint / Description | +| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| List out-of-state TCP filters |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Fetches all out-of-state TCP filters in the account. | +| Add an out-of-state TCP filter |

`POST accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Adds an out-of-state TCP filter to the account. | +| Get an out-of-state TCP filter |

`GET accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Fetches the details of an existing out-of-state TCP filter in the account. | +| Update an out-of-state TCP filter |

`PATCH accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Updates an existing out-of-state TCP filter in the account. | +| Delete an out-of-state TCP filter |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters/{filter_id}`

Deletes an existing out-of-state TCP filter from the account. | +| Delete all out-of-state TCP filters |

`DELETE accounts/{account_id}/magic/advanced_tcp_protection/configs/tcp_flow_protection/filters`

Deletes all existing out-of-state TCP filters from the account. | ## Pagination -The API operations that return a list of items use pagination. For more information on the available pagination query parameters, refer to [Pagination](/fundamentals/api/how-to/make-api-calls/#pagination). \ No newline at end of file +The API operations that return a list of items use pagination. For more information on the available pagination query parameters, refer to [Pagination](/fundamentals/api/how-to/make-api-calls/#pagination). diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects.mdx index b2186e3c55edc9b..1368cbecbe0cfe8 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/api/tcp-protection/json-objects.mdx @@ -11,7 +11,6 @@ sidebar: head: - tag: title content: Advanced TCP Protection API - JSON objects - --- This page contains an example of the TCP protection rule JSON object used in the API. @@ -20,12 +19,12 @@ This page contains an example of the TCP protection rule JSON object used in the ```json { - "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "prefix": "192.0.2.0/24", - "comment": "Game ranges", - "excluded": false, - "created_on": "2022-01-01T13:06:04.721954+01:00", - "modified_on": "2022-01-01T13:06:04.721954+01:00" + "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "prefix": "192.0.2.0/24", + "comment": "Game ranges", + "excluded": false, + "created_on": "2022-01-01T13:06:04.721954+01:00", + "modified_on": "2022-01-01T13:06:04.721954+01:00" } ``` @@ -33,12 +32,12 @@ This page contains an example of the TCP protection rule JSON object used in the ```json { - "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "prefix": "192.0.2.0/24", - "comment": "Game ranges", - "enabled": true, - "created_on": "2021-10-01T13:06:04.721954+01:00", - "modified_on": "2021-10-01T13:06:04.721954+01:00" + "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "prefix": "192.0.2.0/24", + "comment": "Game ranges", + "enabled": true, + "created_on": "2021-10-01T13:06:04.721954+01:00", + "modified_on": "2021-10-01T13:06:04.721954+01:00" } ``` @@ -48,13 +47,13 @@ The `prefix` field can contain an IP address or a CIDR range. ```json { - "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", - "scope": "region", - "name": "WEUR", - "rate_sensitivity": "medium", - "burst_sensitivity": "medium", - "created_on": "2021-10-01T13:10:38.762503+01:00", - "modified_on": "2021-10-01T13:10:38.762503+01:00" + "id": "31c70c65-9f81-4669-94ed-1e1e041e7b06", + "scope": "region", + "name": "WEUR", + "rate_sensitivity": "medium", + "burst_sensitivity": "medium", + "created_on": "2021-10-01T13:10:38.762503+01:00", + "modified_on": "2021-10-01T13:10:38.762503+01:00" } ``` @@ -66,11 +65,11 @@ The `rate_sensitivity` and `burst_sensitivity` field values must be one of `low` ```json { - "id": "20b99eb6-8b48-48dd-a5b9-a995a0843b57", - "expression": "ip.dst in { 192.0.2.0/24 203.0.113.0/24 } and tcp.dstport in { 80 443 10000..65535 }", - "mode": "enabled", - "created_on": "2022-11-01T13:10:38.762503+01:00", - "modified_on": "2022-11-01T13:10:38.762503+01:00" + "id": "20b99eb6-8b48-48dd-a5b9-a995a0843b57", + "expression": "ip.dst in { 192.0.2.0/24 203.0.113.0/24 } and tcp.dstport in { 80 443 10000..65535 }", + "mode": "enabled", + "created_on": "2022-11-01T13:10:38.762503+01:00", + "modified_on": "2022-11-01T13:10:38.762503+01:00" } ``` @@ -86,4 +85,4 @@ The `expression` field is a [Rules language expression](/ruleset-engine/rules-la Expressions of SYN flood protection and out-of-state TCP protection filters do not currently support functions. ::: -The `mode` value must be one of `enabled`, `disabled`, or `monitoring`. \ No newline at end of file +The `mode` value must be one of `enabled`, `disabled`, or `monitoring`. diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/add-prefix.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/add-prefix.mdx index 7906194f1a69e0b..e542bce53c6b4fa 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/add-prefix.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/add-prefix.mdx @@ -9,9 +9,9 @@ sidebar: head: - tag: title content: Add a prefix to Advanced DDoS Protection - --- -import { Steps, DashButton } from "~/components" + +import { Steps, DashButton } from "~/components"; To add a [prefix](/ddos-protection/advanced-ddos-systems/concepts/#prefixes) to Advanced DDoS Protection: @@ -28,4 +28,4 @@ To add a [prefix](/ddos-protection/advanced-ddos-systems/concepts/#prefixes) to :::note[Note] The **Add existing prefix** list will not display leased prefixes, but you can add them manually in the Cloudflare dashboard or [using the API](/ddos-protection/advanced-ddos-systems/api/). You cannot add [delegated prefixes](/byoip/concepts/prefix-delegations/) to Advanced TCP Protection. -::: \ No newline at end of file +::: diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/exclude-prefix.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/exclude-prefix.mdx index df2d627092922fe..405eeb35a0dab05 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/exclude-prefix.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/exclude-prefix.mdx @@ -6,10 +6,9 @@ products: - ddos-protection sidebar: order: 5 - --- -import { Steps, DashButton } from "~/components" +import { Steps, DashButton } from "~/components"; To exclude a prefix or a prefix subset from Advanced DDoS Protection: @@ -26,4 +25,4 @@ To exclude a prefix or a prefix subset from Advanced DDoS Protection: :::note Prefixes or subsets added as _Excluded_ will not be protected by Advanced TCP Protection. -::: \ No newline at end of file +::: diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/index.mdx index 19ab785b897da72..87c03f48746ed33 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/how-to/index.mdx @@ -11,9 +11,8 @@ head: - tag: title content: How-to guides description: How-to guides for configuring Advanced TCP Protection. - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/index.mdx index 7ee74065ee74642..fe36b285e12bed7 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/index.mdx @@ -8,11 +8,9 @@ sidebar: group: hideIndex: true order: 6 - - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on Cloudflare's Advanced DDoS systems: diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/overview/index.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/overview/index.mdx index 495f1aa4c759f15..bedd9eaac204c3e 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/overview/index.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/overview/index.mdx @@ -39,20 +39,20 @@ Once thresholds are configured, the Advanced DDoS Protection systems have been i Automatic thresholds for Cloudflare's Advanced DDoS Protection system optimizes the detection and mitigation of DDoS attacks by automatically calculating appropriate traffic thresholds for each system for each customer account. This system applies to Advanced TCP Protection (specifically SYN Flood Protection and Out-of-State TCP Flood Protection) and Advanced DNS Protection. -Make sure that you have properly onboarded to the Advanced DDoS Protection system to benefit from automatic thresholds. +Make sure that you have properly onboarded to the Advanced DDoS Protection system to benefit from automatic thresholds. #### Process -The automatic threshold system calculates thresholds every 10 minutes for both new and existing Magic Transit accounts, provided they meet the requirements outlined in the process below. +The automatic threshold system calculates thresholds every 10 minutes for both new and existing Magic Transit accounts, provided they meet the requirements outlined in the process below. - The `flowtrackd` account was created within the past 7 to 10 days. - The account has at least one configured global threshold (rate and burst). This can be a threshold that was automatically provisioned by the system or manually provisioned by Cloudflare. These checks are performed independently for SYN Flood Protection, Out-of-State TCP Flood Protection, and Advanced DNS Protection. The criteria does not require the presence of any rules to be configured. Accounts initially provisioned by the automatic system will have default thresholds. Otherwise, thresholds may be unconfigured if they are not set by Cloudflare. -After seven days, the system calculates a rate and burst threshold for each of the protection components. However, they are not applied. Cloudflare must review the draft thresholds produced by the automatic calculation system before creating real thresholds for your traffic. +After seven days, the system calculates a rate and burst threshold for each of the protection components. However, they are not applied. Cloudflare must review the draft thresholds produced by the automatic calculation system before creating real thresholds for your traffic. -Thresholds are applied globally per account. There is no minimum packets-per-second (pps) requirement for threshold calculation, but for those under 100 pps, the system will default to a reasonable non-zero rate and burst. +Thresholds are applied globally per account. There is no minimum packets-per-second (pps) requirement for threshold calculation, but for those under 100 pps, the system will default to a reasonable non-zero rate and burst. Thresholds are derived using the 95th percentile (P95) of observed traffic over the preceding seven days: @@ -60,9 +60,9 @@ Thresholds are derived using the 95th percentile (P95) of observed traffic over - Out-of-State TCP Flood Protection: Based on all other TCP flag traffic. - Advanced DNS Protection: Based on DNS over UDP traffic. -While the calculation typically occurs automatically after seven days, Cloudflare can force an earlier calculation if you want to enable the system in protective mode in advance. +While the calculation typically occurs automatically after seven days, Cloudflare can force an earlier calculation if you want to enable the system in protective mode in advance. -The automatic threshold calculation system does not differentiate between legitimate and attack traffic. If you are onboarded or experience attacks during the seven day observation period, the calculated thresholds may be inaccurate, depending on the attack's size, duration, and frequency relative to legitimate traffic. In such cases, Cloudflare will likely need to trigger a recalculation. Future improvements will allow you to run a recalculation without the assistance of your Cloudflare account team. +The automatic threshold calculation system does not differentiate between legitimate and attack traffic. If you are onboarded or experience attacks during the seven day observation period, the calculated thresholds may be inaccurate, depending on the attack's size, duration, and frequency relative to legitimate traffic. In such cases, Cloudflare will likely need to trigger a recalculation. Future improvements will allow you to run a recalculation without the assistance of your Cloudflare account team. #### Implementation @@ -70,7 +70,7 @@ You should enable the automatically provisioned rules. Initially, these rules wi #### Recalculation -Automatic thresholds are calculated only once. Cloudflare can manually trigger a recalculation. Adding, approving, removing, delegating, advertising, or withdrawing prefixes after initial onboarding does not automatically re-trigger the calculation. It is recommended to move the relevant systems to Monitor mode before making changes that impact traffic levels and requesting a recalculation from Cloudflare. Future improvements will take these events into consideration. +Automatic thresholds are calculated only once. Cloudflare can manually trigger a recalculation. Adding, approving, removing, delegating, advertising, or withdrawing prefixes after initial onboarding does not automatically re-trigger the calculation. It is recommended to move the relevant systems to Monitor mode before making changes that impact traffic levels and requesting a recalculation from Cloudflare. Future improvements will take these events into consideration. #### Overrides @@ -82,7 +82,7 @@ If you are actively under attack and diverting traffic to Cloudflare, the automa #### Limitations -Customers currently do not have visibility into the calculated thresholds or an indication of whether thresholds have been configured. Future improvements aim to indicate when thresholds have been configured and when they were last updated. +Customers currently do not have visibility into the calculated thresholds or an indication of whether thresholds have been configured. Future improvements aim to indicate when thresholds have been configured and when they were last updated. The auto-threshold calculation component currently runs only in PDX. Therefore, this feature is not compatible if you have enabled Data Localization Services (DLS) and are located outside of the US, such as EU CMB. Future improvements will address this limitation. diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection.mdx index 5c86d3ba72f115a..8e7eeb417b2d7c0 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection.mdx @@ -60,7 +60,7 @@ The Programmable Flow Protection system supports the [Data Localization suite](/ :::caution[Beta functionality limitations] For more information on beta services, refer to section 2.6 in the [Enterprise Terms of Service](https://www.cloudflare.com/enterpriseterms/). - ::: +::: ### Write a basic program @@ -210,6 +210,7 @@ The steps below write a sample program that drops all User Datagram Protocol (UD For reference, the example below is the basic program in its entirety: + ```c #define CF_EBPF_HELPER_V0 @@ -269,7 +270,6 @@ cf_ebpf_main(void *state) } ``` - ### Write a complex program: challenge-based response The example program below implements a UDP-based challenge-response mechanism using helper functions to maintain state between packets from the same source IP. This is useful for mitigating DDoS attacks by requiring clients to prove they can receive and respond to challenges before allowing their traffic through. @@ -644,12 +644,12 @@ For reference, the example below is the rate limiting program in its entirety: #define RATE_LIMIT 100 // Maximum packets allowed per window #define WINDOW_SECONDS 60 // Time window in seconds -// The source IP table holds a mapping from source IP -> custom u64. We will make the custom u64 value in the +// The source IP table holds a mapping from source IP -> custom u64. We will make the custom u64 value in the // table hold a timestamp and a counter to accomplish a ratelimit. -// -// NOTE: the source IP table is effectively a LRU cache. If it is full, old values will be evicted. +// +// NOTE: the source IP table is effectively a LRU cache. If it is full, old values will be evicted. // Values are also garbage collected from the table every 1hr. -// +// // The macros below pack the timestamp (upper 32 bits) and counter (lower 32 bits) into 64-bit data // into a value that we can store into the source IP table. #define PACK_STATE(ts, count) (((uint64_t)(ts) << 32) | ((uint64_t)(count) & 0xFFFFFFFF)) @@ -727,14 +727,15 @@ If an incoming packet's source IP is blocklisted in the source IP state table, t The source IP state table stores state keyed by source IP address. Each entry contains: -| Field | Type | Description | -| --- | --- | --- | -| Status | Enum | The status of the source IP: `None` (0), `Challenged` (1), `Verified` (2), or `Blocklisted` (3). | -| User data | `u64` | A user-defined value you can set for any purpose. | +| Field | Type | Description | +| --------- | ----- | ------------------------------------------------------------------------------------------------ | +| Status | Enum | The status of the source IP: `None` (0), `Challenged` (1), `Verified` (2), or `Blocklisted` (3). | +| User data | `u64` | A user-defined value you can set for any purpose. | The default maximum capacity is 1,000 entries. Use the following helper functions to interact with this table: + - `get_src_ip_status` — Retrieve the status of the current packet's source IP. - `set_src_ip_status` — Set the status of the current packet's source IP. - `get_src_ip_data` — Retrieve the user data for the current packet's source IP. @@ -747,6 +748,7 @@ The flow state table stores state keyed by the 4-tuple: source IP, source port, The default maximum capacity is 10,000 entries. Use the following helper functions to interact with this table: + - `get_flow_data` — Retrieve the user data for the current flow. - `set_flow_data` — Store user data for the current flow. @@ -768,32 +770,32 @@ Helper functions may be removed or changed. New helper functions may be introduc The table below provides a list of currently supported helper functions: -| Function name | Function signature | Description | -| ------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `rand` | `uint64_t rand(void)` | Generates a random unsigned integer. | -| `timestamp` | `uint64_t timestamp(void)` | Returns the current timestamp. | -| `hash_md5` | `int hash_md5(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes MD5 hash of the source buffer and stores result in destination buffer. | -| `hash_sha256` | `int hash_sha256(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes SHA-256 hash of the source buffer and stores result in destination buffer. | -| `hash_sha512` | `int hash_sha512(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes SHA-512 hash of the source buffer and stores result in destination buffer. | -| `hash_crc32` | `int hash_crc32(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes CRC32 hash of the source buffer and stores result in destination buffer. | -| `hmac_sha256` | `int hmac_sha256(uint8_t *key, size_t key_len, uint8_t *msg, size_t msg_len, uint8_t *dst)` | Computes HMAC-SHA256 of the message using the provided key and stores result in destination buffer. | -| `hmac_sha512` | `int hmac_sha512(uint8_t *key, size_t key_len, uint8_t *msg, size_t msg_len, uint8_t *dst)` | Computes HMAC-SHA512 of the message using the provided key and stores result in destination buffer. | -| `set_challenge` | `int set_challenge(uint8_t *src, size_t src_len)` | Sets challenge data for the current packet. If src_len is 0, challenge buffer is reset. | -| `get_src_ip_status` | `uint64_t get_src_ip_status(void)` | Retrieves the status value associated with the source IP address from the state table. | -| `set_src_ip_status` | `int set_src_ip_status(uint64_t status)` | Sets the status value associated with the source IP address in the state table. | -| `get_src_ip_data` | `int get_src_ip_data(uint8_t *dst, size_t dst_len)` | Retrieves custom data associated with the source IP address from the state table. | -| `set_src_ip_data` | `int set_src_ip_data(uint8_t *src, size_t src_len)` | Stores custom data associated with the source IP address in the state table. | -| `get_flow_data` | `int get_flow_data(uint8_t *dst, size_t dst_len)` | Retrieves custom data associated with the current flow from the state table. | -| `set_flow_data` | `int set_flow_data(uint8_t *src, size_t src_len)` | Stores custom data associated with the current flow in the state table. | -| `entropy` | `double entropy(uint8_t *src, size_t src_len)` | Calculates the entropy of the source buffer. | -| `set_network_analytics_tag` | `int set_network_analytics_tag(Tag value)` | Sets a custom tag for network analytics reporting. Defaults to `0` if not set. | -| `ntohs` | `uint16_t ntohs(uint16_t netshort)` | Converts a 16-bit integer from network byte order to host byte order. | -| `htons` | `uint16_t htons(uint16_t hostshort)` | Converts a 16-bit integer from host byte order to network byte order. | -| `ntohl` | `uint32_t ntohl(uint32_t netlong)` | Converts a 32-bit integer from network byte order to host byte order. | -| `htonl` | `uint32_t htonl(uint32_t hostlong)` | Converts a 32-bit integer from host byte order to network byte order. | -| `ntohll` | `uint64_t ntohll(uint64_t netlonglong)` | Converts a 64-bit integer from network byte order to host byte order. | -| `htonll` | `uint64_t htonll(uint64_t hostlonglong)` | Converts a 64-bit integer from host byte order to network byte order. | -| `parse_packet_data` | `int parse_packet_data(cf_ebpf_generic_ctx, cf_ebpf_packet_data, cf_ebpf_parsed_headers)` | Use input `cf_ebpf_generic_ctx` and `cf_ebpf_packet_data` to generate valid `cf_ebpf_parsed_headers`.
Upon success, `cf_ebpf_parsed_headers` will contain valid IP and UDP headers.
Returns `0` on success or `1` on failure. | +| Function name | Function signature | Description | +| --------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `rand` | `uint64_t rand(void)` | Generates a random unsigned integer. | +| `timestamp` | `uint64_t timestamp(void)` | Returns the current timestamp. | +| `hash_md5` | `int hash_md5(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes MD5 hash of the source buffer and stores result in destination buffer. | +| `hash_sha256` | `int hash_sha256(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes SHA-256 hash of the source buffer and stores result in destination buffer. | +| `hash_sha512` | `int hash_sha512(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes SHA-512 hash of the source buffer and stores result in destination buffer. | +| `hash_crc32` | `int hash_crc32(uint8_t *src, size_t src_len, uint8_t *dst)` | Computes CRC32 hash of the source buffer and stores result in destination buffer. | +| `hmac_sha256` | `int hmac_sha256(uint8_t *key, size_t key_len, uint8_t *msg, size_t msg_len, uint8_t *dst)` | Computes HMAC-SHA256 of the message using the provided key and stores result in destination buffer. | +| `hmac_sha512` | `int hmac_sha512(uint8_t *key, size_t key_len, uint8_t *msg, size_t msg_len, uint8_t *dst)` | Computes HMAC-SHA512 of the message using the provided key and stores result in destination buffer. | +| `set_challenge` | `int set_challenge(uint8_t *src, size_t src_len)` | Sets challenge data for the current packet. If src_len is 0, challenge buffer is reset. | +| `get_src_ip_status` | `uint64_t get_src_ip_status(void)` | Retrieves the status value associated with the source IP address from the state table. | +| `set_src_ip_status` | `int set_src_ip_status(uint64_t status)` | Sets the status value associated with the source IP address in the state table. | +| `get_src_ip_data` | `int get_src_ip_data(uint8_t *dst, size_t dst_len)` | Retrieves custom data associated with the source IP address from the state table. | +| `set_src_ip_data` | `int set_src_ip_data(uint8_t *src, size_t src_len)` | Stores custom data associated with the source IP address in the state table. | +| `get_flow_data` | `int get_flow_data(uint8_t *dst, size_t dst_len)` | Retrieves custom data associated with the current flow from the state table. | +| `set_flow_data` | `int set_flow_data(uint8_t *src, size_t src_len)` | Stores custom data associated with the current flow in the state table. | +| `entropy` | `double entropy(uint8_t *src, size_t src_len)` | Calculates the entropy of the source buffer. | +| `set_network_analytics_tag` | `int set_network_analytics_tag(Tag value)` | Sets a custom tag for network analytics reporting. Defaults to `0` if not set. | +| `ntohs` | `uint16_t ntohs(uint16_t netshort)` | Converts a 16-bit integer from network byte order to host byte order. | +| `htons` | `uint16_t htons(uint16_t hostshort)` | Converts a 16-bit integer from host byte order to network byte order. | +| `ntohl` | `uint32_t ntohl(uint32_t netlong)` | Converts a 32-bit integer from network byte order to host byte order. | +| `htonl` | `uint32_t htonl(uint32_t hostlong)` | Converts a 32-bit integer from host byte order to network byte order. | +| `ntohll` | `uint64_t ntohll(uint64_t netlonglong)` | Converts a 64-bit integer from network byte order to host byte order. | +| `htonll` | `uint64_t htonll(uint64_t hostlonglong)` | Converts a 64-bit integer from host byte order to network byte order. | +| `parse_packet_data` | `int parse_packet_data(cf_ebpf_generic_ctx, cf_ebpf_packet_data, cf_ebpf_parsed_headers)` | Use input `cf_ebpf_generic_ctx` and `cf_ebpf_packet_data` to generate valid `cf_ebpf_parsed_headers`.
Upon success, `cf_ebpf_parsed_headers` will contain valid IP and UDP headers.
Returns `0` on success or `1` on failure. | --- @@ -805,7 +807,7 @@ With the exception of `rand`, `timestamp`, `ntohs`, `htons`, `ntohl`, `htonl`, ` To upload a program, navigate to Networking > L3/4 DDoS protection > Advanced Protection in the Cloudflare dashboard. Then select the tab titled Programmable Flow Protection. -Under **Programs**, click the button "Upload new program." This will prompt you to select a file to upload with your `C` source code. +Under **Programs**, click the button "Upload new program." This will prompt you to select a file to upload with your `C` source code. The Cloudflare API will receive the source code in the `C` file, compile it into BPF bytecode, and run the verifier against it. @@ -813,12 +815,11 @@ If compilation or verification fails, the API will return a detailed error messa If compilation and verification succeeds, Cloudflare will store the source code and object file to the account and return the program ID. - ### Update a program During the development process, you may find it useful to update the same program (identified by the same program ID) instead of repeatedly creating new programs as new resources. -To update the program, select the three dots next to your program. Then, select **Overwrite**. This will prompt you to choose a file to upload as your `C` source code. +To update the program, select the three dots next to your program. Then, select **Overwrite**. This will prompt you to choose a file to upload as your `C` source code. :::note It is possible to update and overwrite a program that is currently in use by one or more rules. When doing so, you will be warned that the program is currently active and will be overwritten. However, if an active program is being updated with a program that either does not compile or can not be verified, the update will fail and the old program will continue to be in use. @@ -832,7 +833,7 @@ A link icon next to the program name indicates that the program is currently in ### Delete a program -To delete a program, select the three dots next to the program that you wish to delete. Then, select **Delete**. +To delete a program, select the three dots next to the program that you wish to delete. Then, select **Delete**. Note that you will not be able to delete a program that is referenced in an active Rule. @@ -887,10 +888,11 @@ curl 'https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/magic/programmab The Packet Comment annotation may contain: -- Program return value: `CF_EBPF_PASS` or `CF_EBPF_DROP` +- Program return value: `CF_EBPF_PASS` or `CF_EBPF_DROP` - `Ignored`: if the incoming packet is not UDP - `Analytics tag`: the custom network analytics tag set by the program on this packet, if any - `Challenge packet`: the challenge packet emitted from the program back to the client, if any + --- ## Safe program and rule deployment best practices @@ -1011,7 +1013,7 @@ struct cf_ebpf_parsed_headers { uint8_t *data_end; }; -/* +/* * IPv4 header, used as field of cf_ebpf_parsed_headers */ * source: https://github.com/torvalds/linux/blob/a7423e6ea2f8f6f453de79213c26f7a36c86d9a2/include/uapi/linux/ip.h#L87 */ @@ -1034,10 +1036,10 @@ struct iphdr { uint32_t daddr; }; -/* +/* * IPv6 header, used as field of cf_ebpf_parsed_headers * source: https://github.com/torvalds/linux/blob/a7423e6ea2f8f6f453de79213c26f7a36c86d9a2/include/uapi/linux/ipv6.h#L118 -*/ +*/ struct ipv6hdr { #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ uint8_t version:4, @@ -1054,7 +1056,7 @@ struct ipv6hdr { uint8_t daddr[16]; }; -/* +/* * UDP header, used as field of cf_ebpf_parsed_headers * source: https://github.com/torvalds/linux/blob/a7423e6ea2f8f6f453de79213c26f7a36c86d9a2/include/uapi/linux/udp.h#L23 */ diff --git a/src/content/docs/ddos-protection/advanced-ddos-systems/troubleshooting.mdx b/src/content/docs/ddos-protection/advanced-ddos-systems/troubleshooting.mdx index 36422e1fcf667c9..05220d120fb6f68 100644 --- a/src/content/docs/ddos-protection/advanced-ddos-systems/troubleshooting.mdx +++ b/src/content/docs/ddos-protection/advanced-ddos-systems/troubleshooting.mdx @@ -19,6 +19,7 @@ Always transition from Monitoring mode to Mitigation (Enabled) mode. Do not swit When you switch directly from Disabled to Mitigation (Enabled), Advanced TCP Protection begins a learning period to observe existing connection state. Long-lived connections that pre-date this learning period may be dropped because they have no state in the tracker. **Recommended procedure:** + 1. Set to **Monitoring** mode for at least 4 hours (longer if your network has long-lived connections). 2. Review the Monitoring mode logs in [Network Analytics](/analytics/network-analytics/) to confirm legitimate traffic patterns. 3. Switch to **Mitigation (Enabled)** mode. @@ -27,12 +28,12 @@ When you switch directly from Disabled to Mitigation (Enabled), Advanced TCP Pro Check the **Mitigation reason** field in the **Advanced TCP Protection** tab of [Network Analytics](/analytics/network-analytics/) and use the reason to identify the cause: -| Mitigation reason | Likely cause | Action | -|---|---|---| -| **Not found** | Learning period was incomplete, or long-lived connections pre-date ATP activation | Set to Monitoring mode for 4+ hours, then switch to Mitigation (Enabled) | -| **Unexpected** | ECMP rehashing — packets from the same flow arriving at different Cloudflare data centers | Set to Monitoring mode; increase burst sensitivity threshold for affected colos; escalate if persistent | -| **Out of sequence** | Packet reordering or packet loss in the network path | Increase burst sensitivity threshold for the affected colo | -| Drops during traffic spikes only | Burst sensitivity threshold too low | Increase burst sensitivity (keep rate sensitivity the same) | +| Mitigation reason | Likely cause | Action | +| -------------------------------- | ----------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | +| **Not found** | Learning period was incomplete, or long-lived connections pre-date ATP activation | Set to Monitoring mode for 4+ hours, then switch to Mitigation (Enabled) | +| **Unexpected** | ECMP rehashing — packets from the same flow arriving at different Cloudflare data centers | Set to Monitoring mode; increase burst sensitivity threshold for affected colos; escalate if persistent | +| **Out of sequence** | Packet reordering or packet loss in the network path | Increase burst sensitivity threshold for the affected colo | +| Drops during traffic spikes only | Burst sensitivity threshold too low | Increase burst sensitivity (keep rate sensitivity the same) | **Threshold tuning:** Adjust burst sensitivity before rate sensitivity. Burst sensitivity handles momentary spikes; rate sensitivity controls sustained packet rates. diff --git a/src/content/docs/ddos-protection/best-practices/index.mdx b/src/content/docs/ddos-protection/best-practices/index.mdx index c90d2aafc0fd31d..d5e1f5b2afacde1 100644 --- a/src/content/docs/ddos-protection/best-practices/index.mdx +++ b/src/content/docs/ddos-protection/best-practices/index.mdx @@ -9,10 +9,9 @@ sidebar: hideIndex: true head: [] description: Learn about best practices for configuring Cloudflare's DDoS protection. - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information on DDoS protection best practices: diff --git a/src/content/docs/ddos-protection/best-practices/proactive-defense.mdx b/src/content/docs/ddos-protection/best-practices/proactive-defense.mdx index 4be4546f04f6fa5..07721304f2cfb3c 100644 --- a/src/content/docs/ddos-protection/best-practices/proactive-defense.mdx +++ b/src/content/docs/ddos-protection/best-practices/proactive-defense.mdx @@ -11,7 +11,7 @@ tags: - Caching --- -import { GlossaryTooltip, Steps } from "~/components" +import { GlossaryTooltip, Steps } from "~/components"; Cloudflare's network automatically mitigates large DDoS attacks, but these attacks can still affect your application. @@ -35,4 +35,4 @@ In addition to the steps for all customers, Cloudflare Enterprise customers subs ## Magic Transit customers -In addition to the steps for all customers, Cloudflare Magic Transit customers should ensure that the [Advanced TCP Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-tcp-protection/), [Advanced DNS Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-dns-protection/), and [Programmable Flow Protection](/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection/) are enabled and that their configurations are optimized. \ No newline at end of file +In addition to the steps for all customers, Cloudflare Magic Transit customers should ensure that the [Advanced TCP Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-tcp-protection/), [Advanced DNS Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-dns-protection/), and [Programmable Flow Protection](/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection/) are enabled and that their configurations are optimized. diff --git a/src/content/docs/ddos-protection/best-practices/third-party.mdx b/src/content/docs/ddos-protection/best-practices/third-party.mdx index 5e4e9065879bfc6..f7d646f767015f2 100644 --- a/src/content/docs/ddos-protection/best-practices/third-party.mdx +++ b/src/content/docs/ddos-protection/best-practices/third-party.mdx @@ -25,7 +25,7 @@ Therefore, it is recommended that you **use the [Cloudflare CDN](/cache/)**, whi - You perform DDoS filtering in the first point of contact from the Internet, which is a recommended best practice. :::caution[L3/4 DDoS mitigation accuracy] -Using a third-party WAF or CDN service in front of Cloudflare can negatively impact the accuracy of L3/4 DDoS mitigation. +Using a third-party WAF or CDN service in front of Cloudflare can negatively impact the accuracy of L3/4 DDoS mitigation. When traffic is proxied through another vendor, the vendor's IP addresses are available to Cloudflare's network-layer protection systems rather than the true client IP addresses. This lack of visibility into the original source can lead to less effective automated mitigation and potential false positives. ::: diff --git a/src/content/docs/ddos-protection/botnet-threat-feed.mdx b/src/content/docs/ddos-protection/botnet-threat-feed.mdx index ba3a7ca8409be2e..8058f8d886012b1 100644 --- a/src/content/docs/ddos-protection/botnet-threat-feed.mdx +++ b/src/content/docs/ddos-protection/botnet-threat-feed.mdx @@ -14,9 +14,9 @@ learning_center: link: https://www.cloudflare.com/learning/ddos/what-is-a-ddos-botnet/ tags: - REST API - --- -import { Steps, APIRequest, DashButton } from "~/components" + +import { Steps, APIRequest, DashButton } from "~/components"; The Cloudflare DDoS Botnet Threat Feed is a threat intelligence feed for service providers (SPs) such as hosting providers and Internet service providers (ISPs) that provides information about their own IP addresses that have participated in HTTP DDoS attacks as observed from Cloudflare's global network. The feed aims to help service providers stop the abuse and reduce DDoS attacks originating from within their networks. @@ -85,7 +85,7 @@ Invoke one of the Botnet Threat Feed API endpoints: - The API URI path is planned to change from `.../botnet_feed/...` to `.../ddos_botnet_feed/...` in the future. - Responses with no IP addresses in the results (empty state) will return an `HTTP 200` status code (success), with an empty list in the `result` property. - When the response is a success but the result is `0` or `null`, this means that there are no detected offenses. -::: + ::: To invoke an API endpoint, append the operation endpoint to the Cloudflare API base URL: @@ -103,23 +103,23 @@ Retrieves all the data in the botnet tracking database for a given ASN (currentl The provided `{asn}` must be affiliated with your account. ```json output { - "result": [ - { - "cidr": "127.0.0.1/32", - "date": "1970-01-01T00:00:00Z", - "offense_count": 10000 - }, - // ... other entries ... - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "cidr": "127.0.0.1/32", + "date": "1970-01-01T00:00:00Z", + "offense_count": 10000 + } + // ... other entries ... + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -135,22 +135,22 @@ The provided `{asn}` must be affiliated with your account. `{date}` must be an ISO 8601-formatted date: `YYYY-MM-DD`. If no date is specified, the API responds with the data from the day before. ```json output { - "result": [ - { - "cidr": "127.0.0.1/32", - "date": "2024-05-05T00:00:00Z", - "offense_count": 10000 - }, - // ... other entries ... - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "cidr": "127.0.0.1/32", + "date": "2024-05-05T00:00:00Z", + "offense_count": 10000 + } + // ... other entries ... + ], + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/ddos-protection/get-started.mdx b/src/content/docs/ddos-protection/get-started.mdx index 23e89367c6df2b1..294386d75a7913f 100644 --- a/src/content/docs/ddos-protection/get-started.mdx +++ b/src/content/docs/ddos-protection/get-started.mdx @@ -6,10 +6,9 @@ products: - ddos-protection sidebar: order: 3 - --- -import { Steps } from "~/components" +import { Steps } from "~/components"; ## Free, Pro, and Business plans diff --git a/src/content/docs/ddos-protection/managed-rulesets/http/index.mdx b/src/content/docs/ddos-protection/managed-rulesets/http/index.mdx index d811b5a27be035b..da3c36e2cef5dc2 100644 --- a/src/content/docs/ddos-protection/managed-rulesets/http/index.mdx +++ b/src/content/docs/ddos-protection/managed-rulesets/http/index.mdx @@ -55,7 +55,7 @@ Cloudflare HTTP DDoS Protection can also initiate mitigation based on the origin This rule is available for zones on any plan. ::: -While Cloudflare's network is built to automatically monitor and mitigate large DDoS attacks, Cloudflare also helps mitigate smaller DDoS attacks, based on the following general rules: +While Cloudflare's network is built to automatically monitor and mitigate large DDoS attacks, Cloudflare also helps mitigate smaller DDoS attacks, based on the following general rules: - For zones on any plan, Cloudflare will apply mitigations when the HTTP error rate is above the _High_ (default) sensitivity level of 1,000 errors-per-second rate threshold. You can decrease the sensitivity level by configuring the HTTP DDoS Attack Protection managed ruleset. diff --git a/src/content/docs/ddos-protection/managed-rulesets/index.mdx b/src/content/docs/ddos-protection/managed-rulesets/index.mdx index aa5cf2850cf749b..d30b1f397074ef2 100644 --- a/src/content/docs/ddos-protection/managed-rulesets/index.mdx +++ b/src/content/docs/ddos-protection/managed-rulesets/index.mdx @@ -6,7 +6,6 @@ products: - ddos-protection sidebar: order: 5 - --- The DDoS Attack Protection managed rulesets provide comprehensive protection against a [variety of DDoS attacks](/ddos-protection/about/attack-coverage/) across L3/4 (network layer) and L7 (application layer) of the [OSI model](https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/). diff --git a/src/content/docs/ddos-protection/managed-rulesets/network/index.mdx b/src/content/docs/ddos-protection/managed-rulesets/network/index.mdx index 08ab036ae1868dc..ec4a3407ca3c976 100644 --- a/src/content/docs/ddos-protection/managed-rulesets/network/index.mdx +++ b/src/content/docs/ddos-protection/managed-rulesets/network/index.mdx @@ -54,7 +54,7 @@ While you can manually override a rule from `Log` to `Block`, consider the follo - The default action of a rule is decided during the testing period. Cloudflare may set its default action to **DDoS Dynamic**, which may use rate-limiting or a multi-step mitigation combination based on traffic factors. By applying a manual `Block` override, you prevent your configuration from automatically inheriting the more nuanced DDoS Dynamic action once it is released. -If you choose to override a testing rule to mitigate an active attack, Cloudflare recommends reviewing that override periodically to see if the rule has been promoted to a permanent default action. +If you choose to override a testing rule to mitigate an active attack, Cloudflare recommends reviewing that override periodically to see if the rule has been promoted to a permanent default action. ## Availability diff --git a/src/content/docs/ddos-protection/managed-rulesets/network/network-overrides/override-examples.mdx b/src/content/docs/ddos-protection/managed-rulesets/network/network-overrides/override-examples.mdx index 679aaba3f002a27..526d496f44f19d3 100644 --- a/src/content/docs/ddos-protection/managed-rulesets/network/network-overrides/override-examples.mdx +++ b/src/content/docs/ddos-protection/managed-rulesets/network/network-overrides/override-examples.mdx @@ -9,10 +9,9 @@ sidebar: head: - tag: title content: Override examples for Network-layer DDoS Attack Protection - --- -import { Details, GlossaryTooltip, DashButton } from "~/components" +import { Details, GlossaryTooltip, DashButton } from "~/components"; ## Use cases @@ -36,11 +35,12 @@ To avoid disruptions during initial deployment, you can create a _Log_ only – 1. In the Cloudflare dashboard, go to the **Security rules** page. - + + 2. Go to the **DDoS protection** tab. 3. On **HTTP DDoS attack protection**, select **Create override**. 4. Set the **Scope** to _Apply to all incoming requests_. 5. Under **Ruleset configuration**: - - Set the **Ruleset action** to _Log_. - - Set the **Ruleset sensitivity** to _Essentially Off_. -6. Select **Save**. \ No newline at end of file + - Set the **Ruleset action** to _Log_. + - Set the **Ruleset sensitivity** to _Essentially Off_. +6. Select **Save**. diff --git a/src/content/docs/ddos-protection/reference/alerts.mdx b/src/content/docs/ddos-protection/reference/alerts.mdx index 02ded106c58f5b9..2d58a70a27086ca 100644 --- a/src/content/docs/ddos-protection/reference/alerts.mdx +++ b/src/content/docs/ddos-protection/reference/alerts.mdx @@ -108,4 +108,4 @@ To investigate a possibly ongoing attack, select **View Dashboard**. To go to th - In some cases, HTTP DDoS attack alerts will reference the attacked zone name instead of the attacked hostname. This occurs when the attack signature does not include information on the attacked hostname because it is not a strong indicator for identifying attack requests. For more information on attack signatures, refer to [How DDoS protection works](/ddos-protection/about/how-ddos-protection-works/). - DDoS alerts are currently only available for DDoS attacks detected and mitigated by the [DDoS managed rulesets](/ddos-protection/managed-rulesets/). Alerts are not yet available for DDoS attacks detected and mitigated by the [Advanced TCP Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-tcp-protection/), the [Advanced DNS Protection](/ddos-protection/advanced-ddos-systems/overview/advanced-dns-protection/), or the [Programmable Flow Protection](/ddos-protection/advanced-ddos-systems/overview/programmable-flow-protection/) system. - You will not receive duplicate DDoS alerts within the same one-hour time frame. -- If you configure more than one alert type for the same kind of attack (for example, both an HTTP DDoS Attack Alert and an Advanced HTTP DDoS Attack Alert) you may get more than one notification when an attack occurs. To avoid receiving duplicate notifications, delete one of the configured alerts. \ No newline at end of file +- If you configure more than one alert type for the same kind of attack (for example, both an HTTP DDoS Attack Alert and an Advanced HTTP DDoS Attack Alert) you may get more than one notification when an attack occurs. To avoid receiving duplicate notifications, delete one of the configured alerts. diff --git a/src/content/docs/ddos-protection/reference/index.mdx b/src/content/docs/ddos-protection/reference/index.mdx index 1ffe418f0eceaf3..3ae60ce4bd017c0 100644 --- a/src/content/docs/ddos-protection/reference/index.mdx +++ b/src/content/docs/ddos-protection/reference/index.mdx @@ -9,10 +9,9 @@ sidebar: hideIndex: true head: [] description: Reference information for Cloudflare's DDoS protection. - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information about Cloudflare DDoS protection: diff --git a/src/content/docs/ddos-protection/reference/logs.mdx b/src/content/docs/ddos-protection/reference/logs.mdx index f0d23899c38c060..1bbc798b5e49584 100644 --- a/src/content/docs/ddos-protection/reference/logs.mdx +++ b/src/content/docs/ddos-protection/reference/logs.mdx @@ -11,10 +11,9 @@ sidebar: head: - tag: title content: DDoS logs - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Retrieve HTTP events using [Cloudflare Logs](/logs/) to integrate them into your SIEM systems. diff --git a/src/content/docs/ddos-protection/reference/simulate-ddos-attack.mdx b/src/content/docs/ddos-protection/reference/simulate-ddos-attack.mdx index 187dff380ea2545..20dba8ba991db4e 100644 --- a/src/content/docs/ddos-protection/reference/simulate-ddos-attack.mdx +++ b/src/content/docs/ddos-protection/reference/simulate-ddos-attack.mdx @@ -6,10 +6,9 @@ products: - ddos-protection sidebar: order: 7 - --- -import { Render } from "~/components" +import { Render } from "~/components"; After onboarding to Cloudflare, you may want to simulate DDoS attacks against your Internet properties to test the protection, [reporting](/ddos-protection/reference/reports/), and [alerting](/ddos-protection/reference/alerts/) mechanisms. Follow the guidelines in this section to simulate a DDoS attack. diff --git a/src/content/docs/dmarc-management/enable.mdx b/src/content/docs/dmarc-management/enable.mdx index 1eeb169d8368e0c..c38ef8ef703db1d 100644 --- a/src/content/docs/dmarc-management/enable.mdx +++ b/src/content/docs/dmarc-management/enable.mdx @@ -10,7 +10,6 @@ sidebar: text: Beta tags: - DNS - --- import { GlossaryTooltip } from "~/components"; @@ -30,4 +29,4 @@ To enable DMARC Management: - If no DMARC record is found, Cloudflare will automatically invite you to add one that you can edit later. Select **Add** to continue. - If a DMARC record is found in your zone, Cloudflare will add another `rua` (Reporting URI for Aggregate data) entry to it. The `rua` tag specifies the URI (typically a `mailto:` address) where aggregate DMARC reports are sent. This additional entry uses a Cloudflare email address so that Cloudflare can receive and process DMARC reports on your behalf. Select **Next** to continue. -DMARC Management (beta) is now active. However, it may take up to 24 hours to receive your first DMARC report and to display this information in DMARC Management. \ No newline at end of file +DMARC Management (beta) is now active. However, it may take up to 24 hours to receive your first DMARC report and to display this information in DMARC Management. diff --git a/src/content/docs/dmarc-management/security-records.mdx b/src/content/docs/dmarc-management/security-records.mdx index 2ec513fecf908f2..df2912e19e4d6cc 100644 --- a/src/content/docs/dmarc-management/security-records.mdx +++ b/src/content/docs/dmarc-management/security-records.mdx @@ -29,4 +29,4 @@ To set up email security records: ## Edit or delete records -Refer to [Manage DNS records](/dns/manage-dns-records/how-to/create-dns-records/) for more information. \ No newline at end of file +Refer to [Manage DNS records](/dns/manage-dns-records/how-to/create-dns-records/) for more information. diff --git a/src/content/docs/dmarc-management/statistics.mdx b/src/content/docs/dmarc-management/statistics.mdx index 58a5e6ea804a49b..b9186d28b90635d 100644 --- a/src/content/docs/dmarc-management/statistics.mdx +++ b/src/content/docs/dmarc-management/statistics.mdx @@ -11,7 +11,6 @@ head: content: Review DMARC statistics tags: - DNS - --- DMARC Management (beta) allows you to review whether emails sent on your behalf passed or failed DMARC, SPF, and DKIM authentication checks. diff --git a/src/content/docs/dns/additional-options/index.mdx b/src/content/docs/dns/additional-options/index.mdx index 66b93896ae59062..2c2a6572e2ac236 100644 --- a/src/content/docs/dns/additional-options/index.mdx +++ b/src/content/docs/dns/additional-options/index.mdx @@ -10,7 +10,7 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Beyond [setting up your zone](/dns/zone-setups/) and [updating your DNS records](/dns/manage-dns-records/), you may want to customize the following settings in Cloudflare DNS: diff --git a/src/content/docs/dns/changelog.mdx b/src/content/docs/dns/changelog.mdx index b1163dea5558b84..3c688d1cb2da69d 100644 --- a/src/content/docs/dns/changelog.mdx +++ b/src/content/docs/dns/changelog.mdx @@ -12,7 +12,7 @@ import { ProductChangelog } from "~/components"; {/* D[Resolver] <--DNS lookups--> E((User)) ## How to -* [Set up incoming zone transfers](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/setup/) -* Proxy traffic through Cloudflare with [Secondary DNS Override](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic/) +- [Set up incoming zone transfers](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/setup/) +- Proxy traffic through Cloudflare with [Secondary DNS Override](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic/) ## Availability diff --git a/src/content/docs/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic.mdx b/src/content/docs/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic.mdx index a21202b1749130a..b8a0e6712109252 100644 --- a/src/content/docs/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic.mdx +++ b/src/content/docs/dns/zone-setups/zone-transfers/cloudflare-as-secondary/proxy-traffic.mdx @@ -81,4 +81,4 @@ Once you create a CNAME record at the apex, existing A or AAAA records on the zo ## Verify that your records are proxied -Query DNS at your assigned Secondary DNS nameserver to confirm the DNS response Cloudflare returns. Records proxied by Cloudflare return [Cloudflare IPs](https://www.cloudflare.com/ips/). \ No newline at end of file +Query DNS at your assigned Secondary DNS nameserver to confirm the DNS response Cloudflare returns. Records proxied by Cloudflare return [Cloudflare IPs](https://www.cloudflare.com/ips/). diff --git a/src/content/docs/durable-objects/api/alarms.mdx b/src/content/docs/durable-objects/api/alarms.mdx index 4d576fbe8cd6cb3..fa9a03af7538bea 100644 --- a/src/content/docs/durable-objects/api/alarms.mdx +++ b/src/content/docs/durable-objects/api/alarms.mdx @@ -38,42 +38,42 @@ Although each Durable Object can only have one alarm set at a time, you can mana import { DurableObject } from "cloudflare:workers"; export class AgentServer extends DurableObject { - // Schedule a one-time or recurring event - async scheduleEvent(id, runAt, repeatMs = null) { - await this.ctx.storage.put(`event:${id}`, { id, runAt, repeatMs }); - const currentAlarm = await this.ctx.storage.getAlarm(); - if (!currentAlarm || runAt < currentAlarm) { - await this.ctx.storage.setAlarm(runAt); - } - } - - async alarm() { - const now = Date.now(); - const events = await this.ctx.storage.list({ prefix: "event:" }); - let nextAlarm = null; - - for (const [key, event] of events) { - if (event.runAt <= now) { - await this.processEvent(event); - if (event.repeatMs) { - event.runAt = now + event.repeatMs; - await this.ctx.storage.put(key, event); - } else { - await this.ctx.storage.delete(key); - } - } - // Track the next event time - if (event.runAt > now && (!nextAlarm || event.runAt < nextAlarm)) { - nextAlarm = event.runAt; - } - } - - if (nextAlarm) await this.ctx.storage.setAlarm(nextAlarm); - } - - async processEvent(event) { - // Your event handling logic here - } + // Schedule a one-time or recurring event + async scheduleEvent(id, runAt, repeatMs = null) { + await this.ctx.storage.put(`event:${id}`, { id, runAt, repeatMs }); + const currentAlarm = await this.ctx.storage.getAlarm(); + if (!currentAlarm || runAt < currentAlarm) { + await this.ctx.storage.setAlarm(runAt); + } + } + + async alarm() { + const now = Date.now(); + const events = await this.ctx.storage.list({ prefix: "event:" }); + let nextAlarm = null; + + for (const [key, event] of events) { + if (event.runAt <= now) { + await this.processEvent(event); + if (event.repeatMs) { + event.runAt = now + event.repeatMs; + await this.ctx.storage.put(key, event); + } else { + await this.ctx.storage.delete(key); + } + } + // Track the next event time + if (event.runAt > now && (!nextAlarm || event.runAt < nextAlarm)) { + nextAlarm = event.runAt; + } + } + + if (nextAlarm) await this.ctx.storage.setAlarm(nextAlarm); + } + + async processEvent(event) { + // Your event handling logic here + } } ``` @@ -82,7 +82,6 @@ export class AgentServer extends DurableObject { ### `getAlarm` - getAlarm(): - - If there is an alarm set, then return the currently set alarm time as the number of milliseconds elapsed since the UNIX epoch. Otherwise, return `null`. - If `getAlarm` is called while an [`alarm`](/durable-objects/api/alarms/#alarm) is already running, it returns `null` unless `setAlarm` has also been called since the alarm handler started running. @@ -90,7 +89,6 @@ export class AgentServer extends DurableObject { ### `setAlarm` - setAlarm(scheduledTimeMs ) : - - Set the time for the alarm to run. Specify the time as the number of milliseconds elapsed since the UNIX epoch. - If you call `setAlarm` when there is already one scheduled, it will override the existing alarm. @@ -103,7 +101,6 @@ This is due to the fact that, if the Durable Object wakes up after being inactiv ### `deleteAlarm` - `deleteAlarm()`: - - Unset the alarm if there is a currently set alarm. - Calling `deleteAlarm()` inside the `alarm()` handler may prevent retries on a best-effort basis, but is not guaranteed. @@ -113,11 +110,9 @@ This is due to the fact that, if the Durable Object wakes up after being inactiv ### `alarm` - alarm(alarmInfo ): - - Called by the system when a scheduled alarm time is reached. - The optional parameter `alarmInfo` object has two properties: - - `retryCount` : The number of times this alarm event has been retried. - `isRetry` : A boolean value to indicate if the alarm has been retried. This value is `true` if this alarm event is a retry. diff --git a/src/content/docs/durable-objects/api/legacy-kv-storage-api.mdx b/src/content/docs/durable-objects/api/legacy-kv-storage-api.mdx index 541d4b55aeebebd..c41b19cc99bc69c 100644 --- a/src/content/docs/durable-objects/api/legacy-kv-storage-api.mdx +++ b/src/content/docs/durable-objects/api/legacy-kv-storage-api.mdx @@ -8,7 +8,16 @@ products: - durable-objects --- -import { Render, Type, MetaInfo, GlossaryTooltip, TypeScriptExample, Details, Tabs, TabItem } from "~/components"; +import { + Render, + Type, + MetaInfo, + GlossaryTooltip, + TypeScriptExample, + Details, + Tabs, + TabItem, +} from "~/components"; :::note This page documents the storage API for legacy KV-backed Durable Objects. @@ -83,6 +92,6 @@ KV-backed Durable Objects provide KV API methods which are asynchronous. ## Related resources -- [Durable Objects: Easy, Fast, Correct Choose Three](https://blog.cloudflare.com/durable-objects-easy-fast-correct-choose-three/) +- [Durable Objects: Easy, Fast, Correct Choose Three](https://blog.cloudflare.com/durable-objects-easy-fast-correct-choose-three/) - [Zero-latency SQLite storage in every Durable Object blog](https://blog.cloudflare.com/sqlite-in-durable-objects/) - [WebSockets API](/durable-objects/best-practices/websockets/) diff --git a/src/content/docs/durable-objects/api/sqlite-storage-api.mdx b/src/content/docs/durable-objects/api/sqlite-storage-api.mdx index 2e6c605ca634618..70afb0cebace527 100644 --- a/src/content/docs/durable-objects/api/sqlite-storage-api.mdx +++ b/src/content/docs/durable-objects/api/sqlite-storage-api.mdx @@ -8,7 +8,16 @@ products: - durable-objects --- -import { Render, Type, MetaInfo, GlossaryTooltip, TypeScriptExample, Details, Tabs, TabItem } from "~/components"; +import { + Render, + Type, + MetaInfo, + GlossaryTooltip, + TypeScriptExample, + Details, + Tabs, + TabItem, +} from "~/components"; :::note This page documents the storage API for the newer SQLite-backed Durable Objects. @@ -136,7 +145,11 @@ class MyDurableObject(DurableObject): - When writing data, every row update of an index counts as an additional row. However, indexes may be beneficial for read-heavy use cases. Refer to [Index for SQLite Durable Objects](/durable-objects/best-practices/access-durable-objects-storage/#indexes-in-sqlite). - Writing data to [SQLite virtual tables](https://www.sqlite.org/vtab.html) also counts towards rows written. - + ### `exec` @@ -161,7 +174,10 @@ Always consume the cursor fully before yielding the event loop. Call `.toArray() ```ts // ✅ Safe: cursor is fully consumed before any await const rows = this.ctx.storage.sql.exec("SELECT * FROM users").toArray(); -const result = await fetch("https://example.com", { method: "POST", body: JSON.stringify(rows) }); +const result = await fetch("https://example.com", { + method: "POST", + body: JSON.stringify(rows), +}); ``` ```ts @@ -351,6 +367,6 @@ ctx.storage.onNextSessionRestoreBookmark(bookmark) ## Related resources -- [Durable Objects: Easy, Fast, Correct Choose Three](https://blog.cloudflare.com/durable-objects-easy-fast-correct-choose-three/) +- [Durable Objects: Easy, Fast, Correct Choose Three](https://blog.cloudflare.com/durable-objects-easy-fast-correct-choose-three/) - [Zero-latency SQLite storage in every Durable Object blog](https://blog.cloudflare.com/sqlite-in-durable-objects/) - [WebSockets API](/durable-objects/best-practices/websockets/) diff --git a/src/content/docs/durable-objects/best-practices/access-durable-objects-storage.mdx b/src/content/docs/durable-objects/best-practices/access-durable-objects-storage.mdx index cbcc52ad9c8be68..28b40fdda357f9f 100644 --- a/src/content/docs/durable-objects/best-practices/access-durable-objects-storage.mdx +++ b/src/content/docs/durable-objects/best-practices/access-durable-objects-storage.mdx @@ -11,10 +11,13 @@ products: import { Render, GlossaryTooltip, WranglerConfig } from "~/components"; Durable Objects are a + powerful compute API that provides a compute with storage building block. Each Durable Object has its own private, transactional, and strongly consistent storage. Durable Objects + Storage API provides + access to a Durable Object's attached storage. A Durable Object's [in-memory state](/durable-objects/reference/in-memory-state/) is preserved as long as the Durable Object is not evicted from memory. Inactive Durable Objects with no incoming request traffic can be evicted. There are normal operations like [code deployments](/workers/configuration/versions-and-deployments/) that trigger Durable Objects to restart and lose their in-memory state. For these reasons, you should use Storage API to persist state durably on disk that needs to survive eviction or restart of Durable Objects. diff --git a/src/content/docs/durable-objects/concepts/durable-object-lifecycle.mdx b/src/content/docs/durable-objects/concepts/durable-object-lifecycle.mdx index 1f90f81aa40a253..163f0a7cc9d2cb5 100644 --- a/src/content/docs/durable-objects/concepts/durable-object-lifecycle.mdx +++ b/src/content/docs/durable-objects/concepts/durable-object-lifecycle.mdx @@ -82,7 +82,7 @@ Durable Objects will occasionally shut down and objects are restarted, which wil When a Durable Object is shut down, the object instance is automatically restarted and new requests are routed to the new instance. In-flight requests are handled as follows: -- **HTTP & RPC requests**: In-flight requests are allowed to finish if they do not access a Durable Object's storage. If a request attempts to access a Durable Object's storage, it will be stopped immediately and return an error to maintain Durable Objects global uniqueness property. When the Worker runtime system is being updated, in-flight requests have up to 30 seconds to complete. +- **HTTP & RPC requests**: In-flight requests are allowed to finish if they do not access a Durable Object's storage. If a request attempts to access a Durable Object's storage, it will be stopped immediately and return an error to maintain Durable Objects global uniqueness property. When the Worker runtime system is being updated, in-flight requests have up to 30 seconds to complete. - **WebSocket connections**: WebSocket requests are terminated automatically during shutdown. This is so that the new instance can take over the connection as soon as possible. - **Other invocations (email, cron)**: Other invocations are treated similarly to HTTP requests. diff --git a/src/content/docs/durable-objects/examples/agents.mdx b/src/content/docs/durable-objects/examples/agents.mdx index 0a633feca9fcda1..822795f49b71103 100644 --- a/src/content/docs/durable-objects/examples/agents.mdx +++ b/src/content/docs/durable-objects/examples/agents.mdx @@ -8,4 +8,4 @@ head: [] description: Build AI-powered Agents on Cloudflare products: - durable-objects ---- \ No newline at end of file +--- diff --git a/src/content/docs/durable-objects/examples/index.mdx b/src/content/docs/durable-objects/examples/index.mdx index a885b12632c278f..3c4df69e31c31d3 100644 --- a/src/content/docs/durable-objects/examples/index.mdx +++ b/src/content/docs/durable-objects/examples/index.mdx @@ -14,4 +14,7 @@ import { ResourcesBySelector, GlossaryTooltip } from "~/components"; Explore the following examples for Durable Objects. - + diff --git a/src/content/docs/durable-objects/examples/websocket-server.mdx b/src/content/docs/durable-objects/examples/websocket-server.mdx index 6c9fed4be7d126e..24b3a890045da9a 100644 --- a/src/content/docs/durable-objects/examples/websocket-server.mdx +++ b/src/content/docs/durable-objects/examples/websocket-server.mdx @@ -12,7 +12,13 @@ products: - durable-objects --- -import { TabItem, Tabs, GlossaryTooltip, WranglerConfig, TypeScriptExample } from "~/components"; +import { + TabItem, + Tabs, + GlossaryTooltip, + WranglerConfig, + TypeScriptExample, +} from "~/components"; This example shows how to build a WebSocket server using Durable Objects and Workers. The example exposes an endpoint to create a new WebSocket connection. This WebSocket connection echos any message while including the total number of WebSocket connections currently established. For more information, refer to [Use Durable Objects with WebSockets](/durable-objects/best-practices/websockets/). diff --git a/src/content/docs/durable-objects/observability/data-studio.mdx b/src/content/docs/durable-objects/observability/data-studio.mdx index 847423a93b479a1..39fe7cf43e104b3 100644 --- a/src/content/docs/durable-objects/observability/data-studio.mdx +++ b/src/content/docs/durable-objects/observability/data-studio.mdx @@ -40,4 +40,4 @@ You need to have at least the `Workers Platform Admin` [role](/fundamentals/mana All queries issued by the Data Studio are logged with [audit logging v1](/fundamentals/account/account-security/review-audit-logs/) for your security and compliance needs. -- Each query emits two audit logs, a `query executed` action and a `query completed` action indicating query success or failure. `query_id` in the log event can be used to correlate the two events per query. \ No newline at end of file +- Each query emits two audit logs, a `query executed` action and a `query completed` action indicating query success or failure. `query_id` in the log event can be used to correlate the two events per query. diff --git a/src/content/docs/durable-objects/platform/known-issues.mdx b/src/content/docs/durable-objects/platform/known-issues.mdx index a590711f8bcb13e..8d63e009732811e 100644 --- a/src/content/docs/durable-objects/platform/known-issues.mdx +++ b/src/content/docs/durable-objects/platform/known-issues.mdx @@ -38,4 +38,4 @@ The Workers editor in the [Cloudflare dashboard](https://dash.cloudflare.com/) a Currently, when developing locally (using `npx wrangler dev`), Durable Object [alarm methods](/durable-objects/api/alarms) may fail after a hot reload (if you edit the code while the code is running locally). -To avoid this issue, when using Durable Object alarms, close and restart your `wrangler dev` command after editing your code. \ No newline at end of file +To avoid this issue, when using Durable Object alarms, close and restart your `wrangler dev` command after editing your code. diff --git a/src/content/docs/durable-objects/platform/limits.mdx b/src/content/docs/durable-objects/platform/limits.mdx index ef53c2fd80d3d9c..26f4a596ac0219e 100644 --- a/src/content/docs/durable-objects/platform/limits.mdx +++ b/src/content/docs/durable-objects/platform/limits.mdx @@ -77,4 +77,3 @@ For Durable Object classes with [SQLite storage](/durable-objects/api/sqlite-sto - diff --git a/src/content/docs/durable-objects/reference/data-location.mdx b/src/content/docs/durable-objects/reference/data-location.mdx index 4f4ced530d3685f..9465de9ade8d4de 100644 --- a/src/content/docs/durable-objects/reference/data-location.mdx +++ b/src/content/docs/durable-objects/reference/data-location.mdx @@ -58,9 +58,9 @@ Note that it is also possible to specify a jurisdiction by creating an individua ### Supported locations -| Parameter | Location | -| --------- | ---------------------------- | -| eu | The European Union | +| Parameter | Location | +| --------- | ------------------------------ | +| eu | The European Union | | fedramp | FedRAMP-compliant data centers | ## Provide a location hint @@ -102,10 +102,14 @@ Hints are a best effort and not a guarantee. Unlike with jurisdictions, Durable | afr | Africa 2 | | me | Middle East 2 | -1 Dynamic relocation of existing Durable Objects is planned for the future. +1 Dynamic relocation of existing Durable Objects is planned for the +future. -2 Durable Objects currently do not spawn in this location. Instead, the Durable Object will spawn in a nearby location which does support Durable Objects. For example, Durable Objects hinted to South America spawn in Eastern North America instead. +2 Durable Objects currently do not spawn in this location. Instead, +the Durable Object will spawn in a nearby location which does support Durable +Objects. For example, Durable Objects hinted to South America spawn in Eastern +North America instead. ## Additional resources -- You can find our more about where Durable Objects are located using the website: [Where Durable Objects Live](https://where.durableobjects.live/). \ No newline at end of file +- You can find our more about where Durable Objects are located using the website: [Where Durable Objects Live](https://where.durableobjects.live/). diff --git a/src/content/docs/durable-objects/reference/data-security.mdx b/src/content/docs/durable-objects/reference/data-security.mdx index e91b874429d9483..d410809c1239ec7 100644 --- a/src/content/docs/durable-objects/reference/data-security.mdx +++ b/src/content/docs/durable-objects/reference/data-security.mdx @@ -10,9 +10,9 @@ products: This page details the data security properties of Durable Objects, including: -* Encryption-at-rest (EAR). -* Encryption-in-transit (EIT). -* Cloudflare's compliance certifications. +- Encryption-at-rest (EAR). +- Encryption-in-transit (EIT). +- Cloudflare's compliance certifications. ## Encryption at Rest diff --git a/src/content/docs/durable-objects/reference/environments.mdx b/src/content/docs/durable-objects/reference/environments.mdx index 21a1b30c3e2981f..ac38518bf59f293 100644 --- a/src/content/docs/durable-objects/reference/environments.mdx +++ b/src/content/docs/durable-objects/reference/environments.mdx @@ -43,8 +43,6 @@ Durable Object bindings are not inherited. For example, you can define an enviro Because Wrangler appends the [environment name](/workers/wrangler/environments/) to the top-level name when publishing, for a Worker named `worker-name` the above example is equivalent to: - - ```jsonc @@ -71,8 +69,6 @@ Because Wrangler appends the [environment name](/workers/wrangler/environments/) If you want an environment-specific binding that accesses the same Objects as the top-level binding, specify the top-level Worker code name explicitly using `script_name`: - - ```jsonc @@ -118,9 +114,10 @@ To start remote development: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select an existing Worker. 3. Select the **Edit code** icon located on the upper-right of the screen. :::caution Remote development is only available for KV-backed Durable Objects. SQLite-backed Durable Objects do not support remote development. -::: \ No newline at end of file +::: diff --git a/src/content/docs/durable-objects/reference/faq.mdx b/src/content/docs/durable-objects/reference/faq.mdx index 2cff6f2d62e279c..84262a5b52de7b9 100644 --- a/src/content/docs/durable-objects/reference/faq.mdx +++ b/src/content/docs/durable-objects/reference/faq.mdx @@ -12,12 +12,12 @@ import { Render } from "~/components"; ## Pricing - + ## Limits - + ## Metrics and analytics - \ No newline at end of file + diff --git a/src/content/docs/durable-objects/reference/glossary.mdx b/src/content/docs/durable-objects/reference/glossary.mdx index b95a0d5b0e6b08d..1e9b3d062d8832e 100644 --- a/src/content/docs/durable-objects/reference/glossary.mdx +++ b/src/content/docs/durable-objects/reference/glossary.mdx @@ -8,7 +8,7 @@ products: - durable-objects --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Durable Objects documentation. diff --git a/src/content/docs/durable-objects/reference/in-memory-state.mdx b/src/content/docs/durable-objects/reference/in-memory-state.mdx index 772169b848b90bd..7ef26232dd22b2b 100644 --- a/src/content/docs/durable-objects/reference/in-memory-state.mdx +++ b/src/content/docs/durable-objects/reference/in-memory-state.mdx @@ -20,21 +20,21 @@ A common pattern is to initialize a Durable Object from [persistent storage](/du import { DurableObject } from "cloudflare:workers"; export class Counter extends DurableObject { - constructor(ctx, env) { - super(ctx, env); - // `blockConcurrencyWhile()` ensures no requests are delivered until - // initialization completes. - this.ctx.blockConcurrencyWhile(async () => { - let stored = await this.ctx.storage.get("value"); - // After initialization, future reads do not need to access storage. - this.value = stored || 0; - }); - } - - // Handle HTTP requests from clients. - async fetch(request) { - // use this.value rather than storage - } + constructor(ctx, env) { + super(ctx, env); + // `blockConcurrencyWhile()` ensures no requests are delivered until + // initialization completes. + this.ctx.blockConcurrencyWhile(async () => { + let stored = await this.ctx.storage.get("value"); + // After initialization, future reads do not need to access storage. + this.value = stored || 0; + }); + } + + // Handle HTTP requests from clients. + async fetch(request) { + // use this.value rather than storage + } } ``` diff --git a/src/content/docs/durable-objects/video-tutorials.mdx b/src/content/docs/durable-objects/video-tutorials.mdx index 4af3068247492a4..4390949faf52bc7 100644 --- a/src/content/docs/durable-objects/video-tutorials.mdx +++ b/src/content/docs/durable-objects/video-tutorials.mdx @@ -11,11 +11,9 @@ products: import { CardGrid, LinkCard } from "~/components"; - + - - diff --git a/src/content/docs/dynamic-workers/usage/bindings.mdx b/src/content/docs/dynamic-workers/usage/bindings.mdx index 5fed51bc8b0efe7..2970ac1c09b9962 100644 --- a/src/content/docs/dynamic-workers/usage/bindings.mdx +++ b/src/content/docs/dynamic-workers/usage/bindings.mdx @@ -10,7 +10,7 @@ products: import { WranglerConfig } from "~/components"; -Bindings let you control what a Dynamic Worker can access. When you create a Dynamic Worker, you decide exactly what resources and operations it can use. +Bindings let you control what a Dynamic Worker can access. When you create a Dynamic Worker, you decide exactly what resources and operations it can use. This allows you to: @@ -21,7 +21,8 @@ This allows you to: ## Custom Bindings with Dynamic Workers With custom bindings, you: -- **Define the binding implementation in your loader Worker**: You create a class with methods. Because this runs in your loader Worker, that's where you can add authentication, logging, scope access per customer. + +- **Define the binding implementation in your loader Worker**: You create a class with methods. Because this runs in your loader Worker, that's where you can add authentication, logging, scope access per customer. - **Pass it to the Dynamic Worker as a binding**: It just calls methods like `this.env.CHAT_ROOM.post("Hello!")` without knowing anything about the implementation behind it. ### How it works @@ -29,54 +30,65 @@ With custom bindings, you: #### Step 1: Define the binding To create a custom binding, your loader Worker needs to implement a [`WorkerEntrypoint` class](/workers/runtime-apis/bindings/service-bindings/rpc#the-workerentrypoint-class) and export it. The methods you define on this class are the methods the Dynamic Worker will be able to call. + ```ts import { WorkerEntrypoint } from "cloudflare:workers"; export class ChatRoom extends WorkerEntrypoint { - async post(text: string): Promise { - // Your implementation here - } + async post(text: string): Promise { + // Your implementation here + } } ``` + #### Step 2: Pass it to the Dynamic Worker -Your loader Worker will then create an instance of the exported class, called a stub, and pass it into the Dynamic Worker's `env`. + +Your loader Worker will then create an instance of the exported class, called a stub, and pass it into the Dynamic Worker's `env`. ```ts let chatRoom = ctx.exports.ChatRoom({ props: { roomName: "#bot-chat" } }); let worker = env.LOADER.load({ - env: { CHAT_ROOM: chatRoom }, - // ... + env: { CHAT_ROOM: chatRoom }, + // ... }); ``` -From the Dynamic Worker's perspective, `CHAT_ROOM` just looks like a regular binding with methods it can call: +From the Dynamic Worker's perspective, `CHAT_ROOM` just looks like a regular binding with methods it can call: + ```ts // Inside the Dynamic Worker await this.env.CHAT_ROOM.post("Hello!"); ``` + #### Step 3: Customize per user with props -One class can serve many different Dynamic Workers. Instead of defining a separate class for each user, you pass in `props` when creating the stub, which contains information specific to that user. + +One class can serve many different Dynamic Workers. Instead of defining a separate class for each user, you pass in `props` when creating the stub, which contains information specific to that user. ```ts // Same class, different props per user -let aliceRoom = ctx.exports.ChatRoom({ props: { roomName: "#alice", apiKey: ALICE_KEY } }); -let bobRoom = ctx.exports.ChatRoom({ props: { roomName: "#bob", apiKey: BOB_KEY } }); +let aliceRoom = ctx.exports.ChatRoom({ + props: { roomName: "#alice", apiKey: ALICE_KEY }, +}); +let bobRoom = ctx.exports.ChatRoom({ + props: { roomName: "#bob", apiKey: BOB_KEY }, +}); ``` When the Dynamic Worker calls a method on the binding, it's actually making a call back to your loader Worker, that's where the method runs. Inside that method, you can read the `props` via [`this.ctx.props`](/workers/runtime-apis/context#props). Only the loader Worker has access to the props, the Dynamic Worker never sees them. ```ts export class ChatRoom extends WorkerEntrypoint { - async post(text: string): Promise { - // Props are set when the stub is created — the Dynamic Worker never sees them - let roomName = this.ctx.props.roomName; - await postToChat(roomName, text); - } + async post(text: string): Promise { + // Props are set when the stub is created — the Dynamic Worker never sees them + let roomName = this.ctx.props.roomName; + await postToChat(roomName, text); + } } ``` ### Example: Chat room agent + Here's a complete example putting it all together. Say you're building a platform where AI agents can post to chat rooms. Each agent should only be able to post to its assigned room and it should never see the API key used to authenticate. You define a `ChatRoom` class in your parent Worker. This class has a `post` method, the only method the Dynamic Worker can call on this binding. Inside this class, you control which room the message goes to, which API key is used, and what name is attached to the message. @@ -85,44 +97,46 @@ You define a `ChatRoom` class in your parent Worker. This class has a `post` met import { WorkerEntrypoint } from "cloudflare:workers"; export class ChatRoom extends WorkerEntrypoint { - async post(text: string): Promise { - let { apiKey, botName, roomName } = this.ctx.props; + async post(text: string): Promise { + let { apiKey, botName, roomName } = this.ctx.props; - // Prefix the message with the bot's name. - text = `[${botName}]: ${text}`; + // Prefix the message with the bot's name. + text = `[${botName}]: ${text}`; - // Send it to the chat service. - await postToChat(apiKey, roomName, text); - } + // Send it to the chat service. + await postToChat(apiKey, roomName, text); + } } type ChatRoomProps = { - apiKey: string; - roomName: string; - botName: string; + apiKey: string; + roomName: string; + botName: string; }; ``` + You export one `ChatRoom` class, but each stub you create can have different `props` — a different room name, a different API key, a different bot name. The `props` are set when you create the stub, and the Dynamic Worker never sees them. Now pass it to a Dynamic Worker: + ```ts // Create a stub scoped to a specific room. let chatRoom = ctx.exports.ChatRoom({ - props: { - apiKey, - roomName: "#bot-chat", - botName: "Robo", - }, + props: { + apiKey, + roomName: "#bot-chat", + botName: "Robo", + }, }); let worker = env.LOADER.load({ - env: { - CHAT_ROOM: chatRoom, - }, - compatibilityDate: "$today", - mainModule: "index.js", - modules: { - "index.js": ` + env: { + CHAT_ROOM: chatRoom, + }, + compatibilityDate: "$today", + mainModule: "index.js", + modules: { + "index.js": ` export class Agent extends WorkerEntrypoint { async run() { // This is all the Dynamic Worker sees. @@ -130,13 +144,14 @@ let worker = env.LOADER.load({ } } `, - }, - globalOutbound: null, + }, + globalOutbound: null, }); return worker.getEntrypoint("Agent").run(); ``` -The agent just calls `this.env.CHAT_ROOM.post("Hello!")`. It has no way to post to a different room, see or use the API key, or change the bot name attached to its messages. + +The agent just calls `this.env.CHAT_ROOM.post("Hello!")`. It has no way to post to a different room, see or use the API key, or change the bot name attached to its messages. ### Tip: Tell your agent about the types @@ -146,45 +161,52 @@ Make sure your `WorkerEntrypoint` class extends the TypeScript type so the decla ## Passing normal Workers bindings -To pass resources like a [KV](/kv/) namespace or [R2](/r2/) bucket to a Dynamic Worker, you need to bind the resource to your loader Worker and create a custom binding that wraps it. You can scope access per customer by prefixing keys and defining only the methods you want to expose. +To pass resources like a [KV](/kv/) namespace or [R2](/r2/) bucket to a Dynamic Worker, you need to bind the resource to your loader Worker and create a custom binding that wraps it. You can scope access per customer by prefixing keys and defining only the methods you want to expose. ### Example: Scoping a KV namespace per customer First, bind the KV namespace to your loader Worker. Then in your loader Worker, export a class that uses the KV binding and defines the methods Dynamic Workers can call: + ```ts import { WorkerEntrypoint } from "cloudflare:workers"; -export class MyStorage extends WorkerEntrypoint { - // Export this class from your loader Worker - // The Dynamic Worker will be able to call get() and put() - async get(key: string): Promise { - // Prefix the key so this customer can only access their own data - return this.env.MY_KV.get(`${this.ctx.props.prefix}:${key}`); - } - - async put(key: string, value: string): Promise { - await this.env.MY_KV.put(`${this.ctx.props.prefix}:${key}`, value); - } +export class MyStorage extends WorkerEntrypoint< + Cloudflare.Env, + MyStorageProps +> { + // Export this class from your loader Worker + // The Dynamic Worker will be able to call get() and put() + async get(key: string): Promise { + // Prefix the key so this customer can only access their own data + return this.env.MY_KV.get(`${this.ctx.props.prefix}:${key}`); + } + + async put(key: string, value: string): Promise { + await this.env.MY_KV.put(`${this.ctx.props.prefix}:${key}`, value); + } } type MyStorageProps = { - prefix: string; + prefix: string; }; ``` + Then pass it to the Dynamic Worker with a customer-specific prefix: + ```ts // Create a stub scoped to this customer's prefix let storage = ctx.exports.MyStorage({ - props: { prefix: `customer-${customerId}` }, + props: { prefix: `customer-${customerId}` }, }); let worker = env.LOADER.load({ - env: { STORAGE: storage }, - // ... + env: { STORAGE: storage }, + // ... }); ``` The Dynamic Worker just uses it like any other binding: + ```ts // Inside the Dynamic Worker, it just sees STORAGE with get and put let value = await this.env.STORAGE.get("settings"); @@ -197,7 +219,7 @@ For persistent storage that lives with each Dynamic Worker, see [Durable Object ## Capability-based Sandboxing -Custom bindings follow a capability-based security model — a Dynamic Worker can only access what you explicitly give it. If it hasn't received a stub for something, it can't access it. +Custom bindings follow a capability-based security model — a Dynamic Worker can only access what you explicitly give it. If it hasn't received a stub for something, it can't access it. This is powered by Workers RPC, also known as [Cap'n Web](https://github.com/cloudflare/capnweb), an RPC system designed to pass object references across security boundaries. When a Dynamic Worker receives a stub, it can call that object's methods and each call is an RPC back to the original object in your loader Worker. Stubs have no global identifier and cannot be forged, the only way to obtain one is to receive it. diff --git a/src/content/docs/email-routing/email-workers/local-development.mdx b/src/content/docs/email-routing/email-workers/local-development.mdx index 7764c919d997f0d..ab7767665ecebf0 100644 --- a/src/content/docs/email-routing/email-workers/local-development.mdx +++ b/src/content/docs/email-routing/email-workers/local-development.mdx @@ -41,7 +41,7 @@ You can now test receiving, replying, and sending emails in your local environme Consider this example Email Worker script that uses the open source [`postal-mime`](https://www.npmjs.com/package/postal-mime) email parser: ```ts -import * as PostalMime from 'postal-mime'; +import * as PostalMime from "postal-mime"; export default { async email(message, env, ctx) { @@ -79,31 +79,31 @@ This is what you get in the console: ```json { - headers: [ - { - key: 'received', - value: 'from smtp.example.com (127.0.0.1) by cloudflare-email.com (unknown) id 4fwwffRXOpyR for ; Tue, 27 Aug 2024 15:50:20 +0000' - }, - { key: 'from', value: '"John" ' }, - { key: 'reply-to', value: 'sender@example.com' }, - { key: 'to', value: 'recipient@example.com' }, - { key: 'subject', value: 'Testing Email Workers Local Dev' }, - { key: 'content-type', value: 'text/html; charset="windows-1252"' }, - { key: 'x-mailer', value: 'Curl' }, - { key: 'date', value: 'Tue, 27 Aug 2024 08:49:44 -0700' }, - { - key: 'message-id', - value: '<6114391943504294873000@ZSH-GHOSTTY>' - } - ], - from: { address: 'sender@example.com', name: 'John' }, - to: [ { address: 'recipient@example.com', name: '' } ], - replyTo: [ { address: 'sender@example.com', name: '' } ], - subject: 'Testing Email Workers Local Dev', - messageId: '<6114391943504294873000@ZSH-GHOSTTY>', - date: '2024-08-27T15:49:44.000Z', - html: 'Hi there\n', - attachments: [] + "headers": [ + { + "key": "received", + "value": "from smtp.example.com (127.0.0.1) by cloudflare-email.com (unknown) id 4fwwffRXOpyR for ; Tue, 27 Aug 2024 15:50:20 +0000" + }, + { "key": "from", "value": "\"John\" " }, + { "key": "reply-to", "value": "sender@example.com" }, + { "key": "to", "value": "recipient@example.com" }, + { "key": "subject", "value": "Testing Email Workers Local Dev" }, + { "key": "content-type", "value": "text/html; charset=\"windows-1252\"" }, + { "key": "x-mailer", "value": "Curl" }, + { "key": "date", "value": "Tue, 27 Aug 2024 08:49:44 -0700" }, + { + "key": "message-id", + "value": "<6114391943504294873000@ZSH-GHOSTTY>" + } + ], + "from": { "address": "sender@example.com", "name": "John" }, + "to": [{ "address": "recipient@example.com", "name": "" }], + "replyTo": [{ "address": "sender@example.com", "name": "" }], + "subject": "Testing Email Workers Local Dev", + "messageId": "<6114391943504294873000@ZSH-GHOSTTY>", + "date": "2024-08-27T15:49:44.000Z", + "html": "Hi there\n", + "attachments": [] } ``` @@ -113,23 +113,27 @@ Wrangler can also simulate sending emails locally. Consider this example Email W ```ts import { EmailMessage } from "cloudflare:email"; -import { createMimeMessage } from 'mimetext'; +import { createMimeMessage } from "mimetext"; export default { async fetch(request, env, ctx) { const msg = createMimeMessage(); - msg.setSender({ name: 'Sending email test', addr: 'sender@example.com' }); - msg.setRecipient('recipient@example.com'); - msg.setSubject('An email generated in a worker'); + msg.setSender({ name: "Sending email test", addr: "sender@example.com" }); + msg.setRecipient("recipient@example.com"); + msg.setSubject("An email generated in a worker"); msg.addMessage({ - contentType: 'text/plain', + contentType: "text/plain", data: `Congratulations, you just sent an email from a worker.`, }); - var message = new EmailMessage('sender@example.com', 'recipient@example.com', msg.asRaw()); + var message = new EmailMessage( + "sender@example.com", + "recipient@example.com", + msg.asRaw(), + ); await env.EMAIL.send(message); return Response.json({ ok: true }); - } + }, }; ``` @@ -163,9 +167,9 @@ Congratulations, you just sent an email from a worker. Likewise, [`EmailMessage`](/email-routing/email-workers/runtime-api/#emailmessage-definition)'s `forward()` and `reply()` methods are also simulated locally. Consider this Worker that receives an email, parses it, replies to the sender, and forwards the original message to one your verified recipient addresses: ```ts -import * as PostalMime from 'postal-mime'; -import { createMimeMessage } from 'mimetext'; -import { EmailMessage } from 'cloudflare:email'; +import * as PostalMime from "postal-mime"; +import { createMimeMessage } from "mimetext"; +import { EmailMessage } from "cloudflare:email"; export default { async email(message, env: any, ctx: any) { @@ -179,16 +183,23 @@ export default { // creates reply message const msg = createMimeMessage(); - msg.setSender({ name: 'Thank you for your contact', addr: 'sender@example.com' }); + msg.setSender({ + name: "Thank you for your contact", + addr: "sender@example.com", + }); msg.setRecipient(message.from); - msg.setHeader('In-Reply-To', message.headers.get('Message-ID')); - msg.setSubject('An email generated in a worker'); + msg.setHeader("In-Reply-To", message.headers.get("Message-ID")); + msg.setSubject("An email generated in a worker"); msg.addMessage({ - contentType: 'text/plain', + contentType: "text/plain", data: `This is an automated reply. We received you email with the subject "${email.subject}", and will handle it as soon as possible.`, }); - const replyMessage = new EmailMessage('sender@example.com', message.from, msg.asRaw()); + const replyMessage = new EmailMessage( + "sender@example.com", + message.from, + msg.asRaw(), + ); await message.reply(replyMessage); await message.forward("recipient@example.com"); @@ -205,4 +216,4 @@ Run `npx wrangler dev` and use curl to `POST` the same message from the [Receive /var/folders/33/pn86qymd0w50htvsjp93rys40000gn/T/miniflare-381a79d7efa4e991607b30a079f6b17d/files/email/a1db7ebb-ccb4-45ef-b315-df49c6d820c0.eml [wrangler:inf] Email handler forwarded message with rcptTo: recipient@example.com -``` \ No newline at end of file +``` diff --git a/src/content/docs/email-routing/email-workers/reply-email-workers.mdx b/src/content/docs/email-routing/email-workers/reply-email-workers.mdx index abe2ab9e1917b97..9b1bca4d651c33d 100644 --- a/src/content/docs/email-routing/email-workers/reply-email-workers.mdx +++ b/src/content/docs/email-routing/email-workers/reply-email-workers.mdx @@ -17,37 +17,39 @@ import { EmailMessage } from "cloudflare:email"; import { createMimeMessage } from "mimetext"; export default { - async email(message, env, ctx) { - - const ticket = createTicket(message); - - const msg = createMimeMessage(); - msg.setHeader("In-Reply-To", message.headers.get("Message-ID")); - msg.setSender({ name: "Thank you for your contact", addr: "@example.com" }); - msg.setRecipient(message.from); - msg.setSubject("Email Routing Auto-reply"); - msg.addMessage({ - contentType: 'text/plain', - data: `We got your message, your ticket number is ${ ticket.id }` - }); - - const replyMessage = new EmailMessage( - "@example.com", - message.from, - msg.asRaw() - ); - - await message.reply(replyMessage); - } -} + async email(message, env, ctx) { + const ticket = createTicket(message); + + const msg = createMimeMessage(); + msg.setHeader("In-Reply-To", message.headers.get("Message-ID")); + msg.setSender({ + name: "Thank you for your contact", + addr: "@example.com", + }); + msg.setRecipient(message.from); + msg.setSubject("Email Routing Auto-reply"); + msg.addMessage({ + contentType: "text/plain", + data: `We got your message, your ticket number is ${ticket.id}`, + }); + + const replyMessage = new EmailMessage( + "@example.com", + message.from, + msg.asRaw(), + ); + + await message.reply(replyMessage); + }, +}; ``` To mitigate security risks and abuse, replying to incoming emails has a few requirements and limits: -* The incoming email has to have valid [DMARC](https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/). -* The email can only be replied to once in the same `EmailMessage` event. -* The recipient in the reply must match the incoming sender. -* The outgoing sender domain must match the same domain that received the email. -* 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. +- The incoming email has to have valid [DMARC](https://www.cloudflare.com/learning/dns/dns-records/dns-dmarc-record/). +- The email can only be replied to once in the same `EmailMessage` event. +- The recipient in the reply must match the incoming sender. +- The outgoing sender domain must match the same domain that received the email. +- 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. -If these and other internal conditions are not met, `reply()` will fail with an exception. Otherwise, you can freely compose your reply message, send it back to the original sender, and receive subsequent replies multiple times. \ No newline at end of file +If these and other internal conditions are not met, `reply()` will fail with an exception. Otherwise, you can freely compose your reply message, send it back to the original sender, and receive subsequent replies multiple times. diff --git a/src/content/docs/email-routing/get-started/audit-logs.mdx b/src/content/docs/email-routing/get-started/audit-logs.mdx index ea56a04e458c21b..ecd9b2792350842 100644 --- a/src/content/docs/email-routing/get-started/audit-logs.mdx +++ b/src/content/docs/email-routing/get-started/audit-logs.mdx @@ -13,9 +13,9 @@ products: Audit logs for Email Routing are available in the [Cloudflare dashboard](https://dash.cloudflare.com/?account=audit-log). The following changes to Email Routing will be displayed: -* Add/edit Rule -* Add address -* Address change status -* Enable/disable/unlock zone +- Add/edit Rule +- Add address +- Address change status +- Enable/disable/unlock zone Refer to [Review audit logs](/fundamentals/account/account-security/review-audit-logs/) for more information. diff --git a/src/content/docs/email-routing/get-started/index.mdx b/src/content/docs/email-routing/get-started/index.mdx index 79651ecf8525c75..4f3a50117f3555f 100644 --- a/src/content/docs/email-routing/get-started/index.mdx +++ b/src/content/docs/email-routing/get-started/index.mdx @@ -8,7 +8,7 @@ products: - email-routing --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; To enable Email Routing, start by creating a custom email address linked to a destination address or Email Worker. This forms an **email rule**. You can enable or disable rules from the Cloudflare dashboard. Refer to [Enable Email Routing](/email-routing/get-started/enable-email-routing) for more details. diff --git a/src/content/docs/email-routing/graphql-example.mdx b/src/content/docs/email-routing/graphql-example.mdx index 1026c732af09d68..01e88cb7c926f54 100644 --- a/src/content/docs/email-routing/graphql-example.mdx +++ b/src/content/docs/email-routing/graphql-example.mdx @@ -7,4 +7,4 @@ sidebar: order: 10 products: - email-routing ---- \ No newline at end of file +--- diff --git a/src/content/docs/email-routing/limits.mdx b/src/content/docs/email-routing/limits.mdx index aa0c9137f7e93b4..7ba2a9378e24cab 100644 --- a/src/content/docs/email-routing/limits.mdx +++ b/src/content/docs/email-routing/limits.mdx @@ -8,7 +8,7 @@ products: - email-routing --- -import { Render } from "~/components" +import { Render } from "~/components"; ## Email Workers size limits diff --git a/src/content/docs/email-routing/postmaster.mdx b/src/content/docs/email-routing/postmaster.mdx index f2e0afee4304d44..5024a5fca40679d 100644 --- a/src/content/docs/email-routing/postmaster.mdx +++ b/src/content/docs/email-routing/postmaster.mdx @@ -223,7 +223,6 @@ This means that you can have email addresses with an internationalized domain, b ### Non-delivery reports (NDRs) - Email Routing does not forward non-delivery reports to the original sender. This means the sender will not receive a notification indicating that the email did not reach the intended destination. ### Restrictive DMARC policies can make forwarded emails fail @@ -236,4 +235,4 @@ Email Routing does not support sending or replying from your Cloudflare domain. ### "`.`" is treated as a normal character for custom addresses -The `.` character, which performs special actions in email providers like Gmail, is treated as a normal character on custom addresses. \ No newline at end of file +The `.` character, which performs special actions in email providers like Gmail, is treated as a normal character on custom addresses. diff --git a/src/content/docs/email-routing/setup/email-routing-dns-records.mdx b/src/content/docs/email-routing/setup/email-routing-dns-records.mdx index 5b19f941bc3973c..d5a45e53b881844 100644 --- a/src/content/docs/email-routing/setup/email-routing-dns-records.mdx +++ b/src/content/docs/email-routing/setup/email-routing-dns-records.mdx @@ -17,8 +17,8 @@ You can check the status of your DNS records in the **Settings** section of Emai Check the status of your account's DNS records in the **Email DNS records** card: -* **Email DNS records configured** - DNS records are properly configured. -* **Email DNS records misconfigured** - There is a problem with your accounts DNS records. Select **Enable Email Routing** to [start troubleshooting problems](/email-routing/troubleshooting/). +- **Email DNS records configured** - DNS records are properly configured. +- **Email DNS records misconfigured** - There is a problem with your accounts DNS records. Select **Enable Email Routing** to [start troubleshooting problems](/email-routing/troubleshooting/). ### Start disabling @@ -36,8 +36,8 @@ Select **View DNS records** for a list of the required `MX` and sender policy fr If you are having trouble with your account's DNS records, refer to the [Troubleshooting](/email-routing/troubleshooting/) section. -## _dc-mx DNS responses +## \_dc-mx DNS responses If you see a DNS response with a `_dc-mx` prefix (for example, `_dc-mx.a1b2c3d4e5f6.example.com`), Cloudflare inserted it automatically. This response appears when your `MX` record points to a hostname that is [proxied](/dns/proxy-status/) through Cloudflare. The `_dc-mx` target itself resolves directly to your origin IP address so that mail traffic bypasses the proxy and reaches your mail server. -For more information, refer to [_dc-mx and dc-##### subdomains](/dns/manage-dns-records/troubleshooting/unexpected-dns-records/#dc--and-_dc-mx-subdomains). +For more information, refer to [\_dc-mx and dc-##### subdomains](/dns/manage-dns-records/troubleshooting/unexpected-dns-records/#dc--and-_dc-mx-subdomains). diff --git a/src/content/docs/email-routing/setup/index.mdx b/src/content/docs/email-routing/setup/index.mdx index 9e8e6168e7d9d3d..a985b31913d2240 100644 --- a/src/content/docs/email-routing/setup/index.mdx +++ b/src/content/docs/email-routing/setup/index.mdx @@ -8,6 +8,6 @@ products: - email-routing --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-routing/troubleshooting/index.mdx b/src/content/docs/email-routing/troubleshooting/index.mdx index 6049ae5a1dbf1b6..320a435287a9f78 100644 --- a/src/content/docs/email-routing/troubleshooting/index.mdx +++ b/src/content/docs/email-routing/troubleshooting/index.mdx @@ -8,7 +8,7 @@ products: - email-routing --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Email Routing warns you when your DNS records are not properly configured. In Email Routing's **Overview** page, you will see a message explaining what type of problem your account's DNS records have. diff --git a/src/content/docs/email-security/account-setup/index.mdx b/src/content/docs/email-security/account-setup/index.mdx index 58b9191302f4924..115b19e40df6b41 100644 --- a/src/content/docs/email-security/account-setup/index.mdx +++ b/src/content/docs/email-security/account-setup/index.mdx @@ -10,6 +10,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-security/deployment/api/setup/gsuite-bcc-setup/create-project-gcp.mdx b/src/content/docs/email-security/deployment/api/setup/gsuite-bcc-setup/create-project-gcp.mdx index 1a386467767d7a5..74464f58cb9a20e 100644 --- a/src/content/docs/email-security/deployment/api/setup/gsuite-bcc-setup/create-project-gcp.mdx +++ b/src/content/docs/email-security/deployment/api/setup/gsuite-bcc-setup/create-project-gcp.mdx @@ -8,7 +8,7 @@ products: - email-security --- -import { Render } from "~/components" +import { Render } from "~/components"; 1. Log in to the [Google Cloud Console](https://console.cloud.google.com/welcome/new). From the dashboard, select **CREATE OR SELECT PROJECT**. 2. Provide the details for the new project, and select **CREATE** to start your new project. @@ -19,4 +19,4 @@ import { Render } from "~/components" ## Next steps -Now that you have created a project on Google Cloud Console, you need to [create a service account](/email-security/deployment/api/setup/gsuite-bcc-setup/create-service-account/) on Google Cloud Console. \ No newline at end of file +Now that you have created a project on Google Cloud Console, you need to [create a service account](/email-security/deployment/api/setup/gsuite-bcc-setup/create-service-account/) on Google Cloud Console. diff --git a/src/content/docs/email-security/deployment/inline/reference/index.mdx b/src/content/docs/email-security/deployment/inline/reference/index.mdx index 3acddcd2503e68e..d967052afafa9a8 100644 --- a/src/content/docs/email-security/deployment/inline/reference/index.mdx +++ b/src/content/docs/email-security/deployment/inline/reference/index.mdx @@ -13,6 +13,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-security/deployment/inline/setup/index.mdx b/src/content/docs/email-security/deployment/inline/setup/index.mdx index 9d77a311b1def17..7944841692ccc8f 100644 --- a/src/content/docs/email-security/deployment/inline/setup/index.mdx +++ b/src/content/docs/email-security/deployment/inline/setup/index.mdx @@ -11,7 +11,7 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For help getting started with an [inline setup](/email-security/deployment/inline/), refer to the following guides: diff --git a/src/content/docs/email-security/email-configuration/domains-and-routing/alert-webhooks.mdx b/src/content/docs/email-security/email-configuration/domains-and-routing/alert-webhooks.mdx index b36be50d7f74394..1d64d9275d3103e 100644 --- a/src/content/docs/email-security/email-configuration/domains-and-routing/alert-webhooks.mdx +++ b/src/content/docs/email-security/email-configuration/domains-and-routing/alert-webhooks.mdx @@ -15,11 +15,11 @@ Alert Webhooks allow you to connect external services to Email security, includi - Slack - Email addresses - - SIEM - + term="SIEM" + link="/email-security/reporting/siem-integration/" + > + SIEM + - Microsoft Teams ## Create an alert webhook diff --git a/src/content/docs/email-security/email-configuration/domains-and-routing/index.mdx b/src/content/docs/email-security/email-configuration/domains-and-routing/index.mdx index 064f16bbe246605..bcf17ca94340495 100644 --- a/src/content/docs/email-security/email-configuration/domains-and-routing/index.mdx +++ b/src/content/docs/email-security/email-configuration/domains-and-routing/index.mdx @@ -8,6 +8,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-security/email-configuration/email-policies/index.mdx b/src/content/docs/email-security/email-configuration/email-policies/index.mdx index 970060f35bca548..f02050d417bebf4 100644 --- a/src/content/docs/email-security/email-configuration/email-policies/index.mdx +++ b/src/content/docs/email-security/email-configuration/email-policies/index.mdx @@ -8,7 +8,7 @@ products: - email-security --- -import { DirectoryListing, Render } from "~/components" +import { DirectoryListing, Render } from "~/components"; diff --git a/src/content/docs/email-security/email-configuration/enhanced-detections/index.mdx b/src/content/docs/email-security/email-configuration/enhanced-detections/index.mdx index cf276be7c979d2c..57eafdbc713f614 100644 --- a/src/content/docs/email-security/email-configuration/enhanced-detections/index.mdx +++ b/src/content/docs/email-security/email-configuration/enhanced-detections/index.mdx @@ -8,6 +8,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-security/email-configuration/lists/index.mdx b/src/content/docs/email-security/email-configuration/lists/index.mdx index fb788ae5a7833ef..309b6ba3c5e4a88 100644 --- a/src/content/docs/email-security/email-configuration/lists/index.mdx +++ b/src/content/docs/email-security/email-configuration/lists/index.mdx @@ -8,6 +8,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-security/migrate-to-email-security.mdx b/src/content/docs/email-security/migrate-to-email-security.mdx index 0f8848970f558ed..1f577dece7e60c7 100644 --- a/src/content/docs/email-security/migrate-to-email-security.mdx +++ b/src/content/docs/email-security/migrate-to-email-security.mdx @@ -45,15 +45,15 @@ To invite users in Zero Trust Email security: Once you have added new account members, you will have to assign each member an [Email security role](/cloudflare-one/roles-permissions/#email-security-roles). -| Area 1 | Email security | Description | -| ------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Area 1 | Email security | Description | +| ------------------- | ------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | N/A | Cloudflare Zero Trust | Can edit Cloudflare [Zero Trust](/cloudflare-one/). Has administrator access to all Zero Trust products including Access, Gateway, the Cloudflare One Client, Tunnel, Browser Isolation, CASB, DLP, DEX, and Email security. | -| Super Admin | Email security Analyst + Email security Configuration Admin = Super Admin | Has full access to all admin features in Email security | -| Configuration Admin | Email security Configuration Admin | Has administrator access. Cannot take actions on emails, or read emails | -| SOC Analyst | Email security Analyst | Has analyst access. Can take action on emails and read emails. | -| Viewer | Email security Reporting | Can read metrics | -| N/A | Cloudflare Zero Trust PII | Can read PII in Zero Trust (this includes Email security) | -| N/A | Email security Policy Admin | Can read all settings, but only write allow policies, trusted domains, and blocked senders | +| Super Admin | Email security Analyst + Email security Configuration Admin = Super Admin | Has full access to all admin features in Email security | +| Configuration Admin | Email security Configuration Admin | Has administrator access. Cannot take actions on emails, or read emails | +| SOC Analyst | Email security Analyst | Has analyst access. Can take action on emails and read emails. | +| Viewer | Email security Reporting | Can read metrics | +| N/A | Cloudflare Zero Trust PII | Can read PII in Zero Trust (this includes Email security) | +| N/A | Email security Policy Admin | Can read all settings, but only write allow policies, trusted domains, and blocked senders | ## Create webhooks @@ -142,12 +142,12 @@ This table displays the difference in terminology used when creating policies: This table displays the difference in terminology used when finding emails whose disposition is incorrect: -| Area 1 | Email security | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| Area 1 | Email security | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | | Report [false negative](/email-security/email-configuration/phish-submissions/#false-negatives)/[false positive](/email-security/email-configuration/phish-submissions/#false-positives) | [Submit messages for review](/cloudflare-one/email-security/submissions/#submit-messages-for-review) | -| N/A | Escalate user submissions | -| [Team submission](/email-security/email-configuration/phish-submissions/#how-to-submit-phish) | [Team submissions](/cloudflare-one/email-security/submissions/team-submissions/) | -| [User submission](/email-security/email-configuration/phish-submissions/#how-to-submit-phish) | [User submissions](/cloudflare-one/email-security/submissions/user-submissions/) | +| N/A | Escalate user submissions | +| [Team submission](/email-security/email-configuration/phish-submissions/#how-to-submit-phish) | [Team submissions](/cloudflare-one/email-security/submissions/team-submissions/) | +| [User submission](/email-security/email-configuration/phish-submissions/#how-to-submit-phish) | [User submissions](/cloudflare-one/email-security/submissions/user-submissions/) | ## Business Email Compromise diff --git a/src/content/docs/email-security/reference/index.mdx b/src/content/docs/email-security/reference/index.mdx index 9f7509bd9cf9280..c38a16a0de9f080 100644 --- a/src/content/docs/email-security/reference/index.mdx +++ b/src/content/docs/email-security/reference/index.mdx @@ -10,6 +10,6 @@ products: - email-security --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/email-service/api/index.mdx b/src/content/docs/email-service/api/index.mdx index 44e78505396a107..d03187150053624 100644 --- a/src/content/docs/email-service/api/index.mdx +++ b/src/content/docs/email-service/api/index.mdx @@ -12,4 +12,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/api/route-emails/email-handler.mdx b/src/content/docs/email-service/api/route-emails/email-handler.mdx index a5e96e60aafc443..4de6233a27266e7 100644 --- a/src/content/docs/email-service/api/route-emails/email-handler.mdx +++ b/src/content/docs/email-service/api/route-emails/email-handler.mdx @@ -8,7 +8,7 @@ sidebar: order: 1 products: - email-service - - workers + - workers --- import { Tabs, TabItem } from "~/components"; diff --git a/src/content/docs/email-service/api/route-emails/index.mdx b/src/content/docs/email-service/api/route-emails/index.mdx index 5d7f8f3f10cb0db..1d26611cdc87d0d 100644 --- a/src/content/docs/email-service/api/route-emails/index.mdx +++ b/src/content/docs/email-service/api/route-emails/index.mdx @@ -14,4 +14,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/api/send-emails/rest-api.mdx b/src/content/docs/email-service/api/send-emails/rest-api.mdx index 7435885f3824271..91cbd43aa37da94 100644 --- a/src/content/docs/email-service/api/send-emails/rest-api.mdx +++ b/src/content/docs/email-service/api/send-emails/rest-api.mdx @@ -135,14 +135,14 @@ A successful response returns the delivery status for each recipient: ```json { - "success": true, - "errors": [], - "messages": [], - "result": { - "delivered": ["recipient@example.com"], - "permanent_bounces": [], - "queued": [] - } + "success": true, + "errors": [], + "messages": [], + "result": { + "delivered": ["recipient@example.com"], + "permanent_bounces": [], + "queued": [] + } } ``` @@ -156,29 +156,29 @@ The REST API returns standard Cloudflare API error responses. A failed request r ```json { - "success": false, - "errors": [ - { - "code": 10001, - "message": "email.sending.error.invalid_request_schema" - } - ], - "messages": [], - "result": null + "success": false, + "errors": [ + { + "code": 10001, + "message": "email.sending.error.invalid_request_schema" + } + ], + "messages": [], + "result": null } ``` Common REST API error codes: -| HTTP Status | Code | Message | Description | -| ----------- | ---- | ------- | ----------- | -| 400 | 10001 | `email.sending.error.invalid_request_schema` | Invalid request format | -| 400 | 10200 | `email.sending.error.email.invalid` | Invalid email content | -| 400 | 10201 | `email.sending.error.email.no_content_length` | Missing content length | -| 400 | 10202 | `email.sending.error.email.too_big` | Email exceeds size limit | -| 403 | 10203 | `email.sending.error.email.sending_disabled` | Sending disabled for this zone/account | -| 429 | 10004 | `email.sending.error.throttled` | Rate limit exceeded | -| 500 | 10002 | `email.sending.error.internal_server` | Internal server error | +| HTTP Status | Code | Message | Description | +| ----------- | ----- | --------------------------------------------- | -------------------------------------- | +| 400 | 10001 | `email.sending.error.invalid_request_schema` | Invalid request format | +| 400 | 10200 | `email.sending.error.email.invalid` | Invalid email content | +| 400 | 10201 | `email.sending.error.email.no_content_length` | Missing content length | +| 400 | 10202 | `email.sending.error.email.too_big` | Email exceeds size limit | +| 403 | 10203 | `email.sending.error.email.sending_disabled` | Sending disabled for this zone/account | +| 429 | 10004 | `email.sending.error.throttled` | Rate limit exceeded | +| 500 | 10002 | `email.sending.error.internal_server` | Internal server error | :::note[Workers binding vs REST API errors] The REST API returns standard Cloudflare API numeric error codes, while the [Workers binding](/email-service/api/send-emails/workers-api/) throws errors with string codes (for example, `E_SENDER_NOT_VERIFIED`). Refer to the [Workers API error codes table](/email-service/api/send-emails/workers-api/#error-codes) for the string error codes. diff --git a/src/content/docs/email-service/api/send-emails/workers-api.mdx b/src/content/docs/email-service/api/send-emails/workers-api.mdx index 83244ea4c0e7dbb..ad7de8aa161ea02 100644 --- a/src/content/docs/email-service/api/send-emails/workers-api.mdx +++ b/src/content/docs/email-service/api/send-emails/workers-api.mdx @@ -235,27 +235,27 @@ export default { The following error codes may be returned when sending emails: -| Error Code | Description | Common Causes | -| ------------------------------- | --------------------------------------- | ------------------------------------------------------------- | -| `E_VALIDATION_ERROR` | Validation error in the payload | Invalid email format, missing required fields, malformed data | -| `E_FIELD_MISSING` | Required field is missing | Missing `to`, `from`, or `subject` fields | -| `E_TOO_MANY_RECIPIENTS` | Too many recipients in to/cc/bcc arrays | Combined recipients exceed 50 limit | -| `E_SENDER_NOT_VERIFIED` | Sender domain not verified | Attempting to send from unverified domain | -| `E_RECIPIENT_NOT_ALLOWED` | Recipient not in allowed list | Recipient address not in `allowed_destination_addresses` | -| `E_RECIPIENT_SUPPRESSED` | Recipient is on suppression list | Email address has bounced or reported your emails as spam | -| `E_SENDER_DOMAIN_NOT_AVAILABLE` | Domain not available for sending | Domain not onboarded to Email Service | -| `E_CONTENT_TOO_LARGE` | Email content exceeds size limit | Total message size exceeds the maximum | -| `E_DELIVERY_FAILED` | Could not deliver the email | SMTP delivery failure, recipient server rejection | -| `E_RATE_LIMIT_EXCEEDED` | Rate limit exceeded | Sending rate limit reached | -| `E_DAILY_LIMIT_EXCEEDED` | Daily limit exceeded | Daily sending quota reached | -| `E_INTERNAL_SERVER_ERROR` | Internal service error | Email Service temporarily unavailable | +| Error Code | Description | Common Causes | +| ------------------------------- | --------------------------------------- | ------------------------------------------------------------------------------------------ | +| `E_VALIDATION_ERROR` | Validation error in the payload | Invalid email format, missing required fields, malformed data | +| `E_FIELD_MISSING` | Required field is missing | Missing `to`, `from`, or `subject` fields | +| `E_TOO_MANY_RECIPIENTS` | Too many recipients in to/cc/bcc arrays | Combined recipients exceed 50 limit | +| `E_SENDER_NOT_VERIFIED` | Sender domain not verified | Attempting to send from unverified domain | +| `E_RECIPIENT_NOT_ALLOWED` | Recipient not in allowed list | Recipient address not in `allowed_destination_addresses` | +| `E_RECIPIENT_SUPPRESSED` | Recipient is on suppression list | Email address has bounced or reported your emails as spam | +| `E_SENDER_DOMAIN_NOT_AVAILABLE` | Domain not available for sending | Domain not onboarded to Email Service | +| `E_CONTENT_TOO_LARGE` | Email content exceeds size limit | Total message size exceeds the maximum | +| `E_DELIVERY_FAILED` | Could not deliver the email | SMTP delivery failure, recipient server rejection | +| `E_RATE_LIMIT_EXCEEDED` | Rate limit exceeded | Sending rate limit reached | +| `E_DAILY_LIMIT_EXCEEDED` | Daily limit exceeded | Daily sending quota reached | +| `E_INTERNAL_SERVER_ERROR` | Internal service error | Email Service temporarily unavailable | | `E_HEADER_NOT_ALLOWED` | Header not allowed | Header is platform-controlled or not on the [whitelist](/email-service/reference/headers/) | -| `E_HEADER_USE_API_FIELD` | Must use API field | Header like `From` must be set via the dedicated API field | -| `E_HEADER_VALUE_INVALID` | Header value invalid | Malformed value, empty, or incorrect format | -| `E_HEADER_VALUE_TOO_LONG` | Header value too long | Value exceeds 2,048 byte limit | -| `E_HEADER_NAME_INVALID` | Header name invalid | Invalid characters or exceeds 100 byte limit | -| `E_HEADERS_TOO_LARGE` | Headers payload too large | Total custom headers exceed 16 KB limit | -| `E_HEADERS_TOO_MANY` | Too many headers | More than 20 whitelisted (non-X) custom headers | +| `E_HEADER_USE_API_FIELD` | Must use API field | Header like `From` must be set via the dedicated API field | +| `E_HEADER_VALUE_INVALID` | Header value invalid | Malformed value, empty, or incorrect format | +| `E_HEADER_VALUE_TOO_LONG` | Header value too long | Value exceeds 2,048 byte limit | +| `E_HEADER_NAME_INVALID` | Header name invalid | Invalid characters or exceeds 100 byte limit | +| `E_HEADERS_TOO_LARGE` | Headers payload too large | Total custom headers exceed 16 KB limit | +| `E_HEADERS_TOO_MANY` | Too many headers | More than 20 whitelisted (non-X) custom headers | ## Legacy `EmailMessage` API diff --git a/src/content/docs/email-service/concepts/index.mdx b/src/content/docs/email-service/concepts/index.mdx index 6dacc309b767a1c..20dd8baf3869d18 100644 --- a/src/content/docs/email-service/concepts/index.mdx +++ b/src/content/docs/email-service/concepts/index.mdx @@ -12,4 +12,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/configuration/index.mdx b/src/content/docs/email-service/configuration/index.mdx index d7381d7a1565017..d8ae4416f025c07 100644 --- a/src/content/docs/email-service/configuration/index.mdx +++ b/src/content/docs/email-service/configuration/index.mdx @@ -12,4 +12,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/examples/email-routing/hard-bounce-handling.mdx b/src/content/docs/email-service/examples/email-routing/hard-bounce-handling.mdx index be8214fb629d3e3..7b743963157b998 100644 --- a/src/content/docs/email-service/examples/email-routing/hard-bounce-handling.mdx +++ b/src/content/docs/email-service/examples/email-routing/hard-bounce-handling.mdx @@ -44,138 +44,145 @@ id = "your-kv-namespace-id" ## Hard bounce detection ```javascript -import * as PostalMime from 'postal-mime'; +import * as PostalMime from "postal-mime"; export default { - async email(message, env, ctx) { - // Parse the raw email message - const parser = new PostalMime.default(); - const rawEmail = new Response(message.raw); - const email = await parser.parse(await rawEmail.arrayBuffer()); - - // Check if this is a bounce notification - if (isBounceNotification(email)) { - const bounceInfo = await parseBounceInfo(email); - - if (bounceInfo.type === 'hard') { - await handleHardBounce(bounceInfo, env); - console.log(`Hard bounce processed for: ${bounceInfo.originalRecipient}`); - return; - } - } - - // Forward non-bounce emails normally - await message.forward('admin@yourdomain.com'); - }, + async email(message, env, ctx) { + // Parse the raw email message + const parser = new PostalMime.default(); + const rawEmail = new Response(message.raw); + const email = await parser.parse(await rawEmail.arrayBuffer()); + + // Check if this is a bounce notification + if (isBounceNotification(email)) { + const bounceInfo = await parseBounceInfo(email); + + if (bounceInfo.type === "hard") { + await handleHardBounce(bounceInfo, env); + console.log( + `Hard bounce processed for: ${bounceInfo.originalRecipient}`, + ); + return; + } + } + + // Forward non-bounce emails normally + await message.forward("admin@yourdomain.com"); + }, }; function isBounceNotification(email) { - // Check common bounce indicators - const subject = email.subject?.toLowerCase() || ''; - const fromAddress = email.from?.address?.toLowerCase() || ''; - - // Common bounce indicators - const bounceSubjects = [ - 'mail delivery failed', - 'undelivered mail returned to sender', - 'delivery status notification', - 'returned mail', - 'mail system error' - ]; - - const bounceFromPatterns = [ - 'mailer-daemon', - 'mail-daemon', - 'postmaster', - 'noreply', - 'bounce' - ]; - - return bounceSubjects.some(phrase => subject.includes(phrase)) || - bounceFromPatterns.some(pattern => fromAddress.includes(pattern)); + // Check common bounce indicators + const subject = email.subject?.toLowerCase() || ""; + const fromAddress = email.from?.address?.toLowerCase() || ""; + + // Common bounce indicators + const bounceSubjects = [ + "mail delivery failed", + "undelivered mail returned to sender", + "delivery status notification", + "returned mail", + "mail system error", + ]; + + const bounceFromPatterns = [ + "mailer-daemon", + "mail-daemon", + "postmaster", + "noreply", + "bounce", + ]; + + return ( + bounceSubjects.some((phrase) => subject.includes(phrase)) || + bounceFromPatterns.some((pattern) => fromAddress.includes(pattern)) + ); } async function parseBounceInfo(email) { - const text = email.text || ''; - const html = email.html || ''; - const content = text + ' ' + html; - - // Extract original recipient email - const recipientMatch = content.match(/(?:to|for|recipient):\s*([^\s<]+@[^\s>]+)/i) || - content.match(/([^\s<]+@[^\s>]+)/); - - const originalRecipient = recipientMatch ? recipientMatch[1] : null; - - // Determine bounce type based on content - const hardBounceIndicators = [ - 'user unknown', - 'no such user', - 'invalid recipient', - 'recipient address rejected', - 'mailbox unavailable', - 'domain not found', - '5.1.1', // SMTP error code for bad destination mailbox - '5.1.2', // SMTP error code for bad destination system - '5.4.1', // SMTP error code for no answer from host - ]; - - const isHardBounce = hardBounceIndicators.some(indicator => - content.toLowerCase().includes(indicator.toLowerCase()) - ); - - return { - type: isHardBounce ? 'hard' : 'soft', - originalRecipient, - reason: extractBounceReason(content), - timestamp: new Date().toISOString() - }; + const text = email.text || ""; + const html = email.html || ""; + const content = text + " " + html; + + // Extract original recipient email + const recipientMatch = + content.match(/(?:to|for|recipient):\s*([^\s<]+@[^\s>]+)/i) || + content.match(/([^\s<]+@[^\s>]+)/); + + const originalRecipient = recipientMatch ? recipientMatch[1] : null; + + // Determine bounce type based on content + const hardBounceIndicators = [ + "user unknown", + "no such user", + "invalid recipient", + "recipient address rejected", + "mailbox unavailable", + "domain not found", + "5.1.1", // SMTP error code for bad destination mailbox + "5.1.2", // SMTP error code for bad destination system + "5.4.1", // SMTP error code for no answer from host + ]; + + const isHardBounce = hardBounceIndicators.some((indicator) => + content.toLowerCase().includes(indicator.toLowerCase()), + ); + + return { + type: isHardBounce ? "hard" : "soft", + originalRecipient, + reason: extractBounceReason(content), + timestamp: new Date().toISOString(), + }; } function extractBounceReason(content) { - // Extract the specific error message - const reasonPatterns = [ - /diagnostic[- ]code:\s*(.+)/i, - /reason:\s*(.+)/i, - /error:\s*(.+)/i, - /(5\.\d+\.\d+[^.\n]*)/i - ]; - - for (const pattern of reasonPatterns) { - const match = content.match(pattern); - if (match) { - return match[1].trim().split('\n')[0]; // Take first line only - } - } - - return 'Unknown bounce reason'; + // Extract the specific error message + const reasonPatterns = [ + /diagnostic[- ]code:\s*(.+)/i, + /reason:\s*(.+)/i, + /error:\s*(.+)/i, + /(5\.\d+\.\d+[^.\n]*)/i, + ]; + + for (const pattern of reasonPatterns) { + const match = content.match(pattern); + if (match) { + return match[1].trim().split("\n")[0]; // Take first line only + } + } + + return "Unknown bounce reason"; } async function handleHardBounce(bounceInfo, env) { - if (!bounceInfo.originalRecipient) { - console.log('Could not extract original recipient from bounce'); - return; - } - - // Add to suppression list in KV - await env.SUPPRESSION_LIST.put( - bounceInfo.originalRecipient, - JSON.stringify({ - type: 'hard_bounce', - reason: bounceInfo.reason, - timestamp: bounceInfo.timestamp, - status: 'suppressed' - }), - { - metadata: { - bounceType: 'hard', - addedDate: bounceInfo.timestamp - } - } - ); - - console.log(`Added ${bounceInfo.originalRecipient} to suppression list: ${bounceInfo.reason}`); + if (!bounceInfo.originalRecipient) { + console.log("Could not extract original recipient from bounce"); + return; + } + + // Add to suppression list in KV + await env.SUPPRESSION_LIST.put( + bounceInfo.originalRecipient, + JSON.stringify({ + type: "hard_bounce", + reason: bounceInfo.reason, + timestamp: bounceInfo.timestamp, + status: "suppressed", + }), + { + metadata: { + bounceType: "hard", + addedDate: bounceInfo.timestamp, + }, + }, + ); + + console.log( + `Added ${bounceInfo.originalRecipient} to suppression list: ${bounceInfo.reason}`, + ); } -```` +``` ## Testing hard bounce handling diff --git a/src/content/docs/email-service/examples/email-routing/spam-filtering.mdx b/src/content/docs/email-service/examples/email-routing/spam-filtering.mdx index a7a6a6f31405fa0..4f7199cce0ef4f7 100644 --- a/src/content/docs/email-service/examples/email-routing/spam-filtering.mdx +++ b/src/content/docs/email-service/examples/email-routing/spam-filtering.mdx @@ -40,7 +40,7 @@ class SimpleSpamFilter implements SpamFilter { "winner", "congratulations", "inheritance", - "lottery" + "lottery", ]; private trustedDomains = ["company.com", "trusted-partner.com", "vendor.net"]; @@ -83,7 +83,10 @@ class SimpleSpamFilter implements SpamFilter { } // Check for suspicious sender patterns - if (sender.includes("noreply") && subject.toLowerCase().includes("urgent")) { + if ( + sender.includes("noreply") && + subject.toLowerCase().includes("urgent") + ) { score += 2; reasons.push("Suspicious noreply + urgent combination"); } @@ -101,31 +104,33 @@ const spamFilter = new SimpleSpamFilter(); export default { async email(message, env, ctx): Promise { const startTime = Date.now(); - + // Check for spam const spamCheck = await spamFilter.checkSpam(message); // Track spam check metrics env.EMAIL_ANALYTICS?.writeDataPoint({ blobs: [ - 'spam_check_completed', + "spam_check_completed", message.from, message.to, - spamCheck.isSpam ? 'spam' : 'legitimate' + spamCheck.isSpam ? "spam" : "legitimate", ], doubles: [ 1, // Count spamCheck.score, - Date.now() - startTime + Date.now() - startTime, ], indexes: [ `spam_detected:${spamCheck.isSpam}`, - `score_range:${getScoreRange(spamCheck.score)}` - ] + `score_range:${getScoreRange(spamCheck.score)}`, + ], }); if (spamCheck.isSpam) { - console.log(`🚫 Rejected spam email from ${message.from}: ${spamCheck.reasons.join(", ")}`); + console.log( + `🚫 Rejected spam email from ${message.from}: ${spamCheck.reasons.join(", ")}`, + ); message.setReject(`Message rejected: ${spamCheck.reasons[0]}`); return; } @@ -141,13 +146,13 @@ export default { }; function getScoreRange(score: number): string { - if (score < 0) return 'trusted'; - if (score === 0) return 'neutral'; - if (score === 1) return 'suspicious'; - return 'spam'; + if (score < 0) return "trusted"; + if (score === 0) return "neutral"; + if (score === 1) return "suspicious"; + return "spam"; } ``` ## Advanced spam detection with AI -For more sophisticated spam detection, you can enhance the basic filter using [Workers AI](/workers-ai) to analyze email content with machine learning models. This approach can identify subtle spam patterns that keyword-based filters might miss. \ No newline at end of file +For more sophisticated spam detection, you can enhance the basic filter using [Workers AI](/workers-ai) to analyze email content with machine learning models. This approach can identify subtle spam patterns that keyword-based filters might miss. diff --git a/src/content/docs/email-service/get-started/send-emails.mdx b/src/content/docs/email-service/get-started/send-emails.mdx index 14f5fccbd0ab3f5..cb5765ac4807d02 100644 --- a/src/content/docs/email-service/get-started/send-emails.mdx +++ b/src/content/docs/email-service/get-started/send-emails.mdx @@ -54,14 +54,14 @@ A successful response includes the delivery status for each recipient: ```json { - "success": true, - "errors": [], - "messages": [], - "result": { - "delivered": ["recipient@example.com"], - "permanent_bounces": [], - "queued": [] - } + "success": true, + "errors": [], + "messages": [], + "result": { + "delivered": ["recipient@example.com"], + "permanent_bounces": [], + "queued": [] + } } ``` @@ -84,14 +84,14 @@ If you are building on Cloudflare Workers, you can use the Workers binding for n 2. Add the email binding to your Wrangler configuration file: - - ```toml - [[send_email]] - name = "EMAIL" - remote = true - ``` - - + + ```toml + [[send_email]] + name = "EMAIL" + remote = true + ``` + + 3. Create your Worker code in `src/index.ts`: @@ -147,4 +147,4 @@ Now that you can send emails, explore advanced features: - **[Route incoming emails](/email-service/get-started/route-emails/)** - Process emails sent to your domain - **[API reference](/email-service/api/send-emails/)** - Complete API documentation -- **[Examples](/email-service/examples/)** - Real-world implementation patterns \ No newline at end of file +- **[Examples](/email-service/examples/)** - Real-world implementation patterns diff --git a/src/content/docs/email-service/local-development/index.mdx b/src/content/docs/email-service/local-development/index.mdx index 9b9df2443a3e182..90f0be957d8c338 100644 --- a/src/content/docs/email-service/local-development/index.mdx +++ b/src/content/docs/email-service/local-development/index.mdx @@ -14,4 +14,4 @@ import { DirectoryListing } from "~/components"; Test and develop your email applications locally using Wrangler before deploying to production. - \ No newline at end of file + diff --git a/src/content/docs/email-service/local-development/routing.mdx b/src/content/docs/email-service/local-development/routing.mdx index caf0d02137925c7..50adb9e89ffd9e6 100644 --- a/src/content/docs/email-service/local-development/routing.mdx +++ b/src/content/docs/email-service/local-development/routing.mdx @@ -35,30 +35,30 @@ name = "EMAIL" ## Basic routing worker ```javascript -import * as PostalMime from 'postal-mime'; +import * as PostalMime from "postal-mime"; export default { - async email(message, env, ctx) { - // Parse the raw email message - const parser = new PostalMime.default(); - const rawEmail = new Response(message.raw); - const email = await parser.parse(await rawEmail.arrayBuffer()); - - console.log('Received email:', { - from: message.from, - to: message.to, - subject: email.subject, - text: email.text, - html: email.html - }); - - // Route based on recipient - if (message.to.includes('support@')) { - await message.forward('support-team@company.com'); - } else { - await message.forward('general@company.com'); - } - }, + async email(message, env, ctx) { + // Parse the raw email message + const parser = new PostalMime.default(); + const rawEmail = new Response(message.raw); + const email = await parser.parse(await rawEmail.arrayBuffer()); + + console.log("Received email:", { + from: message.from, + to: message.to, + subject: email.subject, + text: email.text, + html: email.html, + }); + + // Route based on recipient + if (message.to.includes("support@")) { + await message.forward("support-team@company.com"); + } else { + await message.forward("general@company.com"); + } + }, }; ``` diff --git a/src/content/docs/email-service/platform/index.mdx b/src/content/docs/email-service/platform/index.mdx index 56789154dfe88e9..c4e599e6b17ffc9 100644 --- a/src/content/docs/email-service/platform/index.mdx +++ b/src/content/docs/email-service/platform/index.mdx @@ -12,4 +12,4 @@ products: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/platform/pricing.mdx b/src/content/docs/email-service/platform/pricing.mdx index 914f0b2cf37e5a8..4dfa8f6a7c2c0c2 100644 --- a/src/content/docs/email-service/platform/pricing.mdx +++ b/src/content/docs/email-service/platform/pricing.mdx @@ -14,9 +14,9 @@ Cloudflare Email Service pricing is based on your Cloudflare plan and email usag Email Routing is available on both the Workers Free and Workers Paid plans. Email Sending is only available on the Workers Paid plan. -| | Workers Free | Workers Paid | -| ------------------------------------------------------- | ---------------- | ---------------- | -| **Outbound emails (Email Sending)** | Not available | 3,000 included per month, then $0.35 per 1,000 emails | -| **Inbound emails (Email Routing)** | Unlimited | Unlimited | +| | Workers Free | Workers Paid | +| ----------------------------------- | ------------- | ----------------------------------------------------- | +| **Outbound emails (Email Sending)** | Not available | 3,000 included per month, then $0.35 per 1,000 emails | +| **Inbound emails (Email Routing)** | Unlimited | Unlimited | Email Routing Workers is billed according to [Workers pricing](/workers/platform/pricing/). diff --git a/src/content/docs/email-service/reference/index.mdx b/src/content/docs/email-service/reference/index.mdx index fb104b8db015bee..667dce89f146995 100644 --- a/src/content/docs/email-service/reference/index.mdx +++ b/src/content/docs/email-service/reference/index.mdx @@ -8,9 +8,8 @@ sidebar: hideIndex: true products: - email-service - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/email-service/reference/postmaster.mdx b/src/content/docs/email-service/reference/postmaster.mdx index e5f357aa33574bd..329745da9935650 100644 --- a/src/content/docs/email-service/reference/postmaster.mdx +++ b/src/content/docs/email-service/reference/postmaster.mdx @@ -164,7 +164,6 @@ This means that you can have email addresses with an internationalized domain, b ### Non-delivery reports (NDRs) - Email Routing does not forward non-delivery reports to the original sender. This means the sender will not receive a notification indicating that the email did not reach the intended destination. ### Restrictive DMARC policies can make forwarded emails fail diff --git a/src/content/docs/firewall/api/cf-filters/delete.mdx b/src/content/docs/firewall/api/cf-filters/delete.mdx index b6c9144e5c5757d..3d3ea8b45311d7f 100644 --- a/src/content/docs/firewall/api/cf-filters/delete.mdx +++ b/src/content/docs/firewall/api/cf-filters/delete.mdx @@ -24,17 +24,17 @@ curl --request DELETE \ ```json title="Response" { - "result": [ - { - "id": "" - }, - { - "id": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "" + }, + { + "id": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -51,13 +51,13 @@ curl --request DELETE \ ```json title="Response" { - "result": [ - { - "id": "" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/api/cf-filters/get.mdx b/src/content/docs/firewall/api/cf-filters/get.mdx index c4c4d34c089e8f4..f60ae9c7c41a342 100644 --- a/src/content/docs/firewall/api/cf-filters/get.mdx +++ b/src/content/docs/firewall/api/cf-filters/get.mdx @@ -23,47 +23,47 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/filters" \ ```json title="Response" { - "result": [ - { - "id": "", - "paused": false, - "description": "Login from office", - "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - }, - { - "id": "", - "paused": false, - "description": "Login", - "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - }, - { - "id": "", - "paused": false, - "description": "not /api", - "expression": "not http.request.uri.path matches \"^/api/.*$\"" - }, - { - "id": "", - "paused": false, - "description": "/api", - "expression": "http.request.uri.path matches \"^/api/.*$\"" - }, - { - "id": "", - "paused": false, - "expression": "ip.src eq 93.184.216.0" - } - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 25, - "count": 5, - "total_count": 5, - "total_pages": 1 - } + "result": [ + { + "id": "", + "paused": false, + "description": "Login from office", + "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + }, + { + "id": "", + "paused": false, + "description": "Login", + "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + }, + { + "id": "", + "paused": false, + "description": "not /api", + "expression": "not http.request.uri.path matches \"^/api/.*$\"" + }, + { + "id": "", + "paused": false, + "description": "/api", + "expression": "http.request.uri.path matches \"^/api/.*$\"" + }, + { + "id": "", + "paused": false, + "expression": "ip.src eq 93.184.216.0" + } + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 25, + "count": 5, + "total_count": 5, + "total_pages": 1 + } } ``` @@ -79,14 +79,14 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/filters/{filter_id}" ```json title="Response" { - "result": { - "id": "", - "paused": false, - "description": "Login from office", - "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "paused": false, + "description": "Login from office", + "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + }, + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/api/cf-filters/post.mdx b/src/content/docs/firewall/api/cf-filters/post.mdx index ec20a4e1f410ada..966cc67d408dcfc 100644 --- a/src/content/docs/firewall/api/cf-filters/post.mdx +++ b/src/content/docs/firewall/api/cf-filters/post.mdx @@ -43,39 +43,39 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/filters" \ ```json title="Response" { - "result": [ - { - "id": "", - "paused": false, - "expression": "ip.src eq 93.184.216.0" - }, - { - "id": "", - "paused": false, - "description": "/api", - "expression": "http.request.uri.path matches \"^/api/.*$\"" - }, - { - "id": "", - "paused": false, - "description": "not /api", - "expression": "not http.request.uri.path matches \"^/api/.*$\"" - }, - { - "id": "", - "paused": false, - "description": "Login", - "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - }, - { - "id": "", - "paused": false, - "description": "Login from office", - "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "paused": false, + "expression": "ip.src eq 93.184.216.0" + }, + { + "id": "", + "paused": false, + "description": "/api", + "expression": "http.request.uri.path matches \"^/api/.*$\"" + }, + { + "id": "", + "paused": false, + "description": "not /api", + "expression": "not http.request.uri.path matches \"^/api/.*$\"" + }, + { + "id": "", + "paused": false, + "description": "Login", + "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + }, + { + "id": "", + "paused": false, + "description": "Login from office", + "expression": "ip.src eq 93.184.216.0 and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/api/cf-filters/put.mdx b/src/content/docs/firewall/api/cf-filters/put.mdx index 4a08764ea671787..a0412eac414fc43 100644 --- a/src/content/docs/firewall/api/cf-filters/put.mdx +++ b/src/content/docs/firewall/api/cf-filters/put.mdx @@ -38,23 +38,23 @@ curl --request PUT \ ```json title="Response" { - "result": [ - { - "id": "", - "paused": false, - "description": "IP of example.org", - "expression": "ip.src eq 93.184.216.0" - }, - { - "id": "", - "paused": false, - "description": "/api", - "expression": "http.request.uri.path matches \"^/api/.*$\"" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "paused": false, + "description": "IP of example.org", + "expression": "ip.src eq 93.184.216.0" + }, + { + "id": "", + "paused": false, + "description": "/api", + "expression": "http.request.uri.path matches \"^/api/.*$\"" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -78,14 +78,14 @@ curl --request PUT \ ```json title="Response" { - "result": { - "id": "", - "paused": false, - "description": "Login from office", - "expression": "ip.src in {2400:cb00::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "paused": false, + "description": "Login from office", + "expression": "ip.src in {2400:cb00::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")" + }, + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/api/cf-filters/validation.mdx b/src/content/docs/firewall/api/cf-filters/validation.mdx index 42402810e50cc29..191219397a1902a 100644 --- a/src/content/docs/firewall/api/cf-filters/validation.mdx +++ b/src/content/docs/firewall/api/cf-filters/validation.mdx @@ -10,8 +10,6 @@ description: Validate firewall rule expressions via the API. The Cloudflare Filters API supports an endpoint for validating expressions. - - ## Examples ### Validate expression via query string @@ -24,14 +22,14 @@ curl "https://api.cloudflare.com/client/v4/filters/validate-expr?expression=ip.s ```json title="Response" { - "result": null, - "success": false, - "errors": [ - { - "message": "Filter parsing error:\n`ip.src==34`\n ^^ couldn't parse address in network: invalid IP address syntax\n" - } - ], - "messages": null + "result": null, + "success": false, + "errors": [ + { + "message": "Filter parsing error:\n`ip.src==34`\n ^^ couldn't parse address in network: invalid IP address syntax\n" + } + ], + "messages": null } ``` @@ -57,14 +55,14 @@ curl "https://api.cloudflare.com/client/v4/filters/validate-expr" \ ```json title="Response" { - "result": null, - "success": false, - "errors": [ - { - "message": "Filter parsing error:\n`ip.src in {2400:cb00::/32 2405:8100::/2000 2c0f:f248::/32 2a06:98c0::/29}`\n ^^^^ number too large to fit in target type while parsing with radix 10\n" - } - ], - "messages": null + "result": null, + "success": false, + "errors": [ + { + "message": "Filter parsing error:\n`ip.src in {2400:cb00::/32 2405:8100::/2000 2c0f:f248::/32 2a06:98c0::/29}`\n ^^^^ number too large to fit in target type while parsing with radix 10\n" + } + ], + "messages": null } ``` diff --git a/src/content/docs/firewall/api/cf-filters/what-is-a-filter.mdx b/src/content/docs/firewall/api/cf-filters/what-is-a-filter.mdx index 493daca2fecd16a..c396807b1630fa8 100644 --- a/src/content/docs/firewall/api/cf-filters/what-is-a-filter.mdx +++ b/src/content/docs/firewall/api/cf-filters/what-is-a-filter.mdx @@ -24,9 +24,9 @@ A filter object typically looks like the following: ```json { - "id": "", - "expression": "(http.request.uri.path ~ \"^.*wp-login.php$\" or http.request.uri.path ~ \"^.*xmlrpc.php$\") and ip.src ne 93.184.216.34", - "description": "WordPress login paths via the login page or mobile RPC endpoint" + "id": "", + "expression": "(http.request.uri.path ~ \"^.*wp-login.php$\" or http.request.uri.path ~ \"^.*xmlrpc.php$\") and ip.src ne 93.184.216.34", + "description": "WordPress login paths via the login page or mobile RPC endpoint" } ``` @@ -38,8 +38,8 @@ The expression specified in this example filter is: This filter expression has a `(this or that) and not this` structure designed to: -* Capture two WordPress paths that may be subject to brute force password attacks, and -* Exclude traffic that comes from the IP address `93.184.216.34`. +- Capture two WordPress paths that may be subject to brute force password attacks, and +- Exclude traffic that comes from the IP address `93.184.216.34`. Imagine that this is an IP for your office. This expression demonstrates a filter that might be used (in a firewall rule) to block access to the WordPress login when accessed outside the office network. diff --git a/src/content/docs/firewall/api/cf-firewall-rules/get.mdx b/src/content/docs/firewall/api/cf-firewall-rules/get.mdx index fa662e947375338..75c661f0deb8cc4 100644 --- a/src/content/docs/firewall/api/cf-firewall-rules/get.mdx +++ b/src/content/docs/firewall/api/cf-firewall-rules/get.mdx @@ -23,70 +23,70 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules" \ ```json title="Response" { - "result": [ - { - "id": "", - "paused": false, - "description": "allow API traffic without challenge", - "action": "allow", - "priority": null, - "filter": { - "id": "", - "expression": "http.request.uri.path matches \"^/api/.*$\"", - "paused": false, - "description": "/api" - } - }, - { - "id": "", - "paused": false, - "description": "do not challenge login from office", - "action": "allow", - "priority": null, - "filter": { - "id": "", - "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", - "paused": false, - "description": "Login from office" - } - }, - { - "id": "", - "paused": false, - "description": "challenge login", - "action": "challenge", - "priority": null, - "filter": { - "id": "", - "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", - "paused": false, - "description": "Login" - } - }, - { - "id": "", - "paused": false, - "description": "Non-interactive challenge site", - "action": "js_challenge", - "priority": null, - "filter": { - "id": "", - "expression": "not http.request.uri.path matches \"^/api/.*$\"", - "paused": false, - "description": "not /api" - } - } - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 25, - "count": 4, - "total_count": 4, - "total_pages": 1 - } + "result": [ + { + "id": "", + "paused": false, + "description": "allow API traffic without challenge", + "action": "allow", + "priority": null, + "filter": { + "id": "", + "expression": "http.request.uri.path matches \"^/api/.*$\"", + "paused": false, + "description": "/api" + } + }, + { + "id": "", + "paused": false, + "description": "do not challenge login from office", + "action": "allow", + "priority": null, + "filter": { + "id": "", + "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", + "paused": false, + "description": "Login from office" + } + }, + { + "id": "", + "paused": false, + "description": "challenge login", + "action": "challenge", + "priority": null, + "filter": { + "id": "", + "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", + "paused": false, + "description": "Login" + } + }, + { + "id": "", + "paused": false, + "description": "Non-interactive challenge site", + "action": "js_challenge", + "priority": null, + "filter": { + "id": "", + "expression": "not http.request.uri.path matches \"^/api/.*$\"", + "paused": false, + "description": "not /api" + } + } + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 25, + "count": 4, + "total_count": 4, + "total_pages": 1 + } } ``` @@ -102,21 +102,21 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules/{rule_ ```json title="Response" { - "result": { - "id": "", - "paused": false, - "description": "do not challenge login from office", - "action": "allow", - "priority": null, - "filter": { - "id": "", - "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", - "paused": false, - "description": "Login from office" - } - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "paused": false, + "description": "do not challenge login from office", + "action": "allow", + "priority": null, + "filter": { + "id": "", + "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", + "paused": false, + "description": "Login from office" + } + }, + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/api/cf-firewall-rules/post.mdx b/src/content/docs/firewall/api/cf-firewall-rules/post.mdx index b3ec7601d83b43b..3c5f3df30b5c373 100644 --- a/src/content/docs/firewall/api/cf-firewall-rules/post.mdx +++ b/src/content/docs/firewall/api/cf-firewall-rules/post.mdx @@ -15,10 +15,8 @@ This example creates several firewall rules using a single API call. :::note - To create a firewall rule you need a [filter](/firewall/api/cf-filters/what-is-a-filter/) identifier (`id`). If you have not created a filter yet, refer to the [Cloudflare Filters API documentation](/firewall/api/cf-filters/). - ::: ```bash title="Request" @@ -60,62 +58,62 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/firewall/rules" \ ```json title="Response" { - "result": [ - { - "id": "", - "paused": false, - "description": "Do not challenge login from office", - "action": "allow", - "priority": null, - "filter": { - "id": "", - "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", - "paused": false, - "description": "Login from office" - } - }, - { - "id": "", - "paused": false, - "description": "Challenge login", - "action": "challenge", - "priority": null, - "filter": { - "id": "", - "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", - "paused": false, - "description": "Login" - } - }, - { - "id": "", - "paused": false, - "description": "Non-interactive challenge site", - "action": "js_challenge", - "priority": null, - "filter": { - "id": "", - "expression": "not http.request.uri.path matches \"^/api/.*$\"", - "paused": false, - "description": "not /api" - } - }, - { - "id": "", - "paused": false, - "description": "Allow API traffic without challenge", - "action": "allow", - "priority": null, - "filter": { - "id": "", - "expression": "http.request.uri.path matches \"^/api/.*$\"", - "paused": false, - "description": "/api" - } - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "paused": false, + "description": "Do not challenge login from office", + "action": "allow", + "priority": null, + "filter": { + "id": "", + "expression": "ip.src in {2400:cb00::/32 2803:f800::/32 2c0f:f248::/32 2a06:98c0::/29} and (http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", + "paused": false, + "description": "Login from office" + } + }, + { + "id": "", + "paused": false, + "description": "Challenge login", + "action": "challenge", + "priority": null, + "filter": { + "id": "", + "expression": "(http.request.uri.path ~ \"^.*/wp-login.php$\" or http.request.uri.path ~ \"^.*/xmlrpc.php$\")", + "paused": false, + "description": "Login" + } + }, + { + "id": "", + "paused": false, + "description": "Non-interactive challenge site", + "action": "js_challenge", + "priority": null, + "filter": { + "id": "", + "expression": "not http.request.uri.path matches \"^/api/.*$\"", + "paused": false, + "description": "not /api" + } + }, + { + "id": "", + "paused": false, + "description": "Allow API traffic without challenge", + "action": "allow", + "priority": null, + "filter": { + "id": "", + "expression": "http.request.uri.path matches \"^/api/.*$\"", + "paused": false, + "description": "/api" + } + } + ], + "success": true, + "errors": [], + "messages": [] } ``` diff --git a/src/content/docs/firewall/cf-firewall-rules/order-priority.mdx b/src/content/docs/firewall/cf-firewall-rules/order-priority.mdx index 0d5982f433847fe..3136c338ab132ce 100644 --- a/src/content/docs/firewall/cf-firewall-rules/order-priority.mdx +++ b/src/content/docs/firewall/cf-firewall-rules/order-priority.mdx @@ -73,7 +73,6 @@ While your priority numbering scheme can be arbitrary, keep the following in min - **Rules without a priority number are evaluated last**, in order of their action precedence. For example, a rule with the _Log_ action is evaluated before a rule that has the _Block_ action. For more on action precedence, refer to [Firewall rules actions](/firewall/cf-firewall-rules/actions/). - **Avoid using the number `1` as a priority** to make rule order modification easier in the future. - **Consider grouping ranges of priority numbers into categories** that have some meaning for your deployment. Here are some examples: - - 5000-9999: Trusted IP addresses - 10000-19999: Blocking rules for bad crawlers - 20000-29999: Blocking rules for abusive users/spam diff --git a/src/content/docs/fundamentals/account/account-security/cloudflare-access.mdx b/src/content/docs/fundamentals/account/account-security/cloudflare-access.mdx index 94c7ab99e5aa858..1fb0715951d644a 100644 --- a/src/content/docs/fundamentals/account/account-security/cloudflare-access.mdx +++ b/src/content/docs/fundamentals/account/account-security/cloudflare-access.mdx @@ -21,7 +21,7 @@ To enable editing access by your Account Team: 1. In the Cloudflare dashboard, go to the **Configurations** page. (You must be logged in as a **Super Administrator**). - + 2. For **Editing Permission**, switch the toggle to **On**. 3. Select a duration. @@ -29,8 +29,6 @@ To enable editing access by your Account Team: :::note - In an emergency, Cloudflare Support can override your **Editing Permissions** and make updates to your account, but your Super Administrator will receive an email and the action will be recorded in your [Audit Logs](/fundamentals/account/account-security/review-audit-logs/) with an **Action** of **Break glass**. - ::: diff --git a/src/content/docs/fundamentals/account/account-security/index.mdx b/src/content/docs/fundamentals/account/account-security/index.mdx index 62434c63a9879ee..774bf0f5dba2826 100644 --- a/src/content/docs/fundamentals/account/account-security/index.mdx +++ b/src/content/docs/fundamentals/account/account-security/index.mdx @@ -10,6 +10,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/account/account-security/leaked-password-notifications.mdx b/src/content/docs/fundamentals/account/account-security/leaked-password-notifications.mdx index 44b877f610b9365..3f045d04d65881c 100644 --- a/src/content/docs/fundamentals/account/account-security/leaked-password-notifications.mdx +++ b/src/content/docs/fundamentals/account/account-security/leaked-password-notifications.mdx @@ -14,12 +14,10 @@ Refer to the [blog post](https://blog.cloudflare.com/helping-keep-customers-safe :::note[Note] - Cloudflare does not have additional information about the specific breach or Internet service that potentially lost your password. Popular online tools such as [Have I Been Pwned](https://haveibeenpwned.com/) can help you better understand where your external accounts were attacked. If you reused this password in other systems, it is recommended that you reset it in those as well. - ::: If your password is found in a data breach, we will email you information on how to reset your password and prompt you to do so in the Cloudflare dashboard. diff --git a/src/content/docs/fundamentals/account/account-security/manage-active-sessions.mdx b/src/content/docs/fundamentals/account/account-security/manage-active-sessions.mdx index bacbe900335ef0a..be25f61733a7a37 100644 --- a/src/content/docs/fundamentals/account/account-security/manage-active-sessions.mdx +++ b/src/content/docs/fundamentals/account/account-security/manage-active-sessions.mdx @@ -18,7 +18,7 @@ To view the active sessions associated with your email address: 1. In the Cloudflare dashboard, go to the **Account home** page. - + 2. Go to **My Profile** > **Sessions**. diff --git a/src/content/docs/fundamentals/account/account-security/zone-holds.mdx b/src/content/docs/fundamentals/account/account-security/zone-holds.mdx index 9e379c53fec4c81..f93945373a085e6 100644 --- a/src/content/docs/fundamentals/account/account-security/zone-holds.mdx +++ b/src/content/docs/fundamentals/account/account-security/zone-holds.mdx @@ -6,7 +6,7 @@ products: - fundamentals --- -import { FeatureTable } from "~/components" +import { FeatureTable } from "~/components"; Zone holds prevent other teams in your organization from adding zones that are already active in another account. @@ -24,7 +24,7 @@ Zone holds are enabled by default for all Enterprise zones. When you enable a zone hold, no one else can [add your zone](/fundamentals/manage-domains/add-site/) to their Cloudflare account. If they attempt to, they will receive the following message: -*The zone name provided is subject to a hold which disallows the creation of this zone. Please contact the domain owner to have this hold removed.* +_The zone name provided is subject to a hold which disallows the creation of this zone. Please contact the domain owner to have this hold removed._ To enable a zone hold: diff --git a/src/content/docs/fundamentals/account/create-account.mdx b/src/content/docs/fundamentals/account/create-account.mdx index cc509b79ec43b6f..e93d05d94fd8d52 100644 --- a/src/content/docs/fundamentals/account/create-account.mdx +++ b/src/content/docs/fundamentals/account/create-account.mdx @@ -9,7 +9,7 @@ products: - fundamentals --- -import { DashButton, Render } from "~/components" +import { DashButton, Render } from "~/components"; To create a Cloudflare account: @@ -29,7 +29,7 @@ To change your account name: 1. In the Cloudflare dashboard, go to the **Configurations** page. - + 2. For **Account Name**, select **Change Name**. 3. Enter a new account name. @@ -37,13 +37,13 @@ To change your account name: ## Best practices - + -Refer to [Account and domain management best practices](/fundamentals/reference/best-practices/) for a detailed list of ways to protect your account and domain. +Refer to [Account and domain management best practices](/fundamentals/reference/best-practices/) for a detailed list of ways to protect your account and domain. Once you [set up an account](/fundamentals/account/), you have several ways to interact with Cloudflare. -## Interact with Cloudflare +## Interact with Cloudflare If you prefer working without code, you can manage your account and domain settings through the [Cloudflare dashboard](https://dash.cloudflare.com/login). @@ -62,4 +62,3 @@ For those who prefer to interact with Cloudflare programmatically, you can use s | [cloudflare-go](https://github.com/cloudflare/cloudflare-go) | [README](https://github.com/cloudflare/cloudflare-go#readme) | The official Go library for the Cloudflare API. | | [cloudflare-typescript](https://github.com/cloudflare/cloudflare-typescript) | [README](https://github.com/cloudflare/cloudflare-typescript#readme) | The official TypeScript library for the Cloudflare API. | | [cloudflare-python](https://github.com/cloudflare/cloudflare-python) | [README](https://github.com/cloudflare/cloudflare-python#readme) | The official Python library for the Cloudflare API. | - diff --git a/src/content/docs/fundamentals/account/find-account-and-zone-ids.mdx b/src/content/docs/fundamentals/account/find-account-and-zone-ids.mdx index d942475ab7e6765..535d145aa95d13f 100644 --- a/src/content/docs/fundamentals/account/find-account-and-zone-ids.mdx +++ b/src/content/docs/fundamentals/account/find-account-and-zone-ids.mdx @@ -16,10 +16,10 @@ Once you [set up a new account](/fundamentals/account/) and [add your domain](/f 1. In the Cloudflare dashboard, go to the **Account home** page. - + 2. Select the menu button at the end of the account row. -![Screenshot of the Overview page with the API section highlighted](~/assets/images/fundamentals/get-started/overview-account-id.png) + ![Screenshot of the Overview page with the API section highlighted](~/assets/images/fundamentals/get-started/overview-account-id.png) 3. Select **Copy account ID**. @@ -29,17 +29,17 @@ To copy the account ID when you only have one account: 1. In the Cloudflare dashboard, go to the **Account home** page and locate your account. - + 2. Select the menu button next to your account name. 3. From the list that appears, select **Copy account ID**. -![Screenshot of the Overview page with the API section highlighted](~/assets/images/fundamentals/get-started/single-account-id.png) + ![Screenshot of the Overview page with the API section highlighted](~/assets/images/fundamentals/get-started/single-account-id.png) ## Copy your Zone ID 1. In the Cloudflare dashboard, go to the **Account** home and locate your account. - + 2. From the **Overview** page for your account, locate the **API** section towards the bottom of the page. @@ -53,7 +53,7 @@ You can also find your account ID from the **Workers & Pages** section of your a 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. - + 2. The **Account details** section contains your **Account ID**. 3. To copy the Account ID, select **Click to copy**. diff --git a/src/content/docs/fundamentals/account/index.mdx b/src/content/docs/fundamentals/account/index.mdx index 78335a849e9c2ba..ed12e22c5045241 100644 --- a/src/content/docs/fundamentals/account/index.mdx +++ b/src/content/docs/fundamentals/account/index.mdx @@ -10,7 +10,7 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; If you need help setting up a new Cloudflare account, refer to the following resources: diff --git a/src/content/docs/fundamentals/api/how-to/control-api-access.mdx b/src/content/docs/fundamentals/api/how-to/control-api-access.mdx index 90ef1f2f6f50643..692fcea9aa69c90 100644 --- a/src/content/docs/fundamentals/api/how-to/control-api-access.mdx +++ b/src/content/docs/fundamentals/api/how-to/control-api-access.mdx @@ -21,7 +21,7 @@ To restrict the API access for the entire account: 1. In the Cloudflare dashboard, go to the **Members** page. - + 2. Locate the **Enable API Access** section and then update the setting. @@ -29,16 +29,14 @@ To restrict the API access for the entire account: :::note - Member-level settings will override the account-level setting. If a specific member has API access enabled whereas the account has the access disabled, that member can still call APIs related to the Enterprise account. - ::: To restrict the API access for a specific member: 1. In the Cloudflare dashboard, go to the **Members** page. - + 2. Click on the member to expand and choose the intended **API Access**. If `Account Default`, then it follows the account level setting. diff --git a/src/content/docs/fundamentals/api/how-to/create-via-api.mdx b/src/content/docs/fundamentals/api/how-to/create-via-api.mdx index f58ab298b5d15c4..8f1f58e538d2e66 100644 --- a/src/content/docs/fundamentals/api/how-to/create-via-api.mdx +++ b/src/content/docs/fundamentals/api/how-to/create-via-api.mdx @@ -114,24 +114,20 @@ To fetch all available permission groups and their IDs, use the [List permission ```json output { - "result": [ - { - "id": "19637fbb73d242c0a92845d8db0b95b1", - "name": "AI Crawl Control Read", - "description": "Grants access to reading AI Crawl Control", - "scopes": [ - "com.cloudflare.api.account.zone" - ] - }, - { - "id": "1ba6ab4cacdb454b913bbb93e1b8cb8c", - "name": "AI Crawl Control Write", - "description": "Grants access to reading and editing AI Crawl Control", - "scopes": [ - "com.cloudflare.api.account.zone" - ] - }, - // (...) + "result": [ + { + "id": "19637fbb73d242c0a92845d8db0b95b1", + "name": "AI Crawl Control Read", + "description": "Grants access to reading AI Crawl Control", + "scopes": ["com.cloudflare.api.account.zone"] + }, + { + "id": "1ba6ab4cacdb454b913bbb93e1b8cb8c", + "name": "AI Crawl Control Write", + "description": "Grants access to reading and editing AI Crawl Control", + "scopes": ["com.cloudflare.api.account.zone"] + } + // (...) ] } ``` diff --git a/src/content/docs/fundamentals/api/how-to/restrict-tokens.mdx b/src/content/docs/fundamentals/api/how-to/restrict-tokens.mdx index d084a748cb05a70..487d294ea4ff9cf 100644 --- a/src/content/docs/fundamentals/api/how-to/restrict-tokens.mdx +++ b/src/content/docs/fundamentals/api/how-to/restrict-tokens.mdx @@ -11,8 +11,8 @@ products: API tokens can be restricted at runtime in two ways: -* [Client IP address range filtering](#client-ip-address-range-filtering) -* [Time To Live (TTL) constraints](#time-to-live-ttl-constraints) +- [Client IP address range filtering](#client-ip-address-range-filtering) +- [Time To Live (TTL) constraints](#time-to-live-ttl-constraints) ## Client IP address range filtering @@ -26,17 +26,14 @@ Client IP address range filtering is not applied to the [Verify Token](https://d ::: - ## Time to live (TTL) constraints By default, tokens do not expire and are long lived. Defining a TTL sets when a token starts being valid and when a token is no longer valid. This is often referred to as `notBefore` and `notAfter`. Setting these timestamps limits the lifetime of the token to the defined period. Not setting the start date or `notBefore` means the token is active as soon as it is created. Not setting the end date or `notAfter` means the token does not expire. :::note - Dates selected are defined as 00:00 UTC of that day. For finer grained time selection, use the [API](/fundamentals/api/). - ::: ![Time to Live selection calendar](~/assets/images/fundamentals/api/ttl.png) diff --git a/src/content/docs/fundamentals/api/index.mdx b/src/content/docs/fundamentals/api/index.mdx index fc2b5ca4dd7c1ca..5c920d17b99595e 100644 --- a/src/content/docs/fundamentals/api/index.mdx +++ b/src/content/docs/fundamentals/api/index.mdx @@ -11,7 +11,7 @@ products: - api --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Use the following resources to learn more about Cloudflare's REST API: diff --git a/src/content/docs/fundamentals/api/reference/index.mdx b/src/content/docs/fundamentals/api/reference/index.mdx index 2b69ab6e04041ec..51171664a4e68eb 100644 --- a/src/content/docs/fundamentals/api/reference/index.mdx +++ b/src/content/docs/fundamentals/api/reference/index.mdx @@ -11,6 +11,6 @@ products: - api --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/api/reference/limits.mdx b/src/content/docs/fundamentals/api/reference/limits.mdx index 056310a63a2cf5e..af4f24a26742004 100644 --- a/src/content/docs/fundamentals/api/reference/limits.mdx +++ b/src/content/docs/fundamentals/api/reference/limits.mdx @@ -11,7 +11,11 @@ products: import { Render } from "~/components"; - + ## Rate limiting headers diff --git a/src/content/docs/fundamentals/api/troubleshooting.mdx b/src/content/docs/fundamentals/api/troubleshooting.mdx index f1b15f7ee9bdbf6..442eb608d3525d0 100644 --- a/src/content/docs/fundamentals/api/troubleshooting.mdx +++ b/src/content/docs/fundamentals/api/troubleshooting.mdx @@ -23,15 +23,15 @@ curl "https://api.cloudflare.com/client/v4/user/tokens/verify" \ ```json { - "success": true, - "errors": [], - "messages": [], - "result": { - "id": "f267e341f3dd4697bd3b9f71dd96247f", - "status": "active", - "not_before": "2018-07-01T05:20:00Z", - "expires_on": "2020-01-01T00:00:00Z" - } + "success": true, + "errors": [], + "messages": [], + "result": { + "id": "f267e341f3dd4697bd3b9f71dd96247f", + "status": "active", + "not_before": "2018-07-01T05:20:00Z", + "expires_on": "2020-01-01T00:00:00Z" + } } ``` diff --git a/src/content/docs/fundamentals/concepts/how-cloudflare-works.mdx b/src/content/docs/fundamentals/concepts/how-cloudflare-works.mdx index fc8a96817900340..7bb8ee6aba29a4d 100644 --- a/src/content/docs/fundamentals/concepts/how-cloudflare-works.mdx +++ b/src/content/docs/fundamentals/concepts/how-cloudflare-works.mdx @@ -8,11 +8,15 @@ products: - fundamentals --- -import { Stream, GlossaryTooltip } from "~/components" +import { Stream, GlossaryTooltip } from "~/components"; To optimize your website or web application, Cloudflare provides [DNS](https://www.cloudflare.com/learning/dns/what-is-dns/) and [CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/) services, so we can [reverse proxy](https://www.cloudflare.com/learning/cdn/glossary/reverse-proxy/) the web traffic to and from your domain. - + ## DNS explained diff --git a/src/content/docs/fundamentals/concepts/index.mdx b/src/content/docs/fundamentals/concepts/index.mdx index 6a64b49f7e2d8a3..52496a8fd9b8022 100644 --- a/src/content/docs/fundamentals/concepts/index.mdx +++ b/src/content/docs/fundamentals/concepts/index.mdx @@ -10,6 +10,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/concepts/traffic-flow-cloudflare.mdx b/src/content/docs/fundamentals/concepts/traffic-flow-cloudflare.mdx index 31af11a5ba634c1..ffb08d179a6080f 100644 --- a/src/content/docs/fundamentals/concepts/traffic-flow-cloudflare.mdx +++ b/src/content/docs/fundamentals/concepts/traffic-flow-cloudflare.mdx @@ -10,7 +10,7 @@ products: Internet traffic is made up of people, services, and agents requesting online resources from wherever they are hosted. Your resources may be publicly available, like a website or application that anyone on the Internet can access. Or your resources may be privately available, like an internal app or network that only your employees and partners should be able to access. -Both public and private resources can be connected to the Cloudflare network to ensure only good actors can access what they are supposed to be able to access with high performance. +Both public and private resources can be connected to the Cloudflare network to ensure only good actors can access what they are supposed to be able to access with high performance. For example, you may not always want the direct traffic because it can come from malicious sources, like hackers, or in the form of [DDoS attacks](https://www.cloudflare.com/learning/ddos/ddos-attack-tools/how-to-ddos/). Additionally, depending on the location where the request originated, you want to ensure the traffic is [routed through the most efficient and fastest path](/argo-smart-routing/). @@ -36,18 +36,18 @@ One example of on-ramping traffic to Cloudflare is updating your public website However, maybe you need to protect a private application that is not directly available on the Internet. In this scenario, you can: -* Connect your private application to Cloudflare using [secure tunnels](/cloudflare-one/networks/connectors/cloudflare-tunnel/), and use a [device agent](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/) to connect as a user. -* For users already connected to a private company network, connect the entire network to Cloudflare using secure tunnels, and any request from a user device will access the private application through those tunnels. +- Connect your private application to Cloudflare using [secure tunnels](/cloudflare-one/networks/connectors/cloudflare-tunnel/), and use a [device agent](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/) to connect as a user. +- For users already connected to a private company network, connect the entire network to Cloudflare using secure tunnels, and any request from a user device will access the private application through those tunnels. With these options, any request from a user device can access internal private applications via the secure private tunnels. Refer to the list below for products you can use to on-ramp traffic to Cloudflare. -* [Anycast routing](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) uses Anycast IP addressing to route traffic to the nearest Cloudflare data center. Selective routing allows an Anycast network to be resilient in the face of high traffic volume, network congestion, and[ DDoS attacks](https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/). -* [DNS-based](/fundamentals/concepts/how-cloudflare-works/#cloudflare-as-a-dns-provider) traffic resolves domains onboarded to [Cloudflare's CDN](/fundamentals/concepts/how-cloudflare-works/). Cloudflare's DNS directs traffic to Cloudflare's global network of servers instead of a website's origin server. -* [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/) connects your resources to Cloudflare without a publicly routable IP address so that your origins can serve traffic through Cloudflare without being vulnerable to attacks that bypass Cloudflare. -* [Magic Transit](/magic-transit/about/) offers DDoS protection, traffic acceleration, and more for on-premise, cloud-hosted, and hybrid networks by accepting IP packets destined for your network, processing them, and outputting the packets to your origin infrastructure. -* The [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/) securely and privately sends traffic from corporate devices to Cloudflare's global network while also applying advanced Zero Trust policies that check for a device's health before it connects to corporate applications. +- [Anycast routing](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) uses Anycast IP addressing to route traffic to the nearest Cloudflare data center. Selective routing allows an Anycast network to be resilient in the face of high traffic volume, network congestion, and[ DDoS attacks](https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/). +- [DNS-based](/fundamentals/concepts/how-cloudflare-works/#cloudflare-as-a-dns-provider) traffic resolves domains onboarded to [Cloudflare's CDN](/fundamentals/concepts/how-cloudflare-works/). Cloudflare's DNS directs traffic to Cloudflare's global network of servers instead of a website's origin server. +- [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/) connects your resources to Cloudflare without a publicly routable IP address so that your origins can serve traffic through Cloudflare without being vulnerable to attacks that bypass Cloudflare. +- [Magic Transit](/magic-transit/about/) offers DDoS protection, traffic acceleration, and more for on-premise, cloud-hosted, and hybrid networks by accepting IP packets destined for your network, processing them, and outputting the packets to your origin infrastructure. +- The [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/) securely and privately sends traffic from corporate devices to Cloudflare's global network while also applying advanced Zero Trust policies that check for a device's health before it connects to corporate applications. ### Off-ramp traffic from Cloudflare @@ -61,6 +61,6 @@ You can also utilize [caching](/cache/) to help with performance. Instead of off Refer to the list below for products you can use to off-ramp traffic from Cloudflare. -* [Argo Smart Routing](/argo-smart-routing/) detects real-time network issues and routes your web traffic across the most efficient network path, avoiding congestion. -* [Cache](/cache/) works with cached content to avoid off-ramping to origin servers and instead serving directly from Cloudflare's global network. -* [Regional services](/data-localization/regional-services/) lets you choose which subset of data centers decrypt and service HTTPS traffic, which can help customers who have to meet regional compliance or have preferences for maintaining regional control over their data. \ No newline at end of file +- [Argo Smart Routing](/argo-smart-routing/) detects real-time network issues and routes your web traffic across the most efficient network path, avoiding congestion. +- [Cache](/cache/) works with cached content to avoid off-ramping to origin servers and instead serving directly from Cloudflare's global network. +- [Regional services](/data-localization/regional-services/) lets you choose which subset of data centers decrypt and service HTTPS traffic, which can help customers who have to meet regional compliance or have preferences for maintaining regional control over their data. diff --git a/src/content/docs/fundamentals/index.mdx b/src/content/docs/fundamentals/index.mdx index 4fbceb5e645cec0..6da0f6862aab3d2 100644 --- a/src/content/docs/fundamentals/index.mdx +++ b/src/content/docs/fundamentals/index.mdx @@ -24,6 +24,6 @@ Refer to the list below for additional Cloudflare resources. - [Cloudflare blog](https://blog.cloudflare.com) - [Cloudflare's Go library](https://github.com/cloudflare/cloudflare-go) - [Cloudflare system status](https://www.cloudflarestatus.com/) -- [Cloudflare Radar](https://radar.cloudflare.com) -- [Cloudflare TV](https://cloudflare.tv/schedule) +- [Cloudflare Radar](https://radar.cloudflare.com) +- [Cloudflare TV](https://cloudflare.tv/schedule) - [Terraform](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs) diff --git a/src/content/docs/fundamentals/manage-domains/add-site.mdx b/src/content/docs/fundamentals/manage-domains/add-site.mdx index 081c4aeb68c902e..e089a041cbe43bc 100644 --- a/src/content/docs/fundamentals/manage-domains/add-site.mdx +++ b/src/content/docs/fundamentals/manage-domains/add-site.mdx @@ -7,7 +7,13 @@ products: - fundamentals --- -import { DashButton, GlossaryTooltip, Render, Stream, Details } from "~/components"; +import { + DashButton, + GlossaryTooltip, + Render, + Stream, + Details, +} from "~/components"; After you onboard your domain, Cloudflare will act as the [reverse proxy](/fundamentals/concepts/how-cloudflare-works/#cloudflare-as-a-reverse-proxy) and [DNS provider](/fundamentals/concepts/how-cloudflare-works/#cloudflare-as-a-dns-provider) for your site. @@ -77,6 +83,7 @@ If you encounter unexpected results when changing your nameservers, refer to the ## Further options ### Other DNS setups + - To use Cloudflare as a reverse proxy but maintain your DNS provider, refer to [partial setup](/dns/zone-setups/partial-setup/). - To use one or more DNS providers, refer to [DNS Zone transfers](/dns/zone-setups/zone-transfers/). - Enterprise customers can onboard lower-level subdomains using [Subdomain setup](/dns/zone-setups/subdomain-setup/). @@ -89,4 +96,4 @@ If you encounter unexpected results when changing your nameservers, refer to the [^2]: Enterprise customers can onboard these using [Subdomain setup](/dns/zone-setups/subdomain-setup/). -[^3]: A security feature that protects DNS records from spoofing \ No newline at end of file +[^3]: A security feature that protects DNS records from spoofing diff --git a/src/content/docs/fundamentals/manage-domains/domain-version.mdx b/src/content/docs/fundamentals/manage-domains/domain-version.mdx index 124534a2bf1c4e0..80c3dfce25a53ae 100644 --- a/src/content/docs/fundamentals/manage-domains/domain-version.mdx +++ b/src/content/docs/fundamentals/manage-domains/domain-version.mdx @@ -8,28 +8,25 @@ products: - fundamentals --- -import { Render } from "~/components" +import { Render } from "~/components"; [Version Management](/version-management/) is available for Enterprise customers and allows you to safely test, deploy, and roll back changes to your zone configurations. - ## Enable versioning - - ## (Optional) Create additional environments These environments each serve a specific purpose and are accessed differently: -
+ +
For more details, refer to [Create environment](/version-management/how-to/environments/#create-environment). - ## Update configurations @@ -40,7 +37,6 @@ For more details, refer to [Create environment](/version-management/how-to/envir ## Promote version - Next, [promote](/version-management/how-to/environments/#change-environment-version) your version through your different environments. @@ -50,5 +46,3 @@ After promoting to each environment, test the new version in your new environmen ## Repeat For new changes to your zone, [create a new version](/version-management/how-to/versions/#create-version) and repeat this process. - - diff --git a/src/content/docs/fundamentals/manage-domains/move-domain.mdx b/src/content/docs/fundamentals/manage-domains/move-domain.mdx index adb048fe514eab7..554db841218b10c 100644 --- a/src/content/docs/fundamentals/manage-domains/move-domain.mdx +++ b/src/content/docs/fundamentals/manage-domains/move-domain.mdx @@ -30,13 +30,11 @@ To transfer a domain from one Cloudflare account to another, you will need: :::caution - Before transferring an active Cloudflare domain to another Cloudflare account, you must remove any [DNSSEC configurations](/dns/dnssec/) and [add-ons or subscriptions](/billing/manage/cancel-subscription/). We also recommend [exporting](/dns/manage-dns-records/how-to/import-and-export/#export-records) the DNS records of your zone while it is in the previous account. Then, you can [import](/dns/manage-dns-records/how-to/import-and-export/#import-records) the correct DNS records into the new account. If you miss this step, Cloudflare will import your proxied DNS records, which might cause your domain to experience a [1000 error](/support/troubleshooting/http-status-codes/cloudflare-1xxx-errors/). - ::: If you still have access to your previous Cloudflare account, you can copy over the Cloudflare account settings manually. You must reissue [SSL/TLS certificates](#issue-new-certificates) and [recreate and validate DNS records](/dns/manage-dns-records/how-to/create-dns-records/) when transferring domains between Cloudflare accounts. diff --git a/src/content/docs/fundamentals/manage-domains/pause-cloudflare.mdx b/src/content/docs/fundamentals/manage-domains/pause-cloudflare.mdx index 1ac459d5abe6896..8887da35f668294 100644 --- a/src/content/docs/fundamentals/manage-domains/pause-cloudflare.mdx +++ b/src/content/docs/fundamentals/manage-domains/pause-cloudflare.mdx @@ -12,7 +12,7 @@ To troubleshoot your site, you can pause Cloudflare globally. This will send tra 1. In the Cloudflare dashboard, go to the **Account home** page and select your account and domain. - + 2. Within **Overview**, choose **Advanced Actions** > **Pause Cloudflare on Site**. @@ -22,7 +22,7 @@ The process of pausing Cloudflare takes five minutes or less. This approach is p Disabling a zone does not impact Spectrum applications. ::: -*** +--- ## Alternatives to global pause diff --git a/src/content/docs/fundamentals/manage-members/index.mdx b/src/content/docs/fundamentals/manage-members/index.mdx index 854f89c1e4e7eca..349b6e8ec38dafd 100644 --- a/src/content/docs/fundamentals/manage-members/index.mdx +++ b/src/content/docs/fundamentals/manage-members/index.mdx @@ -12,7 +12,7 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; On any Cloudflare account, you can collaborate by adding members to your account and assigning them access via one or several policies. diff --git a/src/content/docs/fundamentals/manage-members/policies.mdx b/src/content/docs/fundamentals/manage-members/policies.mdx index 6ca9aafa9521ce1..36f550450d46ae3 100644 --- a/src/content/docs/fundamentals/manage-members/policies.mdx +++ b/src/content/docs/fundamentals/manage-members/policies.mdx @@ -27,8 +27,8 @@ For example, you may want to assign multiple policies and use scopes to control A set of standard API endpoints is present on every account that allow access to your members, which has recently been enhanced by a list of `resourceGroups` and `PermissionGroups`. -* A `resourceGroup` is a unique identifier for the scope for which a policy applies. -* A `permissionGroup` is a unique identifier for the set of roles that are assigned to a given policy. +- A `resourceGroup` is a unique identifier for the scope for which a policy applies. +- A `permissionGroup` is a unique identifier for the set of roles that are assigned to a given policy. Refer to the [API documentation](/api/) for more information. @@ -44,4 +44,3 @@ To understand a member’s full access, check both the **Members** and **User Gr Cloudflare is actively working on improvements to consolidate this view in a future update. ::: - diff --git a/src/content/docs/fundamentals/manage-members/roles.mdx b/src/content/docs/fundamentals/manage-members/roles.mdx index c7a01704fb29721..e6e4019dccc01f9 100644 --- a/src/content/docs/fundamentals/manage-members/roles.mdx +++ b/src/content/docs/fundamentals/manage-members/roles.mdx @@ -28,7 +28,7 @@ Account-scoped roles apply across an entire Cloudflare account, and through all | Application Security Reports Read | Can read Application Security Reports. | | Audit Logs Viewer | Can view [Audit Logs](/fundamentals/account/account-security/review-audit-logs/). | | Bot Management (Account-Wide) | Can edit [Bot Management](/bots/plans/bm-subscription/) (including [Super Bot Fight Mode](/bots/get-started/super-bot-fight-mode/)) configurations for all domains in account. | -| Billing | Can edit the account's [billing profile](/billing/get-started/create-billing-profile/) and subscriptions | +| Billing | Can edit the account's [billing profile](/billing/get-started/create-billing-profile/) and subscriptions | | Cache Purge | Can purge the edge cache and allows the reading of zone settings. | | Cloudflare Access | Can edit [Cloudflare Access](/cloudflare-one/access-controls/policies/) and [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/). | | Cloudflare CASB | Can edit [Cloudflare CASB](/cloudflare-one/cloud-and-saas-findings/). | diff --git a/src/content/docs/fundamentals/manage-members/scope.mdx b/src/content/docs/fundamentals/manage-members/scope.mdx index ecfacf62744dfa0..e75d47dafac71c1 100644 --- a/src/content/docs/fundamentals/manage-members/scope.mdx +++ b/src/content/docs/fundamentals/manage-members/scope.mdx @@ -19,7 +19,7 @@ To allow for flexible combinations of access to users, Cloudflare currently has - **Domain groups:** Use when you have related domains that share the same access needs, for example, all production domains. - **Specific resources:** Use when access should be limited to individual resources. -*** +--- ## Choose the scope of roles @@ -33,15 +33,13 @@ If you want the member to have a policy that applies across your account, use th | Field | Value | | -------- | ------------- | -| Operator | *Include* | -| Type | *All domains* | +| Operator | _Include_ | +| Type | _All domains_ | :::note - You can only assign [account-scoped roles](/fundamentals/manage-members/roles/#account-scoped-roles) as part of these types of policies - ::: ### Specific domains @@ -50,9 +48,9 @@ If you want the member to have a policy that applies to a specific domain, use t | Field | Value | | -------- | ------------------- | -| Operator | *Include* | -| Type | *A specific domain* | -| Name | *A specific domain* | +| Operator | _Include_ | +| Type | _A specific domain_ | +| Name | _A specific domain_ | ### Domain groups @@ -64,11 +62,10 @@ To create a domain group: 1. In the Cloudflare dashboard, go to the **Settings** > **Lists** page. (You must be logged in as a **Super Administrator** and have a [verified email address](/fundamentals/user-profiles/verify-email-address/)). - + 2. For **Domain Group Manager**, select **Create**. 3. Create your domain group: - 1. Select the domains to include. 2. Add a **Name**. 3. Select **Create**. @@ -81,43 +78,40 @@ To assign a member permissions to a domain group, use the following combination | Field | Value | | -------- | --------------- | -| Operator | *Include* | -| Type | *Domain Group* | -| Name | *Example Group* | +| Operator | _Include_ | +| Type | _Domain Group_ | +| Name | _Example Group_ | :::note - With Domain Groups, you can only assign [domain-scoped roles](/fundamentals/manage-members/roles/#domain-scoped-roles) to these members. - ::: - ### Specific resources If you want the member to have a policy that applies to a specific resource, use the following combination of fields. | Field | Value | | -------- | ------------------- | -| Operator | *Include* | -| Type | *Granular* | -| Product | *Product Name* | -| Resource | *Specific Resource* | +| Operator | _Include_ | +| Type | _Granular_ | +| Product | _Product Name_ | +| Resource | _Specific Resource_ | #### Available scopes You can assign the following resource-specific scopes to members: -| Scope | Description | -| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Individual Access applications | Grant access to manage a specific [Access application](/cloudflare-one/access-controls/applications/). | -| Individual Access identity providers (IdPs) | Grant access to manage a specific [Cloudflare One identity provider (IdP)](/cloudflare-one/integrations/identity-providers/). | -| Individual Access policies | Grant access to manage a specific [Access policy](/cloudflare-one/access-controls/policies/). | -| Individual Access service tokens | Grant access to manage a specific [Access service token](/cloudflare-one/access-controls/service-credentials/service-tokens/). | -| Individual Access infrastructure targets | Grant access to manage a specific [Access for Infrastructure target](/cloudflare-one/access-controls/applications/non-http/infrastructure-apps/). | -| Individual Cloudflare Tunnel instances | Grant access to manage a specific [Cloudflare Tunnel](/tunnel/) instance. | -| Individual Cloudflare Mesh nodes | Grant access to manage a specific [Cloudflare Mesh](/cloudflare-one/networks/connectors/cloudflare-mesh/) node. | +| Scope | Description | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | +| Individual Access applications | Grant access to manage a specific [Access application](/cloudflare-one/access-controls/applications/). | +| Individual Access identity providers (IdPs) | Grant access to manage a specific [Cloudflare One identity provider (IdP)](/cloudflare-one/integrations/identity-providers/). | +| Individual Access policies | Grant access to manage a specific [Access policy](/cloudflare-one/access-controls/policies/). | +| Individual Access service tokens | Grant access to manage a specific [Access service token](/cloudflare-one/access-controls/service-credentials/service-tokens/). | +| Individual Access infrastructure targets | Grant access to manage a specific [Access for Infrastructure target](/cloudflare-one/access-controls/applications/non-http/infrastructure-apps/). | +| Individual Cloudflare Tunnel instances | Grant access to manage a specific [Cloudflare Tunnel](/tunnel/) instance. | +| Individual Cloudflare Mesh nodes | Grant access to manage a specific [Cloudflare Mesh](/cloudflare-one/networks/connectors/cloudflare-mesh/) node. | :::note When using scopes for specific resources, you can only assign [resource-scoped roles](/fundamentals/manage-members/roles/#resource-scoped-roles) to these members. diff --git a/src/content/docs/fundamentals/manage-members/user-groups.mdx b/src/content/docs/fundamentals/manage-members/user-groups.mdx index 6ac8ab7b5b960bc..ac0ff7d261fe721 100644 --- a/src/content/docs/fundamentals/manage-members/user-groups.mdx +++ b/src/content/docs/fundamentals/manage-members/user-groups.mdx @@ -10,9 +10,9 @@ products: - fundamentals --- -import { DashButton, Tabs, TabItem } from '~/components'; +import { DashButton, Tabs, TabItem } from "~/components"; -User Groups are a collection of [account members](/fundamentals/manage-members/) that are treated equally from an access control perspective. User Groups can be assigned permission policies, with individual members in the group receiving all permissions of the roles assigned to the User Group. If users also have individually assigned permissions, then their effective permissions are the union of all of their individual permissions, plus the permissions for all of the User Groups they are a member of. +User Groups are a collection of [account members](/fundamentals/manage-members/) that are treated equally from an access control perspective. User Groups can be assigned permission policies, with individual members in the group receiving all permissions of the roles assigned to the User Group. If users also have individually assigned permissions, then their effective permissions are the union of all of their individual permissions, plus the permissions for all of the User Groups they are a member of. :::note User Group permissions are inherited by each member of the group but are not currently reflected in the role field on the **Members** page. To view a member’s full set of permissions, check both: @@ -23,21 +23,21 @@ User Group permissions are inherited by each member of the group but are not cur Cloudflare is actively working on improving this experience to make inherited and direct permissions easier to view. ::: -## Create a User Group manually +## Create a User Group manually 1. In the Cloudflare dashboard, go to the **Members** page. - + 2. Select the **Groups** tab. 3. Select **Create a Group** and enter a name and description for your new group. 4. Select **Create group** to confirm your changes. The **Group members** tab displays. -5. Select **Add members**. +5. Select **Add members**. 6. Select the relevant members you want to include in the group and select **Add to Group**. ### Assign a Permission Policy -With your Group created, you can now add a [Permission Policy](/fundamentals/manage-members/policies/) to your Group. +With your Group created, you can now add a [Permission Policy](/fundamentals/manage-members/policies/) to your Group. @@ -86,24 +86,23 @@ PAYLOAD ## Create a User Group with SCIM -Customers with the SCIM integration configured can sync User Groups from an upstream identity provider to Cloudflare. Cloudflare's SCIM integration requires one external application per account. - +Customers with the SCIM integration configured can sync User Groups from an upstream identity provider to Cloudflare. Cloudflare's SCIM integration requires one external application per account. :::note If you use the [Cloudflare dashboard SCIM integration](/fundamentals/account/account-security/scim-setup/), you can sync Groups from an upstream Identity Provider. This allows you to centralize user and group management at your identity provider. Note that when managing User Groups via SCIM: -- You cannot change the name, members, or delete the group manually from the Cloudflare dashboard or API. + +- You cannot change the name, members, or delete the group manually from the Cloudflare dashboard or API. - The integration requires one external SCIM application per Cloudflare account. - Cloudflare does not currently support updating user profile fields (`firstName`, `lastName`, or `email`) via SCIM. If those attributes change in your IdP, they will not be updated in Cloudflare. These values are only set during initial provisioning. -::: - + ::: To set up a user group with SCIM, refer to the [Provisioning with SCIM guide](/fundamentals/account/account-security/scim-setup/). ### Set up permissions for User Groups -After a user group is created either manually in Cloudflare dashboard or through SCIM integration the final step is to attach permissions to it. +After a user group is created either manually in Cloudflare dashboard or through SCIM integration the final step is to attach permissions to it. diff --git a/src/content/docs/fundamentals/new-features/index.mdx b/src/content/docs/fundamentals/new-features/index.mdx index 8f052702ba7fe7e..00ba70c15225ddb 100644 --- a/src/content/docs/fundamentals/new-features/index.mdx +++ b/src/content/docs/fundamentals/new-features/index.mdx @@ -10,8 +10,8 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Cloudflare offers several RSS feeds to help you consume content programmatically. - + diff --git a/src/content/docs/fundamentals/organizations/limitations.mdx b/src/content/docs/fundamentals/organizations/limitations.mdx index 732b548986c8775..037c78efb4df0b2 100644 --- a/src/content/docs/fundamentals/organizations/limitations.mdx +++ b/src/content/docs/fundamentals/organizations/limitations.mdx @@ -14,7 +14,7 @@ The following limitations apply during the public beta. | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Organization creation | You must be a Super Administrator of an Enterprise account to create an Organization. | | Adding accounts | Once you've created an Organization, accounts of any plan type can be added. You must have Super Administrator access to the account, and it cannot already belong to another Organization. | -| Account and zone limits | Each organization supports up to 500 accounts and 5,000 zones. | +| Account and zone limits | Each organization supports up to 500 accounts and 5,000 zones. | | Roles | Organization Super Administrator is the only role available during the beta. Additional roles will be available in a future release. | -| Organization deletion | To delete an Organization, use the [API](/api/resources/organizations/methods/delete). Dashboard support is not yet available. | +| Organization deletion | To delete an Organization, use the [API](/api/resources/organizations/methods/delete). Dashboard support is not yet available. | | Account removal | Self-service account removal is not yet available. To remove an account from your Organization, contact [Cloudflare Support](/support/contacting-cloudflare-support/). | diff --git a/src/content/docs/fundamentals/organizations/setup.mdx b/src/content/docs/fundamentals/organizations/setup.mdx index 3cb26686125e379..cb9c27ffabafa59 100644 --- a/src/content/docs/fundamentals/organizations/setup.mdx +++ b/src/content/docs/fundamentals/organizations/setup.mdx @@ -101,11 +101,11 @@ You can manage Organizations using the [Cloudflare Terraform provider](https://r You may encounter the following errors during the setup flow. Please see below for more information on how to resolve these. -| Error | Description | -| --- | --- | -| Organization management is only available on the Enterprise plan at this time. | You are not a member of any Enterprise accounts. | -| You need a super admin role on an enterprise account to create an Organization. | You are not a Super Administrator of an Enterprise account. | -| One or more of your enterprise accounts is already part of an Organization. | You may not create another organization because your accounts are already in an organization. | -| You have reached the maximum number of organizations. | You may not create another organization because you already have one. | -| An Organization has already been created for accounts associated with your company. Please contact your company administrator. | We limit every company to one Organization for all business units. Please work with other Cloudflare administrators at your company who may have set up an Organization already to be invited to join that Organization. | -| You are not eligible to create an Organization because we think there's a problem. Please contact Cloudflare support and we will help you create it.| This is a rare error which may indicate an issue with the internal metadata for one or more of your accounts. Before you can set up an Organization, Cloudflare needs to investigate the internal data. | +| Error | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Organization management is only available on the Enterprise plan at this time. | You are not a member of any Enterprise accounts. | +| You need a super admin role on an enterprise account to create an Organization. | You are not a Super Administrator of an Enterprise account. | +| One or more of your enterprise accounts is already part of an Organization. | You may not create another organization because your accounts are already in an organization. | +| You have reached the maximum number of organizations. | You may not create another organization because you already have one. | +| An Organization has already been created for accounts associated with your company. Please contact your company administrator. | We limit every company to one Organization for all business units. Please work with other Cloudflare administrators at your company who may have set up an Organization already to be invited to join that Organization. | +| You are not eligible to create an Organization because we think there's a problem. Please contact Cloudflare support and we will help you create it. | This is a rare error which may indicate an issue with the internal metadata for one or more of your accounts. Before you can set up an Organization, Cloudflare needs to investigate the internal data. | diff --git a/src/content/docs/fundamentals/performance/improve-seo.mdx b/src/content/docs/fundamentals/performance/improve-seo.mdx index 297c524991656ee..aa834449efa4ed4 100644 --- a/src/content/docs/fundamentals/performance/improve-seo.mdx +++ b/src/content/docs/fundamentals/performance/improve-seo.mdx @@ -12,10 +12,8 @@ In practice, SEO is primarily about quality content, user experience, and not ma :::note[Tip:] - For general guidelines around SEO, refer to [Google's recommendations](https://developers.google.com/search/docs/advanced/guidelines/overview). - ::: ## SEO improvements with Cloudflare @@ -47,9 +45,9 @@ Depending on your domain's security settings, you might accidentally block searc If you notice SEO issues, make sure your: -* [WAF custom rules](/waf/troubleshooting/faq/#caution-about-potentially-blocking-bots) are allowing **Verified Bots**. -* [Rate limiting rules](/waf/rate-limiting-rules/) are allowing **Verified Bots**. -* [Bot protection](/bots/concepts/bot/verified-bots/) settings are not blocking **Verified Bots**. +- [WAF custom rules](/waf/troubleshooting/faq/#caution-about-potentially-blocking-bots) are allowing **Verified Bots**. +- [Rate limiting rules](/waf/rate-limiting-rules/) are allowing **Verified Bots**. +- [Bot protection](/bots/concepts/bot/verified-bots/) settings are not blocking **Verified Bots**. If you still notice issues with search engine crawlers, refer to our [Troubleshooting guide](/support/troubleshooting/general-troubleshooting/troubleshooting-crawl-errors/). @@ -57,7 +55,7 @@ If you still notice issues with search engine crawlers, refer to our [Troublesho The following characteristics do not affect your domain's SEO: -* **Changing your nameservers**: Using Cloudflare's nameservers does not affect your domain's SEO. -* **Server location**: According to Google, [server location](http://www.seroundtable.com/seo-geo-location-server-google-17468.html) is not important for SEO. -* **Sites sharing IP addresses**: Search engines do not generally penalize domains using shared IP addresses unless several of these sites are malicious or spammy. -* **Cloudflare caching**: When Cloudflare caches your content, it actually speeds up content delivery and only improves SEO. Our caching does not create duplicate content, rewrite URLs, or create additional subdomains. +- **Changing your nameservers**: Using Cloudflare's nameservers does not affect your domain's SEO. +- **Server location**: According to Google, [server location](http://www.seroundtable.com/seo-geo-location-server-google-17468.html) is not important for SEO. +- **Sites sharing IP addresses**: Search engines do not generally penalize domains using shared IP addresses unless several of these sites are malicious or spammy. +- **Cloudflare caching**: When Cloudflare caches your content, it actually speeds up content delivery and only improves SEO. Our caching does not create duplicate content, rewrite URLs, or create additional subdomains. diff --git a/src/content/docs/fundamentals/performance/index.mdx b/src/content/docs/fundamentals/performance/index.mdx index 4fa36b844e2eec8..8c00c87f68d593b 100644 --- a/src/content/docs/fundamentals/performance/index.mdx +++ b/src/content/docs/fundamentals/performance/index.mdx @@ -10,6 +10,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/performance/test-speed.mdx b/src/content/docs/fundamentals/performance/test-speed.mdx index 12ea8823571be55..246a968ab7ae1c4 100644 --- a/src/content/docs/fundamentals/performance/test-speed.mdx +++ b/src/content/docs/fundamentals/performance/test-speed.mdx @@ -8,7 +8,7 @@ products: Cloudflare offers several tools to test the speed of your website, as well as the speed of your Internet connection. -*** +--- ## Test website speed @@ -24,11 +24,11 @@ If you experience any issues, make sure you are not blocking specific [user agen If your domain is not yet active on Cloudflare or you want to measure the before and after improvements of using Cloudflare, Cloudflare recommends using the following third-party tools: -* [PageGym](https://pagegym.com/) -* [GTmetrix](https://gtmetrix.com/) -* [DebugBear](https://www.debugbear.com/test/website-speed) -* [Lighthouse](https://developer.chrome.com/docs/lighthouse/) -* [WebPageTest](https://www.webpagetest.org/) +- [PageGym](https://pagegym.com/) +- [GTmetrix](https://gtmetrix.com/) +- [DebugBear](https://www.debugbear.com/test/website-speed) +- [Lighthouse](https://developer.chrome.com/docs/lighthouse/) +- [WebPageTest](https://www.webpagetest.org/) If you use these third-party tools, you should do the following to test website speed: @@ -46,13 +46,11 @@ Based on the results of these speed tests, you may want to explore other ways to :::note - Cloudflare does not consider Time to First Byte (TTFB) the most important measure of page load speed. If you are concerned about a slower TTFB while using Cloudflare, refer to our blog post about [Cloudflare and TTFB](http://blog.cloudflare.com/ttfb-time-to-first-byte-considered-meaningles/). - ::: -*** +--- ## Test Internet speed diff --git a/src/content/docs/fundamentals/reference/best-practices.mdx b/src/content/docs/fundamentals/reference/best-practices.mdx index a237a1d635c541d..6d8aa19d844e6f7 100644 --- a/src/content/docs/fundamentals/reference/best-practices.mdx +++ b/src/content/docs/fundamentals/reference/best-practices.mdx @@ -6,7 +6,7 @@ products: - fundamentals --- -More and more of our lives revolve around our online presence and maintaining access to our various online accounts, such as social media, banking, personal, and business accounts. These accounts are critical to remaining connected with our loved ones and business. As such, ensuring a level of continuity with these services is critical. Below is a list of important items to help ensure you are able to maintain access or delegate access to your Cloudflare account in the event that you are unable to manage your account. +More and more of our lives revolve around our online presence and maintaining access to our various online accounts, such as social media, banking, personal, and business accounts. These accounts are critical to remaining connected with our loved ones and business. As such, ensuring a level of continuity with these services is critical. Below is a list of important items to help ensure you are able to maintain access or delegate access to your Cloudflare account in the event that you are unable to manage your account. You can lose access to your account and or domain for several reasons: Death, divorce, disgruntled employee, or simply missing an email notification. @@ -19,7 +19,7 @@ To help prevent loss of access: ## Relationships, partnerships, and business ventures -Ensuring equal access with your partner, spouse, or your business partner is important to ensuring your account or domain names remain active. +Ensuring equal access with your partner, spouse, or your business partner is important to ensuring your account or domain names remain active. If you have a domain name or a portfolio of domain names for your business, ensuring you have a strict organization policy when it comes to vendor account creation or domain name registration is critical. The steps below will ensure your organization is the owner of the account and or domain names: @@ -37,4 +37,4 @@ Most if not all online services have automated billing processes that will attem ## Deceased account holder or registrant -While often overlooked, an important part of having an online presence is ensuring continuity in the event of an unexpected accident or incapacitation of the account holder. Create clear instructions for domain or account management in the event the account holder is unable to administer the account. If you learn no instructions are available on how to access the account of the deceased, Cloudflare may be able to assist you. +While often overlooked, an important part of having an online presence is ensuring continuity in the event of an unexpected accident or incapacitation of the account holder. Create clear instructions for domain or account management in the event the account holder is unable to administer the account. If you learn no instructions are available on how to access the account of the deceased, Cloudflare may be able to assist you. diff --git a/src/content/docs/fundamentals/reference/cdn-cgi-endpoint.mdx b/src/content/docs/fundamentals/reference/cdn-cgi-endpoint.mdx index f040e11a6251600..070a9aa8b37e5a3 100644 --- a/src/content/docs/fundamentals/reference/cdn-cgi-endpoint.mdx +++ b/src/content/docs/fundamentals/reference/cdn-cgi-endpoint.mdx @@ -12,12 +12,12 @@ This endpoint is managed and served by Cloudflare. It cannot be modified or cust A few examples include (but are not limited to): -* [Identify the Cloudflare data center serving your request](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/#identify-the-cloudflare-data-center-serving-your-request), which is helpful for troubleshooting (`https:///cdn-cgi/trace`). -* [JavaScript detection](/bots/additional-configurations/javascript-detections/) used by Cloudflare bot products (`example.com/cdn-cgi/challenge-platform/`) -* [Image transformations](/images/optimization/transformations/overview/) in the new URLs you would use for images (`example.com/cdn-cgi/image/`) -* [Email address obfuscation](/waf/tools/scrape-shield/email-address-obfuscation/) used to hide email addresses from malicious bots (`example.com/cdn-cgi/l/email-protection`) -* [Web analytics](/web-analytics/get-started/#sites-proxied-through-cloudflare) for a website proxied through Cloudflare (`example.com/cdn-cgi/rum`). This endpoint returns a `204` HTTP status code. -* [Speed Brain](/speed/optimization/content/speed-brain/) adds an HTTP header called `Speculation-Rules` to web page responses. This header contains a URL that hosts an opinionated Speculation-Rules configuration, which instructs the browser to initiate prefetch requests for anticipated future navigations. +- [Identify the Cloudflare data center serving your request](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/#identify-the-cloudflare-data-center-serving-your-request), which is helpful for troubleshooting (`https:///cdn-cgi/trace`). +- [JavaScript detection](/bots/additional-configurations/javascript-detections/) used by Cloudflare bot products (`example.com/cdn-cgi/challenge-platform/`) +- [Image transformations](/images/optimization/transformations/overview/) in the new URLs you would use for images (`example.com/cdn-cgi/image/`) +- [Email address obfuscation](/waf/tools/scrape-shield/email-address-obfuscation/) used to hide email addresses from malicious bots (`example.com/cdn-cgi/l/email-protection`) +- [Web analytics](/web-analytics/get-started/#sites-proxied-through-cloudflare) for a website proxied through Cloudflare (`example.com/cdn-cgi/rum`). This endpoint returns a `204` HTTP status code. +- [Speed Brain](/speed/optimization/content/speed-brain/) adds an HTTP header called `Speculation-Rules` to web page responses. This header contains a URL that hosts an opinionated Speculation-Rules configuration, which instructs the browser to initiate prefetch requests for anticipated future navigations. ## Recommended exclusions diff --git a/src/content/docs/fundamentals/reference/cloudflare-ray-id.mdx b/src/content/docs/fundamentals/reference/cloudflare-ray-id.mdx index dd7a00e47dce594..e99011bb53a7c81 100644 --- a/src/content/docs/fundamentals/reference/cloudflare-ray-id.mdx +++ b/src/content/docs/fundamentals/reference/cloudflare-ray-id.mdx @@ -13,7 +13,6 @@ Ray IDs are particularly useful when evaluating Security Events for patterns or Ray IDs are added as a [request header, cf-ray](/fundamentals/reference/http-headers/#cf-ray), to the connection from Cloudflare to the origin web server. As such the Ray IDs can be found using the Developer Tools in your browser or using curl with the `-v` option to show the headers. - :::caution Ray IDs are not guaranteed to be unique for every request. In some situations, different requests may have the same Ray ID. ::: @@ -34,7 +33,7 @@ Please note that Security Events may use sampled data to improve performance. If ### Log Explorer -[Log Explorer](/log-explorer/) provides access to Cloudflare logs with all the context available within the Cloudflare platform. +[Log Explorer](/log-explorer/) provides access to Cloudflare logs with all the context available within the Cloudflare platform. You can monitor security and performance issues with custom dashboards or investigate and troubleshoot issues with log search. Log explorer allows you to [build queries](/log-explorer/log-search/) for filtering specific Ray IDs. diff --git a/src/content/docs/fundamentals/reference/connection-limits.mdx b/src/content/docs/fundamentals/reference/connection-limits.mdx index 5a3fae1ade1c6bd..4d7916b94c2550d 100644 --- a/src/content/docs/fundamentals/reference/connection-limits.mdx +++ b/src/content/docs/fundamentals/reference/connection-limits.mdx @@ -6,7 +6,7 @@ products: - fundamentals --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; When HTTP/HTTPS traffic is [proxied through Cloudflare](/fundamentals/concepts/how-cloudflare-works/#cloudflare-as-a-reverse-proxy), there are often two established [TCP connections](/fundamentals/reference/tcp-connections/): the first is between the requesting client to Cloudflare and the second is between Cloudflare and the origin server. Each connection has their own set of TCP and HTTP limits, which are documented below. @@ -24,16 +24,16 @@ When HTTP/HTTPS traffic is [proxied through Cloudflare](/fundamentals/concepts/h If you are using [Cloudflare tunnels](/cloudflare-one/networks/connectors/cloudflare-tunnel/), refer to [Origin configuration](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/origin-parameters/) to view or modify your connection settings. ::: -| Type | Limit (seconds) | HTTP status code at limit | [Configurable](/fundamentals/reference/connection-limits/#configurable-limits) | -| ----------------------------------------------------------------------------------------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | -| Complete TCP Connection | 19 | [522](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/) | No | -| TCP ACK Timeout | 90 | [522](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/) | No | -| TCP Keep-Alive Interval | 30 | [520](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-520/) | No | -| Proxy Idle Timeout | 900 | [520](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-520/) | No | -| Proxy Read Timeout | 120 | [524](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-524/) | [Yes, for Enterprise zones](/api/resources/zones/subresources/settings/methods/edit/) | -| Proxy Write Timeout | 30 | [524](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-524/) | No | -| HTTP/2 Pings to Origin | Off | - | Yes | -| HTTP/2 Connection Idle | 900 | No | No | +| Type | Limit (seconds) | HTTP status code at limit | [Configurable](/fundamentals/reference/connection-limits/#configurable-limits) | +| ----------------------------------------------------------------------------------------- | --------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| Complete TCP Connection | 19 | [522](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/) | No | +| TCP ACK Timeout | 90 | [522](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-522/) | No | +| TCP Keep-Alive Interval | 30 | [520](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-520/) | No | +| Proxy Idle Timeout | 900 | [520](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-520/) | No | +| Proxy Read Timeout | 120 | [524](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-524/) | [Yes, for Enterprise zones](/api/resources/zones/subresources/settings/methods/edit/) | +| Proxy Write Timeout | 30 | [524](/support/troubleshooting/http-status-codes/cloudflare-5xx-errors/error-524/) | No | +| HTTP/2 Pings to Origin | Off | - | Yes | +| HTTP/2 Connection Idle | 900 | No | No | ## Configurable limits diff --git a/src/content/docs/fundamentals/reference/cryptographic-personhood.mdx b/src/content/docs/fundamentals/reference/cryptographic-personhood.mdx index d1039a6ef7988a6..d4c1619380433f2 100644 --- a/src/content/docs/fundamentals/reference/cryptographic-personhood.mdx +++ b/src/content/docs/fundamentals/reference/cryptographic-personhood.mdx @@ -32,11 +32,11 @@ Yes, Cloudflare does collect a limited amount of data about your key. We store t Some self-signed keys and keys from certain manufacturers have been found to [not meet this requirement](https://www.chromium.org/security-keys) and should be avoided if you are minimizing your online privacy risk. -*** +--- For more details on how we set up Cryptographic Attestation of Personhood, refer to the [introductory blog post](https://blog.cloudflare.com/introducing-cryptographic-attestation-of-personhood/). -*** +--- ## What devices are and are not allowed? @@ -44,21 +44,21 @@ For more details on how we set up Cryptographic Attestation of Personhood, refer CAP supports a wide variety of hardware authenticators: -* **Roaming (cross-platform) authenticators**: - * *Supported*: All security keys found in the [FIDO Metadata Service 3.0](https://fidoalliance.org/metadata/), unless they have been revoked for security reasons. - * *Examples*: YubiKeys, HyperFIDO keys, Thetis FIDO U2F keys -* **Platform authenticators:** - * *Examples*: Apple Touch ID and Face ID on iOS mobile devices and macOS laptops; Android mobile devices with fingerprint readers; Windows Hello +- **Roaming (cross-platform) authenticators**: + - _Supported_: All security keys found in the [FIDO Metadata Service 3.0](https://fidoalliance.org/metadata/), unless they have been revoked for security reasons. + - _Examples_: YubiKeys, HyperFIDO keys, Thetis FIDO U2F keys +- **Platform authenticators:** + - _Examples_: Apple Touch ID and Face ID on iOS mobile devices and macOS laptops; Android mobile devices with fingerprint readers; Windows Hello ### Known limitations Most combinations of of web browsers and WebAuthn-capable authenticators will work, but there are some known compatibility issues with WebAuthn attestation that may prevent CAP from working successfully: -* **Basic CAP**: - * *macOS desktop*: For TouchID, browser must be Safari - * *Android*: Browser must be Chrome -* **CAP with Zero-Knowledge Proof**: - * *Apple platform authenticators* (e.g., iPhone with Touch ID/Face ID) are incompatible with the [zero-knowledge proof system](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/). If this fails, you will immediately be redirected to basic CAP route without having to take any further action. Since Apple uses a privacy-preserving [Apple Anonymous Attestation](https://www.w3.org/TR/webauthn/#sctn-apple-anonymous-attestation) to show that an authenticator is valid while blocking tracking, this method maintains a high standard of privacy. +- **Basic CAP**: + - _macOS desktop_: For TouchID, browser must be Safari + - _Android_: Browser must be Chrome +- **CAP with Zero-Knowledge Proof**: + - _Apple platform authenticators_ (e.g., iPhone with Touch ID/Face ID) are incompatible with the [zero-knowledge proof system](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/). If this fails, you will immediately be redirected to basic CAP route without having to take any further action. Since Apple uses a privacy-preserving [Apple Anonymous Attestation](https://www.w3.org/TR/webauthn/#sctn-apple-anonymous-attestation) to show that an authenticator is valid while blocking tracking, this method maintains a high standard of privacy. We are updating this list as the ecosystem evolves and as we continue to test different combinations. @@ -74,16 +74,16 @@ If you do not have the necessary hardware (such as a Yubikey), you can still sol ## What are the common error codes and what do they mean? -* **Unsupported\_att\_fmt**: - * *Cause*: Your authenticator is using an unsupported attestation format (combination of browser and key). Also occurs when you use *Firefox* and select the option to "anonymise your key". - * *Solution:* If this error occurs during [zero-knowledge version of CAP](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/), you will automatically be redirected to the basic CAP flow. If basic CAP fails, try a different combination of supported hardware device and browser or opt for a CAPTCHA. -* **Unsupported\_issuer**: - * *Cause*: Your key is currently not supported. - * *Solution*: Use a [supported key](#allowed-devices). +- **Unsupported_att_fmt**: + - _Cause_: Your authenticator is using an unsupported attestation format (combination of browser and key). Also occurs when you use _Firefox_ and select the option to "anonymise your key". + - _Solution:_ If this error occurs during [zero-knowledge version of CAP](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/), you will automatically be redirected to the basic CAP flow. If basic CAP fails, try a different combination of supported hardware device and browser or opt for a CAPTCHA. +- **Unsupported_issuer**: + - _Cause_: Your key is currently not supported. + - _Solution_: Use a [supported key](#allowed-devices). ## Related resources -* [https://cloudflarechallenge.com](https://cloudflarechallenge.com/) (demo site) -* [Introducing Cryptographic Attestation of Personhood](https://blog.cloudflare.com/introducing-cryptographic-attestation-of-personhood/) (blog) -* [Expanding Crypotgraphic Attestation of Personhood](https://blog.cloudflare.com/cap-expands-support/) (blog) -* [Introducing Zero-Knowledge Proofs](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/) (blog) +- [https://cloudflarechallenge.com](https://cloudflarechallenge.com/) (demo site) +- [Introducing Cryptographic Attestation of Personhood](https://blog.cloudflare.com/introducing-cryptographic-attestation-of-personhood/) (blog) +- [Expanding Crypotgraphic Attestation of Personhood](https://blog.cloudflare.com/cap-expands-support/) (blog) +- [Introducing Zero-Knowledge Proofs](https://blog.cloudflare.com/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/) (blog) diff --git a/src/content/docs/fundamentals/reference/glossary.mdx b/src/content/docs/fundamentals/reference/glossary.mdx index 32fb01bd11d1fa6..0656993c5d88b81 100644 --- a/src/content/docs/fundamentals/reference/glossary.mdx +++ b/src/content/docs/fundamentals/reference/glossary.mdx @@ -6,7 +6,7 @@ products: - fundamentals --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's documentation. diff --git a/src/content/docs/fundamentals/reference/google-analytics.mdx b/src/content/docs/fundamentals/reference/google-analytics.mdx index 2f936dae6e12865..1e67ecfa7422f9b 100644 --- a/src/content/docs/fundamentals/reference/google-analytics.mdx +++ b/src/content/docs/fundamentals/reference/google-analytics.mdx @@ -19,10 +19,8 @@ Cloudflare only affects analytics tools that read logs directly from your web se :::note - To troubleshoot potential issues with Google Analytics, refer to [Common GA setup mistakes](https://support.google.com/analytics/answer/1009683). - ::: ## Zaraz @@ -31,8 +29,6 @@ As an alternative to the standard setup of Google Analytics with tag/snippet, Cl :::note - Details about features of Google Analytics that are unavailable with Zaraz can be found in [Zaraz FAQ](/zaraz/faq/#tools) - ::: diff --git a/src/content/docs/fundamentals/reference/index.mdx b/src/content/docs/fundamentals/reference/index.mdx index edf24d7ad793faf..e239c0c053a0085 100644 --- a/src/content/docs/fundamentals/reference/index.mdx +++ b/src/content/docs/fundamentals/reference/index.mdx @@ -13,6 +13,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/reference/migration-guides/scim-virtual-groups-migration.mdx b/src/content/docs/fundamentals/reference/migration-guides/scim-virtual-groups-migration.mdx index 15fcb26bc9607e2..1587fb70d0d1b81 100644 --- a/src/content/docs/fundamentals/reference/migration-guides/scim-virtual-groups-migration.mdx +++ b/src/content/docs/fundamentals/reference/migration-guides/scim-virtual-groups-migration.mdx @@ -10,14 +10,15 @@ products: - fundamentals --- -Cloudflare's first iteration of SCIM integration introduced a concept called *Virtual Groups*, typically identified by the pattern `CF--` in your IdP. Virtual Groups were an early implementation of group-based access control: they acted as placeholders created automatically by SCIM to map IdP groups to account memberships. +Cloudflare's first iteration of SCIM integration introduced a concept called _Virtual Groups_, typically identified by the pattern `CF--` in your IdP. Virtual Groups were an early implementation of group-based access control: they acted as placeholders created automatically by SCIM to map IdP groups to account memberships. + +While customers could add or remove members from these groups within their IdP, Virtual Groups had important limitations: -While customers could add or remove members from these groups within their IdP, Virtual Groups had important limitations: - They could not be renamed or deleted in the IdP. - They could not be managed within Cloudflare. - Functionally, managing a Virtual Group was equivalent to syncing users and editing each member’s policies individually. -With the GA of [User Groups](/changelog/2025-06-23-user-groups-ga/), Virtual Groups are now deprecated. Customers should migrate to [User Groups](/fundamentals/manage-members/user-groups/), which provide a more flexible and scalable way to assign and manage policies. To maintain SCIM synchronization with the Cloudflare Dashboard, we strongly recommend migrating to **SCIM User Groups**. +With the GA of [User Groups](/changelog/2025-06-23-user-groups-ga/), Virtual Groups are now deprecated. Customers should migrate to [User Groups](/fundamentals/manage-members/user-groups/), which provide a more flexible and scalable way to assign and manage policies. To maintain SCIM synchronization with the Cloudflare Dashboard, we strongly recommend migrating to **SCIM User Groups**. If you have never synced a group linked to a `CF--` Virtual Group from your IdP to Cloudflare, no action is needed. @@ -32,9 +33,7 @@ If you have never synced a group linked to a `CF--` Virtua ## More resources -* [User Groups changelog](/changelog/2025-06-02-user-groups-beta/) -* [User Groups documentation](/fundamentals/manage-members/user-groups/) -* [Create an Account Owned Token](/fundamentals/api/get-started/account-owned-tokens/#create-an-account-owned-token) -* [SCIM provisioning setup guide](/fundamentals/account/account-security/scim-setup/) - - +- [User Groups changelog](/changelog/2025-06-02-user-groups-beta/) +- [User Groups documentation](/fundamentals/manage-members/user-groups/) +- [Create an Account Owned Token](/fundamentals/api/get-started/account-owned-tokens/#create-an-account-owned-token) +- [SCIM provisioning setup guide](/fundamentals/account/account-security/scim-setup/) diff --git a/src/content/docs/fundamentals/reference/partners.mdx b/src/content/docs/fundamentals/reference/partners.mdx index 5e6be4d2e93fd82..a066448644a58cd 100644 --- a/src/content/docs/fundamentals/reference/partners.mdx +++ b/src/content/docs/fundamentals/reference/partners.mdx @@ -9,7 +9,7 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; [Cloudflare Technology Partners](https://www.cloudflare.com/partners/technology-partners/) offer purpose-built integrations with our products, providing expanded functionality for our users. Learn how to configure these integrations with our tutorials and how-to guides. diff --git a/src/content/docs/fundamentals/reference/policies-compliances/delivering-videos-with-cloudflare.mdx b/src/content/docs/fundamentals/reference/policies-compliances/delivering-videos-with-cloudflare.mdx index 7e65a2e16b6a01a..106282e9575100c 100644 --- a/src/content/docs/fundamentals/reference/policies-compliances/delivering-videos-with-cloudflare.mdx +++ b/src/content/docs/fundamentals/reference/policies-compliances/delivering-videos-with-cloudflare.mdx @@ -17,7 +17,7 @@ Unfortunately, while most people respect these limitations and understand they e The following are some recommendations for using Cloudflare's services based on what may have brought you to this page. -*** +--- ## I'm a website operator and my content was redirected for Terms of Service violations @@ -25,9 +25,9 @@ If you are on a Free, Pro, or Business Plan and your application appears to be s ## Options for web admins to remove redirects -* **Serve redirected content from a grey-clouded sub-domain** +- **Serve redirected content from a grey-clouded sub-domain** -* **Serve redirected content from a paid service as outlined below** +- **Serve redirected content from a paid service as outlined below** ## Delivering videos with Cloudflare using paid products @@ -43,14 +43,14 @@ To get started with Stream, visit **Stream** from your Dashboard or [sign up](ht [Stream Delivery](https://www.cloudflare.com/products/stream-delivery/) offers caching and delivery of video content through Cloudflare data centers around the globe. This CDN feature is only available on the Cloudflare Enterprise Plan. Please [contact sales](https://www.cloudflare.com/products/stream-delivery/#) if you'd like to explore this option. -*** +--- ## Getting information on the content you are delivering If you need more information about the content your zone is serving (for example, content type), you can use the following tools: -* Cache Analytics users: Open the **Caching tab** on the Dashboard to filter by content type and identify the type of traffic you are transferring. -* Users without Cache Analytics: Open the **Analytics tab** on the Dashboard and select the **Performance** section for information about the content you are serving. +- Cache Analytics users: Open the **Caching tab** on the Dashboard to filter by content type and identify the type of traffic you are transferring. +- Users without Cache Analytics: Open the **Analytics tab** on the Dashboard and select the **Performance** section for information about the content you are serving. ![Cache Analytics - Identify type of traffic being transferred](~/assets/images/support/traffic-types.png) @@ -58,6 +58,6 @@ If you need more information about the content your zone is serving (for example If you have additional questions about redirection (e.g. if you believe your content was redirected in error and have supporting evidence), file a [support ticket](https://dash.cloudflare.com/redirect?account=support) and include the following information: -* Name of your domain -* Description of the problem -* Description of the content you're serving through Cloudflare's network +- Name of your domain +- Description of the problem +- Description of the content you're serving through Cloudflare's network diff --git a/src/content/docs/fundamentals/reference/policies-compliances/index.mdx b/src/content/docs/fundamentals/reference/policies-compliances/index.mdx index 1187f88b49dbde0..a0e6c30419d4e4c 100644 --- a/src/content/docs/fundamentals/reference/policies-compliances/index.mdx +++ b/src/content/docs/fundamentals/reference/policies-compliances/index.mdx @@ -10,6 +10,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/reference/redirects.mdx b/src/content/docs/fundamentals/reference/redirects.mdx index cd7ef6cc592e166..faf74ce66f949a6 100644 --- a/src/content/docs/fundamentals/reference/redirects.mdx +++ b/src/content/docs/fundamentals/reference/redirects.mdx @@ -6,7 +6,7 @@ products: - fundamentals --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Cloudflare offers a variety of ways to perform URL redirects, which tell a visitor's browser that the location of a page has been changed. diff --git a/src/content/docs/fundamentals/reference/report-abuse/abuse-report-obligations.mdx b/src/content/docs/fundamentals/reference/report-abuse/abuse-report-obligations.mdx index c5e1d5484357c60..3a4e6c9b913f065 100644 --- a/src/content/docs/fundamentals/reference/report-abuse/abuse-report-obligations.mdx +++ b/src/content/docs/fundamentals/reference/report-abuse/abuse-report-obligations.mdx @@ -18,6 +18,6 @@ Our Trust & Safety team sends abuse reports to the domain owner or the abuse poi To assist with timely resolution and avoid potential service interruptions: -* Confirm that the [abuse contact email address](/fundamentals/account/account-security/abuse-contact/) associated with your account is actively managed and monitored for potential abuse report notifications. -* Consider using a mailing list email address that goes to multiple people or teams within your organization instead of the email address for an individual person. -* Respond to any abuse report notification within 24 hours. In your response, include any information that you believe will be relevant to Cloudflare in its assessment of the abuse report. Failure to respond in a timely manner or to address the concerns in the abuse report may result in the removal or blocking of reported content, websites, or apps and suspension or termination of Cloudflare services for the associated account. +- Confirm that the [abuse contact email address](/fundamentals/account/account-security/abuse-contact/) associated with your account is actively managed and monitored for potential abuse report notifications. +- Consider using a mailing list email address that goes to multiple people or teams within your organization instead of the email address for an individual person. +- Respond to any abuse report notification within 24 hours. In your response, include any information that you believe will be relevant to Cloudflare in its assessment of the abuse report. Failure to respond in a timely manner or to address the concerns in the abuse report may result in the removal or blocking of reported content, websites, or apps and suspension or termination of Cloudflare services for the associated account. diff --git a/src/content/docs/fundamentals/reference/report-abuse/complaint-types.mdx b/src/content/docs/fundamentals/reference/report-abuse/complaint-types.mdx index b216ceff2722d04..5c3cff418dfa842 100644 --- a/src/content/docs/fundamentals/reference/report-abuse/complaint-types.mdx +++ b/src/content/docs/fundamentals/reference/report-abuse/complaint-types.mdx @@ -13,31 +13,31 @@ products: Use Cloudflare's [online abuse form](https://abuse.cloudflare.com/) to report different types of abuse. -*** +--- ## DMCA complaints Valid [Digital Millennium Copyright Act (DMCA)](https://www.copyright.gov/dmca/) complaints must provide all of the following details: -* A physical or electronic signature (typing your full name is valid) of the copyright owner or a person authorized to act on their behalf. -* Identification of the infringed copyright (for example, a link to your original work or clear description of the materials allegedly infringed upon). -* Identification of the infringing material and information reasonably sufficient to allow Cloudflare to locate the material on the infringing website (for example, a [link to the site](/fundamentals/reference/report-abuse/provide-specific-urls/) where the infringed copyrighted material appears). -* Your contact information, including your address, telephone number, and email address. -* A statement that you believe, in good faith, that the use of the material in the manner asserted is not authorized by the copyright owner, its agent, or the law. -* A statement that the information in the notification is accurate, and, under penalty of perjury, that you are authorized to act on behalf of the copyright owner. +- A physical or electronic signature (typing your full name is valid) of the copyright owner or a person authorized to act on their behalf. +- Identification of the infringed copyright (for example, a link to your original work or clear description of the materials allegedly infringed upon). +- Identification of the infringing material and information reasonably sufficient to allow Cloudflare to locate the material on the infringing website (for example, a [link to the site](/fundamentals/reference/report-abuse/provide-specific-urls/) where the infringed copyrighted material appears). +- Your contact information, including your address, telephone number, and email address. +- A statement that you believe, in good faith, that the use of the material in the manner asserted is not authorized by the copyright owner, its agent, or the law. +- A statement that the information in the notification is accurate, and, under penalty of perjury, that you are authorized to act on behalf of the copyright owner. -*** +--- ## Phishing Valid phishing reports must provide all of the following details: -* The domain in question. -* The specific link to the phishing page. +- The domain in question. +- The specific link to the phishing page. After Cloudflare confirms existence of the phishing page, Cloudflare provides a warning page to visitors accessing the phishing link. Cloudflare also notifies the site owner to clean the malicious files from their origin web server. -*** +--- ## Trademark infringement @@ -45,7 +45,7 @@ Cloudflare only acknowledges abuse reports from trademark holders or their legal For more details about what information is required, refer to [our abuse form](https://abuse.cloudflare.com/). -*** +--- ## Malware sites @@ -53,7 +53,7 @@ Legitimate reports of malware URLs are blocked from loading via Cloudflare. For more details about what information is required, refer to [our abuse form](https://abuse.cloudflare.com/). -*** +--- ## Child exploitation material diff --git a/src/content/docs/fundamentals/reference/report-abuse/index.mdx b/src/content/docs/fundamentals/reference/report-abuse/index.mdx index 1607f978b92b9c9..211b1f859b80956 100644 --- a/src/content/docs/fundamentals/reference/report-abuse/index.mdx +++ b/src/content/docs/fundamentals/reference/report-abuse/index.mdx @@ -19,7 +19,7 @@ When it comes to reports of abuse on websites that use our services, our ability ## Resources -* [Read abuse policy](https://www.cloudflare.com/trust-hub/abuse-approach/) -* [Review complaint types](/fundamentals/reference/report-abuse/complaint-types/) -* [Providing specific URLs](/fundamentals/reference/report-abuse/provide-specific-urls/) -* [Submit abuse report](https://www.cloudflare.com/abuse/form) +- [Read abuse policy](https://www.cloudflare.com/trust-hub/abuse-approach/) +- [Review complaint types](/fundamentals/reference/report-abuse/complaint-types/) +- [Providing specific URLs](/fundamentals/reference/report-abuse/provide-specific-urls/) +- [Submit abuse report](https://www.cloudflare.com/abuse/form) diff --git a/src/content/docs/fundamentals/reference/report-abuse/submit-report.mdx b/src/content/docs/fundamentals/reference/report-abuse/submit-report.mdx index bd36756a9df63e7..3da4ad19a0ab288 100644 --- a/src/content/docs/fundamentals/reference/report-abuse/submit-report.mdx +++ b/src/content/docs/fundamentals/reference/report-abuse/submit-report.mdx @@ -19,8 +19,10 @@ Cloudflare offers three ways for you to submit an abuse report: - Public form: Refer to [Submit an Abuse Report](https://abuse.cloudflare.com/) to learn more. - The Cloudflare dashboard, on the **Abuse reports** page. - - Optionally, filter the reports based on date, report status, report type, and domain. + + Optionally, filter the reports based on date, report status, report type, and + domain. + - The Cloudflare API: Use the [Abuse Reports API](/api/resources/abuse_reports/) to submit an abuse report. ## View submitted reports @@ -29,7 +31,7 @@ Users with Admin, Super Admin, or Trust & Safety roles can view any abuse report 1. In the Cloudflare dashboard, go to the **Abuse reports** page. - + 2. Optionally, filter the reports based on date, report status, report type, and domain. @@ -37,6 +39,6 @@ If there was a mitigation against your website due to the abuse allegation, you ## Receive notifications -You can enable abuse notifications for your account to configure email, webhook, or PagerDuty alerts about new abuse reports against your websites. +You can enable abuse notifications for your account to configure email, webhook, or PagerDuty alerts about new abuse reports against your websites. -For help setting up alerts, refer to [Configure Cloudflare notifications](/notifications/get-started/). \ No newline at end of file +For help setting up alerts, refer to [Configure Cloudflare notifications](/notifications/get-started/). diff --git a/src/content/docs/fundamentals/reference/sdk-ecosystem-support-policy.mdx b/src/content/docs/fundamentals/reference/sdk-ecosystem-support-policy.mdx index 1b46a73b2f45f59..31a4b85d98924b4 100644 --- a/src/content/docs/fundamentals/reference/sdk-ecosystem-support-policy.mdx +++ b/src/content/docs/fundamentals/reference/sdk-ecosystem-support-policy.mdx @@ -21,7 +21,7 @@ These lifecycle stages may be referred to in different terms across Cloudflare p ### Early access -During this stage, Cloudflare makes SDK changes available that we are seeking feedback on prior to releasing for general usage. Early access will often include warning labels or caveats on functionality that is subject to change without notice. In general, early access SDKs are not suitable for production systems unless explicitly mentioned. +During this stage, Cloudflare makes SDK changes available that we are seeking feedback on prior to releasing for general usage. Early access will often include warning labels or caveats on functionality that is subject to change without notice. In general, early access SDKs are not suitable for production systems unless explicitly mentioned. ### Active support @@ -41,13 +41,13 @@ While Cloudflare cannot provide support for all older versions of our libraries The SDK ecosystem follows semantic versioning, which defines versions as follows: -* MAJOR version when there are backward-incompatible changes made. -* MINOR version when functionality is added in a backward compatible-manner. -* PATCH version for backward-compatible bug fixes (without any improvements). +- MAJOR version when there are backward-incompatible changes made. +- MINOR version when functionality is added in a backward compatible-manner. +- PATCH version for backward-compatible bug fixes (without any improvements). :::caution -As Cloudflare has recently swapped to [automatically generating our libraries using OpenAPI](https://blog.cloudflare.com/lessons-from-building-an-automated-sdk-pipeline), we have relaxed the strict versioning requirements on the libraries (Terraform is not changing). Minor releases *may* contain breaking changes in the forms of method, structure, or type renames as the service owners stabilize their schemas and iterate on usability improvements. +As Cloudflare has recently swapped to [automatically generating our libraries using OpenAPI](https://blog.cloudflare.com/lessons-from-building-an-automated-sdk-pipeline), we have relaxed the strict versioning requirements on the libraries (Terraform is not changing). Minor releases _may_ contain breaking changes in the forms of method, structure, or type renames as the service owners stabilize their schemas and iterate on usability improvements. If this is not suitable for your use case, pin to a known good version or use the previous major version of the library. ::: @@ -62,5 +62,5 @@ Alongside the automatic migration approach, we provide documentation on the chan ## Related resources -* [Semantic versioning definitions](https://semver.org/) -* [Cloudflare's Terraform documentation](/terraform/) +- [Semantic versioning definitions](https://semver.org/) +- [Cloudflare's Terraform documentation](/terraform/) diff --git a/src/content/docs/fundamentals/reference/tcp-connections.mdx b/src/content/docs/fundamentals/reference/tcp-connections.mdx index 2a10e61edd13149..7662f578f5197a6 100644 --- a/src/content/docs/fundamentals/reference/tcp-connections.mdx +++ b/src/content/docs/fundamentals/reference/tcp-connections.mdx @@ -18,7 +18,7 @@ accTitle: Connections with Cloudflare A[Visitor] <-- Connection --> B[Cloudflare global network] <-- Connection --> C[Origin server] ``` -
+
User traffic is routed to the nearest Cloudflare data center based on the shortest [Border Gateway Protocol](https://www.cloudflare.com/learning/security/glossary/what-is-bgp/) (BGP) path, thanks to [anycast](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) routing. Cloudflare then processes the request. In case a request is not served from Cloudflare’s data centers, Cloudflare will open a connection to the origin server to forward the request. @@ -36,10 +36,8 @@ For connections to users, Cloudflare has a default idle timeout of 400 seconds. :::note - Be aware that even if there are keep-alives, Cloudflare cannot guarantee to keep a connection, since besides idleness, there are other reasons, like capacity balancing, data center maintenance or node restarts that can cause disconnections. Having this in mind, applications should be structured to handle disconnections gracefully. - ::: TCP connection settings between the user and Cloudflare, and between Cloudflare and Origin can be customized for Enterprise customers. Reach out to your account team for more details. diff --git a/src/content/docs/fundamentals/reference/troubleshooting.mdx b/src/content/docs/fundamentals/reference/troubleshooting.mdx index b9e4589f7feeebc..7f18e62f0b0f805 100644 --- a/src/content/docs/fundamentals/reference/troubleshooting.mdx +++ b/src/content/docs/fundamentals/reference/troubleshooting.mdx @@ -15,42 +15,42 @@ When you [set up Cloudflare](/fundamentals/account/), you may experience the fol ## Error messages -* [`ERR_TOO_MANY_REDIRECTS`](/ssl/troubleshooting/too-many-redirects/) -* [`525` or `526` errors](/ssl/troubleshooting/too-many-redirects/) -* [Cannot add DNS records with the same name](/dns/manage-dns-records/troubleshooting/records-with-same-name/) -* [`ERR_SSL_VERSION_OR_CIPHER_MISMATCH` or `SSL_ERROR_NO_CYPHER_OVERLAP`](/ssl/troubleshooting/version-cipher-mismatch/) -* [`DNS_PROBE_FINISHED_NXDOMAIN`](/dns/troubleshooting/dns-probe-finished-nxdomain/) -* [Record exposing origin server IP address](/dns/manage-dns-records/troubleshooting/exposed-ip-address/) -* [Mixed content errors](/ssl/troubleshooting/mixed-content-errors/) -* [SSL errors in appear in my browser](/ssl/troubleshooting/general-ssl-errors/) +- [`ERR_TOO_MANY_REDIRECTS`](/ssl/troubleshooting/too-many-redirects/) +- [`525` or `526` errors](/ssl/troubleshooting/too-many-redirects/) +- [Cannot add DNS records with the same name](/dns/manage-dns-records/troubleshooting/records-with-same-name/) +- [`ERR_SSL_VERSION_OR_CIPHER_MISMATCH` or `SSL_ERROR_NO_CYPHER_OVERLAP`](/ssl/troubleshooting/version-cipher-mismatch/) +- [`DNS_PROBE_FINISHED_NXDOMAIN`](/dns/troubleshooting/dns-probe-finished-nxdomain/) +- [Record exposing origin server IP address](/dns/manage-dns-records/troubleshooting/exposed-ip-address/) +- [Mixed content errors](/ssl/troubleshooting/mixed-content-errors/) +- [SSL errors in appear in my browser](/ssl/troubleshooting/general-ssl-errors/) ## Behavior -* [Why are Cloudflare's IPs in my origin web server logs?](/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/) -* [Is Cloudflare attacking me?](#is-cloudflare-attacking-me) -* [Cannot add domain to Cloudflare](/dns/zone-setups/troubleshooting/cannot-add-domain/) -* [My domain’s email stopped working](/dns/troubleshooting/email-issues/) -* [Why is my site served over HTTP instead of HTTPS?](/ssl/edge-certificates/encrypt-visitor-traffic/) -* [SSL is not working for my second-level subdomain, such as `dev.www.example.com`](/ssl/troubleshooting/general-ssl-errors/#only-some-of-your-subdomains-return-ssl-errors) -* [Why was my domain deleted from Cloudflare?](/dns/zone-setups/troubleshooting/domain-deleted/) +- [Why are Cloudflare's IPs in my origin web server logs?](/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/) +- [Is Cloudflare attacking me?](#is-cloudflare-attacking-me) +- [Cannot add domain to Cloudflare](/dns/zone-setups/troubleshooting/cannot-add-domain/) +- [My domain’s email stopped working](/dns/troubleshooting/email-issues/) +- [Why is my site served over HTTP instead of HTTPS?](/ssl/edge-certificates/encrypt-visitor-traffic/) +- [SSL is not working for my second-level subdomain, such as `dev.www.example.com`](/ssl/troubleshooting/general-ssl-errors/#only-some-of-your-subdomains-return-ssl-errors) +- [Why was my domain deleted from Cloudflare?](/dns/zone-setups/troubleshooting/domain-deleted/) ## Cloudflare -* [Gather information to troubleshoot site issues](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/) -* [Contact Cloudflare support](/support/contacting-cloudflare-support/) -* [Manage email notifications](/fundamentals/user-profiles/customize-account/#notifications) +- [Gather information to troubleshoot site issues](/support/troubleshooting/general-troubleshooting/gathering-information-for-troubleshooting-sites/) +- [Contact Cloudflare support](/support/contacting-cloudflare-support/) +- [Manage email notifications](/fundamentals/user-profiles/customize-account/#notifications) ## General resources -* [DNS FAQ](/dns/faq/) -* [SSL/TLS FAQ](/ssl/faq/) +- [DNS FAQ](/dns/faq/) +- [SSL/TLS FAQ](/ssl/faq/) ## Is Cloudflare attacking me Two common scenarios falsely lead to the perception that Cloudflare is attacking your site: -* Unless you [restore the original visitor IP addresses](/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/), Cloudflare IP addresses appear in your server logs for all proxied requests. -* The attacker is spoofing Cloudflare's IPs. Cloudflare only [sends traffic to your origin web server over a few specific ports](/fundamentals/reference/network-ports/) unless you use [Cloudflare Spectrum](/spectrum/). +- Unless you [restore the original visitor IP addresses](/support/troubleshooting/restoring-visitor-ips/restoring-original-visitor-ips/), Cloudflare IP addresses appear in your server logs for all proxied requests. +- The attacker is spoofing Cloudflare's IPs. Cloudflare only [sends traffic to your origin web server over a few specific ports](/fundamentals/reference/network-ports/) unless you use [Cloudflare Spectrum](/spectrum/). Ideally, because Cloudflare is a reverse proxy, your hosting provider observes attack traffic connecting from [Cloudflare IP addresses](https://www.cloudflare.com/ips/). In contrast, if you notice connections from IP addresses that do not belong to Cloudflare, the attack is direct to your origin web server. Cloudflare cannot stop attacks directly to your origin IP address because the traffic bypasses Cloudflare's network. diff --git a/src/content/docs/fundamentals/security/index.mdx b/src/content/docs/fundamentals/security/index.mdx index 530676a405630c9..6998badd02eba4c 100644 --- a/src/content/docs/fundamentals/security/index.mdx +++ b/src/content/docs/fundamentals/security/index.mdx @@ -10,6 +10,6 @@ products: - fundamentals --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/fundamentals/security/pci-scans.mdx b/src/content/docs/fundamentals/security/pci-scans.mdx index 6d67add60af9062..267a0d3f3e9bc55 100644 --- a/src/content/docs/fundamentals/security/pci-scans.mdx +++ b/src/content/docs/fundamentals/security/pci-scans.mdx @@ -11,10 +11,8 @@ products: :::note - Cloudflare is PCI certified as a Data Processor. Refer to [PCI compliance and vulnerabilities mitigation](/ssl/reference/compliance-and-vulnerabilities) and Cloudflare's PCI DSS Responsibility Matrix for more information. - ::: PCI scanners are tools used to identify security weaknesses. When a business undergoes a compliance audit, PCI scan results are used for compliance verification. @@ -39,7 +37,7 @@ However, customers can easily block all unwanted traffic to these ports by using You can find all our public compliance resources in the following pages: -* [Certifications and compliance resources](https://www.cloudflare.com/trust-hub/compliance-resources/) -* [Compliance documentation](/fundamentals/reference/policies-compliances/compliance-docs/) +- [Certifications and compliance resources](https://www.cloudflare.com/trust-hub/compliance-resources/) +- [Compliance documentation](/fundamentals/reference/policies-compliances/compliance-docs/) You can access Compliance documents in the Cloudflare dashboard by selecting your account where you are a Super Administrator and then navigating to **Support** > **Compliance Documents**. diff --git a/src/content/docs/fundamentals/security/under-ddos-attack.mdx b/src/content/docs/fundamentals/security/under-ddos-attack.mdx index fec2c129035f0eb..2b0568e28ce011d 100644 --- a/src/content/docs/fundamentals/security/under-ddos-attack.mdx +++ b/src/content/docs/fundamentals/security/under-ddos-attack.mdx @@ -7,7 +7,7 @@ products: - fundamentals --- -import { Render } from "~/components" +import { Render } from "~/components"; @@ -15,9 +15,9 @@ import { Render } from "~/components" Common signs that you are under DDoS attack include: -* Your site is offline or slow to respond to requests. -* Unexpected spikes appear in the graph of **Requests Through Cloudflare** or **Bandwidth** in your Cloudflare **Analytics** app. -* Strange requests appear in your origin web server logs that do not match normal visitor behavior. +- Your site is offline or slow to respond to requests. +- Unexpected spikes appear in the graph of **Requests Through Cloudflare** or **Bandwidth** in your Cloudflare **Analytics** app. +- Strange requests appear in your origin web server logs that do not match normal visitor behavior. :::note diff --git a/src/content/docs/fundamentals/user-profiles/2fa.mdx b/src/content/docs/fundamentals/user-profiles/2fa.mdx index 57dc48b28cb5962..62092f62c5e8c8f 100644 --- a/src/content/docs/fundamentals/user-profiles/2fa.mdx +++ b/src/content/docs/fundamentals/user-profiles/2fa.mdx @@ -6,12 +6,10 @@ products: - fundamentals --- -import { DashButton, Render } from "~/components" - +import { DashButton, Render } from "~/components"; - ## Configure security key authentication for two-factor Cloudflare login :::caution @@ -111,7 +109,7 @@ Regenerating your backup codes will invalidate your previous codes. 1. Log in to the Cloudflare dashboard. - + 2. Select **My Profile**. 3. Select **Authentication**. @@ -129,17 +127,17 @@ If you are not the Super Administrator of an organization with **2FA Enforcement 1. Log in to the Cloudflare dashboard. - + 2. Select **Profile**. 3. Select the **Authentication**. - To remove your security key: - 1. Select **Edit** in the **Security Key Authentication** card. A drop-down menu shows more details about your security key. - 2. Select **Delete**. - 3. Enter your Cloudflare password, then select **Remove**. + 1. Select **Edit** in the **Security Key Authentication** card. A drop-down menu shows more details about your security key. + 2. Select **Delete**. + 3. Enter your Cloudflare password, then select **Remove**. - To remove your TOTP mobile application authentication: - 1. Select **Delete method** in the **Mobile App Authentication** card. - 2. Enter your Cloudflare password, authenticator application code, or a recovery code, then select **Disable**. + 1. Select **Delete method** in the **Mobile App Authentication** card. + 2. Enter your Cloudflare password, authenticator application code, or a recovery code, then select **Disable**. ![how to disable your TOTP mobile application authentication.](https://developerdocsgifs.cloudflaretraining.com/resampled_5fps_disable_mobile_auth_v2_final.gif) @@ -147,18 +145,18 @@ If you are not the Super Administrator of an organization with **2FA Enforcement If you lose access to a mobile device, security key, or authentication code, you can solve these issues by using a backup code or retrieving a backup code from your preferred authentication app. -Refer to Google's documentation to [transfer Google Authenticator codes from one Android device to another](https://support.google.com/accounts/answer/1066447?co=GENIE.Platform%3DAndroid\&hl=en\&oco=0). +Refer to Google's documentation to [transfer Google Authenticator codes from one Android device to another](https://support.google.com/accounts/answer/1066447?co=GENIE.Platform%3DAndroid&hl=en&oco=0). When setting up 2FA, you should have saved your backup codes in a secure location. To restore lost access using a Cloudflare backup code: 1. Retrieve the backup code from where you stored it. 2. Go to the [Cloudflare login page](https://dash.cloudflare.com/login), enter your username and password and select **Log in**. - + 3. You should see a page titled **Two-Factor Authentication** - * If it has a text box, enter one of your backup codes and select **Log in**. - * If instead you see "Insert your security key and touch it", cancel any prompts from your browser that appear and select **try another authentication method or backup code**. Proceed to enter one of your backup codes and select **Log in**. + - If it has a text box, enter one of your backup codes and select **Log in**. + - If instead you see "Insert your security key and touch it", cancel any prompts from your browser that appear and select **try another authentication method or backup code**. Proceed to enter one of your backup codes and select **Log in**. :::note @@ -167,7 +165,7 @@ Once you use a backup code, it becomes invalid. ## Related resources -* [Google Authentication documentation](https://support.google.com/accounts/answer/1066447?hl=en\&ref_topic=2954345\&co=GENIE.Platform%3DiOS\&oco=0) -* [YubiKey documentation](https://www.yubico.com/works-with-yubikey/catalog/cloudflare/) -* [Set up multi-user accounts on Cloudflare](/fundamentals/manage-members/) -* [Account recovery](/fundamentals/user-profiles/account-recovery/) +- [Google Authentication documentation](https://support.google.com/accounts/answer/1066447?hl=en&ref_topic=2954345&co=GENIE.Platform%3DiOS&oco=0) +- [YubiKey documentation](https://www.yubico.com/works-with-yubikey/catalog/cloudflare/) +- [Set up multi-user accounts on Cloudflare](/fundamentals/manage-members/) +- [Account recovery](/fundamentals/user-profiles/account-recovery/) diff --git a/src/content/docs/fundamentals/user-profiles/account-recovery.mdx b/src/content/docs/fundamentals/user-profiles/account-recovery.mdx index 31d166bcf9914c5..05298913d04f3cd 100644 --- a/src/content/docs/fundamentals/user-profiles/account-recovery.mdx +++ b/src/content/docs/fundamentals/user-profiles/account-recovery.mdx @@ -12,7 +12,7 @@ If you do not have access to your 2FA account or backup codes and cannot current 1. Log into the [Cloudflare dashboard](https://dash.cloudflare.com/login). - + 2. On the **Two-Factor Authentication** page, select **Try recovery** on **Lost all 2FA devices and backup codes?**. 3. Select **Begin recovery**. @@ -24,8 +24,8 @@ If you see **Device verified**, you will receive an email within 3-5 days with i If you see **Device verification failed**, you may be able to try again considering the following: - * If you clear your cookies often or are logging in from a different IP address, you have wiped Cloudflare's memory of your device and will need to use a different device to verify. - * Your browser may be set to clear cookies on exit or after browser or OS upgrades. This interferes with the device verification process. - * You may be using anti-malware or other software that automatically clears your browser cookies and makes your device unregognizable by Cloudflare's Dashboard. +- If you clear your cookies often or are logging in from a different IP address, you have wiped Cloudflare's memory of your device and will need to use a different device to verify. +- Your browser may be set to clear cookies on exit or after browser or OS upgrades. This interferes with the device verification process. +- You may be using anti-malware or other software that automatically clears your browser cookies and makes your device unregognizable by Cloudflare's Dashboard. -If you are still unable to verify your device, follow the instructions to *Request manual verification* on the **Device verification failed** page. +If you are still unable to verify your device, follow the instructions to _Request manual verification_ on the **Device verification failed** page. diff --git a/src/content/docs/fundamentals/user-profiles/change-password-or-email.mdx b/src/content/docs/fundamentals/user-profiles/change-password-or-email.mdx index f848ead54c25ce4..7e8b24b3c6504bf 100644 --- a/src/content/docs/fundamentals/user-profiles/change-password-or-email.mdx +++ b/src/content/docs/fundamentals/user-profiles/change-password-or-email.mdx @@ -62,7 +62,7 @@ If you forget the email address associated with your application: ## Forgot your password -You must be logged out of the Cloudflare dashboard to view the **Forgot your password?** option. +You must be logged out of the Cloudflare dashboard to view the **Forgot your password?** option. If you forget the password associated with your email address: diff --git a/src/content/docs/fundamentals/user-profiles/customize-account.mdx b/src/content/docs/fundamentals/user-profiles/customize-account.mdx index e2069315ad718cd..c7b80fefce89a7c 100644 --- a/src/content/docs/fundamentals/user-profiles/customize-account.mdx +++ b/src/content/docs/fundamentals/user-profiles/customize-account.mdx @@ -35,9 +35,9 @@ Adjust how the Cloudflare dashboard appears on your device. 2. Go to **Profile**. 3. From **Settings** > **Dashboard appearance**, choose a value: - * **Dark**: Defaults to darker colors. - * **Light**: Defaults to lighter colors. - * **Use system setting**: Defaults to the option used on your device. + - **Dark**: Defaults to darker colors. + - **Light**: Defaults to lighter colors. + - **Use system setting**: Defaults to the option used on your device. Your dashboard display will update to the new appearance setting automatically. diff --git a/src/content/docs/fundamentals/user-profiles/delete-account.mdx b/src/content/docs/fundamentals/user-profiles/delete-account.mdx index 94289a564a45da4..09b79d815f25fa7 100644 --- a/src/content/docs/fundamentals/user-profiles/delete-account.mdx +++ b/src/content/docs/fundamentals/user-profiles/delete-account.mdx @@ -28,7 +28,7 @@ Before Cloudflare can cancel your account and delete your personal information, - [Disable auto-renew for your Registrar domain(s)](/registrar/account-options/renew-domains#set-up-automatic-renewals) - If you are using a Cloudflare [CNAME setup](/dns/zone-setups/partial-setup/), [update your DNS records](/dns/manage-dns-records/how-to/create-dns-records/#edit-dns-records) at your DNS provider to point to your website IPs or hostnames instead of Cloudflare. - [Delete payment information](/billing/get-started/update-billing-info/#delete-a-payment-method) -- (*Optional*) [Download a copy of your invoices](/billing/manage/invoices/#download-invoice). Once deleted, the invoices will no longer be accessible and cannot be re-sent to you. +- (_Optional_) [Download a copy of your invoices](/billing/manage/invoices/#download-invoice). Once deleted, the invoices will no longer be accessible and cannot be re-sent to you. ## Delete your Cloudflare account @@ -49,7 +49,7 @@ All domains, subscriptions, and billing information on your account will be remo 1. Log in to the Cloudflare dashboard. - + 2. Select **My Profile**. 3. Select **Delete this user**. @@ -61,4 +61,3 @@ All domains, subscriptions, and billing information on your account will be remo Cloudflare will purge your personal information within a year of a deletion request unless required to retain it for legal obligations (such as ongoing abuse investigations or pending litigation). Refer to the [Cloudflare Data Processing Addendum](https://www.cloudflare.com/cloudflare-customer-dpa/) for further information about the deletion of personal information following the cancellation of your account. ::: - diff --git a/src/content/docs/fundamentals/user-profiles/login.mdx b/src/content/docs/fundamentals/user-profiles/login.mdx index e81d66c7afbac91..9152dcc59e82381 100644 --- a/src/content/docs/fundamentals/user-profiles/login.mdx +++ b/src/content/docs/fundamentals/user-profiles/login.mdx @@ -27,6 +27,7 @@ Enter your email address and password. If your admin has enabled [enabled SSO](/fundamentals/manage-members/dashboard-sso/), enter your email address. ### Social login + Social login allows you to sign in with a trusted 3rd party sign in service such as Apple, Google, or GitHub. Social login is only available for accounts with a verified email address, or accounts that signed up via social login initially. If you have additionally configured two-factor authentication on your account, that will be presented in addition to any login and two-factor authentication provided by the social login provider. :::note @@ -43,12 +44,11 @@ To set a password, go to [Forgot Password](https://dash.cloudflare.com/forgot-pa You will receive an email with instructions to set your password. Once created, use your email and the new password to log in. ::: - #### Sign in with Apple -* **Same Cloudflare account email as Apple ID**: You can sign in with either your email and password or sign in with Apple. +- **Same Cloudflare account email as Apple ID**: You can sign in with either your email and password or sign in with Apple. -* **Different Cloudflare account email as Apple ID**: This option creates a new Cloudflare account. If you want to log in to an existing account, [change your email address](/fundamentals/user-profiles/change-password-or-email/) to match the one used for your Apple ID. +- **Different Cloudflare account email as Apple ID**: This option creates a new Cloudflare account. If you want to log in to an existing account, [change your email address](/fundamentals/user-profiles/change-password-or-email/) to match the one used for your Apple ID. If you chose to share your email when creating a Cloudflare account with Apple ID and want to set a password and obtain an API key, go to the [Cloudflare dashboard](https://dash.cloudflare.com/login) login page and select **Forgot your password?** to trigger a password reset email. @@ -73,4 +73,3 @@ If you created your Cloudflare account using Apple Relay and decide to change yo - Sign in with GitHub uses the [Primary email address](https://docs.github.com/en/account-and-profile/how-tos/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/changing-your-primary-email-address) which is set on your GitHub account. If you change your primary email address in GitHub, you will not be able to log into your Cloudflare account using GitHub social login. - If you select **Sign in with GitHub** with an email that does not already have a Cloudflare account associated with it, Cloudflare will create a new account and allow you to sign in using **Sign in with GitHub** option moving forward. - diff --git a/src/content/docs/fundamentals/user-profiles/multi-factor-email-authentication.mdx b/src/content/docs/fundamentals/user-profiles/multi-factor-email-authentication.mdx index ce1ca48798a83bb..8dfe5802aeb8a3b 100644 --- a/src/content/docs/fundamentals/user-profiles/multi-factor-email-authentication.mdx +++ b/src/content/docs/fundamentals/user-profiles/multi-factor-email-authentication.mdx @@ -25,14 +25,14 @@ Email MFA can only be disabled by enabling [two-factor authentication](/fundamen ## Troubleshoot MFA -Cloudflare emails are sometimes flagged as spam by the recipient's email service. If you are expecting an authentication token, you should check the spam folder for any Cloudflare emails and configure a filter to allow Cloudflare emails from *[no-reply@notify.cloudflare.com](mailto:no-reply@notify.cloudflare.com)*\_**.**\_ +Cloudflare emails are sometimes flagged as spam by the recipient's email service. If you are expecting an authentication token, you should check the spam folder for any Cloudflare emails and configure a filter to allow Cloudflare emails from _[no-reply@notify.cloudflare.com](mailto:no-reply@notify.cloudflare.com)_\_**.**\_ Other times, emails are rejected by the recipient email service. Cloudflare will try again it will flag your email address after several attempts and no further emails will be sent. If you still do not receive an email after ensuring your email service is not flagging Cloudflare, contact [Cloudflare Support](/support/contacting-cloudflare-support/). -*** +--- ## Related resources -* [Secure user access with two-factor authentication](/fundamentals/user-profiles/2fa/) +- [Secure user access with two-factor authentication](/fundamentals/user-profiles/2fa/) diff --git a/src/content/docs/fundamentals/user-profiles/verify-email-address.mdx b/src/content/docs/fundamentals/user-profiles/verify-email-address.mdx index b3fc9378ed0e2b3..430a7d78421a34a 100644 --- a/src/content/docs/fundamentals/user-profiles/verify-email-address.mdx +++ b/src/content/docs/fundamentals/user-profiles/verify-email-address.mdx @@ -34,7 +34,7 @@ If you cannot find your verification email or your email has expired, request an 1. Log in to the Cloudflare dashboard. - + 2. Go to **My Profile**. 3. For **Email Address**, select **Send verification email** (if this option is not available, your email has already been verified). @@ -47,11 +47,11 @@ To check your verification: 1. Log in to the Cloudflare dashboard. - + 2. Go to **My Profile**. 3. For **Email Address**, your email address will have `(verified)` added after it. If your email is still not verified, try clicking the verification link in a different browser or a private window. -If this still does not work, try [resending](#resend-verification-emails) the verification email to get a new verification link. \ No newline at end of file +If this still does not work, try [resending](#resend-verification-emails) the verification email to get a new verification link. diff --git a/src/content/docs/google-tag-gateway/index.mdx b/src/content/docs/google-tag-gateway/index.mdx index df04561d2b6e7ba..313bd3117c71010 100644 --- a/src/content/docs/google-tag-gateway/index.mdx +++ b/src/content/docs/google-tag-gateway/index.mdx @@ -8,8 +8,8 @@ sidebar: order: 1 tags: - Google - --- + import { DashButton } from "~/components"; Google tag gateway for advertisers allows website owners using Cloudflare as a CDN to get the most out of ad measurement tools with just a few clicks. It allows you to deploy Google scripts using your own domain, enhancing data privacy and improving signal measurement recovery. Unlike standard setups where tags are requested from a Google domain, Google tag gateway for advertisers loads the tag from your domain and sends measurement events to your domain, where they are forwarded to Google. @@ -25,6 +25,7 @@ Google tag gateway for advertisers is free to use. Requests routed through the g Site owners can enable this feature in one of two ways: through the Google tag console, or through the [Cloudflare dashboard](https://dash.cloudflare.com/?to=/:account/tag-management/google-tag-gateway). ### Configure in Google Tag Manager + The fastest way to set up Google tag gateway for advertisers is in Google Tag Manager. [Follow the steps in Google's Help Center](https://support.google.com/analytics/answer/16061641). ### Configure in the Cloudflare dashboard @@ -43,7 +44,7 @@ Your Cloudflare dashboard user must have one of the following [Account Roles](/f ![Google tag gateway for advertisers configuration](~/assets/images/google-tag-gateway/google-tag-configuration.png) 4. Add your Google tag ID and the path on your website reserved for the Google tag. -The [Google tag ID](https://support.google.com/analytics/answer/9539598?hl=en) can be found in the Google Tag Experience dashboard. The measurement path is an unused path on your site that will load Google Tag Manager and all subsequent measurement requests. + The [Google tag ID](https://support.google.com/analytics/answer/9539598?hl=en) can be found in the Google Tag Experience dashboard. The measurement path is an unused path on your site that will load Google Tag Manager and all subsequent measurement requests. ![Add to ID and path](~/assets/images/google-tag-gateway/google-tag-id-path.png) @@ -62,6 +63,7 @@ If you need different tag behavior for specific subdomains (for example, only fi This approach lets you maintain a single zone-wide Google tag gateway configuration while still customizing tag behavior per subdomain. ## Related resources + - [Google Developer Docs: Set up Google tag gateway for advertisers](https://developers.google.com/tag-platform/tag-manager/gateway/setup-guide?setup=auto) - [Google Help Center: Set up Google tag gateway for advertisers in the Google tag with Cloudflare](https://support.google.com/tagmanager/answer/16061406) - [Google Help Center: Set up Google tag gateway for advertisers in Google Tag Manager with Cloudflare](https://support.google.com/analytics/answer/16061641) diff --git a/src/content/docs/health-checks/concepts/health-checks-regions.mdx b/src/content/docs/health-checks/concepts/health-checks-regions.mdx index 2cafe5f8e78ba1a..65a3eecbc16b25f 100644 --- a/src/content/docs/health-checks/concepts/health-checks-regions.mdx +++ b/src/content/docs/health-checks/concepts/health-checks-regions.mdx @@ -6,7 +6,6 @@ products: - health-checks sidebar: order: 4 - --- import { Render } from "~/components"; diff --git a/src/content/docs/health-checks/concepts/index.mdx b/src/content/docs/health-checks/concepts/index.mdx index 63214119f1c7c7c..4bf31c3559d964a 100644 --- a/src/content/docs/health-checks/concepts/index.mdx +++ b/src/content/docs/health-checks/concepts/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the following topics to learn more about the basic concepts involved in Cloudflare Health Checks. diff --git a/src/content/docs/health-checks/health-checks-analytics.mdx b/src/content/docs/health-checks/health-checks-analytics.mdx index 0270a58b2a3f59a..532c92b0c481ca8 100644 --- a/src/content/docs/health-checks/health-checks-analytics.mdx +++ b/src/content/docs/health-checks/health-checks-analytics.mdx @@ -8,10 +8,9 @@ sidebar: order: 3 tags: - Analytics - --- -import { AvailableNotifications, Render, DashButton } from "~/components" +import { AvailableNotifications, Render, DashButton } from "~/components"; diff --git a/src/content/docs/health-checks/how-to/health-checks-notifications.mdx b/src/content/docs/health-checks/how-to/health-checks-notifications.mdx index 6ac6065ecb7a80e..7f000b24d42b7cc 100644 --- a/src/content/docs/health-checks/how-to/health-checks-notifications.mdx +++ b/src/content/docs/health-checks/how-to/health-checks-notifications.mdx @@ -6,10 +6,9 @@ products: - health-checks sidebar: order: 9 - --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; You can [configure notification emails](/health-checks/how-to/health-checks-notifications/#configure-notifications) to be alerted when the Health Check detects that there is a change in the status of your origin server. Cloudflare will send you an email within seconds so you can take the necessary action before customers are impacted. @@ -31,12 +30,10 @@ The email provides information to determine what caused the health status change :::note - A notification is only sent after a change of status in the majority of all selected region(s). For a single region, this will be 2 of 3 data centers. With 13 regions selected, this will be 7 of 13 regions. - ::: See [common error codes](/health-checks/health-checks-analytics/#common-error-codes) for more information regarding the cause of any changes to your Health Check. diff --git a/src/content/docs/health-checks/how-to/index.mdx b/src/content/docs/health-checks/how-to/index.mdx index 0ee79dad8ccb82c..db9952b5952d517 100644 --- a/src/content/docs/health-checks/how-to/index.mdx +++ b/src/content/docs/health-checks/how-to/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 7 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; See the following pages for more information about standalone Health Checks: diff --git a/src/content/docs/health-checks/how-to/zone-lockdown.mdx b/src/content/docs/health-checks/how-to/zone-lockdown.mdx index 591c602337a1232..a4478cdeee2a61a 100644 --- a/src/content/docs/health-checks/how-to/zone-lockdown.mdx +++ b/src/content/docs/health-checks/how-to/zone-lockdown.mdx @@ -9,9 +9,8 @@ sidebar: head: - tag: title content: Zone lockdown migration guide - --- import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/hyperdrive/examples/connect-to-mysql/mysql-drivers-and-libraries/drizzle-orm.mdx b/src/content/docs/hyperdrive/examples/connect-to-mysql/mysql-drivers-and-libraries/drizzle-orm.mdx index c65b5e2f272d5e2..2062eeebed2f06a 100644 --- a/src/content/docs/hyperdrive/examples/connect-to-mysql/mysql-drivers-and-libraries/drizzle-orm.mdx +++ b/src/content/docs/hyperdrive/examples/connect-to-mysql/mysql-drivers-and-libraries/drizzle-orm.mdx @@ -34,7 +34,7 @@ npm i -D drizzle-kit tsx @types/node Add the required Node.js compatibility flags and Hyperdrive binding to your `wrangler.jsonc` file: - + ## 2. Configure Drizzle @@ -75,7 +75,7 @@ import { users } from "./db/schema"; export interface Env { HYPERDRIVE: Hyperdrive; - } +} export default { async fetch(request, env, ctx): Promise { diff --git a/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/prisma-postgres.mdx b/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/prisma-postgres.mdx index e193a5b10a6b006..2d0266f83dce9cd 100644 --- a/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/prisma-postgres.mdx +++ b/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/prisma-postgres.mdx @@ -25,12 +25,13 @@ You can connect Hyperdrive to any existing Prisma Postgres database by using you 2. Select **Connect to your database** > **Any client**. 3. Select **Generate database credentials**. Copy the connection string for your Prisma Postgres database. 4. Edit the connection string to make it compatible with Hyperdrive. - - Add the database name after the port. You may remove any query parameters, such as `?sslmode=require`. - - The final string will look like: - - ```txt ins="database_name" - postgres://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name - ``` + +- Add the database name after the port. You may remove any query parameters, such as `?sslmode=require`. +- The final string will look like: + +````txt ins="database_name" +postgres://USERNAME:PASSWORD@HOSTNAME_OR_IP_ADDRESS:PORT/database_name + ``` :::note @@ -38,7 +39,7 @@ An alternative to the Prisma Data Platform is to use the [`create-db`](https://w ```bash npx create-db@latest -``` +```` ::: diff --git a/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/supabase.mdx b/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/supabase.mdx index 9c1996a98116a4a..72797b0b520501a 100644 --- a/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/supabase.mdx +++ b/src/content/docs/hyperdrive/examples/connect-to-postgres/postgres-database-providers/supabase.mdx @@ -32,7 +32,7 @@ With a database user, password, database endpoint (hostname and port) and databa :::note -When connecting to Supabase from Hyperdrive, you should use the **Direct connection** connection string rather than the pooled connection strings. Hyperdrive will perform pooling of connections to ensure optimal access from Workers. +When connecting to Supabase from Hyperdrive, you should use the **Direct connection** connection string rather than the pooled connection strings. Hyperdrive will perform pooling of connections to ensure optimal access from Workers. ::: diff --git a/src/content/docs/hyperdrive/observability/troubleshooting.mdx b/src/content/docs/hyperdrive/observability/troubleshooting.mdx index 4ef6f14661763a2..1c6ad7bce772665 100644 --- a/src/content/docs/hyperdrive/observability/troubleshooting.mdx +++ b/src/content/docs/hyperdrive/observability/troubleshooting.mdx @@ -32,10 +32,10 @@ Hyperdrive will also issue an empty test query, a `;` in PostgreSQL, to validate Hyperdrive may also emit `Failed to connect to the provided database` when it fails to connect to the database when attempting to create a Hyperdrive configuration. This is possible when the TLS (SSL) certificates are misconfigured. Here is a non-exhaustive table of potential failure to connect errors: -| Error message | Details | Recommended fixes | -| ---------- | -------------------- | --------------------- | -| Server return error and closed connection. | This message occurs when you attempt to connect to a database that has client certificate verification enabled. | Ensure you are configuring your Hyperdrive with [client certificates](/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/) if your database requires them. | -| TLS handshake failed: cert validation failed. | This message occurs when Hyperdrive has been configured with server CA certificates and is indicating that the certificate provided by the server has not been signed by the expected CA certificate. | Ensure you are using the expected the correct CA certificate for Hyperdrive, or ensure you are connecting to the right database. | +| Error message | Details | Recommended fixes | +| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Server return error and closed connection. | This message occurs when you attempt to connect to a database that has client certificate verification enabled. | Ensure you are configuring your Hyperdrive with [client certificates](/hyperdrive/configuration/tls-ssl-certificates-for-hyperdrive/) if your database requires them. | +| TLS handshake failed: cert validation failed. | This message occurs when Hyperdrive has been configured with server CA certificates and is indicating that the certificate provided by the server has not been signed by the expected CA certificate. | Ensure you are using the expected the correct CA certificate for Hyperdrive, or ensure you are connecting to the right database. | ## Connection errors @@ -46,16 +46,14 @@ Hyperdrive errors that do not map 1:1 with an error message code [documented by Hyperdrive may also encounter `ErrorResponse` wire protocol messages sent by your database. Hyperdrive will pass these errors through unchanged when possible. - - ### Hyperdrive specific errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Internal error.` | Something is broken on our side. | Check for an ongoing incident affecting Hyperdrive, and [contact Cloudflare Support](/support/contacting-cloudflare-support/). Retrying the query is appropriate, if it makes sense for your usage pattern. | -| `Failed to acquire a connection from the pool.` | Hyperdrive timed out while waiting for a connection to your database, or cannot connect at all. | If you are seeing this error intermittently, your Hyperdrive pool is being exhausted because too many connections are being held open for too long by your worker. This can be caused by a myriad of different issues, but long-running queries/transactions are a common offender. | -| `Server connection attempt failed: connection_refused` | Hyperdrive is unable to create new connections to your origin database. | A network firewall or access control list (ACL) is likely rejecting requests from Hyperdrive. Ensure you have allowed connections from the public Internet. Sometimes, this can be caused by your database host provider refusing incoming connections when you go over your connection limit. | -| `Hyperdrive does not currently support MySQL COM_STMT_PREPARE messages` | Hyperdrive does not support prepared statements for MySQL databases. | Remove prepared statements from your MySQL queries. | +| Error Message | Details | Recommended fixes | +| ----------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Internal error.` | Something is broken on our side. | Check for an ongoing incident affecting Hyperdrive, and [contact Cloudflare Support](/support/contacting-cloudflare-support/). Retrying the query is appropriate, if it makes sense for your usage pattern. | +| `Failed to acquire a connection from the pool.` | Hyperdrive timed out while waiting for a connection to your database, or cannot connect at all. | If you are seeing this error intermittently, your Hyperdrive pool is being exhausted because too many connections are being held open for too long by your worker. This can be caused by a myriad of different issues, but long-running queries/transactions are a common offender. | +| `Server connection attempt failed: connection_refused` | Hyperdrive is unable to create new connections to your origin database. | A network firewall or access control list (ACL) is likely rejecting requests from Hyperdrive. Ensure you have allowed connections from the public Internet. Sometimes, this can be caused by your database host provider refusing incoming connections when you go over your connection limit. | +| `Hyperdrive does not currently support MySQL COM_STMT_PREPARE messages` | Hyperdrive does not support prepared statements for MySQL databases. | Remove prepared statements from your MySQL queries. | ### Node errors @@ -75,8 +73,8 @@ If your queries are not being cached despite Hyperdrive having caching enabled, ### Driver errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | +| Error Message | Details | Recommended fixes | +| ---------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Code generation from strings disallowed for this context` | The database driver you are using is attempting to use the `eval()` command, which is unsupported on Cloudflare Workers (common in `mysql2` driver). | Configure the database driver to not use `eval()`. See how to [configure `mysql2` to disable the usage of `eval()`](/hyperdrive/examples/connect-to-mysql/mysql-drivers-and-libraries/mysql2/). | ### Stale connection and I/O context errors @@ -85,46 +83,46 @@ These errors occur when a database client or connection is created in the global #### Workers runtime errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `Disallowed operation called within global scope. Asynchronous I/O (ex: fetch() or connect()), setting a timeout, and generating random values are not allowed within global scope.` | Your Worker is attempting to open a database connection or perform I/O during script startup, outside of a request handler. | Move the database client creation into your `fetch`, `queue`, or other handler function. | -| `Cannot perform I/O on behalf of a different request. I/O objects (such as streams, request/response bodies, and others) created in the context of one request handler cannot be accessed from a different request's handler.` | A database connection or client created during one request is being reused in a subsequent request. | Create a new database client on every request instead of caching it in a global variable. Hyperdrive's connection pooling already eliminates the connection startup overhead. | +| Error Message | Details | Recommended fixes | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Disallowed operation called within global scope. Asynchronous I/O (ex: fetch() or connect()), setting a timeout, and generating random values are not allowed within global scope.` | Your Worker is attempting to open a database connection or perform I/O during script startup, outside of a request handler. | Move the database client creation into your `fetch`, `queue`, or other handler function. | +| `Cannot perform I/O on behalf of a different request. I/O objects (such as streams, request/response bodies, and others) created in the context of one request handler cannot be accessed from a different request's handler.` | A database connection or client created during one request is being reused in a subsequent request. | Create a new database client on every request instead of caching it in a global variable. Hyperdrive's connection pooling already eliminates the connection startup overhead. | #### node-postgres (`pg`) errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `Connection terminated` | The client's `.end()` method was called, or the connection was cleaned up at the end of a previous request. | Create a new `Client` inside your handler instead of reusing one from a prior request. | -| `Connection terminated unexpectedly` | The underlying connection was dropped without an explicit `.end()` call — for example, when a previous request's context was garbage collected. | Create a new `Client` inside your handler for every request. | -| `Client has encountered a connection error and is not queryable` | A socket-level error occurred on the connection (common when reusing a client across requests). | Create a new `Client` inside your handler. Do not store clients in global variables. | -| `Client was closed and is not queryable` | A query was attempted on a client whose `.end()` method was already called. | Create a new `Client` inside your handler instead of reusing one. | -| `Cannot use a pool after calling end on the pool` | `pool.connect()` was called on a `Pool` instance that has already been ended. | Do not use `new Pool()` in the global scope. Create a `new Client()` inside your handler — Hyperdrive handles connection pooling for you. | -| `Client has already been connected. You cannot reuse a client.` | `client.connect()` was called on a client that was already connected in a previous invocation. | Create a new `Client` per request. node-postgres clients cannot be reconnected once connected. | +| Error Message | Details | Recommended fixes | +| ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| `Connection terminated` | The client's `.end()` method was called, or the connection was cleaned up at the end of a previous request. | Create a new `Client` inside your handler instead of reusing one from a prior request. | +| `Connection terminated unexpectedly` | The underlying connection was dropped without an explicit `.end()` call — for example, when a previous request's context was garbage collected. | Create a new `Client` inside your handler for every request. | +| `Client has encountered a connection error and is not queryable` | A socket-level error occurred on the connection (common when reusing a client across requests). | Create a new `Client` inside your handler. Do not store clients in global variables. | +| `Client was closed and is not queryable` | A query was attempted on a client whose `.end()` method was already called. | Create a new `Client` inside your handler instead of reusing one. | +| `Cannot use a pool after calling end on the pool` | `pool.connect()` was called on a `Pool` instance that has already been ended. | Do not use `new Pool()` in the global scope. Create a `new Client()` inside your handler — Hyperdrive handles connection pooling for you. | +| `Client has already been connected. You cannot reuse a client.` | `client.connect()` was called on a client that was already connected in a previous invocation. | Create a new `Client` per request. node-postgres clients cannot be reconnected once connected. | #### Postgres.js (`postgres`) errors Postgres.js error messages include the error code and the target host. The `code` property on the error object contains the error code. -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `write CONNECTION_ENDED :` | A query was attempted after `sql.end()` was called, or the connection was cleaned up from a prior request. Error code: `CONNECTION_ENDED`. | Create a new `postgres()` instance inside your handler. | -| `write CONNECTION_DESTROYED :` | The connection was forcefully terminated — for example, during `sql.end({ timeout })` expiration, or because the connection was already terminated. Error code: `CONNECTION_DESTROYED`. | Create a new `postgres()` instance inside your handler for every request. | -| `write CONNECTION_CLOSED :` | The underlying socket was closed unexpectedly while queries were still pending. Error code: `CONNECTION_CLOSED`. | Create a new `postgres()` instance inside your handler. If this occurs within a single request, check for network issues or query timeouts. | +| Error Message | Details | Recommended fixes | +| ------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | +| `write CONNECTION_ENDED :` | A query was attempted after `sql.end()` was called, or the connection was cleaned up from a prior request. Error code: `CONNECTION_ENDED`. | Create a new `postgres()` instance inside your handler. | +| `write CONNECTION_DESTROYED :` | The connection was forcefully terminated — for example, during `sql.end({ timeout })` expiration, or because the connection was already terminated. Error code: `CONNECTION_DESTROYED`. | Create a new `postgres()` instance inside your handler for every request. | +| `write CONNECTION_CLOSED :` | The underlying socket was closed unexpectedly while queries were still pending. Error code: `CONNECTION_CLOSED`. | Create a new `postgres()` instance inside your handler. If this occurs within a single request, check for network issues or query timeouts. | #### mysql2 errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `Can't add new command when connection is in closed state` | A query was attempted on a connection that has already been closed or encountered a fatal error. | Create a new connection inside your handler instead of reusing one from global scope. | -| `Connection lost: The server closed the connection.` | The underlying socket was closed by the server or was garbage collected between requests. Error code: `PROTOCOL_CONNECTION_LOST`. | Create a new connection inside your handler for every request. | -| `Pool is closed.` | `pool.getConnection()` was called on a pool that has already been closed. | Do not use `createPool()` in the global scope. Create a new `createConnection()` inside your handler — Hyperdrive handles pooling for you. | +| Error Message | Details | Recommended fixes | +| ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `Can't add new command when connection is in closed state` | A query was attempted on a connection that has already been closed or encountered a fatal error. | Create a new connection inside your handler instead of reusing one from global scope. | +| `Connection lost: The server closed the connection.` | The underlying socket was closed by the server or was garbage collected between requests. Error code: `PROTOCOL_CONNECTION_LOST`. | Create a new connection inside your handler for every request. | +| `Pool is closed.` | `pool.getConnection()` was called on a pool that has already been closed. | Do not use `createPool()` in the global scope. Create a new `createConnection()` inside your handler — Hyperdrive handles pooling for you. | #### mysql errors -| Error Message | Details | Recommended fixes | -| ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| `Cannot enqueue Query after fatal error.` | A query was attempted on a connection that previously encountered a fatal error. Error code: `PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR`. | Create a new connection inside your handler instead of reusing one from global scope. | -| `Cannot enqueue Query after invoking quit.` | A query was attempted on a connection after `.end()` was called. Error code: `PROTOCOL_ENQUEUE_AFTER_QUIT`. | Create a new connection inside your handler for every request. | +| Error Message | Details | Recommended fixes | +| --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `Cannot enqueue Query after fatal error.` | A query was attempted on a connection that previously encountered a fatal error. Error code: `PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR`. | Create a new connection inside your handler instead of reusing one from global scope. | +| `Cannot enqueue Query after invoking quit.` | A query was attempted on a connection after `.end()` was called. Error code: `PROTOCOL_ENQUEUE_AFTER_QUIT`. | Create a new connection inside your handler for every request. | | `Cannot enqueue Handshake after already enqueuing a Handshake.` | `.connect()` was called on a connection that was already connected in a previous request. Error code: `PROTOCOL_ENQUEUE_HANDSHAKE_TWICE`. | Create a new connection per request. mysql connections cannot be reconnected once connected. | ### Improve performance diff --git a/src/content/docs/hyperdrive/platform/limits.mdx b/src/content/docs/hyperdrive/platform/limits.mdx index 76f3f59ff4ae007..312468a7fe964d7 100644 --- a/src/content/docs/hyperdrive/platform/limits.mdx +++ b/src/content/docs/hyperdrive/platform/limits.mdx @@ -14,10 +14,10 @@ The following limits apply to Hyperdrive configurations, connections, and querie These limits apply when creating or updating Hyperdrive configurations. -| Limit | Free | Paid | -| ------------------------------ | --------------------- | --------------------- | -| Maximum configured databases | 10 per account | 25 per account | -| Maximum username length [^1] | 63 characters (bytes) | 63 characters (bytes) | +| Limit | Free | Paid | +| --------------------------------- | --------------------- | --------------------- | +| Maximum configured databases | 10 per account | 25 per account | +| Maximum username length [^1] | 63 characters (bytes) | 63 characters (bytes) | | Maximum database name length [^1] | 63 characters (bytes) | 63 characters (bytes) | [^1]: This is a limit enforced by PostgreSQL. Some database providers may enforce smaller limits. @@ -26,10 +26,10 @@ These limits apply when creating or updating Hyperdrive configurations. These limits apply to connections between Hyperdrive and your origin database. -| Limit | Free | Paid | -| ---------------------------------- | ------------------------ | ------------------------- | -| Initial connection timeout | 15 seconds | 15 seconds | -| Idle connection timeout | 10 minutes | 10 minutes | +| Limit | Free | Paid | +| ------------------------------------------------------------ | --------------- | ---------------- | +| Initial connection timeout | 15 seconds | 15 seconds | +| Idle connection timeout | 10 minutes | 10 minutes | | Maximum origin database connections (per configuration) [^2] | ~20 connections | ~100 connections | Hyperdrive does not limit the number of concurrent client connections from your Workers. However, Hyperdrive limits connections to your origin database because most hosted databases have connection limits. @@ -40,9 +40,9 @@ Hyperdrive does not limit the number of concurrent client connections from your When Hyperdrive cannot acquire a connection to your origin database, you may see one of the following errors: -| Error message | Cause | -| ------------- | ----- | -| `Failed to acquire a connection from the pool.` | The connection pool is exhausted because connections are held open too long. Long-running queries or transactions are a common cause. | +| Error message | Cause | +| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Failed to acquire a connection from the pool.` | The connection pool is exhausted because connections are held open too long. Long-running queries or transactions are a common cause. | | `Server connection attempt failed: connection_refused` | Your origin database is rejecting connections. This can occur when a firewall blocks Hyperdrive, or when your database provider's connection limit is exceeded. | For a complete list of error codes, refer to [Troubleshoot and debug](/hyperdrive/observability/troubleshooting/). @@ -51,10 +51,10 @@ For a complete list of error codes, refer to [Troubleshoot and debug](/hyperdriv These limits apply to queries sent through Hyperdrive. -| Limit | Free | Paid | -| ---------------------------------- | --------- | --------- | +| Limit | Free | Paid | +| ---------------------------------- | ---------- | ---------- | | Maximum query (statement) duration | 60 seconds | 60 seconds | -| Maximum cached query response size | 50 MB | 50 MB | +| Maximum cached query response size | 50 MB | 50 MB | Queries exceeding the maximum duration are terminated. Query responses larger than 50 MB are not cached but are still returned to your Worker. diff --git a/src/content/docs/hyperdrive/platform/storage-options.mdx b/src/content/docs/hyperdrive/platform/storage-options.mdx index 15e4357c49ab353..e47f0bee278b20d 100644 --- a/src/content/docs/hyperdrive/platform/storage-options.mdx +++ b/src/content/docs/hyperdrive/platform/storage-options.mdx @@ -9,5 +9,5 @@ products: - hyperdrive - kv - r2 - - d1 + - d1 --- diff --git a/src/content/docs/hyperdrive/reference/wrangler-commands.mdx b/src/content/docs/hyperdrive/reference/wrangler-commands.mdx index 79d2a4c9a8334f6..634a4a834452673 100644 --- a/src/content/docs/hyperdrive/reference/wrangler-commands.mdx +++ b/src/content/docs/hyperdrive/reference/wrangler-commands.mdx @@ -12,4 +12,4 @@ import { WranglerNamespace } from "~/components"; The following [Wrangler commands](/workers/wrangler/) apply to Hyperdrive. - \ No newline at end of file + diff --git a/src/content/docs/hyperdrive/tutorials/index.mdx b/src/content/docs/hyperdrive/tutorials/index.mdx index 303882afc56a048..20365d245d2b967 100644 --- a/src/content/docs/hyperdrive/tutorials/index.mdx +++ b/src/content/docs/hyperdrive/tutorials/index.mdx @@ -10,7 +10,7 @@ products: - workers --- -import { GlossaryTooltip, ListTutorials } from "~/components" +import { GlossaryTooltip, ListTutorials } from "~/components"; View tutorials to help you get started with Hyperdrive. diff --git a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx index b9f564b90204b67..83a5d692b9d5e21 100644 --- a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx +++ b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx @@ -3,7 +3,7 @@ reviewed: 2023-10-30 difficulty: Beginner pcx_content_type: tutorial title: Create a serverless, globally distributed time-series API with Timescale -products: [workers] +products: [workers] tags: - PostgreSQL - TypeScript diff --git a/src/content/docs/images/optimization/make-responsive-images.mdx b/src/content/docs/images/optimization/make-responsive-images.mdx index a0dcd9f7f0c9726..951c3590cc0ae6e 100644 --- a/src/content/docs/images/optimization/make-responsive-images.mdx +++ b/src/content/docs/images/optimization/make-responsive-images.mdx @@ -68,12 +68,7 @@ The browser evaluates screen size, pixel density, and network conditions, then s The snippet below shows how `srcset` can be used within an `` tag to serve one of two possible sizes, depending on the user's device pixel ratio: ```html - + ``` Instead of pre-generating each size, use Images to point every `srcset` entry at the same source image with a different `width` parameter and pixel density descriptor (for example, `2x`). Once the browser selects the right width for the user's device pixel ratio, Cloudflare dynamically generates the resized version on request: @@ -164,11 +159,11 @@ The default breakpoints for client hints are: `320`, `768`, `960`, and `1200` pi The following table shows the widths that Cloudflare will pick based on the default breakpoints. If the detected viewport width exceeds the largest breakpoint, the image is served at that largest breakpoint. | Detected viewport width | Served image width | -| ---------- | ------------- | -| 280px | 320px | -| 500px | 768px | -| 960px | 960px | -| 1500px | 1200px | +| ----------------------- | ------------------ | +| 280px | 320px | +| 500px | 768px | +| 960px | 960px | +| 1500px | 1200px | You can override the default breakpoints using the [`wbreakpoints`](/images/optimization/features/#width) sub-parameter, which accepts positive integers separated by semicolons. diff --git a/src/content/docs/images/optimization/transformations/flows.mdx b/src/content/docs/images/optimization/transformations/flows.mdx index 90b4c423f905e10..c9d36c389aba1ca 100644 --- a/src/content/docs/images/optimization/transformations/flows.mdx +++ b/src/content/docs/images/optimization/transformations/flows.mdx @@ -6,10 +6,12 @@ sidebar: products: - images --- + import { Description, Render } from "~/components"; - Define automated rules to optimize remote images without writing any code or changing your existing URLs. + Define automated rules to optimize remote images without writing any code or + changing your existing URLs. Flows let you automatically apply image optimization to requests on your zone. @@ -32,6 +34,7 @@ Currently, Cloudflare supports flows for Fastly Image Optimizer. When enabled, C A **custom flow** lets you define your own conditions and actions for image optimization. This is well-suited for situations where you want to optimize your images broadly and consistently, such as: + - **Automatic format conversion** — Transcode all images to modern formats like AVIF or WebP across your entire site. - **Responsive sizing** — Automatically resize images based on each user's device. - **Directory-based optimization** — Enforce a consistent size for all images in a particular path, such as 100x100 for images where the path contains `/thumbnail`. @@ -41,16 +44,19 @@ This is well-suited for situations where you want to optimize your images broadl Before setting up a flow, make sure that transformations are turned on for your zone under **Images** > **Transformations** in the [Cloudflare dashboard](https://dash.cloudflare.com/?to=/:account/images/transformations). When an image is requested on your zone, Cloudflare checks to see whether the request matches the conditions for any of your configured flows: + - Flows are evaluated from top to bottom in the order that they appear in the dashboard. - If a request matches more than one flow, only the first matching flow will run. - If no flow matches, then the request passes through to your origin unmodified. - To control priority, you can reorder flows in the dashboard. If the request matches a flow's conditions, then Cloudflare rewrites the URL to pass through the Images service with the specified parameters: + - A custom flow triggers only on requests for [supported image extensions](/images/get-started/limits/). HTML pages, CSS files, and other non-images are never affected. - A provider flow evaluates requests based on provider-specific optimization parameters. For example, a Fastly provider flow triggers only when the request contains parameters like `?width`, `?height`, or `?fit`. Cloudflare will ignore any unrecognized parameters. In your request lifecycle, flows are evaluated after standard HTTP [redirect rules](/rules/url-forwarding/): + - Any existing URL rewrites or redirect rules will be applied before Images evaluates the request, which may affect matching behavior. - Flows include built-in loop prevention. If the request is already coming from the Images service, then the flow will not re-trigger on that subrequest. @@ -59,6 +65,7 @@ In your request lifecycle, flows are evaluated after standard HTTP [redirect rul Currently, Cloudflare supports flows to handle migrations from Fastly Image Optimizer. To add a provider flow: + 1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account. 2. Go to **Images** > **Transformations** and select your zone. 3. Select the **Automation** tab, then select **Add provider flow**. @@ -122,11 +129,11 @@ Cloudflare determines the optimal width using either [client hints](/images/opti You can fine-tune the `width=auto` behavior with the following sub-parameters: -| Sub-parameter | Description | Default | -| --- | --- | --- | -| `wbreakpoints` | Override default breakpoint widths, in pixels (client hints) | `320;768;960;1200` | -| `wmobile` | Override default width, in pixels, for mobile devices (user-agent detection) | `768` | -| `wdesktop` | Override default width, in pixels, for desktop devices (user-agent detection) | `1200` | +| Sub-parameter | Description | Default | +| -------------- | ----------------------------------------------------------------------------- | ------------------ | +| `wbreakpoints` | Override default breakpoint widths, in pixels (client hints) | `320;768;960;1200` | +| `wmobile` | Override default width, in pixels, for mobile devices (user-agent detection) | `768` | +| `wdesktop` | Override default width, in pixels, for desktop devices (user-agent detection) | `1200` | To learn how `width=auto` works, refer to our guide on [serving responsive images](/images/optimization/make-responsive-images/). diff --git a/src/content/docs/images/optimization/transformations/overview.mdx b/src/content/docs/images/optimization/transformations/overview.mdx index d623c6694db1f47..7de24256a768de1 100644 --- a/src/content/docs/images/optimization/transformations/overview.mdx +++ b/src/content/docs/images/optimization/transformations/overview.mdx @@ -11,7 +11,8 @@ products: import { Description, Render } from "~/components"; - Transformations are requests to optimize and manipulate remote images that are stored outside of Images. + Transformations are requests to optimize and manipulate remote images that are + stored outside of Images. When you ship applications on Cloudflare, you can use Images to automatically optimize and cache your images from any origin. diff --git a/src/content/docs/key-transparency/api/epochs.mdx b/src/content/docs/key-transparency/api/epochs.mdx index d9a24544386e49e..6aa0c01a45d12dd 100644 --- a/src/content/docs/key-transparency/api/epochs.mdx +++ b/src/content/docs/key-transparency/api/epochs.mdx @@ -49,7 +49,7 @@ curl 'https://plexi.key-transparency.cloudflare.com/namespaces/{namespace}/audit - If `root` is defined for the namespace, the first epoch must match it (number and digest). - Epochs must be increasing. Second epoch is 2, third is 3, etc. - Epochs must have a unique digest or it will be rejected. -- Epochs cannot be republished. +- Epochs cannot be republished. - Digest must be a 32 byte string hex encoded (length 64). If a namespace is disabled, you receive the following error: diff --git a/src/content/docs/key-transparency/api/index.mdx b/src/content/docs/key-transparency/api/index.mdx index c390a1774ee252d..64b24fdf3146f9d 100644 --- a/src/content/docs/key-transparency/api/index.mdx +++ b/src/content/docs/key-transparency/api/index.mdx @@ -10,6 +10,6 @@ sidebar: hideIndex: true --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/key-transparency/api/namespaces.mdx b/src/content/docs/key-transparency/api/namespaces.mdx index 3e42e5b0a09d29b..055e97b897823f2 100644 --- a/src/content/docs/key-transparency/api/namespaces.mdx +++ b/src/content/docs/key-transparency/api/namespaces.mdx @@ -20,8 +20,8 @@ The following fields are required when making a `POST` request: - `name` - `public` - `root` -- `signature_version`: - - 0x0001 for [Protobuf serialisation](https://github.com/cloudflare/plexi/blob/main/plexi_core/src/proto/specs/types.proto) Ed25519 signature from the Auditor +- `signature_version`: + - 0x0001 for [Protobuf serialisation](https://github.com/cloudflare/plexi/blob/main/plexi_core/src/proto/specs/types.proto) Ed25519 signature from the Auditor - 0x0002 for [bincode serialisation](https://github.com/bincode-org/bincode/blob/trunk/docs/spec.md) E25519 serialisation by the Auditor The `log_directory` field is optional. If set, Cloudflare will use it to fetch audit proofs and validate them. @@ -49,6 +49,7 @@ curl 'https://plexi.key-transparency.cloudflare.com/namespaces' \ ``` After publishing the first epoch, `status` will show `Online`. Possible statuses include: + - `Online` - `Initialization` - `Disabled` @@ -73,7 +74,6 @@ If a log state has been corrupted, lost, or needs to be sharded to be maintainab This API is authenticated via [mTLS](https://www.cloudflare.com/learning/access-management/what-is-mutual-tls/). - ```sh curl -X PATCH 'https://plexi.key-transparency.cloudflare.com/namespaces/{namespace}' \ -H 'Content-Type: application/json' \ @@ -89,4 +89,4 @@ curl -X PATCH 'https://plexi.key-transparency.cloudflare.com/namespaces/{namespa "audits_uri": "/namespaces/your.new.log.com/audits", "signature_version": 1 } -``` \ No newline at end of file +``` diff --git a/src/content/docs/kv/api/delete-key-value-pairs.mdx b/src/content/docs/kv/api/delete-key-value-pairs.mdx index f4275b10c635eef..e8173282815e34f 100644 --- a/src/content/docs/kv/api/delete-key-value-pairs.mdx +++ b/src/content/docs/kv/api/delete-key-value-pairs.mdx @@ -8,7 +8,7 @@ products: - kv --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; To delete a key-value pair, call the `delete()` method of the [KV binding](/kv/concepts/kv-bindings/) on any [KV namespace](/kv/concepts/kv-namespaces/) you have bound to your Worker code: @@ -22,25 +22,24 @@ An example of deleting a key-value pair from within a Worker: ```js export default { - async fetch(request, env, ctx) { - try { - await env.NAMESPACE.delete("first-key"); - - return new Response("Successful delete", { - status: 200 - }); - } - catch (e) - { - return new Response(e.message, {status: 500}); - } - }, + async fetch(request, env, ctx) { + try { + await env.NAMESPACE.delete("first-key"); + + return new Response("Successful delete", { + status: 200, + }); + } catch (e) { + return new Response(e.message, { status: 500 }); + } + }, }; ``` ## Reference The following method is provided to delete from KV: + - [delete()](#delete-method) ### `delete()` method @@ -53,14 +52,13 @@ env.NAMESPACE.delete(key); #### Parameters -* `key`: `string` - * The key to associate with the value. +- `key`: `string` + - The key to associate with the value. #### Response -* `response`: `Promise` - * A `Promise` that resolves if the delete is successful. - +- `response`: `Promise` + - A `Promise` that resolves if the delete is successful. This method returns a promise that you should `await` on to verify successful deletion. Calling `delete()` on a non-existing key is returned as a successful delete. @@ -75,4 +73,5 @@ Delete more than one key-value pair at a time with Wrangler or [via the REST API The bulk REST API can accept up to 10,000 KV pairs at once. Bulk writes are not supported using the [KV binding](/kv/concepts/kv-bindings/). ## Other methods to access KV + You can also [delete key-value pairs from the command line with Wrangler](/kv/reference/kv-commands/#kv-namespace-delete) or [with the REST API](/api/resources/kv/subresources/namespaces/subresources/values/methods/delete/). diff --git a/src/content/docs/kv/concepts/kv-bindings.mdx b/src/content/docs/kv/concepts/kv-bindings.mdx index 025824dc80e64ab..1710c1db27c0aad 100644 --- a/src/content/docs/kv/concepts/kv-bindings.mdx +++ b/src/content/docs/kv/concepts/kv-bindings.mdx @@ -52,14 +52,14 @@ With this, the deployed Worker will have a `TODO` field in their environment obj ```js export default { - async fetch(request, env, ctx) { - // Get the value for the "to-do:123" key - // NOTE: Relies on the `TODO` KV binding that maps to the "My Tasks" namespace. - let value = await env.TODO.get("to-do:123"); - - // Return the value, as is, for the Response - return new Response(value); - }, + async fetch(request, env, ctx) { + // Get the value for the "to-do:123" key + // NOTE: Relies on the `TODO` KV binding that maps to the "My Tasks" namespace. + let value = await env.TODO.get("to-do:123"); + + // Return the value, as is, for the Response + return new Response(value); + }, }; ``` @@ -97,13 +97,13 @@ An example might look like: import { DurableObject } from "cloudflare:workers"; export class MyDurableObject extends DurableObject { - constructor(ctx, env) { - super(ctx, env); - } - - async fetch(request) { - const valueFromKV = await this.env.NAMESPACE.get("someKey"); - return new Response(valueFromKV); - } + constructor(ctx, env) { + super(ctx, env); + } + + async fetch(request) { + const valueFromKV = await this.env.NAMESPACE.get("someKey"); + return new Response(valueFromKV); + } } ``` diff --git a/src/content/docs/kv/concepts/kv-namespaces.mdx b/src/content/docs/kv/concepts/kv-namespaces.mdx index 7867efd8d6aaab6..0919c833f8ab666 100644 --- a/src/content/docs/kv/concepts/kv-namespaces.mdx +++ b/src/content/docs/kv/concepts/kv-namespaces.mdx @@ -7,6 +7,7 @@ sidebar: products: - kv --- + import { Type, MetaInfo, WranglerConfig, DashButton } from "~/components"; A KV namespace is a key-value database replicated to Cloudflare’s global network. @@ -23,17 +24,14 @@ KV namespace IDs are public and bound to your account. To bind KV namespaces to your Worker, assign an array of the below object to the `kv_namespaces` key. -* `binding` - - * The binding name used to refer to the KV namespace. - -* `id` +- `binding` + - The binding name used to refer to the KV namespace. - * The ID of the KV namespace. +- `id` + - The ID of the KV namespace. -* `preview_id` - - * The ID of the KV namespace used during `wrangler dev`. +- `preview_id` + - The ID of the KV namespace used during `wrangler dev`. Example: @@ -59,6 +57,7 @@ To bind the namespace to your Worker in the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your **Worker**. 3. Select **Settings** > **Bindings**. 4. Select **Add**. diff --git a/src/content/docs/kv/get-started.mdx b/src/content/docs/kv/get-started.mdx index 1087ab11b86e2ce..2940849e4bb17a3 100644 --- a/src/content/docs/kv/get-started.mdx +++ b/src/content/docs/kv/get-started.mdx @@ -3,7 +3,7 @@ title: Getting started description: Create a KV namespace, write key-value pairs, and read data from Workers KV using Wrangler or the dashboard. pcx_content_type: get-started summary: | - Create a basic key-value store which stores the notification configuration of all users in an application, where each user may have `enabled` or `disabled` notifications. + Create a basic key-value store which stores the notification configuration of all users in an application, where each user may have `enabled` or `disabled` notifications. reviewed: 2025-05-19 sidebar: order: 2 @@ -11,7 +11,18 @@ products: - kv --- -import { Render, PackageManagers, Steps, FileTree, Details, Tabs, TabItem, WranglerConfig, GitHubCode, DashButton } from "~/components"; +import { + Render, + PackageManagers, + Steps, + FileTree, + Details, + Tabs, + TabItem, + WranglerConfig, + GitHubCode, + DashButton, +} from "~/components"; Workers KV provides low-latency, high-throughput global storage to your [Cloudflare Workers](/workers/) applications. Workers KV is ideal for storing user configuration data, routing data, A/B testing configurations and authentication tokens, and is well suited for read-heavy workloads. diff --git a/src/content/docs/kv/glossary.mdx b/src/content/docs/kv/glossary.mdx index 6b9c8f69e63c1a2..fca60dffa616ae9 100644 --- a/src/content/docs/kv/glossary.mdx +++ b/src/content/docs/kv/glossary.mdx @@ -8,7 +8,7 @@ products: - kv --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's KV documentation. diff --git a/src/content/docs/kv/observability/index.mdx b/src/content/docs/kv/observability/index.mdx index 9f1c8fd90be7853..8f1670df25b7b57 100644 --- a/src/content/docs/kv/observability/index.mdx +++ b/src/content/docs/kv/observability/index.mdx @@ -10,6 +10,6 @@ products: - kv --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/kv/observability/metrics-analytics.mdx b/src/content/docs/kv/observability/metrics-analytics.mdx index c341d12aa8f4c3c..01ac3d93bddf26b 100644 --- a/src/content/docs/kv/observability/metrics-analytics.mdx +++ b/src/content/docs/kv/observability/metrics-analytics.mdx @@ -32,6 +32,7 @@ Per-namespace analytics for KV are available in the Cloudflare dashboard. To vie 1. In the Cloudflare dashboard, go to the **Workers KV** page. + 2. Select an existing namespace. 3. Select the **Metrics** tab. diff --git a/src/content/docs/kv/platform/pricing.mdx b/src/content/docs/kv/platform/pricing.mdx index 2fbcd27b1c0dc52..e52462c5d821622 100644 --- a/src/content/docs/kv/platform/pricing.mdx +++ b/src/content/docs/kv/platform/pricing.mdx @@ -8,7 +8,7 @@ products: - kv --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/kv/reference/data-security.mdx b/src/content/docs/kv/reference/data-security.mdx index 56ffef1944f609a..5c00ce589165eee 100644 --- a/src/content/docs/kv/reference/data-security.mdx +++ b/src/content/docs/kv/reference/data-security.mdx @@ -10,9 +10,9 @@ products: This page details the data security properties of KV, including: -* Encryption-at-rest (EAR). -* Encryption-in-transit (EIT). -* Cloudflare's compliance certifications. +- Encryption-at-rest (EAR). +- Encryption-in-transit (EIT). +- Cloudflare's compliance certifications. ## Encryption at Rest diff --git a/src/content/docs/kv/reference/environments.mdx b/src/content/docs/kv/reference/environments.mdx index ef1e9305aea8aa3..dc41508ef498dcf 100644 --- a/src/content/docs/kv/reference/environments.mdx +++ b/src/content/docs/kv/reference/environments.mdx @@ -68,8 +68,6 @@ Specifying an environment with the optional `--env` flag allows you to publish W For example, you could use separate staging and production KV namespaces for KV data in your Wrangler file: - - ```jsonc diff --git a/src/content/docs/kv/reference/kv-commands.mdx b/src/content/docs/kv/reference/kv-commands.mdx index 431cd3c20f17a6f..fe72655a36d9f3d 100644 --- a/src/content/docs/kv/reference/kv-commands.mdx +++ b/src/content/docs/kv/reference/kv-commands.mdx @@ -8,9 +8,9 @@ products: - kv --- -import {Render} from "~/components" +import { Render } from "~/components"; - + ## Deprecations diff --git a/src/content/docs/learning-paths/application-security/account-security/audit-logs.mdx b/src/content/docs/learning-paths/application-security/account-security/audit-logs.mdx index e12e1fb27bbc69d..390d7d7727dc08f 100644 --- a/src/content/docs/learning-paths/application-security/account-security/audit-logs.mdx +++ b/src/content/docs/learning-paths/application-security/account-security/audit-logs.mdx @@ -5,7 +5,7 @@ pcx_content_type: overview sidebar: order: 5 label: Audit Logs - v2 - badge: + badge: text: Beta description: Use the updated Audit Logs v2 interface. products: diff --git a/src/content/docs/learning-paths/application-security/account-security/index.mdx b/src/content/docs/learning-paths/application-security/account-security/index.mdx index cb51b549f91cf51..8bd856a5fcab2d3 100644 --- a/src/content/docs/learning-paths/application-security/account-security/index.mdx +++ b/src/content/docs/learning-paths/application-security/account-security/index.mdx @@ -18,6 +18,6 @@ Make sure your account's security basics are configured properly. By the end of this module, you will be able to: -* Secure your account -* Understand and configure the most common settings for Cloudflare's Application Security Products -* Explore advanced security products such as Bot Management and API Protection +- Secure your account +- Understand and configure the most common settings for Cloudflare's Application Security Products +- Explore advanced security products such as Bot Management and API Protection diff --git a/src/content/docs/learning-paths/application-security/account-security/review-active-sessions.mdx b/src/content/docs/learning-paths/application-security/account-security/review-active-sessions.mdx index 7b0bddc7ba7917f..040aa06f0220922 100644 --- a/src/content/docs/learning-paths/application-security/account-security/review-active-sessions.mdx +++ b/src/content/docs/learning-paths/application-security/account-security/review-active-sessions.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/application-security/account-security/review-audit-logs.mdx b/src/content/docs/learning-paths/application-security/account-security/review-audit-logs.mdx index 808ba2c05ca7dad..f58aa925b394692 100644 --- a/src/content/docs/learning-paths/application-security/account-security/review-audit-logs.mdx +++ b/src/content/docs/learning-paths/application-security/account-security/review-audit-logs.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; :::note Audit Logs version 2 is available in beta. Refer to the [Audit Logs v2 documentation](/fundamentals/account/account-security/audit-logs/) for more details. diff --git a/src/content/docs/learning-paths/application-security/account-security/set-up-2fa.mdx b/src/content/docs/learning-paths/application-security/account-security/set-up-2fa.mdx index 29a6b9e44022824..f7846d7a368fa45 100644 --- a/src/content/docs/learning-paths/application-security/account-security/set-up-2fa.mdx +++ b/src/content/docs/learning-paths/application-security/account-security/set-up-2fa.mdx @@ -12,11 +12,11 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; -*** +--- ## Enable 2FA diff --git a/src/content/docs/learning-paths/application-security/default-traffic-security/browser-integrity.mdx b/src/content/docs/learning-paths/application-security/default-traffic-security/browser-integrity.mdx index 2f7bec4ece18e95..d9d1cae9beaab73 100644 --- a/src/content/docs/learning-paths/application-security/default-traffic-security/browser-integrity.mdx +++ b/src/content/docs/learning-paths/application-security/default-traffic-security/browser-integrity.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/application-security/default-traffic-security/ddos.mdx b/src/content/docs/learning-paths/application-security/default-traffic-security/ddos.mdx index 6358ef403930629..33a0732d1aa3a3e 100644 --- a/src/content/docs/learning-paths/application-security/default-traffic-security/ddos.mdx +++ b/src/content/docs/learning-paths/application-security/default-traffic-security/ddos.mdx @@ -12,10 +12,10 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; Cloudflare automatically detects and mitigates DDoS attacks using its [Autonomous Edge](/ddos-protection/about/components/#autonomous-edge), which is always-on. `Advanced` protections are reserved for Magic Transit customers. -Refer to the learning path [Prevent DDoS attacks](/learning-paths/prevent-ddos-attacks/concepts/) to dive deeper into this subject. +Refer to the learning path [Prevent DDoS attacks](/learning-paths/prevent-ddos-attacks/concepts/) to dive deeper into this subject. diff --git a/src/content/docs/learning-paths/application-security/default-traffic-security/dnssec.mdx b/src/content/docs/learning-paths/application-security/default-traffic-security/dnssec.mdx index d3c76bce71f7ce2..636464957d64e91 100644 --- a/src/content/docs/learning-paths/application-security/default-traffic-security/dnssec.mdx +++ b/src/content/docs/learning-paths/application-security/default-traffic-security/dnssec.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/application-security/default-traffic-security/index.mdx b/src/content/docs/learning-paths/application-security/default-traffic-security/index.mdx index f9c577f4d3368d9..5432c5e8c039ee4 100644 --- a/src/content/docs/learning-paths/application-security/default-traffic-security/index.mdx +++ b/src/content/docs/learning-paths/application-security/default-traffic-security/index.mdx @@ -18,4 +18,4 @@ As soon as you onboard your domain to Cloudflare, you are automatically protecte By the end of this module, you will be able to: -* Understand the most common security controls your applications will have access to +- Understand the most common security controls your applications will have access to diff --git a/src/content/docs/learning-paths/application-security/default-traffic-security/mtls.mdx b/src/content/docs/learning-paths/application-security/default-traffic-security/mtls.mdx index a68ec976eb10fae..3d460f58056b631 100644 --- a/src/content/docs/learning-paths/application-security/default-traffic-security/mtls.mdx +++ b/src/content/docs/learning-paths/application-security/default-traffic-security/mtls.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; Mutual TLS (mTLS) authentication uses client certificates to ensure traffic between client and server is bidirectionally secure and trusted. mTLS also allows requests that do not authenticate via an identity provider — such as Internet-of-things (IoT) devices — to demonstrate they can reach a given resource. diff --git a/src/content/docs/learning-paths/application-security/firewall/index.mdx b/src/content/docs/learning-paths/application-security/firewall/index.mdx index 6ee96f14dba91e6..78fffa803dc49c0 100644 --- a/src/content/docs/learning-paths/application-security/firewall/index.mdx +++ b/src/content/docs/learning-paths/application-security/firewall/index.mdx @@ -18,5 +18,5 @@ Cloudflare's Web Application Firewall (WAF) is used to protect websites from a w By the end of this module, you will be able to: -* Understand the different WAF components that Cloudflare offers -* Understand the main features within each WAF offering +- Understand the different WAF components that Cloudflare offers +- Understand the main features within each WAF offering diff --git a/src/content/docs/learning-paths/application-security/lists/configuration.mdx b/src/content/docs/learning-paths/application-security/lists/configuration.mdx index 0a7cc2639adf13f..de13360e165d887 100644 --- a/src/content/docs/learning-paths/application-security/lists/configuration.mdx +++ b/src/content/docs/learning-paths/application-security/lists/configuration.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; Both Custom and Managed Lists are located in the account settings. Refer to [Features by plan type](/learning-paths/application-security/lists/features/) for more information on plan eligibility. diff --git a/src/content/docs/learning-paths/application-security/lists/features.mdx b/src/content/docs/learning-paths/application-security/lists/features.mdx index 96704045ef785d4..4ea1c31ecbdd63e 100644 --- a/src/content/docs/learning-paths/application-security/lists/features.mdx +++ b/src/content/docs/learning-paths/application-security/lists/features.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { FeatureTable, Render } from "~/components" +import { FeatureTable, Render } from "~/components"; List availability varies according to the list type and your Cloudflare plan and subscriptions. diff --git a/src/content/docs/learning-paths/application-security/lists/index.mdx b/src/content/docs/learning-paths/application-security/lists/index.mdx index 5278a33aaa568ba..852a5c8744856ab 100644 --- a/src/content/docs/learning-paths/application-security/lists/index.mdx +++ b/src/content/docs/learning-paths/application-security/lists/index.mdx @@ -14,12 +14,12 @@ products: Cloudflare Lists is a WAF feature that enables administrators to groups identifiers together, such as IPs, hostnames or ASNs, and reference the list by other Cloudflare products such as [Custom rules](/waf/custom-rules/). Cloudflare currently supports the following types of lists: -* [Custom Lists](/waf/tools/lists/custom-lists/): Includes custom IP lists, hostname lists, and ASN lists. -* [Managed Lists](/waf/tools/lists/managed-lists/): Lists managed and updated by Cloudflare, such as Managed IP Lists. +- [Custom Lists](/waf/tools/lists/custom-lists/): Includes custom IP lists, hostname lists, and ASN lists. +- [Managed Lists](/waf/tools/lists/managed-lists/): Lists managed and updated by Cloudflare, such as Managed IP Lists. ## Objectives By the end of this module, you will be able to: -* Understand all the options Cloudflare's Lists products offer -* Understand the advanced configurations provided to you with a paid offering +- Understand all the options Cloudflare's Lists products offer +- Understand the advanced configurations provided to you with a paid offering diff --git a/src/content/docs/learning-paths/application-security/lists/use-cases.mdx b/src/content/docs/learning-paths/application-security/lists/use-cases.mdx index b14eddd109c6d34..9823a3c2fca778d 100644 --- a/src/content/docs/learning-paths/application-security/lists/use-cases.mdx +++ b/src/content/docs/learning-paths/application-security/lists/use-cases.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; The most common uses cases are: diff --git a/src/content/docs/learning-paths/application-security/rate-limiting/configurations.mdx b/src/content/docs/learning-paths/application-security/rate-limiting/configurations.mdx index ceee8008c0ec64e..21914e63f80aefc 100644 --- a/src/content/docs/learning-paths/application-security/rate-limiting/configurations.mdx +++ b/src/content/docs/learning-paths/application-security/rate-limiting/configurations.mdx @@ -14,14 +14,14 @@ products: Let's step through an example. If your `/create-account` page is being attacked, you will create a rule to limit the amount of requests, per `counting characteristic`, that you feel comfortable permitting through to your origin. -The rule below is being created on the `free` plan, which limits configuration options. The rule will trigger if the URI path matches `/create-account`, from the same IP address, *after* 5 requests and within a 10 second window, [within each Cloudflare datacenter](/waf/rate-limiting-rules/request-rate/), globally. +The rule below is being created on the `free` plan, which limits configuration options. The rule will trigger if the URI path matches `/create-account`, from the same IP address, _after_ 5 requests and within a 10 second window, [within each Cloudflare datacenter](/waf/rate-limiting-rules/request-rate/), globally. -*** +--- ![rate-limiting-create-account-endpoint](~/assets/images/waf/rate-limiting-rules/rl-create-account-endpoint.png) ![rate-limiting-create-account-endpoint-block](~/assets/images/waf/rate-limiting-rules/rl-create-account-endpoint-block.png) -*** +--- ## Advanced configuration @@ -29,14 +29,14 @@ In the previous module, we reviewed the various configurations available per pla The rule below is being created on the `enterprise` plan, so we are no longer limited to default configurations. -* The rule will also limit the number of requests to `/create-account`, but will only trigger against `POST` requests. In the basic example, even requests with the `GET` method will increment the counter. -* Requests that do not have a [client certificate (mTLS)](/ssl/client-certificates/), will increment the counter. -* Requests will be counted using the [IP with NAT support](/waf/rate-limiting-rules/parameters/#use-cases-of-ip-with-nat-support) characteristic. -* Within a 1 minute period, for each counted entity, if the number of requests exceeds 10, then the user will be presented with a [Managed Challenge](/cloudflare-challenges/challenge-types/challenge-pages/#managed-challenge) for a custom duration of 1 day. +- The rule will also limit the number of requests to `/create-account`, but will only trigger against `POST` requests. In the basic example, even requests with the `GET` method will increment the counter. +- Requests that do not have a [client certificate (mTLS)](/ssl/client-certificates/), will increment the counter. +- Requests will be counted using the [IP with NAT support](/waf/rate-limiting-rules/parameters/#use-cases-of-ip-with-nat-support) characteristic. +- Within a 1 minute period, for each counted entity, if the number of requests exceeds 10, then the user will be presented with a [Managed Challenge](/cloudflare-challenges/challenge-types/challenge-pages/#managed-challenge) for a custom duration of 1 day. ![rate-limiting-advanced-config-1](~/assets/images/waf/rate-limiting-rules/rl-advanced-config.png) -*** +--- ## Best practices diff --git a/src/content/docs/learning-paths/application-security/rate-limiting/features.mdx b/src/content/docs/learning-paths/application-security/rate-limiting/features.mdx index 21aa7c300cdb961..606b48b86302118 100644 --- a/src/content/docs/learning-paths/application-security/rate-limiting/features.mdx +++ b/src/content/docs/learning-paths/application-security/rate-limiting/features.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; Rate limiting is composed of the following parameters: diff --git a/src/content/docs/learning-paths/application-security/rate-limiting/index.mdx b/src/content/docs/learning-paths/application-security/rate-limiting/index.mdx index 75a9a0e25347d72..45270f5ec40f21e 100644 --- a/src/content/docs/learning-paths/application-security/rate-limiting/index.mdx +++ b/src/content/docs/learning-paths/application-security/rate-limiting/index.mdx @@ -18,5 +18,5 @@ Rate Limiting mitigates excessive request rates for specific URLs or for an enti By the end of this module, you will be able to: -* Understand all the options Cloudflare's Rate Limiting product offers -* Understand the advanced configurations provided to you with a paid offering +- Understand all the options Cloudflare's Rate Limiting product offers +- Understand the advanced configurations provided to you with a paid offering diff --git a/src/content/docs/learning-paths/application-security/rate-limiting/use-cases.mdx b/src/content/docs/learning-paths/application-security/rate-limiting/use-cases.mdx index 7eb7c2accedce4b..81787364edb5b8b 100644 --- a/src/content/docs/learning-paths/application-security/rate-limiting/use-cases.mdx +++ b/src/content/docs/learning-paths/application-security/rate-limiting/use-cases.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; The most common uses cases are: diff --git a/src/content/docs/learning-paths/application-security/security-center/brand-protection.mdx b/src/content/docs/learning-paths/application-security/security-center/brand-protection.mdx index 06d7cf0e3aa85f1..2533b2fabe4489e 100644 --- a/src/content/docs/learning-paths/application-security/security-center/brand-protection.mdx +++ b/src/content/docs/learning-paths/application-security/security-center/brand-protection.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/application-security/security-center/index.mdx b/src/content/docs/learning-paths/application-security/security-center/index.mdx index 3c114e0c0f9d8d6..443cd3864fd9da6 100644 --- a/src/content/docs/learning-paths/application-security/security-center/index.mdx +++ b/src/content/docs/learning-paths/application-security/security-center/index.mdx @@ -12,7 +12,7 @@ products: - security-center --- -import { Render } from "~/components" +import { Render } from "~/components"; @@ -20,5 +20,5 @@ import { Render } from "~/components" By the end of this module, you will be able to: -* Understand the primary Security Center features such as Security Insights and Brand Protection -* Review and manage security risks at the account level, encompassing all of your domains in one unified view +- Understand the primary Security Center features such as Security Insights and Brand Protection +- Review and manage security risks at the account level, encompassing all of your domains in one unified view diff --git a/src/content/docs/learning-paths/clientless-access/access-application/index.mdx b/src/content/docs/learning-paths/clientless-access/access-application/index.mdx index 54e046c2db79eed..9ce422510bb4427 100644 --- a/src/content/docs/learning-paths/clientless-access/access-application/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/access-application/index.mdx @@ -16,7 +16,7 @@ Now that you have [connected your private applications](/learning-paths/clientle By the end of this module, you will be able to: -* Add your application to Cloudflare Access. -* Create an Access policy. -* Design reusable policies. -* Design a domain structure for your applications. +- Add your application to Cloudflare Access. +- Create an Access policy. +- Design reusable policies. +- Design a domain structure for your applications. diff --git a/src/content/docs/learning-paths/clientless-access/advanced-workflows/index.mdx b/src/content/docs/learning-paths/clientless-access/advanced-workflows/index.mdx index 38a2051d7e24d98..5450985227dcb8e 100644 --- a/src/content/docs/learning-paths/clientless-access/advanced-workflows/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/advanced-workflows/index.mdx @@ -16,7 +16,7 @@ Configure advanced Access policies to meet the specific requirements of your app By the end of this module, you will be able to: -* Check identity-based attributes that are not directly supported by the Access policy builder. -* Deliver sensitive web applications in an isolated browser. -* Apply Gateway HTTP policies without a device client. -* Connect to applications using their private hostnames without a device client. +- Check identity-based attributes that are not directly supported by the Access policy builder. +- Deliver sensitive web applications in an isolated browser. +- Apply Gateway HTTP policies without a device client. +- Connect to applications using their private hostnames without a device client. diff --git a/src/content/docs/learning-paths/clientless-access/alternative-onramps/clientless-rbi.mdx b/src/content/docs/learning-paths/clientless-access/alternative-onramps/clientless-rbi.mdx index 700dfb2c429be48..ba3876cbb069c62 100644 --- a/src/content/docs/learning-paths/clientless-access/alternative-onramps/clientless-rbi.mdx +++ b/src/content/docs/learning-paths/clientless-access/alternative-onramps/clientless-rbi.mdx @@ -27,6 +27,6 @@ To configure Clientless Web Isolation to augment clientless access, refer to [th ## Best practices -* For guidance on building Gateway policies for private network applications, refer to [Secure your first application](/learning-paths/replace-vpn/build-policies/create-policy/). -* If you already deployed the Cloudflare One Client to some devices as part of a mixed-access methodology, ensure that your Gateway firewall policies do not rely on device posture checks. Because Clientless Web Isolation is not a machine in your fleet, it will not return any values for device posture checks. -* You can standardize the user experience by making specific applications available in your App Launcher as [bookmarks](/learning-paths/clientless-access/customize-ux/bookmarks/). In this case, you would create a new bookmark for `https://.cloudflareaccess.com/browser/https://internalresource.com`, which would take users directly to an isolated session with your application. +- For guidance on building Gateway policies for private network applications, refer to [Secure your first application](/learning-paths/replace-vpn/build-policies/create-policy/). +- If you already deployed the Cloudflare One Client to some devices as part of a mixed-access methodology, ensure that your Gateway firewall policies do not rely on device posture checks. Because Clientless Web Isolation is not a machine in your fleet, it will not return any values for device posture checks. +- You can standardize the user experience by making specific applications available in your App Launcher as [bookmarks](/learning-paths/clientless-access/customize-ux/bookmarks/). In this case, you would create a new bookmark for `https://.cloudflareaccess.com/browser/https://internalresource.com`, which would take users directly to an isolated session with your application. diff --git a/src/content/docs/learning-paths/clientless-access/alternative-onramps/index.mdx b/src/content/docs/learning-paths/clientless-access/alternative-onramps/index.mdx index 236369d2c8ea5d8..3d6978794492877 100644 --- a/src/content/docs/learning-paths/clientless-access/alternative-onramps/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/alternative-onramps/index.mdx @@ -10,10 +10,10 @@ products: - cloudflare-one --- -As discussed in the previous modules, almost everything you do with the Cloudflare reverse proxy requires [adding a site](/learning-paths/clientless-access/initial-setup/add-site/) to Cloudflare. That public DNS record (or its subdomains) becomes the domain on which your users access your private applications. This method is exceptionally secure and transparent; each domain and subdomain has access to the Cloudflare web security portfolio, are inherently DDoS protected, and receive an obfuscated origin IP. For these reasons, using a [public hostname on Cloudflare](/learning-paths/clientless-access/connect-private-applications/) is the recommended method to onboard applications for clientless user access. However, there may be times in which a public DNS record cannot be created, or other situations that prevent administrators from using this method. +As discussed in the previous modules, almost everything you do with the Cloudflare reverse proxy requires [adding a site](/learning-paths/clientless-access/initial-setup/add-site/) to Cloudflare. That public DNS record (or its subdomains) becomes the domain on which your users access your private applications. This method is exceptionally secure and transparent; each domain and subdomain has access to the Cloudflare web security portfolio, are inherently DDoS protected, and receive an obfuscated origin IP. For these reasons, using a [public hostname on Cloudflare](/learning-paths/clientless-access/connect-private-applications/) is the recommended method to onboard applications for clientless user access. However, there may be times in which a public DNS record cannot be created, or other situations that prevent administrators from using this method. ## Objectives By the end of this module, you will be able to: -* Connect to private web applications using their private hostnames. +- Connect to private web applications using their private hostnames. diff --git a/src/content/docs/learning-paths/clientless-access/concepts/index.mdx b/src/content/docs/learning-paths/clientless-access/concepts/index.mdx index 1c76266d3e00159..96467fa3ad74ab3 100644 --- a/src/content/docs/learning-paths/clientless-access/concepts/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/concepts/index.mdx @@ -16,4 +16,4 @@ Review the concepts behind clientless access. By the end of this module, you will be able to: -- Understand the purpose and benefits of clientless access. \ No newline at end of file +- Understand the purpose and benefits of clientless access. diff --git a/src/content/docs/learning-paths/clientless-access/concepts/what-is-clientless-access.mdx b/src/content/docs/learning-paths/clientless-access/concepts/what-is-clientless-access.mdx index 446f1e1c72913e7..9b3e4a2a40a5b80 100644 --- a/src/content/docs/learning-paths/clientless-access/concepts/what-is-clientless-access.mdx +++ b/src/content/docs/learning-paths/clientless-access/concepts/what-is-clientless-access.mdx @@ -12,7 +12,7 @@ products: Clientless access is a deployment option of a [Zero Trust Network Access (ZTNA)](https://www.cloudflare.com/learning/access-management/what-is-ztna/) service that provides secure access to internal applications without requiring end users to install any software. Users access corporate resources like intranet web apps, SSH terminals, and Windows servers through RDP from their web browser. Clientless access is commonly used to provide internal, [least-privilege access](https://www.cloudflare.com/learning/access-management/principle-of-least-privilege/) to users on unmanaged devices. Users may include third-party contractors, suppliers, and partners, or employees using personal mobile phones as part of an organization's bring-your-own-device (BYOD) policy. -IT/security admins can decide how users authenticate, whether through their corporate identity provider, social media accounts, a PIN sent to their email, strong MFA, or a combination of options. Admins can also add inline services like Remote Browser Isolation (RBI) and Data Loss Prevention (DLP) to help prevent data exfiltration from unmanaged devices, still through a clientless implementation. Isolated apps can enforce broad data controls through the browser, such as preventing uploads/downloads or copy/paste, or incorporating DLP policies. +IT/security admins can decide how users authenticate, whether through their corporate identity provider, social media accounts, a PIN sent to their email, strong MFA, or a combination of options. Admins can also add inline services like Remote Browser Isolation (RBI) and Data Loss Prevention (DLP) to help prevent data exfiltration from unmanaged devices, still through a clientless implementation. Isolated apps can enforce broad data controls through the browser, such as preventing uploads/downloads or copy/paste, or incorporating DLP policies. ## Alternatives to clientless access diff --git a/src/content/docs/learning-paths/clientless-access/connect-private-applications/best-practices.mdx b/src/content/docs/learning-paths/clientless-access/connect-private-applications/best-practices.mdx index 7015fc5b6c802b5..7eb4c09d0ecbf01 100644 --- a/src/content/docs/learning-paths/clientless-access/connect-private-applications/best-practices.mdx +++ b/src/content/docs/learning-paths/clientless-access/connect-private-applications/best-practices.mdx @@ -20,9 +20,9 @@ For an additional point of availability, add a [`cloudflared` replica](/cloudfla To make your applications easier to manage, standardize the public hostnames that you publish your applications on. Here are a few examples of how customers manage their public hostnames: -* Delegate a subdomain of your primary public website to use for internal applications (for example, `tools.dev.customer.com`). -* If your internal DNS infrastructure is available for public use, register your internal primary DNS record on Cloudflare and use this domain for your public hostname routes. This allows you to present applications on identical private and public hostnames. -* Specify some sort of internal logic that generates hostnames based on the type of tool you are connecting. For example, if you have a set of applications in a US-East datacenter allocated explicitly for production resources, you could create subdomains of `tools.us-east.prod.ztproject.com`. +- Delegate a subdomain of your primary public website to use for internal applications (for example, `tools.dev.customer.com`). +- If your internal DNS infrastructure is available for public use, register your internal primary DNS record on Cloudflare and use this domain for your public hostname routes. This allows you to present applications on identical private and public hostnames. +- Specify some sort of internal logic that generates hostnames based on the type of tool you are connecting. For example, if you have a set of applications in a US-East datacenter allocated explicitly for production resources, you could create subdomains of `tools.us-east.prod.ztproject.com`. ## Disable TLS verification diff --git a/src/content/docs/learning-paths/clientless-access/connect-private-applications/create-tunnel.mdx b/src/content/docs/learning-paths/clientless-access/connect-private-applications/create-tunnel.mdx index 3120d43f30efdce..9c6cbcd138686f2 100644 --- a/src/content/docs/learning-paths/clientless-access/connect-private-applications/create-tunnel.mdx +++ b/src/content/docs/learning-paths/clientless-access/connect-private-applications/create-tunnel.mdx @@ -10,7 +10,7 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; To enable clientless access to your applications, you will need to create a Cloudflare Tunnel that publishes applications to a domain on Cloudflare. A published application creates a public DNS record that routes traffic to a specific address, protocol, and port associated with a private application. For example, you can define a public hostname (`mywebapp.example.com`) to provide access to a web server running on `https://localhost:8080`. When a user goes to `mywebapp.example.com` in their browser, their request will first route to a Cloudflare data center where it is inspected against your configured security policies. Cloudflare will then forward validated requests down your tunnel to the web server. @@ -32,9 +32,8 @@ All users on the Internet can now connect to this application via its public hos If the tunnel is disconnected: -* Ensure that your on-premise or cloud firewall allows egress traffic on the [required ports](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall/#required-for-tunnel-operation). -* Ensure that the `cloudflared` host machine can connect to your internal applications and services. Verify that the host has the proper security group memberships and that no firewalls will block traffic between the host and the target services. - +- Ensure that your on-premise or cloud firewall allows egress traffic on the [required ports](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall/#required-for-tunnel-operation). +- Ensure that the `cloudflared` host machine can connect to your internal applications and services. Verify that the host has the proper security group memberships and that no firewalls will block traffic between the host and the target services. ::: @@ -42,5 +41,5 @@ If the tunnel is disconnected: For more control over how traffic routes through your tunnel, refer to the following links: -* [DNS records](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns/) -* [Load balancer](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers/) +- [DNS records](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/dns/) +- [Load balancer](/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/public-load-balancers/) diff --git a/src/content/docs/learning-paths/clientless-access/connect-private-applications/index.mdx b/src/content/docs/learning-paths/clientless-access/connect-private-applications/index.mdx index fe443c8a8e5c306..4f9337b3961247c 100644 --- a/src/content/docs/learning-paths/clientless-access/connect-private-applications/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/connect-private-applications/index.mdx @@ -16,5 +16,5 @@ Cloudflare Tunnel allows you to securely connect your applications to Cloudflare By the end of this module, you will be able to: -* Create a Cloudflare Tunnel. -* Publish your application via a public hostname. +- Create a Cloudflare Tunnel. +- Publish your application via a public hostname. diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/app-launcher.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/app-launcher.mdx index 49e6a3bcf50f75b..a14fda563a6432d 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/app-launcher.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/app-launcher.mdx @@ -10,6 +10,6 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/block-page.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/block-page.mdx index 3f202ae036ff2e9..3de4f9ba2ef5141 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/block-page.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/block-page.mdx @@ -10,6 +10,6 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/bookmarks.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/bookmarks.mdx index 23e9d4431ca5719..6a740a977e9de4c 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/bookmarks.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/bookmarks.mdx @@ -10,6 +10,6 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/index.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/index.mdx index 681cb50fbfb8882..01df3d80b023dd8 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/index.mdx @@ -16,7 +16,7 @@ Cloudflare Access offers several ways to customize the look and feel of the user By the end of this module, you will be able to: -* Configure the App Launcher so that users can open all applications from single dashboard. -* Add bookmarks to the App Launcher for applications that are not behind Access. -* Customize the Access login page with your organization's branding. -* Display custom block pages when a user is blocked by your Access policies. +- Configure the App Launcher so that users can open all applications from single dashboard. +- Add bookmarks to the App Launcher for applications that are not behind Access. +- Customize the Access login page with your organization's branding. +- Display custom block pages when a user is blocked by your Access policies. diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/login-page.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/login-page.mdx index 0784ac3db460bb8..b04f07439a4c9c8 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/login-page.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/login-page.mdx @@ -10,7 +10,7 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; The Access login page is where users select their identity provider (IdP) or One-Time PIN prior to accessing the application. Customers who only use one IdP usually enable **Apply instant authentication** for their applications, which redirects end users directly to the SSO login page. If you are using multiple IdPs, we recommend customizing the Access login page to match your branding and minimize user confusion. diff --git a/src/content/docs/learning-paths/clientless-access/customize-ux/tags.mdx b/src/content/docs/learning-paths/clientless-access/customize-ux/tags.mdx index 6b8b7f8ee3ace2f..65bd38ce4da91e9 100644 --- a/src/content/docs/learning-paths/clientless-access/customize-ux/tags.mdx +++ b/src/content/docs/learning-paths/clientless-access/customize-ux/tags.mdx @@ -10,6 +10,6 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/clientless-access/initial-setup/index.mdx b/src/content/docs/learning-paths/clientless-access/initial-setup/index.mdx index bf6be752e98fce7..0348346f1053ba1 100644 --- a/src/content/docs/learning-paths/clientless-access/initial-setup/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/initial-setup/index.mdx @@ -18,7 +18,7 @@ If you need to deliver access to non-browser based applications, refer to our co By the end of this module, you will be able to: -* Set up a Cloudflare account. -* Add your domain to Cloudflare. -* Create a Zero Trust organization to manage applications and policies. -* Configure an identity provider (IdP) for user authentication. +- Set up a Cloudflare account. +- Add your domain to Cloudflare. +- Create a Zero Trust organization to manage applications and policies. +- Configure an identity provider (IdP) for user authentication. diff --git a/src/content/docs/learning-paths/clientless-access/migrate-applications/best-practices.mdx b/src/content/docs/learning-paths/clientless-access/migrate-applications/best-practices.mdx index 238af10cab095cb..f519cc3082b5669 100644 --- a/src/content/docs/learning-paths/clientless-access/migrate-applications/best-practices.mdx +++ b/src/content/docs/learning-paths/clientless-access/migrate-applications/best-practices.mdx @@ -12,10 +12,10 @@ products: Most customers have a heterogeneous private application portfolio; some are home-built, some are internal managed services, some have SSO integrations available, and some rely on HTML or other forms of authentication. With that in mind, we recommend that you mix-and-match [onboarding solutions](/learning-paths/clientless-access/migrate-applications/integrated-sso/#potential-solutions) to fit the needs of each individual application. As shown in the table below, you can bucket applications into a series of stack-ranked categories that prioritize ease of implementation and total organizational impact. -| Application type | Recommendation | Outcome | -| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Private web apps without integrated SSO | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution) | Users access applications on new domains delegated to Cloudflare and instantly apply SSO through Cloudflare integration. | -| Private web apps with integrated SSO | **If SSO configuration is possible:** [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution)
**If SSO configuration is not possible:** Present applications on existing internal domains with identical external domains delegated to Cloudflare | Users access internal web services on the same or new domains from Cloudflare. If configured, the SSO provider transparently redirects users from internal domains to Cloudflare authoritative external domains. | -| New critical internal applications being developed | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution) | Developers can programmatically generate (or be given) new public hostnames on Cloudflare to represent the redirects for their application in SAML or OIDC integrations. | -| New microservices being developed | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution)
Optionally, [consume the Access JWT](/learning-paths/clientless-access/migrate-applications/consume-jwt/#consume-the-cloudflare-jwt) as authentication in internal applications. | Developers can inject the JWT authorization mechanism directly into the codebase of their application and [use Terraform](/learning-paths/clientless-access/terraform/) to automatically build Cloudflare hostnames and policies for their applications. | -| Internal API endpoints (including internal applications with dependencies on external/internal APIs) | Present internal APIs on Cloudflare domains, and build Access policies that accept [service tokens](/cloudflare-one/access-controls/service-credentials/service-tokens/) alongside user-oriented policies. | Automated systems can authenticate via a [service token in the request header](/cloudflare-one/access-controls/service-credentials/service-tokens/#connect-your-service-to-access), while end users continue to login through their IdP. | +| Application type | Recommendation | Outcome | +| ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Private web apps without integrated SSO | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution) | Users access applications on new domains delegated to Cloudflare and instantly apply SSO through Cloudflare integration. | +| Private web apps with integrated SSO | **If SSO configuration is possible:** [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution)
**If SSO configuration is not possible:** Present applications on existing internal domains with identical external domains delegated to Cloudflare | Users access internal web services on the same or new domains from Cloudflare. If configured, the SSO provider transparently redirects users from internal domains to Cloudflare authoritative external domains. | +| New critical internal applications being developed | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution) | Developers can programmatically generate (or be given) new public hostnames on Cloudflare to represent the redirects for their application in SAML or OIDC integrations. | +| New microservices being developed | [Present applications exclusively on Cloudflare domains.](/learning-paths/clientless-access/migrate-applications/integrated-sso/#recommended-solution)
Optionally, [consume the Access JWT](/learning-paths/clientless-access/migrate-applications/consume-jwt/#consume-the-cloudflare-jwt) as authentication in internal applications. | Developers can inject the JWT authorization mechanism directly into the codebase of their application and [use Terraform](/learning-paths/clientless-access/terraform/) to automatically build Cloudflare hostnames and policies for their applications. | +| Internal API endpoints (including internal applications with dependencies on external/internal APIs) | Present internal APIs on Cloudflare domains, and build Access policies that accept [service tokens](/cloudflare-one/access-controls/service-credentials/service-tokens/) alongside user-oriented policies. | Automated systems can authenticate via a [service token in the request header](/cloudflare-one/access-controls/service-credentials/service-tokens/#connect-your-service-to-access), while end users continue to login through their IdP. | diff --git a/src/content/docs/learning-paths/clientless-access/migrate-applications/index.mdx b/src/content/docs/learning-paths/clientless-access/migrate-applications/index.mdx index 87fd2e5aafa3f63..9221ff52404a5f0 100644 --- a/src/content/docs/learning-paths/clientless-access/migrate-applications/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/migrate-applications/index.mdx @@ -21,6 +21,6 @@ The remaining modules (Modules 6-9) discuss special considerations and setup opt By the end of this module, you will be able to: -* Manage applications that are directly integrated with an identity provider. -* Pass user information from Cloudflare Access to your application. -* Review best practices for onboarding different types of internal applications. +- Manage applications that are directly integrated with an identity provider. +- Pass user information from Cloudflare Access to your application. +- Review best practices for onboarding different types of internal applications. diff --git a/src/content/docs/learning-paths/clientless-access/migrate-applications/integrated-sso.mdx b/src/content/docs/learning-paths/clientless-access/migrate-applications/integrated-sso.mdx index 05491e91bbf7537..237820c4e1c9ca7 100644 --- a/src/content/docs/learning-paths/clientless-access/migrate-applications/integrated-sso.mdx +++ b/src/content/docs/learning-paths/clientless-access/migrate-applications/integrated-sso.mdx @@ -31,12 +31,12 @@ app.internal.com") If your applications use integrated SSO, there are a number of different paths you can take to onboard your applications to Cloudflare Access. -| Solution | Steps required | Pros | Cons | -| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | -| [Present applications exclusively on Cloudflare domains](#recommended-solution) | Change SSO ACS URL to the Cloudflare Tunnel public hostname |
  • Increased security posture
  • No changes to application code
  • No changes to internal DNS design
  • | Hard cutover event when ACS URL changes from internal to external domain | -| Present applications on existing internal domains with identical external domains delegated to Cloudflare | Add domains to Cloudflare that match internal domains |
  • No changes to SSO ACS URL
  • No change for end users
  • |
  • Requires careful management of internal and external domains
  • Requires changing internal DNS design
  • | -| [Consume the Cloudflare JWT in internal applications](/learning-paths/clientless-access/migrate-applications/consume-jwt/) |
  • Remove integrated SSO
  • Update application to accept the Cloudflare JWT for user authorization
  • |
  • Reduced authentication burden for end users
  • No changes to internal DNS design
  • Instantly secure applications without direct SSO integration
  • |
  • Requires changing application code
  • Hard cutover event when application updates
  • | -| Use Cloudflare as the direct SSO integration, which then calls your IdP of choice (Okta, OneLogin, etc.) | Swap existing SSO provider for [Access for SaaS](/cloudflare-one/access-controls/applications/http-apps/saas-apps/) |
  • Increased flexibility for changing IdPs
  • Ability to use multiple IdPs simultaneously
  • |
  • Hard cutover event for IdP changes
  • No SCIM provisioning for application
  • | +| Solution | Steps required | Pros | Cons | +| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| [Present applications exclusively on Cloudflare domains](#recommended-solution) | Change SSO ACS URL to the Cloudflare Tunnel public hostname |
  • Increased security posture
  • No changes to application code
  • No changes to internal DNS design
  • | Hard cutover event when ACS URL changes from internal to external domain | +| Present applications on existing internal domains with identical external domains delegated to Cloudflare | Add domains to Cloudflare that match internal domains |
  • No changes to SSO ACS URL
  • No change for end users
  • |
  • Requires careful management of internal and external domains
  • Requires changing internal DNS design
  • | +| [Consume the Cloudflare JWT in internal applications](/learning-paths/clientless-access/migrate-applications/consume-jwt/) |
  • Remove integrated SSO
  • Update application to accept the Cloudflare JWT for user authorization
  • |
  • Reduced authentication burden for end users
  • No changes to internal DNS design
  • Instantly secure applications without direct SSO integration
  • |
  • Requires changing application code
  • Hard cutover event when application updates
  • | +| Use Cloudflare as the direct SSO integration, which then calls your IdP of choice (Okta, OneLogin, etc.) | Swap existing SSO provider for [Access for SaaS](/cloudflare-one/access-controls/applications/http-apps/saas-apps/) |
  • Increased flexibility for changing IdPs
  • Ability to use multiple IdPs simultaneously
  • |
  • Hard cutover event for IdP changes
  • No SCIM provisioning for application
  • | ## Recommended solution diff --git a/src/content/docs/learning-paths/clientless-access/terraform/index.mdx b/src/content/docs/learning-paths/clientless-access/terraform/index.mdx index 7412e5a55b1652c..596225f3171052b 100644 --- a/src/content/docs/learning-paths/clientless-access/terraform/index.mdx +++ b/src/content/docs/learning-paths/clientless-access/terraform/index.mdx @@ -16,4 +16,4 @@ Integrate Cloudflare Access into your private application development pipeline. By the end of this module, you will be able to: -* Publish internal applications to Cloudflare using Terraform. +- Publish internal applications to Cloudflare using Terraform. diff --git a/src/content/docs/learning-paths/cybersafe/account-creation/create-zero-trust-org.mdx b/src/content/docs/learning-paths/cybersafe/account-creation/create-zero-trust-org.mdx index 69453ef2d875700..1e092ce574856b2 100644 --- a/src/content/docs/learning-paths/cybersafe/account-creation/create-zero-trust-org.mdx +++ b/src/content/docs/learning-paths/cybersafe/account-creation/create-zero-trust-org.mdx @@ -11,7 +11,7 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; To set up a Zero Trust organization: diff --git a/src/content/docs/learning-paths/cybersafe/account-creation/index.mdx b/src/content/docs/learning-paths/cybersafe/account-creation/index.mdx index 721649155e70883..c0853f8ed750a7f 100644 --- a/src/content/docs/learning-paths/cybersafe/account-creation/index.mdx +++ b/src/content/docs/learning-paths/cybersafe/account-creation/index.mdx @@ -16,6 +16,6 @@ Get started by creating a Cloudflare account and initializing the Zero Trust and By the end of this module, you will have: -* Created a Cloudflare account. -* Initialized the Zero Trust dashboard. -* Initialized the Area 1 dashboard. +- Created a Cloudflare account. +- Initialized the Zero Trust dashboard. +- Initialized the Area 1 dashboard. diff --git a/src/content/docs/learning-paths/cybersafe/concepts/index.mdx b/src/content/docs/learning-paths/cybersafe/concepts/index.mdx index 098f42bdf6a93f6..c6dc2bacee257d2 100644 --- a/src/content/docs/learning-paths/cybersafe/concepts/index.mdx +++ b/src/content/docs/learning-paths/cybersafe/concepts/index.mdx @@ -16,7 +16,7 @@ Learn the technical concepts behind Project Cybersafe Schools. By the end of this module, you will be able to: -* Understand the purpose of the Children’s Internet Protection Act (CIPA). -* Describe the life of a DNS request. -* Explain how DNS filtering works to control which websites users can access. -* Understand the benefits of protecting your email inbox. +- Understand the purpose of the Children’s Internet Protection Act (CIPA). +- Describe the life of a DNS request. +- Explain how DNS filtering works to control which websites users can access. +- Understand the benefits of protecting your email inbox. diff --git a/src/content/docs/learning-paths/cybersafe/concepts/what-is-dns-filtering.mdx b/src/content/docs/learning-paths/cybersafe/concepts/what-is-dns-filtering.mdx index af663840fbd1be0..c7e8ff61a49fecf 100644 --- a/src/content/docs/learning-paths/cybersafe/concepts/what-is-dns-filtering.mdx +++ b/src/content/docs/learning-paths/cybersafe/concepts/what-is-dns-filtering.mdx @@ -16,9 +16,9 @@ DNS filtering is a technique to block access to websites or online content. DNS DNS filtering is commonly used to: -* Protect school data from phishing, ransomware, and malware. -* Block websites that go against school acceptable use policy, such as adult content, gambling, and piracy. -* Restrict access to websites that may impact student productivity, such as gaming, social media, and video streaming. +- Protect school data from phishing, ransomware, and malware. +- Block websites that go against school acceptable use policy, such as adult content, gambling, and piracy. +- Restrict access to websites that may impact student productivity, such as gaming, social media, and video streaming. ## How DNS filtering works @@ -52,17 +52,17 @@ DNS filtering only applies to the hostname — `subdomain.domain.tld`. You canno Secure Web Gateways (SWGs) offer a greater set of capabilities, including: -* [URL filtering](https://www.cloudflare.com/learning/access-management/what-is-url-filtering/) to block specific paths and queries -* L4 firewalls to block ports and protocols -* Antivirus scanning -* [Data loss prevention](https://www.cloudflare.com/learning/access-management/what-is-dlp/) -* [Browser isolation](https://www.cloudflare.com/learning/access-management/what-is-browser-isolation/) +- [URL filtering](https://www.cloudflare.com/learning/access-management/what-is-url-filtering/) to block specific paths and queries +- L4 firewalls to block ports and protocols +- Antivirus scanning +- [Data loss prevention](https://www.cloudflare.com/learning/access-management/what-is-dlp/) +- [Browser isolation](https://www.cloudflare.com/learning/access-management/what-is-browser-isolation/) However, this can make SWGs more complex to deploy. Therefore, many organizations will start with DNS filtering as an initial layer of defense against Internet threats. ## Related resources -* For more background information on DNS filtering, refer to our [Learning Center](https://www.cloudflare.com/learning/access-management/what-is-dns-filtering/). +- For more background information on DNS filtering, refer to our [Learning Center](https://www.cloudflare.com/learning/access-management/what-is-dns-filtering/). ## Next steps diff --git a/src/content/docs/learning-paths/cybersafe/gateway-onboarding/gateway-verify-local-connectivity.mdx b/src/content/docs/learning-paths/cybersafe/gateway-onboarding/gateway-verify-local-connectivity.mdx index 75e5801177a4b47..c3c1b8bad4a14a0 100644 --- a/src/content/docs/learning-paths/cybersafe/gateway-onboarding/gateway-verify-local-connectivity.mdx +++ b/src/content/docs/learning-paths/cybersafe/gateway-onboarding/gateway-verify-local-connectivity.mdx @@ -10,8 +10,12 @@ products: - cloudflare-one --- -import { Render } from "~/components" +import { Render } from "~/components"; To verify that your DNS traffic is sent to Gateway: - + diff --git a/src/content/docs/learning-paths/data-center-protection/advertise-prefixes.mdx b/src/content/docs/learning-paths/data-center-protection/advertise-prefixes.mdx index b47b3a80514a788..eb3666dd5133b61 100644 --- a/src/content/docs/learning-paths/data-center-protection/advertise-prefixes.mdx +++ b/src/content/docs/learning-paths/data-center-protection/advertise-prefixes.mdx @@ -11,4 +11,4 @@ products: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/learning-paths/data-center-protection/concepts/index.mdx b/src/content/docs/learning-paths/data-center-protection/concepts/index.mdx index 6d99098e5ffbd39..49959caa851cad4 100644 --- a/src/content/docs/learning-paths/data-center-protection/concepts/index.mdx +++ b/src/content/docs/learning-paths/data-center-protection/concepts/index.mdx @@ -14,6 +14,6 @@ Learn core concepts about Magic Transit and its functionality, in order to prote ## Objectives By the end of this module you will be able to: + - Understand what Magic Transit is - Why you should use it to protect your IP network - diff --git a/src/content/docs/learning-paths/data-center-protection/configure-ddos.mdx b/src/content/docs/learning-paths/data-center-protection/configure-ddos.mdx index 96178b835574113..a62c27d80ec53ce 100644 --- a/src/content/docs/learning-paths/data-center-protection/configure-ddos.mdx +++ b/src/content/docs/learning-paths/data-center-protection/configure-ddos.mdx @@ -9,7 +9,7 @@ products: - ddos-protection --- -import { Render } from "~/components" +import { Render } from "~/components"; Cloudflare DDoS protection automatically detects and mitigates Distributed Denial of Service (DDoS) attacks using its Autonomous Edge. Magic Transit customers have access to additional features, such as: @@ -26,7 +26,10 @@ Cloudflare DDoS protection automatically detects and mitigates Distributed Denia - + #### Setup @@ -36,8 +39,11 @@ Cloudflare DDoS protection automatically detects and mitigates Distributed Denia - + #### Setup - \ No newline at end of file + diff --git a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-routes.mdx b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-routes.mdx index 482c2b215ae173f..51c5f4f2f692123 100644 --- a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-routes.mdx +++ b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-routes.mdx @@ -9,7 +9,7 @@ products: - ddos-protection --- -import { Render } from "~/components" +import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-tunnels.mdx b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-tunnels.mdx index 4c93f4789229aab..bd53e3d65b54e92 100644 --- a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-tunnels.mdx +++ b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/configure-tunnels.mdx @@ -11,22 +11,31 @@ products: import { GlossaryTooltip, Render } from "~/components"; - \ No newline at end of file + unifiedRoutingURL: + "/magic-transit/reference/traffic-steering/#unified-routing-mode-beta", + troubleshootTunnelHealthURL: + "/magic-transit/troubleshooting/tunnel-health/", + troubleshootIpsecURL: "/magic-transit/troubleshooting/ipsec-troubleshoot/", + }} +/> diff --git a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/index.mdx b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/index.mdx index 6f1888d2fbbff7e..b98f8551ad40475 100644 --- a/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/index.mdx +++ b/src/content/docs/learning-paths/data-center-protection/configure-tunnels-routes/index.mdx @@ -14,6 +14,6 @@ In this unit you will learn how to set up tunnels and routes to steer traffic. ## Objectives By the end of this module you will be able to: + - Create tunnels on both the Cloudflare side and your router side to connect to your infrastructure. - Configure static routes or dynamic routes with BGP peering to steer your traffic via next-hop from Cloudflare's global network to your connected networks. - diff --git a/src/content/docs/learning-paths/data-center-protection/enable-notifications.mdx b/src/content/docs/learning-paths/data-center-protection/enable-notifications.mdx index 1efb22a01b5feef..40adf54d7baae5f 100644 --- a/src/content/docs/learning-paths/data-center-protection/enable-notifications.mdx +++ b/src/content/docs/learning-paths/data-center-protection/enable-notifications.mdx @@ -17,7 +17,8 @@ import { Render } from "~/components"; params={{ magicWord: "Magic Transit", productName: "Magic Transit", - magicTunnelHealthCheckCalculation: "/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts/", + magicTunnelHealthCheckCalculation: + "/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts/", networkAnalyticsPath: "/magic-transit/analytics/network-analytics/", healthChecks: "/magic-transit/reference/tunnel-health-checks/", }} @@ -32,4 +33,4 @@ Cloudflare also recommends that you enable the following account notifications f - (Optional) Advanced Layer 3/4 DDoS Attack Alert - (Optional) Cloudflare status - Maintenance Notification (in case you want to be alerted regarding maintenance in specific Cloudflare data centers). -Refer to [Cloudflare Notifications](/notifications/) for more information on how to enable these notifications. \ No newline at end of file +Refer to [Cloudflare Notifications](/notifications/) for more information on how to enable these notifications. diff --git a/src/content/docs/learning-paths/data-center-protection/get-started.mdx b/src/content/docs/learning-paths/data-center-protection/get-started.mdx index 58e23aba7e9451b..16b63ff273ced89 100644 --- a/src/content/docs/learning-paths/data-center-protection/get-started.mdx +++ b/src/content/docs/learning-paths/data-center-protection/get-started.mdx @@ -9,6 +9,10 @@ products: - ddos-protection --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/learning-paths/data-center-protection/run-pre-flight-checks.mdx b/src/content/docs/learning-paths/data-center-protection/run-pre-flight-checks.mdx index 7d6e4bdd8b5ba93..88f72d32072ad16 100644 --- a/src/content/docs/learning-paths/data-center-protection/run-pre-flight-checks.mdx +++ b/src/content/docs/learning-paths/data-center-protection/run-pre-flight-checks.mdx @@ -10,6 +10,7 @@ products: --- After setting up your Magic Transit product, Cloudflare validates: + - Tunnel connectivity - Tunnel and endpoint [health checks](/magic-transit/reference/tunnel-health-checks/#types-of-health-checks) - Letter of Agency (LOA) diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/index.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/index.mdx index 4b7ab7651839800..efe4d0f80aa7a93 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/index.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/index.mdx @@ -14,7 +14,7 @@ Migrating your DNS from an on-premises BIND solution to a cloud-based provider l By the end of this module, you will be able to: -* Plan and take inventory of your DNS migration. -* Prepare for the migration with minimal downtime. -* Learn how to make the actual switch to Cloudflare. -* Verify and stabilize after your migration. +- Plan and take inventory of your DNS migration. +- Prepare for the migration with minimal downtime. +- Learn how to make the actual switch to Cloudflare. +- Verify and stabilize after your migration. diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-1.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-1.mdx index 05eae75787849b0..ac9f126e6cfb046 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-1.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-1.mdx @@ -12,55 +12,55 @@ Detailed planning is the cornerstone of a successful DNS migration. ## 1. Understand your current BIND setup -1. Identify all DNS zones currently hosted on your BIND servers. -2. Review all DNS records within each zone. Remove stale or unnecessary records and verify the accuracy of existing records. -3. BIND views (split DNS): If you use BIND views to provide different DNS responses to internal versus external resolvers, Cloudflare authoritative DNS does not replicate per-client views directly. - - Continue to use an internal DNS resolver (for example, BIND, Active Directory, or another internal resolver) for internal-only names, while using Cloudflare authoritative DNS for public zones. +1. Identify all DNS zones currently hosted on your BIND servers. +2. Review all DNS records within each zone. Remove stale or unnecessary records and verify the accuracy of existing records. +3. BIND views (split DNS): If you use BIND views to provide different DNS responses to internal versus external resolvers, Cloudflare authoritative DNS does not replicate per-client views directly. + - Continue to use an internal DNS resolver (for example, BIND, Active Directory, or another internal resolver) for internal-only names, while using Cloudflare authoritative DNS for public zones. - For policy-based internal DNS, consider Cloudflare Zero Trust features such as DNS policies and Internal DNS (Beta). For more details, refer to [Cloudflare DNS](/dns/) and [Internal DNS](/dns/internal-dns/). -4. BIND ACLs (access control lists): If you use ACLs in BIND to restrict which clients can query your authoritative DNS or perform zone transfers, plan how these controls will change: - - **Authoritative DNS queries:** Cloudflare authoritative DNS nameservers are reachable on the public Internet and do not support per-resolver ACLs for standard DNS queries. - - **HTTP and application access:** To restrict or filter HTTP(S) traffic to your applications, use Cloudflare security features such as the [Web Application Firewall (WAF)](/waf/) and other Application Security products. These operate at the HTTP layer, not at the DNS query layer. - - Zone transfers (AXFR/IXFR): If you use AXFR/IXFR with BIND today, review Cloudflare’s zone transfer setups: - - [Cloudflare as primary DNS](/dns/zone-setups/zone-transfers/cloudflare-as-primary/) - - [Cloudflare as secondary DNS](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/) +4. BIND ACLs (access control lists): If you use ACLs in BIND to restrict which clients can query your authoritative DNS or perform zone transfers, plan how these controls will change: + - **Authoritative DNS queries:** Cloudflare authoritative DNS nameservers are reachable on the public Internet and do not support per-resolver ACLs for standard DNS queries. + - **HTTP and application access:** To restrict or filter HTTP(S) traffic to your applications, use Cloudflare security features such as the [Web Application Firewall (WAF)](/waf/) and other Application Security products. These operate at the HTTP layer, not at the DNS query layer. + - Zone transfers (AXFR/IXFR): If you use AXFR/IXFR with BIND today, review Cloudflare’s zone transfer setups: + - [Cloudflare as primary DNS](/dns/zone-setups/zone-transfers/cloudflare-as-primary/) + - [Cloudflare as secondary DNS](/dns/zone-setups/zone-transfers/cloudflare-as-secondary/) - These setups document how to restrict which IP addresses can perform zone transfers. + These setups document how to restrict which IP addresses can perform zone transfers. -5. Dependencies: Identify any applications or services critically dependent on specific DNS behaviors of your BIND setup. +5. Dependencies: Identify any applications or services critically dependent on specific DNS behaviors of your BIND setup. ## 2. Define scope and objectives -Clearly list all domain names to be migrated and define success criteria for the migration. +Clearly list all domain names to be migrated and define success criteria for the migration. ## 3. Cloudflare account and familiarization -1. [Create your Cloudflare account](/fundamentals/account/create-account/) if you have not already. -2. Familiarize yourself with the Cloudflare DNS dashboard and its features. +1. [Create your Cloudflare account](/fundamentals/account/create-account/) if you have not already. +2. Familiarize yourself with the Cloudflare DNS dashboard and its features. 3. Consider the different [DNS record types](/dns/manage-dns-records/reference/dns-record-types/) you can manage on Cloudflare and how they map from BIND. ## 4. DNSSEC strategy (critical) -Determine if DNSSEC is currently enabled for your zones on BIND and at your domain registrar. +Determine if DNSSEC is currently enabled for your zones on BIND and at your domain registrar. -Cloudflare supports two main migration approaches when DNSSEC is enabled: +Cloudflare supports two main migration approaches when DNSSEC is enabled: - - Option 1 (recommended for most migrations): [Disable DNSSEC at your registrar](/dns/dnssec/#disable-dnssec) before changing nameservers. After the migration to Cloudflare is complete and stable, re-enable DNSSEC through the Cloudflare dashboard. - - Option 2 (advanced): Perform an active migration using [multi-signer DNSSEC](/dns/dnssec/multi-signer-dnssec/setup/), where both providers sign the zone during the transition. This requires careful key management but allows you to migrate without disabling DNSSEC. For more information, refer to [Migrate an existing zone with DNSSEC enabled](/dns/dnssec/dnssec-active-migration/). +- Option 1 (recommended for most migrations): [Disable DNSSEC at your registrar](/dns/dnssec/#disable-dnssec) before changing nameservers. After the migration to Cloudflare is complete and stable, re-enable DNSSEC through the Cloudflare dashboard. +- Option 2 (advanced): Perform an active migration using [multi-signer DNSSEC](/dns/dnssec/multi-signer-dnssec/setup/), where both providers sign the zone during the transition. This requires careful key management but allows you to migrate without disabling DNSSEC. For more information, refer to [Migrate an existing zone with DNSSEC enabled](/dns/dnssec/dnssec-active-migration/). -**Disable-and-re-enable approach (safer for most teams):** +**Disable-and-re-enable approach (safer for most teams):** -1. Log in to your registrar and remove the DS records associated with your on-prem BIND DNSSEC keys for each domain. -2. Plan to switch nameservers only after resolvers are no longer expecting the old DNSSEC chain. +1. Log in to your registrar and remove the DS records associated with your on-prem BIND DNSSEC keys for each domain. +2. Plan to switch nameservers only after resolvers are no longer expecting the old DNSSEC chain. -*DS record TTL: If DNSSEC is active, note the Time To Live (TTL) of your DS records at the parent zone (managed by your registrar). This will determine how long you need to wait after removing DS records. As a rule of thumb, wait at least one full DS TTL and preferably up to 1.5 times the TTL before changing nameservers. +\*DS record TTL: If DNSSEC is active, note the Time To Live (TTL) of your DS records at the parent zone (managed by your registrar). This will determine how long you need to wait after removing DS records. As a rule of thumb, wait at least one full DS TTL and preferably up to 1.5 times the TTL before changing nameservers. For more information about DNSSEC on Cloudflare, refer to [DNSSEC](/dns/dnssec/). ## 5. Choose migration window -Select a period of low traffic and activity to minimize potential impact and inform stakeholders of the planned window. +Select a period of low traffic and activity to minimize potential impact and inform stakeholders of the planned window. ## 6. Develop communication and rollback plan -- Communication: Plan how to communicate with stakeholders before, during, and after the migration. -- Rollback Plan: Document steps to revert to your BIND servers if major issues arise. This primarily involves changing nameservers back at the registrar and potentially re-adding old DS records if DNSSEC was involved. \ No newline at end of file +- Communication: Plan how to communicate with stakeholders before, during, and after the migration. +- Rollback Plan: Document steps to revert to your BIND servers if major issues arise. This primarily involves changing nameservers back at the registrar and potentially re-adding old DS records if DNSSEC was involved. diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-2.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-2.mdx index f53af665ca87cfd..b3b2d045d7021ec 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-2.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-2.mdx @@ -14,49 +14,49 @@ Careful preparation will minimize downtime and issues during the cutover. ## 1. Reduce DNS record TTLs (Time To Live) -At least 24-48 hours (or longer, ideally matching your longest current TTLs) before your planned migration window, lower the TTLs for all critical records in your BIND zone files. A common short TTL for migration is 300 seconds (5 minutes). +At least 24-48 hours (or longer, ideally matching your longest current TTLs) before your planned migration window, lower the TTLs for all critical records in your BIND zone files. A common short TTL for migration is 300 seconds (5 minutes). -This ensures that DNS resolvers worldwide will cache your old records for a shorter period, allowing changes to propagate more quickly when you switch to Cloudflare. +This ensures that DNS resolvers worldwide will cache your old records for a shorter period, allowing changes to propagate more quickly when you switch to Cloudflare. -- SOA Record: Also consider lowering the `MINIMUM` field in your SOA record, which dictates the TTL to be used for negative responses ([RFC 2308](https://www.rfc-editor.org/rfc/rfc2308.html#section-4)). +- SOA Record: Also consider lowering the `MINIMUM` field in your SOA record, which dictates the TTL to be used for negative responses ([RFC 2308](https://www.rfc-editor.org/rfc/rfc2308.html#section-4)). ## 2. Export zone files from BIND -Obtain a clean and current export of your zone files from your BIND servers in standard BIND format and ensure these files are complete and accurate. +Obtain a clean and current export of your zone files from your BIND servers in standard BIND format and ensure these files are complete and accurate. ## 3. Add domains to Cloudflare -1. Log in to your Cloudflare dashboard. +1. Log in to your Cloudflare dashboard. -2. Add each domain you intend to migrate. Cloudflare will attempt to scan for existing DNS records. +2. Add each domain you intend to migrate. Cloudflare will attempt to scan for existing DNS records. ## 4. Import DNS Records into Cloudflare -Use Cloudflare's **Import and Export** feature (under **DNS** > **Records**) to upload your BIND zone files. - - +Use Cloudflare's **Import and Export** feature (under **DNS** > **Records**) to upload your BIND zone files. + + -- Verification (Crucial): - - After import, meticulously compare the records in Cloudflare with your BIND zone files or a `dig` output of your current zone. - - Pay close attention to `MX` records, `SRV` records, `TXT` records (especially for `SPF`, `DKIM`, `DMARC`), and any complex `CNAME` configurations. - - Ensure FQDNs (Fully Qualified Domain Names) are correctly formatted (Cloudflare usually handles the trailing dot correctly on import, but verify). -- Proxy status (orange vs grey cloud): - - For `A`, `AAAA`, and `CNAME` records that point to HTTP or HTTPS services you want to proxy through Cloudflare (for example, websites and APIs), you can enable the orange cloud to use Cloudflare CDN and security features. - - Some services and ports are not supported behind the proxy, and certain record types (for example, `MX` targets and many non-HTTP services) must remain **DNS only**. For a detailed list, refer to [Proxy status and limitations](/dns/proxy-status/limitations/). - - Recommendation for initial migration: To isolate the DNS migration from potential proxy-related issues, consider setting all records to **DNS only** (grey cloud) initially. After you confirm that DNS resolution is working correctly, enable the proxy (orange cloud) for specific HTTP(S) records and test again. +- Verification (Crucial): + - After import, meticulously compare the records in Cloudflare with your BIND zone files or a `dig` output of your current zone. + - Pay close attention to `MX` records, `SRV` records, `TXT` records (especially for `SPF`, `DKIM`, `DMARC`), and any complex `CNAME` configurations. + - Ensure FQDNs (Fully Qualified Domain Names) are correctly formatted (Cloudflare usually handles the trailing dot correctly on import, but verify). +- Proxy status (orange vs grey cloud): + - For `A`, `AAAA`, and `CNAME` records that point to HTTP or HTTPS services you want to proxy through Cloudflare (for example, websites and APIs), you can enable the orange cloud to use Cloudflare CDN and security features. + - Some services and ports are not supported behind the proxy, and certain record types (for example, `MX` targets and many non-HTTP services) must remain **DNS only**. For a detailed list, refer to [Proxy status and limitations](/dns/proxy-status/limitations/). + - Recommendation for initial migration: To isolate the DNS migration from potential proxy-related issues, consider setting all records to **DNS only** (grey cloud) initially. After you confirm that DNS resolution is working correctly, enable the proxy (orange cloud) for specific HTTP(S) records and test again. ## 5. DNSSEC preparation (if currently enabled) -Complete this step before you change your nameservers at the registrar. +Complete this step before you change your nameservers at the registrar. :::note -For more detailed guidance, refer to [DNSSEC](/dns/dnssec/). If during [Phase 1](/learning-paths/dns-best-practices/concepts/phase-1/#4-dnssec-strategy-critical) you have opted for a multi-signer DNSSEC strategy, refer to [Migrate an existing zone with DNSSEC enabled](/dns/dnssec/dnssec-active-migration/). +For more detailed guidance, refer to [DNSSEC](/dns/dnssec/). If during [Phase 1](/learning-paths/dns-best-practices/concepts/phase-1/#4-dnssec-strategy-critical) you have opted for a multi-signer DNSSEC strategy, refer to [Migrate an existing zone with DNSSEC enabled](/dns/dnssec/dnssec-active-migration/). ::: -- **Action at registrar:** Log in to your domain registrar and delete the existing DS records associated with your on-prem BIND DNSSEC keys for each domain. +- **Action at registrar:** Log in to your domain registrar and delete the existing DS records associated with your on-prem BIND DNSSEC keys for each domain. - **Wait for DS TTL:** Wait at least the full DS record TTL published at the parent zone, and preferably up to 1.5 times that TTL, before you change nameservers. This ensures that validating resolvers stop expecting the old DNSSEC chain. The typical TTL duration for DS records is set to +24 hours (86,400 seconds). -- **Impact of incorrect timing:** If you change nameservers while resolvers still expect the old DS record, DNSSEC validation will fail and your domain may become unreachable for validating resolvers. +- **Impact of incorrect timing:** If you change nameservers while resolvers still expect the old DS record, DNSSEC validation will fail and your domain may become unreachable for validating resolvers. diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-3.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-3.mdx index 7307e676b28660a..1decb20de5cda62 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-3.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-3.mdx @@ -12,30 +12,29 @@ Phase 3 is when you make the actual switch to Cloudflare. ## 1. Final verification -Complete one last check of all DNS records in your Cloudflare dashboard for accuracy and ensure your BIND servers are still operational as a fallback if needed. +Complete one last check of all DNS records in your Cloudflare dashboard for accuracy and ensure your BIND servers are still operational as a fallback if needed. ## 2. Update nameservers at your registrar - 1. Log in to your domain registrar's control panel for each domain. - 2. Navigate to the section for managing nameservers. - 3. Replace your current on-prem BIND nameserver entries with your Cloudflare nameservers. - 4. Add the Cloudflare nameservers assigned to your domain (Cloudflare will provide at least two). - 5. Save the changes. +1. Log in to your domain registrar's control panel for each domain. +2. Navigate to the section for managing nameservers. +3. Replace your current on-prem BIND nameserver entries with your Cloudflare nameservers. +4. Add the Cloudflare nameservers assigned to your domain (Cloudflare will provide at least two). +5. Save the changes. ## 3. Monitor propagation -- DNS nameserver changes can take time to propagate globally, typically anywhere from a few minutes to 48 hours (though often much faster due to lowered TTLs). -- Use the commands exemplified below, replacing `yourdomain.com` by your actual domain. - - `dig yourdomain.com NS @8.8.8.8` (query Google's DNS) - - `dig yourdomain.com NS @1.1.1.1` (query Cloudflare's DNS) - - `whois yourdomain.com` - - `dig yourdomain.com @tld.nameserver.com` (`tld.nameserver.com` is the nameserver of your domain's TLD. You can find this information by querying it as `dig com ns +short` where `.com` is the example.) - - You are looking for the Cloudflare nameservers to be reported consistently. +- DNS nameserver changes can take time to propagate globally, typically anywhere from a few minutes to 48 hours (though often much faster due to lowered TTLs). +- Use the commands exemplified below, replacing `yourdomain.com` by your actual domain. + - `dig yourdomain.com NS @8.8.8.8` (query Google's DNS) + - `dig yourdomain.com NS @1.1.1.1` (query Cloudflare's DNS) + - `whois yourdomain.com` + - `dig yourdomain.com @tld.nameserver.com` (`tld.nameserver.com` is the nameserver of your domain's TLD. You can find this information by querying it as `dig com ns +short` where `.com` is the example.) + You are looking for the Cloudflare nameservers to be reported consistently. ## 4. Initial testing Once propagation appears to be widespread, perform basic resolution tests for critical records (for example, your website's `A` record and any `MX` records, if you had them set up). -- `dig yourdomain.com A +short` -- `dig yourdomain.com MX +short` \ No newline at end of file +- `dig yourdomain.com A +short` +- `dig yourdomain.com MX +short` diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-4.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-4.mdx index e1f0d1f96eb1bac..e08e73b597e57b0 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/phase-4.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/phase-4.mdx @@ -14,47 +14,49 @@ After the cutover, verify and stabilize. ## 1. Thorough testing and validation -1. Test all services that rely on DNS: websites, email (sending and receiving), VPNs, APIs, etc. -2. Test from different networks and geographical locations if possible. -3. Monitor application logs for any DNS-related errors. +1. Test all services that rely on DNS: websites, email (sending and receiving), VPNs, APIs, etc. +2. Test from different networks and geographical locations if possible. +3. Monitor application logs for any DNS-related errors. ## 2. Enable DNSSEC in Cloudflare (if disabled earlier) Enable DNSSEC only after you are confident that DNS is resolving correctly through Cloudflare and that nameserver changes have fully propagated. In practice, plan for at least one full DS TTL after you add new DS records at the registrar. -**Action in Cloudflare:** - 1. In the Cloudflare dashboard, go to your zone's **DNS Settings**. +**Action in Cloudflare:** - +1. In the Cloudflare dashboard, go to your zone's **DNS Settings**. - 2. Select **Enable DNSSEC**. Cloudflare will sign your zone and generate `DNSKEY` and `DS` record details. - -**Action at registrar:** - 1. Log in to your domain registrar. - 2. Navigate to the DNSSEC management section for your domain. - 3. Add the `DS` record details provided by Cloudflare. + + +2. Select **Enable DNSSEC**. Cloudflare will sign your zone and generate `DNSKEY` and `DS` record details. + +**Action at registrar:** + +1. Log in to your domain registrar. +2. Navigate to the DNSSEC management section for your domain. +3. Add the `DS` record details provided by Cloudflare. After adding the `DS` record, allow time for propagation and then validate your configuration with tools such as [DNSViz](https://dnsviz.net) or [Verisign's DNSSEC debugger](https://dnssec-debugger.verisignlabs.com/). For more information, refer to [DNSSEC](/dns/dnssec/). - :::note - If your domain uses Cloudflare Registrar, some DNSSEC steps can be simplified or automated. Refer to [Enable DNSSEC with Cloudflare Registrar](/registrar/get-started/enable-dnssec/) for registrar-specific instructions. - ::: +:::note +If your domain uses Cloudflare Registrar, some DNSSEC steps can be simplified or automated. Refer to [Enable DNSSEC with Cloudflare Registrar](/registrar/get-started/enable-dnssec/) for registrar-specific instructions. +::: ## 3. Adjust TTLs in Cloudflare -After the migration is stable and DNSSEC is active (if used), increase the TTLs for your DNS records from the short values used during the migration to more standard values (for example, 3600 seconds for frequently changing records or 86400 seconds for very stable records). +After the migration is stable and DNSSEC is active (if used), increase the TTLs for your DNS records from the short values used during the migration to more standard values (for example, 3600 seconds for frequently changing records or 86400 seconds for very stable records). Higher TTLs improve resolver cache efficiency and can reduce latency by allowing recursive resolvers to reuse cached answers for longer, at the cost of slower propagation when you make changes. ## 4. Review and enable Cloudflare proxy features -If you initially set records to **DNS Only** (grey cloud), now is a good time to enable Cloudflare's proxy (orange cloud) for HTTP/S records (`A`, `AAAA`, `CNAME`) to leverage [CDN](/cache/), [WAF](/waf/), and other security and performance features. Test thoroughly after enabling proxying. +If you initially set records to **DNS Only** (grey cloud), now is a good time to enable Cloudflare's proxy (orange cloud) for HTTP/S records (`A`, `AAAA`, `CNAME`) to leverage [CDN](/cache/), [WAF](/waf/), and other security and performance features. Test thoroughly after enabling proxying. ## 5. Decommission On-Prem BIND servers Only after a significant stabilization period (for example, several days to a week after full propagation and successful testing) and when you are fully confident in the Cloudflare setup, decommission the on-premise BIND servers. -Ensure no resolvers are still pointing to the old BIND servers. This is especially important for internal resolvers, if they were not addressed separately. +Ensure no resolvers are still pointing to the old BIND servers. This is especially important for internal resolvers, if they were not addressed separately. ## 6. Update internal documentation and monitoring diff --git a/src/content/docs/learning-paths/dns-best-practices/concepts/summary-considerations.mdx b/src/content/docs/learning-paths/dns-best-practices/concepts/summary-considerations.mdx index 8e23617d11caed2..5d966db6e4f2e51 100644 --- a/src/content/docs/learning-paths/dns-best-practices/concepts/summary-considerations.mdx +++ b/src/content/docs/learning-paths/dns-best-practices/concepts/summary-considerations.mdx @@ -8,15 +8,15 @@ products: - dns --- -- Plan meticulously: Do not rush the planning and preparation phases. -- Communicate clearly: Keep stakeholders informed. -- Lower TTLs in advance: This is crucial for a faster cutover. -- Disable DNSSEC before NS change (safest): Remove DS records at the registrar well before changing nameservers, then re-enable DNSSEC via Cloudflare. -- Verify, verify, verify: Double-check record imports and functionality at each stage. -- Test thoroughly: From multiple locations and for all critical services. -- Have a rollback plan: Know how to revert if necessary. -- Migrate during low traffic: Minimize potential user impact. -- Address BIND Views/ACLs: Understand how Cloudflare will handle or replace this functionality. +- Plan meticulously: Do not rush the planning and preparation phases. +- Communicate clearly: Keep stakeholders informed. +- Lower TTLs in advance: This is crucial for a faster cutover. +- Disable DNSSEC before NS change (safest): Remove DS records at the registrar well before changing nameservers, then re-enable DNSSEC via Cloudflare. +- Verify, verify, verify: Double-check record imports and functionality at each stage. +- Test thoroughly: From multiple locations and for all critical services. +- Have a rollback plan: Know how to revert if necessary. +- Migrate during low traffic: Minimize potential user impact. +- Address BIND Views/ACLs: Understand how Cloudflare will handle or replace this functionality. - Take advantage of Cloudflare features: Once stable, explore and implement Cloudflare's security and performance enhancements. -By following these best practices, you can significantly increase the likelihood of a smooth and successful migration from your on-prem BIND DNS to Cloudflare. \ No newline at end of file +By following these best practices, you can significantly increase the likelihood of a smooth and successful migration from your on-prem BIND DNS to Cloudflare. diff --git a/src/content/docs/learning-paths/holistic-ai-security/appendix/index.mdx b/src/content/docs/learning-paths/holistic-ai-security/appendix/index.mdx index 13c9e675861f17d..a1bed2340a8f735 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/appendix/index.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/appendix/index.mdx @@ -12,4 +12,3 @@ products: - dlp - casb --- - diff --git a/src/content/docs/learning-paths/holistic-ai-security/concepts/index.mdx b/src/content/docs/learning-paths/holistic-ai-security/concepts/index.mdx index 4f342e9997e31ea..776126418ebd729 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/concepts/index.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/concepts/index.mdx @@ -20,4 +20,3 @@ The goal of this learning path is to provide Cloudflare One users with the strat - Monitor AI usage: Utilize Cloudflare One's tools, such as the Shadow IT dashboard and API CASB integrations, to gain visibility into both sanctioned and unsanctioned AI application usage. - Build security policies: Create granular security policies using Cloudflare Gateway to control AI usage, prevent data loss with DLP, and manage user behavior through actions like blocking or redirecting. - Secure sanctioned models: Apply Zero Trust principles to sanctioned AI models and internal services like Model Context Protocol (MCP) servers to ensure secure access and protect sensitive data from being exposed. - diff --git a/src/content/docs/learning-paths/holistic-ai-security/concepts/mcp.mdx b/src/content/docs/learning-paths/holistic-ai-security/concepts/mcp.mdx index c8811b8737b69c2..29330ef6e90787c 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/concepts/mcp.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/concepts/mcp.mdx @@ -22,4 +22,3 @@ MCP uses a client-server architecture where an AI agent acts as the client and s ## What are the security concerns with MCP? MCP doesn't have native authentication, authorization, or encryption. Because it functions similarly to an API, many of the same security considerations apply. If developers do not proactively implement security measures like Transport Layer Security (TLS) and rate limiting, MCP servers can be vulnerable to attacks, data leaks, and unauthorized access. Organizations must ensure that they validate inputs and protect confidential data to secure their MCP implementations. - diff --git a/src/content/docs/learning-paths/holistic-ai-security/concepts/shadow-ai.mdx b/src/content/docs/learning-paths/holistic-ai-security/concepts/shadow-ai.mdx index 1d18a0ebba41b16..97b3651ba7daa5d 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/concepts/shadow-ai.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/concepts/shadow-ai.mdx @@ -18,4 +18,3 @@ Shadow AI is the use of any AI tool or application by employees without the form Since it may not be feasible to eliminate all instances of shadow AI, organizations can manage the risks by taking a balanced approach. First, it is essential to foster collaboration and open communication between IT and other departments to understand why employees are using these tools. Next, implement guardrails by developing a flexible governance framework with clear guidelines on which types of AI systems can be used and how sensitive information should be handled. Finally, monitor AI usage with network tools to track what is being used and educate employees on the risks of unauthorized AI. To combat the risks associated with shadow AI, Cloudflare's API-driven CASB integrates with SaaS applications and cloud environments to scan for misconfigurations, unauthorized user activity, shadow IT, and other data security issues that can occur after a user has successfully logged in. - diff --git a/src/content/docs/learning-paths/holistic-ai-security/get-started/additional-setup.mdx b/src/content/docs/learning-paths/holistic-ai-security/get-started/additional-setup.mdx index f98c47c842d9d81..2f4c30d5cb527a1 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/get-started/additional-setup.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/get-started/additional-setup.mdx @@ -16,4 +16,4 @@ To use the recommended AI security solutions in this learning path, you will nee :::note If you are new to securing your Internet traffic, refer to [Secure your Internet traffic and SaaS apps](/learning-paths/secure-internet-traffic/concepts/) to get started and then return to this learning path to continue securing your organizations. -::: \ No newline at end of file +::: diff --git a/src/content/docs/learning-paths/holistic-ai-security/get-started/define-ai-risk-tolerance.mdx b/src/content/docs/learning-paths/holistic-ai-security/get-started/define-ai-risk-tolerance.mdx index 67b07408d9070cd..7b68b9d51991f49 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/get-started/define-ai-risk-tolerance.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/get-started/define-ai-risk-tolerance.mdx @@ -17,6 +17,7 @@ Before you can secure AI, you need to understand your organization's goals and c The level of risk you are willing to accept will determine how quickly you need to act and how deeply you need to implement security measures. Your specific concerns will then guide the exact security approaches you take to monitor and control AI usage. To begin, consider these questions to help shape your strategy: + - Sanctioned versus shadow AI: Are your employees already using approved AI services, or are you primarily concerned with shadow AI — unapproved applications that may pose a risk? Note: Some approved vendors may offer embedded AI functionality. Consider whether those AI services are a risk, too. - Data sensitivity: What types of sensitive data do you currently monitor, classify, and protect? This will help you identify what you need to safeguard when employees interact with AI. If you have not determined this yet, refer to [Define your sensitive data](/learning-paths/secure-internet-traffic/build-http-policies/data-loss-prevention/#define-your-sensitive-data) to learn more. - Encouraging user behavior: Do you want to encourage or limit user engagement with AI? How much do you expect your employees to use AI in a controlled, sanctioned way? diff --git a/src/content/docs/learning-paths/holistic-ai-security/get-started/index.mdx b/src/content/docs/learning-paths/holistic-ai-security/get-started/index.mdx index b5caf20d92a283f..d466618622bbdb9 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/get-started/index.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/get-started/index.mdx @@ -16,4 +16,4 @@ Businesses are eager to realize the potential boosts to productivity and efficie IT and security leaders are often asked to address risks and deal with increasing challenges like the use of shadow AI before they have an AI security strategy. -Cloudflare One offers a diverse, comprehensive set of solutions to secure your applications, workforce, and data from emerging generative AI threats. This learning path will provide a path to securely adopt AI use cases within your organization. It includes recommendations and strategies to monitor AI usage, protect against shadow AI, safeguard your sensitive data, and manage Model Context Protocol (MCP) servers effectively. +Cloudflare One offers a diverse, comprehensive set of solutions to secure your applications, workforce, and data from emerging generative AI threats. This learning path will provide a path to securely adopt AI use cases within your organization. It includes recommendations and strategies to monitor AI usage, protect against shadow AI, safeguard your sensitive data, and manage Model Context Protocol (MCP) servers effectively. diff --git a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/index.mdx b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/index.mdx index 48c3654da15b283..5edae280f6bbf30 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/index.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/index.mdx @@ -17,4 +17,3 @@ Monitoring AI usage is one of the first steps in assessing holistic risk. Cloudf After you begin to understand your organization's AI usage, you should develop a balanced perspective on what constitutes sanctioned use of a tool. A good practice is to review applications in phases and then apply security policies based on those phases. For example, you can apply different security policies to applications that are considered approved, unapproved, unreviewed, or in review until they pass your corporate security standards and data privacy reviews. This section will detail options for assessing and understanding that risk by using inline (client) and out-of-band (API CASB) based methods. - diff --git a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/monitor-prompts-responses.mdx b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/monitor-prompts-responses.mdx index 38cfd98df28c2ac..18a65bd00076557 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/monitor-prompts-responses.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/monitor-prompts-responses.mdx @@ -13,10 +13,11 @@ products: --- When you enable [TLS decryption](/cloudflare-one/traffic-policies/http-policies/tls-decryption/#turn-on-tls-decryption), you can review the prompts and responses for supported AI applications. This allows you to understand three key things about AI application usage: + - The sanctioned and unsanctioned AI tools your users are engaging with. - How they are interacting with them. - What information they are sharing. ![Log entry for a prompt detected using AI prompt protection.](~/assets/images/learning-paths/holistic-ai-security/gateway-prompt-log.png) -You can use this in conjunction with [DLP profiles](/cloudflare-one/data-loss-prevention/dlp-profiles/) to detect sensitive data potentially being used in prompts, with or without explicitly blocking the action. You can use DLP to log AI prompt topics by turning on [Capture generative AI prompt content in logs](/cloudflare-one/data-loss-prevention/dlp-policies/logging-options/#turn-on-ai-prompt-content-logging-for-a-dlp-policy) for the policy. \ No newline at end of file +You can use this in conjunction with [DLP profiles](/cloudflare-one/data-loss-prevention/dlp-profiles/) to detect sensitive data potentially being used in prompts, with or without explicitly blocking the action. You can use DLP to log AI prompt topics by turning on [Capture generative AI prompt content in logs](/cloudflare-one/data-loss-prevention/dlp-policies/logging-options/#turn-on-ai-prompt-content-logging-for-a-dlp-policy) for the policy. diff --git a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/review-inline-ai-use.mdx b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/review-inline-ai-use.mdx index c60e183df9211b9..aacf8456e79fe1c 100644 --- a/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/review-inline-ai-use.mdx +++ b/src/content/docs/learning-paths/holistic-ai-security/monitor-ai-use/review-inline-ai-use.mdx @@ -20,7 +20,6 @@ To review how your organization uses AI apps, start with the Cloudflare [Shadow ![Shadow IT dashboard showing utilization of application statuses (Approved, Unapproved, In Review, Unreviewed).](~/assets/images/learning-paths/holistic-ai-security/shadowit-dashboard-ai-apps.png) -This approach is most relevant for applications that your organization has not yet sanctioned. For example, if your business uses Google Workspace and its primary AI tool is Gemini, you would likely mark Gemini as *Approved*. While you can configure more specific data loss policies later, you can also target approved applications with greater specificity to detect risks unique to your organization. +This approach is most relevant for applications that your organization has not yet sanctioned. For example, if your business uses Google Workspace and its primary AI tool is Gemini, you would likely mark Gemini as _Approved_. While you can configure more specific data loss policies later, you can also target approved applications with greater specificity to detect risks unique to your organization. ![The App Library filtered to show some of the supported Artificial Intelligence applications.](~/assets/images/learning-paths/holistic-ai-security/ai-app-type-app-library.png) - diff --git a/src/content/docs/learning-paths/load-balancing/concepts/health-checks.mdx b/src/content/docs/learning-paths/load-balancing/concepts/health-checks.mdx index 9d1796cbc8e77a5..da4bbe2960c586f 100644 --- a/src/content/docs/learning-paths/load-balancing/concepts/health-checks.mdx +++ b/src/content/docs/learning-paths/load-balancing/concepts/health-checks.mdx @@ -8,7 +8,7 @@ products: - load-balancing --- -import { GlossaryDefinition, Render } from "~/components" +import { GlossaryDefinition, Render } from "~/components"; There's more to a load balancer than just distributing traffic, however. diff --git a/src/content/docs/learning-paths/load-balancing/concepts/index.mdx b/src/content/docs/learning-paths/load-balancing/concepts/index.mdx index 2a58f062dc5eeeb..7369a7445edbd8d 100644 --- a/src/content/docs/learning-paths/load-balancing/concepts/index.mdx +++ b/src/content/docs/learning-paths/load-balancing/concepts/index.mdx @@ -14,7 +14,7 @@ Learn the concepts behind load balancing, whether you are using Cloudflare or an By the end of this module, you will be able to: -* Explain what load balancing is. -* Describe the differences between load balancers, pools, and servers. -* Explain what pool health is and how it affects load balancer traffic. -* List the different ways your traffic can be routed. +- Explain what load balancing is. +- Describe the differences between load balancers, pools, and servers. +- Explain what pool health is and how it affects load balancer traffic. +- List the different ways your traffic can be routed. diff --git a/src/content/docs/learning-paths/load-balancing/concepts/load-balancer-components.mdx b/src/content/docs/learning-paths/load-balancing/concepts/load-balancer-components.mdx index 7dd7ff6d269783a..e132195e0f7fb3a 100644 --- a/src/content/docs/learning-paths/load-balancing/concepts/load-balancer-components.mdx +++ b/src/content/docs/learning-paths/load-balancing/concepts/load-balancer-components.mdx @@ -8,13 +8,13 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; At it's most basic, load balancing is made up of three components: -* **Pools**: Which contain one or more endpoints. -* **Endpoints**: Which respond to individual requests. -* **A load balancer**: Which decides which traffic goes to each pool. +- **Pools**: Which contain one or more endpoints. +- **Endpoints**: Which respond to individual requests. +- **A load balancer**: Which decides which traffic goes to each pool. ## How it works @@ -22,7 +22,7 @@ Normally, requests to your application would go to individual servers directly. With a load balancer, requests first go through the load balancer. Your load balancer then routes requests to specific pools. -
    +
    Within each pool, requests then go to individual endpoints. And that endpoint is what responds to the request. @@ -37,6 +37,6 @@ Within each pool, requests then go to individual endpoints. And that endpoint is end ``` -
    +
    This progression of load balancer --> pool --> endpoint is the core part of how a load balancer works. diff --git a/src/content/docs/learning-paths/load-balancing/concepts/routing.mdx b/src/content/docs/learning-paths/load-balancing/concepts/routing.mdx index b5cf54d4113227f..d8019a91c1cf983 100644 --- a/src/content/docs/learning-paths/load-balancing/concepts/routing.mdx +++ b/src/content/docs/learning-paths/load-balancing/concepts/routing.mdx @@ -8,11 +8,11 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; Before, we covered how requests move from load balancers to pools and then from pools to individual servers. -What we did not mention, however, was *how* the load balancer and pools make those decisions. +What we did not mention, however, was _how_ the load balancer and pools make those decisions. This is a concept known as routing. @@ -60,5 +60,5 @@ Often, load balancers have a special pool known as the **Fallback Pool**, which Finally, specific settings can also affect the ways a load balancer distributes traffic, such as: -* Routing based on [specific aspects](/load-balancing/additional-options/load-balancing-rules/) of the request. -* Sending all requests from a [specific end user](/load-balancing/understand-basics/session-affinity/) to the same server, preserving information about their user session like items in a shopping cart. +- Routing based on [specific aspects](/load-balancing/additional-options/load-balancing-rules/) of the request. +- Sending all requests from a [specific end user](/load-balancing/understand-basics/session-affinity/) to the same server, preserving information about their user session like items in a shopping cart. diff --git a/src/content/docs/learning-paths/load-balancing/planning/custom-rules.mdx b/src/content/docs/learning-paths/load-balancing/planning/custom-rules.mdx index 6337e5cf7172cd6..cc8e287532908ff 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/custom-rules.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/custom-rules.mdx @@ -8,7 +8,7 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/load-balancing/planning/index.mdx b/src/content/docs/learning-paths/load-balancing/planning/index.mdx index eeee73027d3ca18..370f197fbab2a2d 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/index.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/index.mdx @@ -14,7 +14,7 @@ Explore the configuration choices available for your Cloudflare load balancer. By the end of this module, you will be able to: -* Describe the difference between load balancing at different layers of the network stack. -* Identify when a load balancer should utilize session affinity. -* Describe the different policies for endpoint steering and traffic steering. -* List the different options available to monitor server health. +- Describe the difference between load balancing at different layers of the network stack. +- Identify when a load balancer should utilize session affinity. +- Describe the different policies for endpoint steering and traffic steering. +- List the different options available to monitor server health. diff --git a/src/content/docs/learning-paths/load-balancing/planning/multiple-zones.mdx b/src/content/docs/learning-paths/load-balancing/planning/multiple-zones.mdx index 34aa1d6847c2ece..820f34fada45575 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/multiple-zones.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/multiple-zones.mdx @@ -20,10 +20,8 @@ If you want to share a load balancing configuration across multiple hostnames, y :::note - You could also achieve the same goal or create more advanced routing decisions by setting up DNS Overrides within [Origin Rules](/rules/origin-rules/) on each hostname that override the hostname to `lb.example.com`. - ::: ## Unique configurations diff --git a/src/content/docs/learning-paths/load-balancing/planning/origin-steering-policies.mdx b/src/content/docs/learning-paths/load-balancing/planning/origin-steering-policies.mdx index d03dbb9b4796bd1..b430e5865cbd6a6 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/origin-steering-policies.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/origin-steering-policies.mdx @@ -8,17 +8,17 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; -*** +--- ## Policies -*** +--- ## Weights diff --git a/src/content/docs/learning-paths/load-balancing/planning/session-affinity.mdx b/src/content/docs/learning-paths/load-balancing/planning/session-affinity.mdx index dd99e87ee3c3d01..70a7b3e021585fc 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/session-affinity.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/session-affinity.mdx @@ -8,7 +8,7 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/load-balancing/planning/traffic-steering.mdx b/src/content/docs/learning-paths/load-balancing/planning/traffic-steering.mdx index 9ced34523117fe9..3b370b1ed392b31 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/traffic-steering.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/traffic-steering.mdx @@ -8,8 +8,8 @@ products: - load-balancing --- -import { DirectoryListing, Render } from "~/components" +import { DirectoryListing, Render } from "~/components"; -
    +
    diff --git a/src/content/docs/learning-paths/load-balancing/planning/types-load-balancers.mdx b/src/content/docs/learning-paths/load-balancing/planning/types-load-balancers.mdx index a1fbbb640bf00cb..1b2a9ce5c84006d 100644 --- a/src/content/docs/learning-paths/load-balancing/planning/types-load-balancers.mdx +++ b/src/content/docs/learning-paths/load-balancing/planning/types-load-balancers.mdx @@ -8,15 +8,15 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; With Cloudflare, you can choose between three types of load balancers: -* [Layer 7 (HTTP/HTTPS)](#layer-7-load-balancing) (most common) -* [DNS-only](#dns-only-load-balancing) -* [Layer 4 (TCP)](#layer-4-load-balancing) +- [Layer 7 (HTTP/HTTPS)](#layer-7-load-balancing) (most common) +- [DNS-only](#dns-only-load-balancing) +- [Layer 4 (TCP)](#layer-4-load-balancing) -*** +--- ## Layer 7 load balancing @@ -26,7 +26,7 @@ With Cloudflare, you can choose between three types of load balancers: -*** +--- ## DNS-only load balancing @@ -34,13 +34,13 @@ With Cloudflare, you can choose between three types of load balancers: ### Benefits -
    +
    ### Limitations -*** +--- ## Layer 4 load balancing diff --git a/src/content/docs/learning-paths/load-balancing/setup/check-pool-health.mdx b/src/content/docs/learning-paths/load-balancing/setup/check-pool-health.mdx index e44453449357179..a34dcbf56c1a141 100644 --- a/src/content/docs/learning-paths/load-balancing/setup/check-pool-health.mdx +++ b/src/content/docs/learning-paths/load-balancing/setup/check-pool-health.mdx @@ -8,7 +8,7 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/load-balancing/setup/hostname-preparation.mdx b/src/content/docs/learning-paths/load-balancing/setup/hostname-preparation.mdx index f963bd4a1cc3aee..54cf2a41d9f5d89 100644 --- a/src/content/docs/learning-paths/load-balancing/setup/hostname-preparation.mdx +++ b/src/content/docs/learning-paths/load-balancing/setup/hostname-preparation.mdx @@ -10,8 +10,8 @@ products: Before setting up anything related to your load balancer, make sure you test that production hostnames meet the following criteria: -* Based on the [priority order](/load-balancing/load-balancers/dns-records/#priority-order) of DNS records, they will receive the intended amount of traffic. -* Each hostname is covered by an [SSL/TLS certificate](/load-balancing/load-balancers/dns-records/#ssltls-coverage). +- Based on the [priority order](/load-balancing/load-balancers/dns-records/#priority-order) of DNS records, they will receive the intended amount of traffic. +- Each hostname is covered by an [SSL/TLS certificate](/load-balancing/load-balancers/dns-records/#ssltls-coverage). After confirming each of these conditions are met, you can proceed with setting up your load balancer. @@ -19,5 +19,5 @@ After confirming each of these conditions are met, you can proceed with setting Depending on your preferences and infrastructure, you might route traffic to your load balancer in different ways: -* For most customers, it's simpler to create the load balancer on the hostname directly (`www.example.com`). -* However, you could also create the load balancer on another hostname (`lb.example.com`) and then route traffic using a `CNAME` record on `test.example.com` that points to `lb.example.com`. +- For most customers, it's simpler to create the load balancer on the hostname directly (`www.example.com`). +- However, you could also create the load balancer on another hostname (`lb.example.com`) and then route traffic using a `CNAME` record on `test.example.com` that points to `lb.example.com`. diff --git a/src/content/docs/learning-paths/load-balancing/setup/index.mdx b/src/content/docs/learning-paths/load-balancing/setup/index.mdx index 20b76253146a2fe..2f7ceb3e5cd7744 100644 --- a/src/content/docs/learning-paths/load-balancing/setup/index.mdx +++ b/src/content/docs/learning-paths/load-balancing/setup/index.mdx @@ -14,13 +14,13 @@ Create a load balancer that monitors endpoint health and intelligently routes tr By the end of this module, you will be able to: -* Configure a monitor and health checks. -* Create a pool. -* Create a load balancer. -* Analyze traffic patterns. +- Configure a monitor and health checks. +- Create a pool. +- Create a load balancer. +- Analyze traffic patterns. ## Prerequisites -* Multiple endpoints, either physical or cloud-based. -* Access to Load Balancing, available as an [add-on](/load-balancing/get-started/enable-load-balancing/) for any type of account. -* Two hostnames, one for test traffic and the other for production traffic. +- Multiple endpoints, either physical or cloud-based. +- Access to Load Balancing, available as an [add-on](/load-balancing/get-started/enable-load-balancing/) for any type of account. +- Two hostnames, one for test traffic and the other for production traffic. diff --git a/src/content/docs/learning-paths/load-balancing/setup/next-steps.mdx b/src/content/docs/learning-paths/load-balancing/setup/next-steps.mdx index 7dea7a8b054a166..5cb5b8556548c35 100644 --- a/src/content/docs/learning-paths/load-balancing/setup/next-steps.mdx +++ b/src/content/docs/learning-paths/load-balancing/setup/next-steps.mdx @@ -8,7 +8,7 @@ products: - load-balancing --- -import { DirectoryListing, Render } from "~/components" +import { DirectoryListing, Render } from "~/components"; Your load balancer should be receiving production traffic (and you can confirm this by reviewing the [analytics](/load-balancing/reference/load-balancing-analytics/)). diff --git a/src/content/docs/learning-paths/load-balancing/setup/production-traffic.mdx b/src/content/docs/learning-paths/load-balancing/setup/production-traffic.mdx index f2dda24cae894f0..5f6e8812e2b018b 100644 --- a/src/content/docs/learning-paths/load-balancing/setup/production-traffic.mdx +++ b/src/content/docs/learning-paths/load-balancing/setup/production-traffic.mdx @@ -8,6 +8,6 @@ products: - load-balancing --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/mtls/concepts/mtls-cloudflare.mdx b/src/content/docs/learning-paths/mtls/concepts/mtls-cloudflare.mdx index 158ed1dbb6f5b89..a9014dbe620e151 100644 --- a/src/content/docs/learning-paths/mtls/concepts/mtls-cloudflare.mdx +++ b/src/content/docs/learning-paths/mtls/concepts/mtls-cloudflare.mdx @@ -20,10 +20,10 @@ Some common mTLS use cases are: There are two main ways to use mTLS at Cloudflare, either by using the Application Security offering (optionally including [API Shield](/api-shield/)) or [Cloudflare Access](/cloudflare-one/access-controls/policies/). Below is a non-exhaustive overview table of their differences: -| Feature | Application Security (Client Certificate \+ WAF) | Cloudflare Access (mTLS) | -| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Mainly used for | External Authentication (that is, APIs) | Internal Authentication (that is, employees) | -| Availability | By default, 100 Client Certificates per Zone are included for free. For more certificates or [API Shield features](/api-shield/), contact your account team. | Zero Trust Enterprise only feature. | -| [Certificate Authority (CA)](/ssl/concepts/#certificate-authority-ca) | Cloudflare-managed or customer-uploaded (BYO CA). There's a soft-limit of up to [five customer-uploaded CAs](/ssl/client-certificates/byo-ca/#availability). | Customer-uploaded only (BYO CA). There's a soft-limit of up to [50 CAs](/cloudflare-one/account-limits/#access). | +| Feature | Application Security (Client Certificate \+ WAF) | Cloudflare Access (mTLS) | +| :-------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Mainly used for | External Authentication (that is, APIs) | Internal Authentication (that is, employees) | +| Availability | By default, 100 Client Certificates per Zone are included for free. For more certificates or [API Shield features](/api-shield/), contact your account team. | Zero Trust Enterprise only feature. | +| [Certificate Authority (CA)](/ssl/concepts/#certificate-authority-ca) | Cloudflare-managed or customer-uploaded (BYO CA). There's a soft-limit of up to [five customer-uploaded CAs](/ssl/client-certificates/byo-ca/#availability). | Customer-uploaded only (BYO CA). There's a soft-limit of up to [50 CAs](/cloudflare-one/account-limits/#access). | | Client Certificate Details | Forwarded to the origin server via [Cloudflare API](/ssl/client-certificates/forward-a-client-certificate/#cloudflare-api), [Cloudflare Workers](/ssl/client-certificates/forward-a-client-certificate/#cloudflare-workers), and [Managed Transforms](/ssl/client-certificates/forward-a-client-certificate/#managed-transforms). | Forwarded to the origin server via [Cloudflare API](/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/#cloudflare-api), [Cloudflare Workers](/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/#cloudflare-workers), and [Managed Transforms](/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/#managed-transforms). Client Certificate headers and [Cf-Access-Jwt-Assertion](/cloudflare-one/access-controls/applications/http-apps/authorization-cookie/validating-json/) JWT header can be forwarded to the origin server. | -| Client Certificates Revocation | Use the WAF [Custom Rules](/waf/custom-rules/) to check for [_cf.tls_client_auth.cert_revoked_](/ssl/client-certificates/revoke-client-certificate/), which only applies to Cloudflare-managed CA.

    For BYO CAs, it would be the same approach as with Cloudflare Access. | Generate a [Certificate Revocation List (CRL)](/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/#create-a-crl) and enforce the revocation in a Cloudflare Worker. | +| Client Certificates Revocation | Use the WAF [Custom Rules](/waf/custom-rules/) to check for [_cf.tls_client_auth.cert_revoked_](/ssl/client-certificates/revoke-client-certificate/), which only applies to Cloudflare-managed CA.

    For BYO CAs, it would be the same approach as with Cloudflare Access. | Generate a [Certificate Revocation List (CRL)](/cloudflare-one/access-controls/service-credentials/mutual-tls-authentication/#create-a-crl) and enforce the revocation in a Cloudflare Worker. | diff --git a/src/content/docs/learning-paths/mtls/mtls-implementation/index.mdx b/src/content/docs/learning-paths/mtls/mtls-implementation/index.mdx index 93042dd1fa01f4d..4bc6231c21b5a96 100644 --- a/src/content/docs/learning-paths/mtls/mtls-implementation/index.mdx +++ b/src/content/docs/learning-paths/mtls/mtls-implementation/index.mdx @@ -26,4 +26,4 @@ mTLS user authentication is included with Cloudflare Access and depends on the n ## Option 3: mTLS Service Authentication -The hostnames are used to look up the certificates and verify their authenticity. Once the connection is established, all data transmitted between the hosts is encrypted, ensuring that it cannot be intercepted and read by third parties. Here the main driver is the number of hostnames. \ No newline at end of file +The hostnames are used to look up the certificates and verify their authenticity. Once the connection is established, all data transmitted between the hosts is encrypted, ensuring that it cannot be intercepted and read by third parties. Here the main driver is the number of hostnames. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/improve-analytics.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/improve-analytics.mdx index 16c8ccf32ad86d5..c481f87de2d65a0 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/improve-analytics.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/improve-analytics.mdx @@ -9,7 +9,7 @@ products: - waf --- -import { GlossaryTooltip, Render } from "~/components" +import { GlossaryTooltip, Render } from "~/components"; Cloudflare provides analytics for [security events](/waf/analytics/security-events/), [traffic patterns](/analytics/account-and-zone-analytics/zone-analytics/), and more according to the level of your zone's plan. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/index.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/index.mdx index a4da185bc6f5065..05f03d0f144275e 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/index.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/advanced/index.mdx @@ -15,7 +15,7 @@ Learn how to customize and augment Cloudflare’s DDoS protection. By the end of this module, you will be able to: -* Audit DNS records to prevent accidental IP address exposures. -* Optimize caching and security to reduce incoming traffic (whether malicious or legitimate). -* Augment Cloudflare's default analytics to examine attacks in more detail. -* Evaluate different ways to restrict external connections to your origin server. +- Audit DNS records to prevent accidental IP address exposures. +- Optimize caching and security to reduce incoming traffic (whether malicious or legitimate). +- Augment Cloudflare's default analytics to examine attacks in more detail. +- Evaluate different ways to restrict external connections to your origin server. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/index.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/index.mdx index c37bbf8ec26a7db..c2f9d500ff25ee7 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/index.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/index.mdx @@ -15,6 +15,6 @@ Get world-class DDoS protection with a few simple steps. By the end of this module, you will be able to: -* List the built-in DDoS protection measures provided by Cloudflare. -* Implement a few, simple customizations to improve DDoS protection. -* Set up DDoS-related notifications. +- List the built-in DDoS protection measures provided by Cloudflare. +- Implement a few, simple customizations to improve DDoS protection. +- Set up DDoS-related notifications. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/proxy-dns-records.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/proxy-dns-records.mdx index d464cb2979e60be..882b2ac86f7af63 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/proxy-dns-records.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/proxy-dns-records.mdx @@ -9,7 +9,7 @@ products: - waf --- -import { Render } from "~/components" +import { Render } from "~/components"; The first - and often easiest - step of DDoS protection is making sure your DNS records are [proxied](/dns/proxy-status/) through Cloudflare. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/set-up-alerts.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/set-up-alerts.mdx index 52946023a5865ab..504b661aeade97c 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/set-up-alerts.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/set-up-alerts.mdx @@ -9,7 +9,7 @@ products: - waf --- -import { Render } from "~/components" +import { Render } from "~/components"; Another part of preparing for DDoS attacks is knowing when your application is being attacked. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/tls-versions.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/tls-versions.mdx index 315ae18c24d496c..2dde4bb728e4cad 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/tls-versions.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/baseline/tls-versions.mdx @@ -13,8 +13,8 @@ In some circumstances - specifically when an application allows client-initiated When you use an SSL/TLS certificate issued by Cloudflare[^1], you can reduce the impact of this vulnerability by: -* Updating the [Minimum TLS Version](/ssl/edge-certificates/additional-options/minimum-tls/) accepted by your application. -* Allowing [TLS 1.3](/ssl/edge-certificates/additional-options/tls-13/). +- Updating the [Minimum TLS Version](/ssl/edge-certificates/additional-options/minimum-tls/) accepted by your application. +- Allowing [TLS 1.3](/ssl/edge-certificates/additional-options/tls-13/). [^1]: Meaning either [Universal](/ssl/edge-certificates/universal-ssl/) or [Advanced](/ssl/edge-certificates/advanced-certificate-manager/) certificates. diff --git a/src/content/docs/learning-paths/prevent-ddos-attacks/concepts/index.mdx b/src/content/docs/learning-paths/prevent-ddos-attacks/concepts/index.mdx index cfb31f718c1afba..5d276a7499bc51b 100644 --- a/src/content/docs/learning-paths/prevent-ddos-attacks/concepts/index.mdx +++ b/src/content/docs/learning-paths/prevent-ddos-attacks/concepts/index.mdx @@ -15,5 +15,5 @@ Learn the concepts behind DDoS attacks and protection, whether you are using Clo By the end of this module, you will be able to: -* Explain what a DDoS attack is and how it could affect your application. -* List the common ways to prevent DDoS attacks. +- Explain what a DDoS attack is and how it could affect your application. +- List the common ways to prevent DDoS attacks. diff --git a/src/content/docs/learning-paths/replace-vpn/build-policies/index.mdx b/src/content/docs/learning-paths/replace-vpn/build-policies/index.mdx index bc327a66a03d394..55992a486b4f980 100644 --- a/src/content/docs/learning-paths/replace-vpn/build-policies/index.mdx +++ b/src/content/docs/learning-paths/replace-vpn/build-policies/index.mdx @@ -18,7 +18,7 @@ With Cloudflare Zero Trust, you can apply granular security policies to all traf By the end of this module, you will be able to: -* Create Zero Trust policies to secure access to your private network. -* Enforce Cloudflare One Client session timeouts. -* Display custom block messages. -* Discover Shadow IT within your private network. +- Create Zero Trust policies to secure access to your private network. +- Enforce Cloudflare One Client session timeouts. +- Display custom block messages. +- Discover Shadow IT within your private network. diff --git a/src/content/docs/learning-paths/replace-vpn/build-policies/policy-design.mdx b/src/content/docs/learning-paths/replace-vpn/build-policies/policy-design.mdx index 29387c50590e5a7..78c93a432dea818 100644 --- a/src/content/docs/learning-paths/replace-vpn/build-policies/policy-design.mdx +++ b/src/content/docs/learning-paths/replace-vpn/build-policies/policy-design.mdx @@ -17,11 +17,11 @@ Most policy building for private network access happens within the Gateway DNS a Before building your policies, it is helpful to ask yourself a few questions: -* Should all users and services be able to reach all connected subnets? Are there explicit exceptions? -* Do all applications live within a primary network range, and are they defined by static or dynamic hosts and IP addresses? -* Are there DevOps workflows that rely on completely ephemeral IPs or subdomains? -* Do you have sources of truth for identity and device posture that will be used in policies? -* Do you plan to immediately implement a default-deny model? In other words, will you block all users except for those who match an explicit Allow policy? +- Should all users and services be able to reach all connected subnets? Are there explicit exceptions? +- Do all applications live within a primary network range, and are they defined by static or dynamic hosts and IP addresses? +- Are there DevOps workflows that rely on completely ephemeral IPs or subdomains? +- Do you have sources of truth for identity and device posture that will be used in policies? +- Do you plan to immediately implement a default-deny model? In other words, will you block all users except for those who match an explicit Allow policy? ## Prepare to build policies diff --git a/src/content/docs/learning-paths/replace-vpn/build-policies/session-timeouts.mdx b/src/content/docs/learning-paths/replace-vpn/build-policies/session-timeouts.mdx index 943c9627d37f792..a78d1ef69ea07de 100644 --- a/src/content/docs/learning-paths/replace-vpn/build-policies/session-timeouts.mdx +++ b/src/content/docs/learning-paths/replace-vpn/build-policies/session-timeouts.mdx @@ -11,7 +11,7 @@ products: - gateway --- -import { Render } from "~/components" +import { Render } from "~/components"; Most legacy VPNs have a global timeout setting that requires end users to log in every X hours or resets VPN profiles at a certain frequency. By doing continuous identity evaluation, a Zero Trust security model eliminates the need for most of the user-interrupting workflows triggered by session timeouts. However, there can still be valid reasons to want users to reauthenticate, either on a recurring basis or to access specific, highly-sensitive or regulated internal services. diff --git a/src/content/docs/learning-paths/replace-vpn/build-policies/test-your-first-application.mdx b/src/content/docs/learning-paths/replace-vpn/build-policies/test-your-first-application.mdx index 10077edc657d785..43ea4220994ee40 100644 --- a/src/content/docs/learning-paths/replace-vpn/build-policies/test-your-first-application.mdx +++ b/src/content/docs/learning-paths/replace-vpn/build-policies/test-your-first-application.mdx @@ -43,11 +43,13 @@ Analytics provide visualizations of [log data](/learning-paths/replace-vpn/build [Logs](/cloudflare-one/insights/logs/) provide event-level (such as an authentication attempt or a DNS query) visibility into your Cloudflare One environment. To review traffic activity for applications protected by Access: + 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Insights** > **Logs**. 2. Select **Access authentication logs**. 3. Review the [per-request logs](/cloudflare-one/insights/logs/dashboard-logs/access-authentication-logs/#per-request-logs) for your application. To review traffic activity in the [Gateway logs](/cloudflare-one/insights/logs/dashboard-logs/gateway-logs/): + 1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Insights** > **Logs**. 2. Select **HTTP request logs**, **Network logs**, or **DNS query logs** depending on your investigation scope. @@ -98,7 +100,8 @@ To create a device connectivity anomaly notification: 1. In the Cloudflare dashboard, go to the **Notifications** page. - + + 2. Select **Add**. 3. Find **Product** DEX and **Alert type** Device connectivity anomaly, and choose **Select**. 4. Name the notification. @@ -116,4 +119,4 @@ Once your policies are live, you can use [DEX tests](/learning-paths/replace-vpn To learn how to use Logs, Analytics, and DEX together during real-world situations, like onboarding, daily monitoring, and troubleshooting, refer to [Insights](/cloudflare-one/insights/) for more example use cases. -::: \ No newline at end of file +::: diff --git a/src/content/docs/learning-paths/replace-vpn/concepts/index.mdx b/src/content/docs/learning-paths/replace-vpn/concepts/index.mdx index f21582fa384073e..e227e835a77f69b 100644 --- a/src/content/docs/learning-paths/replace-vpn/concepts/index.mdx +++ b/src/content/docs/learning-paths/replace-vpn/concepts/index.mdx @@ -17,6 +17,6 @@ Concepts explain the basic ideas behind how Cloudflare Zero Trust works. By the end of this module, you will be able to: -* Explain how Cloudflare works. -* Describe the purpose of a VPN. -* Understand the benefits of switching to a Zero Trust architecture. +- Explain how Cloudflare works. +- Describe the purpose of a VPN. +- Understand the benefits of switching to a Zero Trust architecture. diff --git a/src/content/docs/learning-paths/replace-vpn/concepts/what-is-cloudflare.mdx b/src/content/docs/learning-paths/replace-vpn/concepts/what-is-cloudflare.mdx index 9d605a12bcca0b2..92bfa07cbd99ff5 100644 --- a/src/content/docs/learning-paths/replace-vpn/concepts/what-is-cloudflare.mdx +++ b/src/content/docs/learning-paths/replace-vpn/concepts/what-is-cloudflare.mdx @@ -11,6 +11,6 @@ products: - gateway --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/replace-vpn/connect-private-network/cloudflared.mdx b/src/content/docs/learning-paths/replace-vpn/connect-private-network/cloudflared.mdx index 62f98d74710996a..7a46245dacacf0c 100644 --- a/src/content/docs/learning-paths/replace-vpn/connect-private-network/cloudflared.mdx +++ b/src/content/docs/learning-paths/replace-vpn/connect-private-network/cloudflared.mdx @@ -12,7 +12,7 @@ products: - gateway --- -import { Render, Tabs, TabItem } from "~/components" +import { Render, Tabs, TabItem } from "~/components"; Cloudflare Tunnel is an outbound-only daemon service that can run on nearly any host machine and proxies local traffic once validated from the Cloudflare network. User traffic initiated from the Cloudflare One Client onramps to Cloudflare, passes down your Cloudflare Tunnel connections, and terminates automatically in your local network. Traffic reaching your internal applications or services will carry the local source IP address of the host machine running the `cloudflared` daemon. @@ -73,17 +73,16 @@ All internal applications and services in this IP range are now connected to Clo If the tunnel is disconnected: -* Ensure that your on-premise or cloud firewall allows egress traffic on the [required ports](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall/#required-for-tunnel-operation). -* Ensure that the `cloudflared` host machine can connect to your internal applications and services. Verify that the host has the proper security group memberships and that no firewalls will block traffic between the host and the target services. - +- Ensure that your on-premise or cloud firewall allows egress traffic on the [required ports](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-with-firewall/#required-for-tunnel-operation). +- Ensure that the `cloudflared` host machine can connect to your internal applications and services. Verify that the host has the proper security group memberships and that no firewalls will block traffic between the host and the target services. ::: ## Best practices -* Segregate production and staging traffic among different Cloudflare tunnels. -* Add a [`cloudflared` replica](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/) to another host machine for an additional point of availability. -* Distribute access to critical services (for example, private DNS, Active Directory, and other critical systems) across different tunnels for blast-radius reduction in the event of a server-side outage. -* [Enable notifications](/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications/) in the Cloudflare dashboard to monitor tunnel health. -* [Monitor performance metrics](/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/metrics/) to identify potential bottlenecks. -* [Update `cloudflared`](/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/update-cloudflared/) regularly. +- Segregate production and staging traffic among different Cloudflare tunnels. +- Add a [`cloudflared` replica](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/) to another host machine for an additional point of availability. +- Distribute access to critical services (for example, private DNS, Active Directory, and other critical systems) across different tunnels for blast-radius reduction in the event of a server-side outage. +- [Enable notifications](/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/notifications/) in the Cloudflare dashboard to monitor tunnel health. +- [Monitor performance metrics](/cloudflare-one/networks/connectors/cloudflare-tunnel/monitor-tunnels/metrics/) to identify potential bottlenecks. +- [Update `cloudflared`](/cloudflare-one/networks/connectors/cloudflare-tunnel/downloads/update-cloudflared/) regularly. diff --git a/src/content/docs/learning-paths/replace-vpn/connect-private-network/connection-methods.mdx b/src/content/docs/learning-paths/replace-vpn/connect-private-network/connection-methods.mdx index d36ecb80dd109d4..9ff188f45e603dd 100644 --- a/src/content/docs/learning-paths/replace-vpn/connect-private-network/connection-methods.mdx +++ b/src/content/docs/learning-paths/replace-vpn/connect-private-network/connection-methods.mdx @@ -33,17 +33,17 @@ There are [multiple ways](/reference-architecture/architectures/sase/#connecting ## Comparison table -| | Cloudflare Mesh | Cloudflare Tunnel | -| --------------------- | ------------------------------- | --------------------------- | -| Bidirectional traffic | ✅ | ❌ | -| High availability | ✅ (active-passive) | ✅ (active-active replicas) | -| Source IP of request | Virtual IP of requesting device | `cloudflared` host machine | -| Host machine | Linux (amd64, arm64) | Linux, macOS, Windows | -| IPv4 | ✅ | ✅ | -| IPv6 | ✅ | ✅ | -| OSI layer | L3 | L7 | -| Protocol | MASQUE | QUIC or HTTP/2 | -| Protocols proxied | TCP, UDP, ICMP | HTTP/S, TCP, SSH, RDP, SMB | +| | Cloudflare Mesh | Cloudflare Tunnel | +| --------------------- | ---------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bidirectional traffic | ✅ | ❌ | +| High availability | ✅ (active-passive) | ✅ (active-active replicas) | +| Source IP of request | Virtual IP of requesting device | `cloudflared` host machine | +| Host machine | Linux (amd64, arm64) | Linux, macOS, Windows | +| IPv4 | ✅ | ✅ | +| IPv6 | ✅ | ✅ | +| OSI layer | L3 | L7 | +| Protocol | MASQUE | QUIC or HTTP/2 | +| Protocols proxied | TCP, UDP, ICMP | HTTP/S, TCP, SSH, RDP, SMB | | Connection handling | End-to-end — preserves long-lived TCP connections across the full path | Proxied — TCP connections are terminated and re-established at Cloudflare, which can interrupt long-lived sessions (for example, SAP transactions, database replication streams, or persistent RDP sessions may drop when `cloudflared` reconnects) | ## Recommendation diff --git a/src/content/docs/learning-paths/replace-vpn/connect-private-network/index.mdx b/src/content/docs/learning-paths/replace-vpn/connect-private-network/index.mdx index 8dfc2d8f3e258e1..73d7ed1fcc063fd 100644 --- a/src/content/docs/learning-paths/replace-vpn/connect-private-network/index.mdx +++ b/src/content/docs/learning-paths/replace-vpn/connect-private-network/index.mdx @@ -17,6 +17,6 @@ This module covers how to connect your private network services and applications By the end of this module, you will be able to: -* Create a Cloudflare Tunnel. -* Configure private network routes for your tunnel. -* Understand how to size and scale your tunnel. +- Create a Cloudflare Tunnel. +- Configure private network routes for your tunnel. +- Understand how to size and scale your tunnel. diff --git a/src/content/docs/learning-paths/replace-vpn/connect-private-network/overlapping-ips.mdx b/src/content/docs/learning-paths/replace-vpn/connect-private-network/overlapping-ips.mdx index c6b1493e5165c97..536d489c6b31be9 100644 --- a/src/content/docs/learning-paths/replace-vpn/connect-private-network/overlapping-ips.mdx +++ b/src/content/docs/learning-paths/replace-vpn/connect-private-network/overlapping-ips.mdx @@ -10,7 +10,7 @@ products: - gateway --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/replace-vpn/connect-private-network/tunnel-capacity.mdx b/src/content/docs/learning-paths/replace-vpn/connect-private-network/tunnel-capacity.mdx index 91c1e173b09527c..061277556b36313 100644 --- a/src/content/docs/learning-paths/replace-vpn/connect-private-network/tunnel-capacity.mdx +++ b/src/content/docs/learning-paths/replace-vpn/connect-private-network/tunnel-capacity.mdx @@ -11,7 +11,7 @@ products: - gateway --- -import { Render } from "~/components" +import { Render } from "~/components"; Now that you have a Cloudflare Tunnel up and running, evaluate whether `cloudflared` has enough system resources to handle the expected volume of requests from end users. If you have exhausted the ports on a single machine, you will need to add additional servers running `cloudflared`. diff --git a/src/content/docs/learning-paths/replace-vpn/get-started/prerequisites.mdx b/src/content/docs/learning-paths/replace-vpn/get-started/prerequisites.mdx index 9add3ff07321ee9..b7e1bbfc5ccef53 100644 --- a/src/content/docs/learning-paths/replace-vpn/get-started/prerequisites.mdx +++ b/src/content/docs/learning-paths/replace-vpn/get-started/prerequisites.mdx @@ -13,7 +13,7 @@ products: To make the most of this learning path, make sure that you have the following: -* A device that can run [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/), Cloudflare's endpoint agent. -* A private network with applications or services that are available locally or via a VPN. -* A [host server](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements/#recommendations) on the private network that can run the lightweight Cloudflare Tunnel daemon process. -* (Optional) A [Linux host server](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/#linux) on the private network that can run Cloudflare Mesh. This is only needed for server-initiated traffic flows such as Microsoft SCCM, Active Directory (AD) updates, and DevOps workflows that require server-initiated connections. +- A device that can run [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/), Cloudflare's endpoint agent. +- A private network with applications or services that are available locally or via a VPN. +- A [host server](/cloudflare-one/networks/connectors/cloudflare-tunnel/configure-tunnels/tunnel-availability/system-requirements/#recommendations) on the private network that can run the lightweight Cloudflare Tunnel daemon process. +- (Optional) A [Linux host server](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/#linux) on the private network that can run Cloudflare Mesh. This is only needed for server-initiated traffic flows such as Microsoft SCCM, Active Directory (AD) updates, and DevOps workflows that require server-initiated connections. diff --git a/src/content/docs/learning-paths/replace-vpn/troubleshooting/index.mdx b/src/content/docs/learning-paths/replace-vpn/troubleshooting/index.mdx index a516b09d3f257d6..1b88fb9f8b8b920 100644 --- a/src/content/docs/learning-paths/replace-vpn/troubleshooting/index.mdx +++ b/src/content/docs/learning-paths/replace-vpn/troubleshooting/index.mdx @@ -19,7 +19,7 @@ Learn how to troubleshoot your ZTNA deployment. By the end of this module, you will be able to: -* Investigate why users cannot connect to private network applications behind Cloudflare Tunnel. -* Fix the most common causes of connectivity issues. +- Investigate why users cannot connect to private network applications behind Cloudflare Tunnel. +- Fix the most common causes of connectivity issues. diff --git a/src/content/docs/learning-paths/replace-vpn/troubleshooting/troubleshoot-private-networks.mdx b/src/content/docs/learning-paths/replace-vpn/troubleshooting/troubleshoot-private-networks.mdx index e4c61751d31b4a3..4a8c12e1c07aa82 100644 --- a/src/content/docs/learning-paths/replace-vpn/troubleshooting/troubleshoot-private-networks.mdx +++ b/src/content/docs/learning-paths/replace-vpn/troubleshooting/troubleshoot-private-networks.mdx @@ -11,6 +11,6 @@ products: - gateway --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/learning-paths/secure-internet-traffic/build-dns-policies/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/build-dns-policies/index.mdx index fa82b98809cbb10..d83c0f50abab201 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/build-dns-policies/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/build-dns-policies/index.mdx @@ -18,6 +18,6 @@ DNS security is an important, wide-reaching, and early action in the lifecycle o By the end of this module, you will be able to: -* Create your first Gateway DNS policy. -* Build an allow or block list for use in firewall policies. -* Onboard networks to Gateway to filter DNS queries. +- Create your first Gateway DNS policy. +- Build an allow or block list for use in firewall policies. +- Onboard networks to Gateway to filter DNS queries. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/build-egress-policies/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/build-egress-policies/index.mdx index 3a42196c4090ecc..3264f26eb9ea844 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/build-egress-policies/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/build-egress-policies/index.mdx @@ -16,18 +16,16 @@ Now that you have created firewall policies to secure your organization, you can :::note - The following module requires [egress policies](/cloudflare-one/traffic-policies/egress-policies/), a feature only available on Enterprise plans. If you are not an Enterprise user, you can skip ahead to [Secure SaaS applications](/learning-paths/secure-internet-traffic/secure-saas-applications/). For more information on egress policies, contact your account team. - ::: ## Objectives By the end of this module, you will be able to: -* Understand when your organization may need source IP anchoring. -* Create egress policies to make use of dedicated egress IPs. -* Follow best practices for deploying egress IPs. +- Understand when your organization may need source IP anchoring. +- Create egress policies to make use of dedicated egress IPs. +- Follow best practices for deploying egress IPs. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/build-http-policies/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/build-http-policies/index.mdx index b67afebdb19655c..486ba1b10c7e8c0 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/build-http-policies/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/build-http-policies/index.mdx @@ -18,7 +18,7 @@ After securing your organization's DNS queries and network level traffic, you ca By the end of this module, you will be able to: -* Understand how and when to use TLS inspection to decrypt HTTPS traffic. -* Configure and enable Data Loss Prevention to protect your organization's sensitive data. -* Protect user endpoints with Browser Isolation. -* Add recommended HTTP security policies. +- Understand how and when to use TLS inspection to decrypt HTTPS traffic. +- Configure and enable Data Loss Prevention to protect your organization's sensitive data. +- Protect user endpoints with Browser Isolation. +- Add recommended HTTP security policies. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/concepts/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/concepts/index.mdx index 71711da35cc0387..8d4115bd0b7fde1 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/concepts/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/concepts/index.mdx @@ -18,5 +18,5 @@ Learn the core concepts of using Cloudflare Zero Trust functionality to provide By the end of this module, you will be able to: -* Understand what products and features Cloudflare offers. -* Describe how Cloudflare implements Internet traffic and SaaS app security. +- Understand what products and features Cloudflare offers. +- Describe how Cloudflare implements Internet traffic and SaaS app security. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/connect-devices-networks/choose-on-ramp.mdx b/src/content/docs/learning-paths/secure-internet-traffic/connect-devices-networks/choose-on-ramp.mdx index 319216b4c04291b..a22224d4e229731 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/connect-devices-networks/choose-on-ramp.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/connect-devices-networks/choose-on-ramp.mdx @@ -36,12 +36,12 @@ Cloudflare supports filtering HTTP/S traffic sent via a PAC file on a user devic Cloudflare Browser Isolation runs a headless, Chromium-based browser for your users to accomplish their secure browsing needs. It can be activated via an Access application, a Gateway policy, or by using link-based isolation (reverse proxy). In this model, your users can connect from any device to a proxy website to browse the Internet while applying all your Gateway HTTP policies and inspection requirements. -| | Cloudflare One Client | PAC Files | Clientless Browser Isolation | -| --------------------------------- | ------------------------------------ | -------------- | ------------------------------------- | -| Supported OS | macOS, Windows, Linux, iOS, Android | All desktop OS | All OS (with HTML5 compliant browser) | -| Configurable via MDM | Yes | Yes | N/A | -| Gateway policy types supported | DNS, Network, HTTP, Resolver, Egress | HTTP | DNS, Network, HTTP, Resolver, Egress | -| Identity-based policies supported | Yes | No | Yes | +| | Cloudflare One Client | PAC Files | Clientless Browser Isolation | +| ----------------------------------------------------------------------------------------------- | ------------------------------------ | -------------- | ------------------------------------- | +| Supported OS | macOS, Windows, Linux, iOS, Android | All desktop OS | All OS (with HTML5 compliant browser) | +| Configurable via MDM | Yes | Yes | N/A | +| Gateway policy types supported | DNS, Network, HTTP, Resolver, Egress | HTTP | DNS, Network, HTTP, Resolver, Egress | +| Identity-based policies supported | Yes | No | Yes | | [Network Session Logs](/logs/logpush/logpush-job/datasets/account/zero_trust_network_sessions/) | Yes | Yes | Yes | ## Network on-ramps diff --git a/src/content/docs/learning-paths/secure-internet-traffic/initial-setup/prerequisites.mdx b/src/content/docs/learning-paths/secure-internet-traffic/initial-setup/prerequisites.mdx index 14f947c033c85f7..0317f717c9237be 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/initial-setup/prerequisites.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/initial-setup/prerequisites.mdx @@ -14,5 +14,5 @@ products: To make the most of securing your Internet traffic and SaaS apps, make sure that you have the following: -* A device that can run [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/), Cloudflare's endpoint agent. -* (Optional) A [Linux host server](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/#linux) on the private network that can run Cloudflare Mesh, a software agent similar to the Cloudflare One Client. +- A device that can run [Cloudflare One Client](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/), Cloudflare's endpoint agent. +- (Optional) A [Linux host server](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/download/#linux) on the private network that can run Cloudflare Mesh, a software agent similar to the Cloudflare One Client. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/index.mdx index 1dcb52b2c614a63..e67e85f67da54d6 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/index.mdx @@ -18,6 +18,6 @@ Now that you have deployed dedicated egress IPs and created egress policies to a By the end of this module, you will be able to: -* Secure your SaaS applications by integrating them with Cloudflare CASB. -* Control access to your SSO front door. -* Layer multiple security methods for protecting SaaS apps. +- Secure your SaaS applications by integrating them with Cloudflare CASB. +- Control access to your SSO front door. +- Layer multiple security methods for protecting SaaS apps. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/sso-front-door.mdx b/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/sso-front-door.mdx index 52d73e8318fb87d..92db03a4e2e98a1 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/sso-front-door.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/secure-saas-applications/sso-front-door.mdx @@ -18,10 +18,10 @@ products: Access for SaaS integrates directly with your SaaS app using standard protocols (such as SAML) to become the primary enforcement point for user access. Access calls your identity provider (IdP) of choice and uses additional security signals about your users and devices to make policy decisions. Benefits of Access for SaaS include: -* A streamlined experience for users on both managed and unmanaged devices. -* Application of baseline policies requiring specific concepts such as device posture and endpoint control. -* Distinct access methodology for contractors. -* Flexibility to configure multiple SSO vendors simultaneously, freely switch between SSO vendors, and reduce reliance on a single vendor. +- A streamlined experience for users on both managed and unmanaged devices. +- Application of baseline policies requiring specific concepts such as device posture and endpoint control. +- Distinct access methodology for contractors. +- Flexibility to configure multiple SSO vendors simultaneously, freely switch between SSO vendors, and reduce reliance on a single vendor. ### SSO integrations @@ -29,10 +29,8 @@ You can pair Access for SaaS with the [App Launcher](/cloudflare-one/access-cont :::note[SCIM provisioning limitation] - Access for SaaS supports SCIM passthrough in an API-only closed beta. If you require SCIM passthrough, contact your account team. - ::: ## Configure your SSO provider diff --git a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/index.mdx b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/index.mdx index 4028b6ad5e95765..3e738d411947195 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/index.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/index.mdx @@ -22,6 +22,6 @@ This guide will provide you with a baseline of recommended policies to build and By the end of this module, you will be able to: -* Understand the order Gateway enforces policies for filtering traffic. -* Create reusable lists for Gateway policies. -* Subscribe to indicator feeds for advanced threat intelligence. +- Understand the order Gateway enforces policies for filtering traffic. +- Create reusable lists for Gateway policies. +- Subscribe to indicator feeds for advanced threat intelligence. diff --git a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/indicator-feeds.mdx b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/indicator-feeds.mdx index d37b3443e21db00..288ad4bd4f9c714 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/indicator-feeds.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/indicator-feeds.mdx @@ -12,7 +12,7 @@ products: - browser-isolation --- -import { Render } from "~/components" +import { Render } from "~/components"; When building DNS, network, or HTTP policies to block malicious activity for your organization, you can use external indicator feeds supplied by Cloudflare and other third-party providers. @@ -20,4 +20,4 @@ When building DNS, network, or HTTP policies to block malicious activity for you -To subscribe to an indicator feed, contact your account team. For more information, refer to [Custom Indicator Feeds](/security-center/indicator-feeds/). \ No newline at end of file +To subscribe to an indicator feed, contact your account team. For more information, refer to [Custom Indicator Feeds](/security-center/indicator-feeds/). diff --git a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement.mdx b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement.mdx index 4613217ef45c558..075efbb8570f006 100644 --- a/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement.mdx +++ b/src/content/docs/learning-paths/secure-internet-traffic/understand-policies/order-of-enforcement.mdx @@ -12,7 +12,7 @@ products: - browser-isolation --- -import { Render } from "~/components" +import { Render } from "~/components"; Gateway follows a specific order of enforcement as traffic travels through the Cloudflare global network to the Internet: diff --git a/src/content/docs/learning-paths/secure-your-email/concepts/index.mdx b/src/content/docs/learning-paths/secure-your-email/concepts/index.mdx index 094d430d9789447..779c314e0307099 100644 --- a/src/content/docs/learning-paths/secure-your-email/concepts/index.mdx +++ b/src/content/docs/learning-paths/secure-your-email/concepts/index.mdx @@ -16,4 +16,4 @@ By the end of this module, you will be able to: - Explain how Cloudflare works. - Describe what Email security is. -- Understand how Cloudflare prevents email-based phishing attacks. \ No newline at end of file +- Understand how Cloudflare prevents email-based phishing attacks. diff --git a/src/content/docs/learning-paths/secure-your-email/concepts/protect-from-phishing-attacks.mdx b/src/content/docs/learning-paths/secure-your-email/concepts/protect-from-phishing-attacks.mdx index 325d8d4fbe5e300..a81f77056268cbd 100644 --- a/src/content/docs/learning-paths/secure-your-email/concepts/protect-from-phishing-attacks.mdx +++ b/src/content/docs/learning-paths/secure-your-email/concepts/protect-from-phishing-attacks.mdx @@ -16,4 +16,4 @@ As organizations continue to adopt Microsoft 365 and Google Workspace to enhance Analysts agree that consolidating capabilities to minimize overlapping functionality is helping organizations reduce cost and complexity. However, they also advise organizations to carefully assess native features to ensure they satisfy all use cases. As Microsoft and Google continue to build out its essential email security features, the growing overlap with SEGs has given organizations an opportunity to streamline security operations by leveraging capabilities already included in their E3 or E5 license. -This shift enables organizations to eliminate complex and costly SEG deployments, redirecting a fraction of that budget to integrate lightweight solutions that effectively address the most dangerous phishing threats. Cloudflare Email security provides an integrated, low-touch solution that augments Microsoft 365 using machine learning threat analysis to automate the detection of BEC and multi-channel attacks. \ No newline at end of file +This shift enables organizations to eliminate complex and costly SEG deployments, redirecting a fraction of that budget to integrate lightweight solutions that effectively address the most dangerous phishing threats. Cloudflare Email security provides an integrated, low-touch solution that augments Microsoft 365 using machine learning threat analysis to automate the detection of BEC and multi-channel attacks. diff --git a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-cloudflare.mdx b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-cloudflare.mdx index 606e29d7f67ce79..6810419da647886 100644 --- a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-cloudflare.mdx +++ b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-cloudflare.mdx @@ -8,6 +8,6 @@ products: - email-security --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-email-security.mdx b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-email-security.mdx index 972a75f3e69fb82..e751db0ccb39b91 100644 --- a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-email-security.mdx +++ b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-email-security.mdx @@ -10,4 +10,4 @@ products: Despite email's importance as a communication method, security and privacy were not built into the [The Simple Mail Transfer Protocol (SMTP) protocol](https://www.cloudflare.com/learning/email-security/what-is-smtp/). As a result, email is a major attack vector. -Email security is the process of preventing [email-based](https://www.cloudflare.com/learning/email-security/what-is-email/) cyber attacks and unwanted communications. It spans protecting inboxes from takeover, protecting domains from [spoofing](https://www.cloudflare.com/learning/ssl/what-is-domain-spoofing/), stopping [phishing attacks](https://www.cloudflare.com/learning/access-management/phishing-attack/), preventing fraud, blocking [malware](https://www.cloudflare.com/learning/ddos/glossary/malware/) delivery, and filtering [spam](https://www.cloudflare.com/learning/email-security/how-to-stop-spam-emails/). \ No newline at end of file +Email security is the process of preventing [email-based](https://www.cloudflare.com/learning/email-security/what-is-email/) cyber attacks and unwanted communications. It spans protecting inboxes from takeover, protecting domains from [spoofing](https://www.cloudflare.com/learning/ssl/what-is-domain-spoofing/), stopping [phishing attacks](https://www.cloudflare.com/learning/access-management/phishing-attack/), preventing fraud, blocking [malware](https://www.cloudflare.com/learning/ddos/glossary/malware/) delivery, and filtering [spam](https://www.cloudflare.com/learning/email-security/how-to-stop-spam-emails/). diff --git a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-phishing-attack.mdx b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-phishing-attack.mdx index 1134bd825289830..2476b73b8cb70b2 100644 --- a/src/content/docs/learning-paths/secure-your-email/concepts/what-is-phishing-attack.mdx +++ b/src/content/docs/learning-paths/secure-your-email/concepts/what-is-phishing-attack.mdx @@ -12,4 +12,4 @@ products: Phishing attackers disguise themselves as a reputable source. With an enticing or seemingly urgent request, an attacker lures the victim into providing information, just as a person uses bait while fishing. -Phishing often takes place over email. Phishers either try to trick people into emailing information directly, or link to a webpage they control that is designed to look legitimate (for instance, a fake login page where the victim enters their password). \ No newline at end of file +Phishing often takes place over email. Phishers either try to trick people into emailing information directly, or link to a webpage they control that is designed to look legitimate (for instance, a fake login page where the victim enters their password). diff --git a/src/content/docs/learning-paths/secure-your-email/configure-email-security/active-directory-sync.mdx b/src/content/docs/learning-paths/secure-your-email/configure-email-security/active-directory-sync.mdx index a017783809f59cb..09e0b06afb41ca9 100644 --- a/src/content/docs/learning-paths/secure-your-email/configure-email-security/active-directory-sync.mdx +++ b/src/content/docs/learning-paths/secure-your-email/configure-email-security/active-directory-sync.mdx @@ -49,4 +49,4 @@ In addition, Email security allows you to: - [Remove groups from the registry](/cloudflare-one/email-security/directories/manage-integrated-directories/manage-groups-directory/#remove-groups-from-registry). - [Filter the impersonation registry](/cloudflare-one/email-security/directories/manage-integrated-directories/manage-groups-directory/#filter-impersonation-registry). -- [Manage users in your directory](/cloudflare-one/email-security/directories/manage-integrated-directories/manage-users-directory/). \ No newline at end of file +- [Manage users in your directory](/cloudflare-one/email-security/directories/manage-integrated-directories/manage-users-directory/). diff --git a/src/content/docs/learning-paths/secure-your-email/configure-email-security/audit-logs.mdx b/src/content/docs/learning-paths/secure-your-email/configure-email-security/audit-logs.mdx index 665a142ede96132..8df6912430c831b 100644 --- a/src/content/docs/learning-paths/secure-your-email/configure-email-security/audit-logs.mdx +++ b/src/content/docs/learning-paths/secure-your-email/configure-email-security/audit-logs.mdx @@ -21,7 +21,6 @@ To enable audit logs: 2. Select your storage destination. 3. Select the three dots > **Edit**. 4. Under **Configure logpush job**: - - **Job name**: Enter the job name, if it is not already prepopulated. - **If logs match** > Select **Filtered logs**: - **Field**: Choose `ResourceType`. @@ -30,4 +29,4 @@ To enable audit logs: 5. Select **Submit**. -You can now view logs via the Cloudflare dashboard. \ No newline at end of file +You can now view logs via the Cloudflare dashboard. diff --git a/src/content/docs/learning-paths/secure-your-email/configure-email-security/impersonation-registry.mdx b/src/content/docs/learning-paths/secure-your-email/configure-email-security/impersonation-registry.mdx index 0378058f8d87ec6..fbbb6474283ca81 100644 --- a/src/content/docs/learning-paths/secure-your-email/configure-email-security/impersonation-registry.mdx +++ b/src/content/docs/learning-paths/secure-your-email/configure-email-security/impersonation-registry.mdx @@ -30,4 +30,4 @@ To add a user to the impersonation registry: - **Add users or groups**: Choose the users or groups you want to register. 6. Select **Save**. -For more information on how to edit and remove users, refer to [Impersonation Registry](/cloudflare-one/email-security/settings/detection-settings/impersonation-registry/#edit-users). \ No newline at end of file +For more information on how to edit and remove users, refer to [Impersonation Registry](/cloudflare-one/email-security/settings/detection-settings/impersonation-registry/#edit-users). diff --git a/src/content/docs/learning-paths/secure-your-email/configure-email-security/index.mdx b/src/content/docs/learning-paths/secure-your-email/configure-email-security/index.mdx index 461cbd6dbd19774..2e7a4d8bfb7cbe7 100644 --- a/src/content/docs/learning-paths/secure-your-email/configure-email-security/index.mdx +++ b/src/content/docs/learning-paths/secure-your-email/configure-email-security/index.mdx @@ -10,4 +10,4 @@ products: With Email security, there is limited manual configuration and tuning. The Active Directory sync, allow policies, and additional detections are important to consider when you set up Email security. -In this module, you will configure your email environment. \ No newline at end of file +In this module, you will configure your email environment. diff --git a/src/content/docs/learning-paths/secure-your-email/configure-email-security/report-phish.mdx b/src/content/docs/learning-paths/secure-your-email/configure-email-security/report-phish.mdx index 3cc5f8cd3fe2d8c..ba4ad5c0c65ba4a 100644 --- a/src/content/docs/learning-paths/secure-your-email/configure-email-security/report-phish.mdx +++ b/src/content/docs/learning-paths/secure-your-email/configure-email-security/report-phish.mdx @@ -33,4 +33,4 @@ To set up PhishNet for Google Workspace: 1. Log in to the Google Workspace Marketplace using an administrator account. 2. Select **Admin install** to install Cloudflare PhishNet. -Refer to [Set up PhishNet for Google Workspace](/cloudflare-one/email-security/settings/phish-submissions/phishnet-google-workspace/#set-up-phishnet-for-google-workspace) for more information. \ No newline at end of file +Refer to [Set up PhishNet for Google Workspace](/cloudflare-one/email-security/settings/phish-submissions/phishnet-google-workspace/#set-up-phishnet-for-google-workspace) for more information. diff --git a/src/content/docs/learning-paths/secure-your-email/enable-auto-moves/index.mdx b/src/content/docs/learning-paths/secure-your-email/enable-auto-moves/index.mdx index 34c5572c1d9bd7f..6efc9e48a5b5f2c 100644 --- a/src/content/docs/learning-paths/secure-your-email/enable-auto-moves/index.mdx +++ b/src/content/docs/learning-paths/secure-your-email/enable-auto-moves/index.mdx @@ -16,4 +16,4 @@ Ensure you have completed the previous modules before enabling auto-moves. Auto-move events are events where emails are automatically moved to different inboxes based on the disposition assigned to them by Email security. -When you set up auto-moves, you can move messages manually or set up automatic moves to send messages matching certain [dispositions](/learning-paths/secure-your-email/enable-auto-moves/email-dispositions/) to specific folders within a user's mailbox. \ No newline at end of file +When you set up auto-moves, you can move messages manually or set up automatic moves to send messages matching certain [dispositions](/learning-paths/secure-your-email/enable-auto-moves/email-dispositions/) to specific folders within a user's mailbox. diff --git a/src/content/docs/learning-paths/secure-your-email/get-started/deployment-models.mdx b/src/content/docs/learning-paths/secure-your-email/get-started/deployment-models.mdx index a5209b5455fedb9..20822f04cf3be59 100644 --- a/src/content/docs/learning-paths/secure-your-email/get-started/deployment-models.mdx +++ b/src/content/docs/learning-paths/secure-your-email/get-started/deployment-models.mdx @@ -20,8 +20,8 @@ If you are a Google Workspace user, you can enable Email security via [BCC setup ![Google Workspace BCC deployment diagram](~/assets/email-security/Gmail_Deployment_BCC.png) -With MX/Inline, Email security scans your email before they land in your inbox, giving you the highest level of protection. +With MX/Inline, Email security scans your email before they land in your inbox, giving you the highest level of protection. ![Microsoft 365 and Google Workspace MX/Inline](~/assets/email-security/Email_security_Deployment_Inline.png) -Refer to [Before you begin](/cloudflare-one/email-security/setup/) for a comprehensive comparison of each deployment method, and [Understanding Email Security Deployments](/reference-architecture/architectures/email-security-deployments/) to learn about each deployment method. \ No newline at end of file +Refer to [Before you begin](/cloudflare-one/email-security/setup/) for a comprehensive comparison of each deployment method, and [Understanding Email Security Deployments](/reference-architecture/architectures/email-security-deployments/) to learn about each deployment method. diff --git a/src/content/docs/learning-paths/secure-your-email/get-started/prerequisites.mdx b/src/content/docs/learning-paths/secure-your-email/get-started/prerequisites.mdx index 16e8a6a9cc6b7f5..ddf2e2a40c90def 100644 --- a/src/content/docs/learning-paths/secure-your-email/get-started/prerequisites.mdx +++ b/src/content/docs/learning-paths/secure-your-email/get-started/prerequisites.mdx @@ -8,4 +8,4 @@ products: - email-security --- -To make the most of this learning path, make sure you have access to Microsoft 365 or Gmail account. \ No newline at end of file +To make the most of this learning path, make sure you have access to Microsoft 365 or Gmail account. diff --git a/src/content/docs/learning-paths/secure-your-email/get-started/recommended-deployment-model.mdx b/src/content/docs/learning-paths/secure-your-email/get-started/recommended-deployment-model.mdx index a83c5051a08616c..891d3080a754f62 100644 --- a/src/content/docs/learning-paths/secure-your-email/get-started/recommended-deployment-model.mdx +++ b/src/content/docs/learning-paths/secure-your-email/get-started/recommended-deployment-model.mdx @@ -16,4 +16,4 @@ The API deployment with Email security offers: - Agentless deployment for Microsoft 365. - Office 365 directory integration to retrieve user and group information and prevent user impersonation. -![Microsoft 365 API deployment diagram](~/assets/email-security/M365_API_Deployment_Graph.png) \ No newline at end of file +![Microsoft 365 API deployment diagram](~/assets/email-security/M365_API_Deployment_Graph.png) diff --git a/src/content/docs/learning-paths/secure-your-email/get-started/setup-google-workspace.mdx b/src/content/docs/learning-paths/secure-your-email/get-started/setup-google-workspace.mdx index 28bf9247f9c6975..3743a5c02f2a30e 100644 --- a/src/content/docs/learning-paths/secure-your-email/get-started/setup-google-workspace.mdx +++ b/src/content/docs/learning-paths/secure-your-email/get-started/setup-google-workspace.mdx @@ -11,4 +11,4 @@ products: 1. Log in to [Cloudflare One](https://one.dash.cloudflare.com/). 2. Select **Email security** > **Settings**. 3. Select **Connect an integration**, choose **Google Workspace CASB + EMAIL**, then select **Select Integration**. -4. Follow the wizard to create an integration, then select **Create Integration**. Refer to [Enable Gmail BCC integration](/cloudflare-one/email-security/setup/post-delivery-deployment/bcc-journaling/bcc-setup/gmail-bcc-setup/enable-gmail-integration/) for further instructions. \ No newline at end of file +4. Follow the wizard to create an integration, then select **Create Integration**. Refer to [Enable Gmail BCC integration](/cloudflare-one/email-security/setup/post-delivery-deployment/bcc-journaling/bcc-setup/gmail-bcc-setup/enable-gmail-integration/) for further instructions. diff --git a/src/content/docs/learning-paths/secure-your-email/get-started/setup-ms-graph-api.mdx b/src/content/docs/learning-paths/secure-your-email/get-started/setup-ms-graph-api.mdx index 447dea2119c80ba..1c65ac9d9434a5c 100644 --- a/src/content/docs/learning-paths/secure-your-email/get-started/setup-ms-graph-api.mdx +++ b/src/content/docs/learning-paths/secure-your-email/get-started/setup-ms-graph-api.mdx @@ -12,7 +12,7 @@ products: 2. Select **Email security** > **Settings**. 3. Select **Connect an integration**, choose **Microsoft CASB + EMAIL**, then select **Select Integration**. 4. Enable **Microsoft Integration**: - 1. **Configure policy**: Choose how you wannt [CASB](/cloudflare-one/cloud-and-saas-findings/) to access the data from your integration. + 1. **Configure policy**: Choose how you wannt [CASB](/cloudflare-one/cloud-and-saas-findings/) to access the data from your integration. 2. **Name integration**: Add your integration name, then select **Continue**. 3. **Authorize integration**: - Select **Authorize**. Selecting **Authorize** will take you to the Microsoft Sign in page where you will have to enter your email address. @@ -20,4 +20,4 @@ products: - After selecting **Next**, the system will show a dialog box with a list of requested permissions. Select **Accept** to authorize Email security. Upon authorization, you will be redirected to a page where you can review details and enroll integration. 4. **Review details**: Review your integration details, then: - Select **Complete Email security set up** where you will be able to connect your domains and configure auto-moves. - - Select **Continue to Email security**. \ No newline at end of file + - Select **Continue to Email security**. diff --git a/src/content/docs/learning-paths/secure-your-email/monitor-your-inbox/phish-submissions.mdx b/src/content/docs/learning-paths/secure-your-email/monitor-your-inbox/phish-submissions.mdx index e5a57972d2a82f0..40565ed07e17558 100644 --- a/src/content/docs/learning-paths/secure-your-email/monitor-your-inbox/phish-submissions.mdx +++ b/src/content/docs/learning-paths/secure-your-email/monitor-your-inbox/phish-submissions.mdx @@ -17,4 +17,4 @@ There are two different ways to [submit a phish](/cloudflare-one/email-security/ - User submissions can create another challenge for your organization. While it is important for end users to be vigilant and report what they believe may be a phishing email, they are often wrong. About 90% of the time, when an end user reports a missed phishing email, they are mistaken. This puts an extra burden on busy security teams as they sift through end user reports. The PhishGuard team at Cloudflare can solve this problem for your organization by reviewing end user submissions for you. - Admin submission: - To be used when IT administrators or security teams submit to Email security. Submit original phish samples as an attachment in EML format to the appropriate team submission address. - - Within the Email security dashboard, Phish submissions will allow you to have a full understanding of what reclassification has been made and what the outcomes of those submissions are. \ No newline at end of file + - Within the Email security dashboard, Phish submissions will allow you to have a full understanding of what reclassification has been made and what the outcomes of those submissions are. diff --git a/src/content/docs/learning-paths/surge-readiness/concepts/index.mdx b/src/content/docs/learning-paths/surge-readiness/concepts/index.mdx index 3432b43cd002658..47bf090845f40be 100644 --- a/src/content/docs/learning-paths/surge-readiness/concepts/index.mdx +++ b/src/content/docs/learning-paths/surge-readiness/concepts/index.mdx @@ -20,15 +20,15 @@ To learn more about our service offerings, refer to [Customer Success offerings] For the security and protection of your account, be sure to register all account users. -1. In the Cloudflare dashboard, go to the **Manage Account** > **Members** page. +1. In the Cloudflare dashboard, go to the **Manage Account** > **Members** page. - + 2. Select more than one Super Administrator to ensure appropriate access when needed. :::note -Refer to [Manage members](/fundamentals/manage-members/) to learn how to review and update registered account users. +Refer to [Manage members](/fundamentals/manage-members/) to learn how to review and update registered account users. ::: @@ -50,7 +50,7 @@ We strongly advise against credential-sharing which can jeopardize the trust and Certificates managed by Cloudflare are auto-renewed. ::: - Review your Operational and Disaster recovery preparedness - - Enable Load Balancing with smart cache strategies: Use [Cloudflare Load Balancing](/reference-architecture/architectures/load-balancing) to distribute traffic across multiple healthy origins, and increase cache-hit ratios by leveraging [custom cache rules](/cache/performance-review/cache-analytics) and [edge compute](https://www.cloudflare.com/learning/cdn/caching-static-and-dynamic-content/) (e.g., Cloudflare Workers) to offload origin traffic during high-demand periods. - - Configure failover pools and back up DNS with a playbook: Set up [Cloudflare Load Balancer failover pools](/reference-architecture/architectures/load-balancing) to automatically redirect traffic to healthy origins if one fails. Export DNS records for safekeeping and prepare a clear [incident response plan](https://www.cloudflare.com/learning/performance/preventing-downtime) that includes steps for re-routing or recovery. + - Enable Load Balancing with smart cache strategies: Use [Cloudflare Load Balancing](/reference-architecture/architectures/load-balancing) to distribute traffic across multiple healthy origins, and increase cache-hit ratios by leveraging [custom cache rules](/cache/performance-review/cache-analytics) and [edge compute](https://www.cloudflare.com/learning/cdn/caching-static-and-dynamic-content/) (e.g., Cloudflare Workers) to offload origin traffic during high-demand periods. + - Configure failover pools and back up DNS with a playbook: Set up [Cloudflare Load Balancer failover pools](/reference-architecture/architectures/load-balancing) to automatically redirect traffic to healthy origins if one fails. Export DNS records for safekeeping and prepare a clear [incident response plan](https://www.cloudflare.com/learning/performance/preventing-downtime) that includes steps for re-routing or recovery. - Review and update your current users' access -- Check your domain registry validity \ No newline at end of file +- Check your domain registry validity diff --git a/src/content/docs/learning-paths/surge-readiness/performance/analytics.mdx b/src/content/docs/learning-paths/surge-readiness/performance/analytics.mdx index 11fe9044b199b1c..d58062e1f6e2e72 100644 --- a/src/content/docs/learning-paths/surge-readiness/performance/analytics.mdx +++ b/src/content/docs/learning-paths/surge-readiness/performance/analytics.mdx @@ -14,16 +14,14 @@ products: Use the [Workers Analytics Engine](/analytics/analytics-engine/) to send unlimited-cardinality data from your Worker to a time-series database. Query it with SQL. - ## Account and zone analytics Use [Account and zone analytics](/analytics/account-and-zone-analytics/) to provide details about the requests and traffic related to your Cloudflare accounts and zones. - ## Cloudflare Network Analytics Use [Cloudflare Network Analytics](/analytics/network-analytics/) to provide near real-time visibility into network and transport-layer traffic patterns and DDoS attacks. ## GraphQL Analytics API -Use the [GraphQL Analytics API](/analytics/graphql-api/) to provide\ all of your performance, security, and reliability data from one endpoint. Select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account. \ No newline at end of file +Use the [GraphQL Analytics API](/analytics/graphql-api/) to provide\ all of your performance, security, and reliability data from one endpoint. Select exactly what you need, from one metric for a domain to multiple metrics aggregated for your account. diff --git a/src/content/docs/learning-paths/surge-readiness/performance/caching.mdx b/src/content/docs/learning-paths/surge-readiness/performance/caching.mdx index d594e17850fe651..7be8e912c96ed9a 100644 --- a/src/content/docs/learning-paths/surge-readiness/performance/caching.mdx +++ b/src/content/docs/learning-paths/surge-readiness/performance/caching.mdx @@ -16,26 +16,21 @@ import { DashButton } from "~/components"; By default, Cloudflare [caches static content](/cache/concepts/default-cache-behavior/) such as images, CSS, and JavaScript. However, you can extend Cloudflare caching to work with HTML by creating custom [Cache Rules](/cache/how-to/cache-rules/). - ### Cache more requests -1. In the Cloudflare dashboard, go to the **Caching** > **Cache Rules** page. +1. In the Cloudflare dashboard, go to the **Caching** > **Cache Rules** page. - + 2. Select **Create rule**. 3. For When incoming requests match, enter either your entire website or a specific path on your application, based on the Hostname or URI Path. Refer to the [available fields](/cache/how-to/cache-rules/settings/#fields). 4. For Cache eligibility, define how these requests should be cached and for how long. Refer to the available [cache eligibility settings](/cache/how-to/cache-rules/settings/#eligible-for-cache-settings). 5. You can then monitor the effectiveness of your cache settings using [Cache Analytics](/cache/performance-review/cache-analytics/) and update your configuration according to our [Cache performance guide](/cache/performance-review/cache-performance/). - ### Advanced cache optimizations - - -* [Custom Cache Keys](/cache/how-to/cache-keys/) allows you to precisely set the cacheability setting for any resource. -* [Origin Cache Control](/cache/concepts/cache-control/) can be used to let the Cache-Control headers tell Cloudflare how to handle content from the origin server. - +- [Custom Cache Keys](/cache/how-to/cache-keys/) allows you to precisely set the cacheability setting for any resource. +- [Origin Cache Control](/cache/concepts/cache-control/) can be used to let the Cache-Control headers tell Cloudflare how to handle content from the origin server. ## Tiered Cache @@ -45,7 +40,6 @@ It works by dividing Cloudflare's data centers into a hierarchy of lower-tiers a Refer to [Enable Tiered Cache](/cache/how-to/tiered-cache/#enable-tiered-cache) to get started. - ### Cache Reserve [Cache Reserve](/cache/advanced-configuration/cache-reserve/) is a large, persistent data store implemented on top of [R2](/r2/). @@ -54,38 +48,32 @@ With a single click in the dashboard, your cacheable content will be written to This ensures that your content is served from cache longer, shielding your origin from unneeded egress fees. - ## Cloudflare Waiting Room [Cloudflare Waiting Room](/waiting-room/) allows you to route excess users of your website to a customized waiting room, helping preserve customer experience and protect origin servers from being overwhelmed with requests. - ## Use Cloudflare IP addresses Take action to prevent attacks to your application during peak season by configuring your firewall to only accept traffic from Cloudflare IP addresses. By only allowing [Cloudflare IPs](https://www.cloudflare.com/ips), you can prevent attackers from bypassing Cloudflare and sending requests directly to your origin. Refer to [Cloudflare IP addresses](/fundamentals/concepts/cloudflare-ip-addresses/) for more information. - ## Monitor traffic You can use the Cloudflare dashboard to closely monitor the traffic on your domain and fine-tune your cache and security settings accordingly. - ### Zone and Account analytics [Cloudflare zone analytics](/analytics/account-and-zone-analytics/zone-analytics/) gives you access to a wide range of metrics, collected at the website or domain level. [Cloudflare account analytics](/analytics/account-and-zone-analytics/account-analytics/) lets you access a wide range of aggregated metrics from all the sites under a specific Cloudflare account. - ### Security Analytics and Security Events [Security Analytics](/waf/analytics/security-analytics/) displays information about all incoming HTTP requests for your domain, including requests not handled by Cloudflare security products. You can also use the [Security Events](/waf/analytics/security-events/) to review mitigated requests and tailor your security configurations. - ### Cache Analytics -You can use [Cache Analytics](/cache/performance-review/cache-analytics/) to improve site performance or reduce origin web server traffic. Cache Analytics helps determine if resources are missing from cache, expired, or ineligible for caching. \ No newline at end of file +You can use [Cache Analytics](/cache/performance-review/cache-analytics/) to improve site performance or reduce origin web server traffic. Cache Analytics helps determine if resources are missing from cache, expired, or ineligible for caching. diff --git a/src/content/docs/learning-paths/surge-readiness/performance/index.mdx b/src/content/docs/learning-paths/surge-readiness/performance/index.mdx index 63efb8a1e0f3aef..2655eccdda8256f 100644 --- a/src/content/docs/learning-paths/surge-readiness/performance/index.mdx +++ b/src/content/docs/learning-paths/surge-readiness/performance/index.mdx @@ -10,4 +10,4 @@ products: - waf - cache - ddos-protection ---- \ No newline at end of file +--- diff --git a/src/content/docs/learning-paths/surge-readiness/performance/logs.mdx b/src/content/docs/learning-paths/surge-readiness/performance/logs.mdx index 46f719837ac8da1..6434accda802398 100644 --- a/src/content/docs/learning-paths/surge-readiness/performance/logs.mdx +++ b/src/content/docs/learning-paths/surge-readiness/performance/logs.mdx @@ -14,17 +14,14 @@ products: Use [Logpush](/logs/logpush/) to push your request or event logs to your cloud service provider using Logpush, which can be configured via the Cloudflare dashboard or API. - ## Instant Logs Use [Instant Logs](/logs/instant-logs/) to view HTTP request logs instantly in the Cloudflare dashboard or the CLI. - ## Logs Engine -Use the [Logs Engine](/logs/r2-log-retrieval/) to store your logs in R2 and query them directly. - +Use the [Logs Engine](/logs/r2-log-retrieval/) to store your logs in R2 and query them directly. ## Log Explorer -Use the [Log Explorer](/log-explorer/) to store and explore your Cloudflare logs directly within the Cloudflare dashboard or API. \ No newline at end of file +Use the [Log Explorer](/log-explorer/) to store and explore your Cloudflare logs directly within the Cloudflare dashboard or API. diff --git a/src/content/docs/learning-paths/surge-readiness/security/block-agents-lock-zones.mdx b/src/content/docs/learning-paths/surge-readiness/security/block-agents-lock-zones.mdx index 07a1c32748a4a4b..075b1e688bd6801 100644 --- a/src/content/docs/learning-paths/surge-readiness/security/block-agents-lock-zones.mdx +++ b/src/content/docs/learning-paths/surge-readiness/security/block-agents-lock-zones.mdx @@ -10,7 +10,6 @@ products: - ddos-protection --- - [User Agent (UA) Blocking](/waf/tools/user-agent-blocking/) rules match against specific User-Agent request headers sent by the browser or application accessing your site. UA rules are applied against the entire domain, and after a rule is triggered, you can decide which action to take against the visitor. Actions: diff --git a/src/content/docs/learning-paths/surge-readiness/security/confirm-account-security.mdx b/src/content/docs/learning-paths/surge-readiness/security/confirm-account-security.mdx index 8a5b929f561880a..c0d4fe2c9a50ebe 100644 --- a/src/content/docs/learning-paths/surge-readiness/security/confirm-account-security.mdx +++ b/src/content/docs/learning-paths/surge-readiness/security/confirm-account-security.mdx @@ -14,4 +14,4 @@ import { DirectoryListing } from "~/components"; Review the list below for guidance on securing your account. - \ No newline at end of file + diff --git a/src/content/docs/learning-paths/surge-readiness/security/control-domain-access.mdx b/src/content/docs/learning-paths/surge-readiness/security/control-domain-access.mdx index 9fb487a7190ccfd..8508360fa7d7ac7 100644 --- a/src/content/docs/learning-paths/surge-readiness/security/control-domain-access.mdx +++ b/src/content/docs/learning-paths/surge-readiness/security/control-domain-access.mdx @@ -14,13 +14,10 @@ products: IP Access Rules can be applied based on: - - -* IPv4 address or range: Specified in CIDR notation as `/16` or `/24` -* IPv6 address or range: Specified in CIDR notation as `/32`, `/48`, `/64` -* ASN -* Country or the Tor network - +- IPv4 address or range: Specified in CIDR notation as `/16` or `/24` +- IPv6 address or range: Specified in CIDR notation as `/32`, `/48`, `/64` +- ASN +- Country or the Tor network :::note @@ -34,4 +31,3 @@ Actions: - Non-Interactive Challenge: Visitors will be shown a non-interactive challenge before allowed access. - Interactive Challenge: Visitors will be shown an interactive challenge before allowed access. - Allowlist: Ensures that an IP address will never be blocked from accessing your site. This supersedes any Cloudflare security profile. - diff --git a/src/content/docs/learning-paths/surge-readiness/security/enable-iaum.mdx b/src/content/docs/learning-paths/surge-readiness/security/enable-iaum.mdx index 1c28bd66975b7dd..2436739e7c61285 100644 --- a/src/content/docs/learning-paths/surge-readiness/security/enable-iaum.mdx +++ b/src/content/docs/learning-paths/surge-readiness/security/enable-iaum.mdx @@ -1,7 +1,7 @@ --- title: What to do when under attack pcx_content_type: overview -sidebar: +sidebar: order: 9 description: Respond to active DDoS attacks. products: @@ -16,14 +16,12 @@ If you are under attack and have this feature enabled during the attack, visitor Refer to [I'm Under Attack Mode](https://developers.cloudflare.com/fundamentals/reference/under-attack-mode/) for more information. - ## Change Access Control List (ACL) An ACL refers to rules that are applied to port numbers or IP addresses that are available on a host permitting use of the service. When you only allow Cloudflare IPs, you eliminate threats attempting to attack your origin IP range. Refer to [Cloudflare IP Ranges](https://www.cloudflare.com/ips) for more information. - ## Change Origin IPs and update Cloudflare DNS records If your origin is still being attacked, consider moving your Origin IPs and updating your Cloudflare DNS records. diff --git a/src/content/docs/learning-paths/surge-readiness/security/index.mdx b/src/content/docs/learning-paths/surge-readiness/security/index.mdx index cd4191d21fbf2c9..4e47eb5f69bf264 100644 --- a/src/content/docs/learning-paths/surge-readiness/security/index.mdx +++ b/src/content/docs/learning-paths/surge-readiness/security/index.mdx @@ -10,4 +10,4 @@ products: - waf - cache - ddos-protection ---- \ No newline at end of file +--- diff --git a/src/content/docs/learning-paths/surge-readiness/support/index.mdx b/src/content/docs/learning-paths/surge-readiness/support/index.mdx index 38e3bfb1f22fb97..289654ff24ecd81 100644 --- a/src/content/docs/learning-paths/surge-readiness/support/index.mdx +++ b/src/content/docs/learning-paths/surge-readiness/support/index.mdx @@ -10,4 +10,4 @@ products: - waf - cache - ddos-protection ---- \ No newline at end of file +--- diff --git a/src/content/docs/learning-paths/surge-readiness/support/resources.mdx b/src/content/docs/learning-paths/surge-readiness/support/resources.mdx index 1ae293e1c4a56e6..0ce3a91e3055cfd 100644 --- a/src/content/docs/learning-paths/surge-readiness/support/resources.mdx +++ b/src/content/docs/learning-paths/surge-readiness/support/resources.mdx @@ -10,15 +10,14 @@ products: - ddos-protection --- -import { Plan } from "~/components" +import { Plan } from "~/components"; - -| Support type | Resource | -| ------------ | -------- | -| Self-serve questions | https://support.cloudflare.com
    https://developers.cloudflare.com/fundamentals | -| Strategic guidance and best practices (proactive) | Reach out to your dedicated account team | -| Non-critical production issues (reactive) | - [Support portal](https://dash.cloudflare.com/?to=/:account/support)
    - Dashboard chat | -| Critical issues such as attacks (reactive) | - Call the 24/7 Emergency Support line - www.cloudflare.com/ecp/support (global lines)| +| Support type | Resource | +| ------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| Self-serve questions | https://support.cloudflare.com
    https://developers.cloudflare.com/fundamentals | +| Strategic guidance and best practices (proactive) | Reach out to your dedicated account team | +| Non-critical production issues (reactive) | - [Support portal](https://dash.cloudflare.com/?to=/:account/support)
    - Dashboard chat | +| Critical issues such as attacks (reactive) | - Call the 24/7 Emergency Support line - www.cloudflare.com/ecp/support (global lines) | :::note For security reasons, Cloudflare Support only assists individuals whose email addresses are validated against the list of registered account contacts. Review and update all contacts accordingly in your Cloudflare Dashboard. For more information, refer to [Manage members](/fundamentals/manage-members/). diff --git a/src/content/docs/learning-paths/workers/concepts/cloudflare-intro.mdx b/src/content/docs/learning-paths/workers/concepts/cloudflare-intro.mdx index 2865a6b3e04b8af..898e3bb0f7ac8ed 100644 --- a/src/content/docs/learning-paths/workers/concepts/cloudflare-intro.mdx +++ b/src/content/docs/learning-paths/workers/concepts/cloudflare-intro.mdx @@ -24,13 +24,13 @@ If your application is built on Cloudflare, then Cloudflare would act as the ori An example tech stack for an application built on Cloudflare would look like: -* [Domain Registrar](/registrar/) to buy a new your domain. -* [Cloudflare Pages](/pages/) to configure and deploy a front-end site. -* [Cloudflare Workers](/workers/) or [Pages Functions](/pages/functions/) (which are Workers under the hood) to add dynamic functionality to your site. -* [Storage resources](/workers/platform/storage-options/) to persist different types of data. -* [Application security (DDoS protection, WAF, and more)](https://www.cloudflare.com/application-services/products/#security-services) to secure your site. -* [Application performance (CDN, Load Balancing, and more)](https://www.cloudflare.com/application-services/products/#performance-services) to customize and enhance your site's performance. -* [AI](/use-cases/ai/) to run machine learning models. +- [Domain Registrar](/registrar/) to buy a new your domain. +- [Cloudflare Pages](/pages/) to configure and deploy a front-end site. +- [Cloudflare Workers](/workers/) or [Pages Functions](/pages/functions/) (which are Workers under the hood) to add dynamic functionality to your site. +- [Storage resources](/workers/platform/storage-options/) to persist different types of data. +- [Application security (DDoS protection, WAF, and more)](https://www.cloudflare.com/application-services/products/#security-services) to secure your site. +- [Application performance (CDN, Load Balancing, and more)](https://www.cloudflare.com/application-services/products/#performance-services) to customize and enhance your site's performance. +- [AI](/use-cases/ai/) to run machine learning models. And more depending on your use case. @@ -42,11 +42,11 @@ When you add your application to Cloudflare, Cloudflare's global network of serv After you add your application to [Cloudflare](/fundamentals/concepts/how-cloudflare-works/), you can: -* Use Workers to augment the application by deploying code. -* Add storage resources available on the Developer Platform. -* Enhance your application's performance by speeding up content delivery and user experience ([CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/)). -* Protect your website from malicious activity ([DDoS](https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/) by configuring the [Web Application Firewall](https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/)). -* Route traffic ([Load balancing](/load-balancing/), [Waiting Room](/waiting-room/)). +- Use Workers to augment the application by deploying code. +- Add storage resources available on the Developer Platform. +- Enhance your application's performance by speeding up content delivery and user experience ([CDN](https://www.cloudflare.com/learning/cdn/what-is-a-cdn/)). +- Protect your website from malicious activity ([DDoS](https://www.cloudflare.com/learning/ddos/what-is-a-ddos-attack/) by configuring the [Web Application Firewall](https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/)). +- Route traffic ([Load balancing](/load-balancing/), [Waiting Room](/waiting-room/)). And more depending on your use case. @@ -54,8 +54,8 @@ And more depending on your use case. By reading this page, you have: -* Learned the scale of Cloudflare's global network. -* Explored the product offering to know what Cloudflare can offer for users like you. -* Reviewed how you can build your applications with Cloudflare and Cloudflare Workers. +- Learned the scale of Cloudflare's global network. +- Explored the product offering to know what Cloudflare can offer for users like you. +- Reviewed how you can build your applications with Cloudflare and Cloudflare Workers. In the next section, you will be introduced to the fundamentals of serverless computing, the concept behind Cloudflare Workers. diff --git a/src/content/docs/learning-paths/workers/concepts/index.mdx b/src/content/docs/learning-paths/workers/concepts/index.mdx index e293a2f1d9d87d7..9837915441175e0 100644 --- a/src/content/docs/learning-paths/workers/concepts/index.mdx +++ b/src/content/docs/learning-paths/workers/concepts/index.mdx @@ -16,6 +16,6 @@ Learn the concepts behind what makes Cloudflare Workers reliable, scalable and f By the end of this module, you will learn: -* What Cloudflare is. -* The difference between serverless computing and cloud computing paradigms. -* How Workers works. +- What Cloudflare is. +- The difference between serverless computing and cloud computing paradigms. +- How Workers works. diff --git a/src/content/docs/learning-paths/workers/concepts/serverless-computing.mdx b/src/content/docs/learning-paths/workers/concepts/serverless-computing.mdx index 1fd5f921d05c1ed..c9f1788b07d3213 100644 --- a/src/content/docs/learning-paths/workers/concepts/serverless-computing.mdx +++ b/src/content/docs/learning-paths/workers/concepts/serverless-computing.mdx @@ -40,8 +40,8 @@ Developers and organizations using serverless computing are billed on a usage mo By reading this page, you have: -* Been introduced to the serverless computing concept that is behind Cloudflare Workers. -* Reviewed the differences between legacy on-premise and cloud computing infrastructure. -* Analyzed the key differences between the cloud computing and serverless computing paradigms. +- Been introduced to the serverless computing concept that is behind Cloudflare Workers. +- Reviewed the differences between legacy on-premise and cloud computing infrastructure. +- Analyzed the key differences between the cloud computing and serverless computing paradigms. In the next section, you will learn about what makes Workers, a serverless computing platform that is part of the larger Cloudflare Developer Platform, unique in its architecture from other serverless computing providers. diff --git a/src/content/docs/learning-paths/workers/devplat/index.mdx b/src/content/docs/learning-paths/workers/devplat/index.mdx index f792c7ba4cbfda3..365fd4fa0f8d551 100644 --- a/src/content/docs/learning-paths/workers/devplat/index.mdx +++ b/src/content/docs/learning-paths/workers/devplat/index.mdx @@ -16,5 +16,5 @@ The Cloudflare Developer Platform allows you to build full-stack applications wi By the end of this module, you will learn: -* Cloudflare Developer Platform's product offering. -* What storage options are available to your Worker. +- Cloudflare Developer Platform's product offering. +- What storage options are available to your Worker. diff --git a/src/content/docs/learning-paths/workers/devplat/intro-to-devplat.mdx b/src/content/docs/learning-paths/workers/devplat/intro-to-devplat.mdx index 20e6536f1ef0349..5a516cca6e30fc3 100644 --- a/src/content/docs/learning-paths/workers/devplat/intro-to-devplat.mdx +++ b/src/content/docs/learning-paths/workers/devplat/intro-to-devplat.mdx @@ -8,7 +8,7 @@ products: - workers --- -import { Render, YouTube } from "~/components" +import { Render, YouTube } from "~/components"; The [Cloudflare Developer Platform](https://www.cloudflare.com/developer-platform/products/) offers various services to empower developers to build full-stack applications, including: [compute](https://www.cloudflare.com/developer-platform/products/#compute), [storage](https://www.cloudflare.com/developer-platform/products/#storage), [web development, image optimization, video streaming](https://www.cloudflare.com/developer-platform/products/#webdev) and [AI](https://ai.cloudflare.com/). diff --git a/src/content/docs/learning-paths/workers/get-started/c3-and-wrangler.mdx b/src/content/docs/learning-paths/workers/get-started/c3-and-wrangler.mdx index 4783f290410f89f..491c0bb0dc6773c 100644 --- a/src/content/docs/learning-paths/workers/get-started/c3-and-wrangler.mdx +++ b/src/content/docs/learning-paths/workers/get-started/c3-and-wrangler.mdx @@ -18,8 +18,8 @@ You can build and develop your Worker on the Cloudflare dashboard, without needi The Cloudflare Developer Platform ecosystem has two command-line interfaces (CLI): -* C3: To create new projects. -* Wrangler: To build and deploy your projects. +- C3: To create new projects. +- Wrangler: To build and deploy your projects. ## C3 @@ -45,7 +45,7 @@ Cloudflare recommends choosing and using one [source of truth](/workers/wrangler By reading this page, you have learned: -* How to use C3 to create new Workers and Pages projects. -* How to use Wrangler to develop, configure, and delete your projects. +- How to use C3 to create new Workers and Pages projects. +- How to use Wrangler to develop, configure, and delete your projects. In the next section, you will learn more about the Cloudflare dashboard before moving on to deploy your first Worker. diff --git a/src/content/docs/learning-paths/workers/get-started/first-application.mdx b/src/content/docs/learning-paths/workers/get-started/first-application.mdx index 422ae8875a66d14..5797be4e53286d6 100644 --- a/src/content/docs/learning-paths/workers/get-started/first-application.mdx +++ b/src/content/docs/learning-paths/workers/get-started/first-application.mdx @@ -9,6 +9,7 @@ description: Build an AI application with Hono. products: - workers --- + import { DashButton } from "~/components"; ## Build an AI application with Hono and Workers @@ -17,21 +18,21 @@ If you have already created your first Worker and want to learn what more you ca In this course, you will: -* Deploy your first Worker. -* Develop your application locally. -* Add the Hono framework to your project. -* Integrate Workers AI into your project. +- Deploy your first Worker. +- Develop your application locally. +- Add the Hono framework to your project. +- Integrate Workers AI into your project.
    - +
    -
    +
    Find [the video on YouTube](https://youtu.be/H7Qe96fqg1M?si=GVkdGLrmb1faiHma) and explore other Cloudflare Workers tutorials. diff --git a/src/content/docs/learning-paths/workers/get-started/index.mdx b/src/content/docs/learning-paths/workers/get-started/index.mdx index 39b04e54f6794eb..a25e920d7e95452 100644 --- a/src/content/docs/learning-paths/workers/get-started/index.mdx +++ b/src/content/docs/learning-paths/workers/get-started/index.mdx @@ -14,6 +14,6 @@ Deploy your first Worker to the Cloudflare global network by By the end of this module, you will learn: -* The difference between C3 (`create-cloudflare` CLI) and Wrangler. -* How to use the Cloudflare dashboard to manage your Workers. -* How to create and deploy your first Worker. +- The difference between C3 (`create-cloudflare` CLI) and Wrangler. +- How to use the Cloudflare dashboard to manage your Workers. +- How to create and deploy your first Worker. diff --git a/src/content/docs/load-balancing/additional-options/additional-dns-records.mdx b/src/content/docs/load-balancing/additional-options/additional-dns-records.mdx index cc182b7d7c81178..a01215316a0f040 100644 --- a/src/content/docs/load-balancing/additional-options/additional-dns-records.mdx +++ b/src/content/docs/load-balancing/additional-options/additional-dns-records.mdx @@ -7,7 +7,6 @@ products: head: - tag: title content: Load balance additional DNS records - --- In addition to load balancing between DNS records used for IP resolution — `A`, `AAAA`, and `CNAME` records — Enterprise customers can also load balance between **MX** and **SRV** records. @@ -17,7 +16,7 @@ In addition to load balancing between DNS records used for IP resolution — `A` To load balance between multiple mail servers: 1. Make sure you have the [required DNS records](/dns/manage-dns-records/how-to/email-records/#send-and-receive-email) for your mail servers. -2. [Create a monitor](/load-balancing/monitors/create-monitor/) with a **Type** of *SMTP*. +2. [Create a monitor](/load-balancing/monitors/create-monitor/) with a **Type** of _SMTP_. 3. [Create a pool](/load-balancing/pools/create-pool/) with your mail servers and attach the newly created monitor. 4. [Create a load balancer](/load-balancing/load-balancers/create-load-balancer/) that includes your newly created pools. Since it will forward SMTP traffic, the load balancer should be [unproxied (DNS-only)](/load-balancing/understand-basics/proxy-modes/#dns-only-load-balancing). @@ -26,6 +25,6 @@ To load balance between multiple mail servers: To load balance between different **SRV** records, which contain significantly more information than many other DNS records: 1. [Create your SRV records](/dns/manage-dns-records/how-to/create-dns-records/#create-dns-records). -2. [Create a monitor](/load-balancing/monitors/create-monitor/) with a **Type** of *UDP-ICMP* or *TCP*. +2. [Create a monitor](/load-balancing/monitors/create-monitor/) with a **Type** of _UDP-ICMP_ or _TCP_. 3. [Create a pool](/load-balancing/pools/create-pool/) with your various SRV records and attach the newly created monitor. 4. [Create a load balancer](/load-balancing/load-balancers/create-load-balancer/) that includes your newly created pools. This load balancer should be [unproxied (DNS-only)](/load-balancing/understand-basics/proxy-modes/#dns-only-load-balancing). diff --git a/src/content/docs/load-balancing/additional-options/cloudflare-tunnel.mdx b/src/content/docs/load-balancing/additional-options/cloudflare-tunnel.mdx index 26703586383732d..826228781b9546b 100644 --- a/src/content/docs/load-balancing/additional-options/cloudflare-tunnel.mdx +++ b/src/content/docs/load-balancing/additional-options/cloudflare-tunnel.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Route traffic through a Cloudflare Tunnel - --- Cloudflare Tunnel (formerly Argo Tunnel) establishes a secure outbound connection which runs in your infrastructure to connect the applications and machines to Cloudflare. diff --git a/src/content/docs/load-balancing/additional-options/index.mdx b/src/content/docs/load-balancing/additional-options/index.mdx index fa8021c02caae66..67bfe4b67c3ffd3 100644 --- a/src/content/docs/load-balancing/additional-options/index.mdx +++ b/src/content/docs/load-balancing/additional-options/index.mdx @@ -6,22 +6,21 @@ products: title: Additional configuration sidebar: order: 49 - --- Beyond [creating a simple load balancer](/load-balancing/load-balancers/create-load-balancer/), you may want to further customize how your load balancer routes traffic or integrate your load balancer with other Cloudflare products. ## Customize load balancer behavior -* Route traffic according to characteristics of each request by [creating custom rules](/load-balancing/additional-options/load-balancing-rules/) -* Protect at-risk endpoints from reaching failover by [setting up load shedding](/load-balancing/additional-options/load-shedding/) -* Take endpoints out of rotation for [planned maintenance](/load-balancing/additional-options/planned-maintenance/) +- Route traffic according to characteristics of each request by [creating custom rules](/load-balancing/additional-options/load-balancing-rules/) +- Protect at-risk endpoints from reaching failover by [setting up load shedding](/load-balancing/additional-options/load-shedding/) +- Take endpoints out of rotation for [planned maintenance](/load-balancing/additional-options/planned-maintenance/) ## Integrate with other Cloudflare products -* Bring load balancing to your TCP or UDP applications with [Cloudflare Spectrum](/load-balancing/additional-options/spectrum/) -* Further secure endpoint access with [Cloudflare Tunnel](/load-balancing/additional-options/cloudflare-tunnel/) +- Bring load balancing to your TCP or UDP applications with [Cloudflare Spectrum](/load-balancing/additional-options/spectrum/) +- Further secure endpoint access with [Cloudflare Tunnel](/load-balancing/additional-options/cloudflare-tunnel/) ## Integrate with 3rd parties -* Increase visibility by [sending health monitor notifications to PagerDuty](/load-balancing/additional-options/pagerduty-integration/) +- Increase visibility by [sending health monitor notifications to PagerDuty](/load-balancing/additional-options/pagerduty-integration/) diff --git a/src/content/docs/load-balancing/additional-options/load-balancing-china.mdx b/src/content/docs/load-balancing/additional-options/load-balancing-china.mdx index ce90921b4f41919..e0591ff2cfa42ea 100644 --- a/src/content/docs/load-balancing/additional-options/load-balancing-china.mdx +++ b/src/content/docs/load-balancing/additional-options/load-balancing-china.mdx @@ -6,7 +6,6 @@ products: title: Load Balancing with the China Network sidebar: order: 15 - --- ## Prerequisites diff --git a/src/content/docs/load-balancing/additional-options/load-balancing-rules/expressions.mdx b/src/content/docs/load-balancing/additional-options/load-balancing-rules/expressions.mdx index 3fa85bff4993517..ef52ac1aafb7236 100644 --- a/src/content/docs/load-balancing/additional-options/load-balancing-rules/expressions.mdx +++ b/src/content/docs/load-balancing/additional-options/load-balancing-rules/expressions.mdx @@ -9,16 +9,15 @@ sidebar: head: - tag: title content: Load Balancing expressions - --- [Load Balancing rules](/load-balancing/additional-options/load-balancing-rules/) use two kinds of expressions: -* [Simple expressions](#simple-expressions) compare a value from an HTTP request to a value defined in the expression. A simple expression is identified by the presence of a **comparison operator** (*equals* or *less than*, for example). +- [Simple expressions](#simple-expressions) compare a value from an HTTP request to a value defined in the expression. A simple expression is identified by the presence of a **comparison operator** (_equals_ or _less than_, for example). -* [Compound expressions](#compound-expressions) combine two or more simple expressions into a single expression. Compound expression contains a **logical operator** (*and*, *or*, for example). With compound expressions you can tailor rules to specific use cases with a high degree of accuracy and precision. +- [Compound expressions](#compound-expressions) combine two or more simple expressions into a single expression. Compound expression contains a **logical operator** (_and_, _or_, for example). With compound expressions you can tailor rules to specific use cases with a high degree of accuracy and precision. -*** +--- ## Simple expressions @@ -44,11 +43,11 @@ In general, simple expressions use this pattern: For more details, refer to [Supported fields and operators](/load-balancing/additional-options/load-balancing-rules/reference/). -*** +--- ## Compound expressions -A compound expression uses a **logical operator** (*and*, *or*, for example) to combine two or more expressions. Compound expressions allow you to build complex statements within a single expression. +A compound expression uses a **logical operator** (_and_, _or_, for example) to combine two or more expressions. Compound expressions allow you to build complex statements within a single expression. The example expression below returns true when both the HTTP request URI path contains `/content` and the query string contains `webserver`: @@ -67,7 +66,7 @@ A compound expression can be an operand of a logical operator. This allows multi For more details, refer to [Supported fields and operators](/load-balancing/additional-options/load-balancing-rules/reference/). -*** +--- ## Working with expressions diff --git a/src/content/docs/load-balancing/additional-options/override-http-host-headers.mdx b/src/content/docs/load-balancing/additional-options/override-http-host-headers.mdx index 135607380a8e453..ec4cd87db9d1d86 100644 --- a/src/content/docs/load-balancing/additional-options/override-http-host-headers.mdx +++ b/src/content/docs/load-balancing/additional-options/override-http-host-headers.mdx @@ -6,19 +6,16 @@ products: title: Override HTTP Host headers sidebar: order: 16 - --- When your application needs specialized routing (`CNAME` setup or custom hosts like Heroku), you can customize the `Host` header used in health monitors on a per-endpoint or per-monitor level. :::caution[Important] - If you set a header override on an individual endpoint, it will take precedence over a header override set on a monitor. Also, if you configure an [Origin Rule](/rules/origin-rules/) that overrides the hostname and set up a header override in your Load Balancer configuration, the Load Balancer configuration will take precedence over the Origin Rule hostname override. - ::: ## Per endpoint Host header override @@ -27,13 +24,13 @@ To balance traffic across multiple hosts, add `Host` headers to individual endpo For example, you might have a pool with endpoints hosted in multiple AppEngine projects or Amazon S3 buckets. You also might want to set up specific failover endpoints within a pool. -Since these examples require specific hostnames per endpoint, your load balancer will not properly route traffic *without* a `Host` header override. +Since these examples require specific hostnames per endpoint, your load balancer will not properly route traffic _without_ a `Host` header override. If you need an endpoint `Host` header override, add it when [creating](/load-balancing/pools/create-pool/) or editing a pool. For security reasons, this header must meet one of the following criteria: -* Is a subdomain of a zone associated with this account -* Matches the endpoint address -* Publicly resolves to the endpoint address +- Is a subdomain of a zone associated with this account +- Matches the endpoint address +- Publicly resolves to the endpoint address ## Host header prioritization @@ -41,19 +38,16 @@ If you set a header override on an individual endpoint, it will take precedence For example, you might have a load balancer for `www.example.com` with the following setup: -* Pools: - - * Pool 1: - - * Endpoint 1 (`Host` header set to `lb-app-a.example.com`) - * Endpoint 2 - - * Pool 2: +- Pools: + - Pool 1: + - Endpoint 1 (`Host` header set to `lb-app-a.example.com`) + - Endpoint 2 - * Endpoint 3 - * Endpoint 4 (`Host` header set to `lb-app-b.example.com`) + - Pool 2: + - Endpoint 3 + - Endpoint 4 (`Host` header set to `lb-app-b.example.com`) -* Monitor (`Host` header set to `www.example.com`) +- Monitor (`Host` header set to `www.example.com`) In this scenario, health monitor requests for **Endpoint 1** would use `lb-app-a.example.com`, health monitor requests for **Endpoint 4** would use `lb-app-b.example.com`, and all other health monitor requests would default to `www.example.com`. For more information on updating your custom host configuration to be compatible with Cloudflare, see [Configure Cloudflare and Heroku over HTTPS](/support/third-party-software/others/configure-cloudflare-and-heroku-over-https/). diff --git a/src/content/docs/load-balancing/additional-options/pagerduty-integration.mdx b/src/content/docs/load-balancing/additional-options/pagerduty-integration.mdx index 800fefee9fab77d..f9d25700c2ef3e6 100644 --- a/src/content/docs/load-balancing/additional-options/pagerduty-integration.mdx +++ b/src/content/docs/load-balancing/additional-options/pagerduty-integration.mdx @@ -6,7 +6,6 @@ products: title: Integrate with PagerDuty sidebar: order: 41 - --- To integrate Cloudflare health monitor notifications with PagerDuty, follow the steps outlined in PagerDuty’s [Email Integration Guide](https://www.pagerduty.com/docs/guides/email-integration-guide/). If you do not have a PagerDuty account, you will first need to set that up. diff --git a/src/content/docs/load-balancing/additional-options/planned-maintenance.mdx b/src/content/docs/load-balancing/additional-options/planned-maintenance.mdx index 44d8e5917088c19..934c8b9eaad2618 100644 --- a/src/content/docs/load-balancing/additional-options/planned-maintenance.mdx +++ b/src/content/docs/load-balancing/additional-options/planned-maintenance.mdx @@ -18,10 +18,8 @@ To direct traffic away from your endpoint immediately, [adjust settings on the p :::note - If you want to divert traffic from an endpoint to prevent it from becoming unhealthy, use [Load Shedding](/load-balancing/additional-options/load-shedding/) instead. - ::: ## Before you begin @@ -34,10 +32,8 @@ If a pool falls below its **Health Threshold**, it will be considered **Unhealth :::note - Endpoint drain is only available for [proxied load balancers (orange-clouded)](/load-balancing/understand-basics/proxy-modes/). - ::: With [session-based load balancing](/load-balancing/understand-basics/session-affinity/), it is important to direct all requests from a particular end user to a specific endpoint. Otherwise, information about the user session — such as items in their shopping cart — may be lost and lead to negative business outcomes. @@ -63,10 +59,10 @@ To remove an endpoint from rotation while still preserving session continuity, s To direct traffic away from an endpoint immediately: 1. Do one of the following actions: - * On the endpoint's [monitor](/load-balancing/monitors/), update the monitor settings so the endpoint will fail health monitor requests, such as putting an incorrect value for the **Response Body** or **Response Code**. - * On the pool, disable the endpoint. - * On the pool, set the [endpoint weight](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights) to `0` (though traffic may still reach the endpoint if it is included in multiple pools). + - On the endpoint's [monitor](/load-balancing/monitors/), update the monitor settings so the endpoint will fail health monitor requests, such as putting an incorrect value for the **Response Body** or **Response Code**. + - On the pool, disable the endpoint. + - On the pool, set the [endpoint weight](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights) to `0` (though traffic may still reach the endpoint if it is included in multiple pools). 2. Monitor [Load Balancing Analytics](/load-balancing/reference/load-balancing-analytics/) to make sure no requests are reaching the pool. - * If you are using [DNS-only load balancing (gray-clouded)](/load-balancing/understand-basics/proxy-modes/), changes may be delayed due to DNS resolver caching. + - If you are using [DNS-only load balancing (gray-clouded)](/load-balancing/understand-basics/proxy-modes/), changes may be delayed due to DNS resolver caching. 3. Perform your required maintenance or upgrades. 4. Undo the changes you made in **Step 1**. diff --git a/src/content/docs/load-balancing/api-reference.mdx b/src/content/docs/load-balancing/api-reference.mdx index beaae8039b92f86..5fcef7600b948c2 100644 --- a/src/content/docs/load-balancing/api-reference.mdx +++ b/src/content/docs/load-balancing/api-reference.mdx @@ -7,5 +7,4 @@ title: API reference external_link: /api/resources/load_balancers/methods/get/ sidebar: order: 152 - --- diff --git a/src/content/docs/load-balancing/get-started/enable-load-balancing.mdx b/src/content/docs/load-balancing/get-started/enable-load-balancing.mdx index 2d257351a66f0cf..290ae83ee3bfbe9 100644 --- a/src/content/docs/load-balancing/get-started/enable-load-balancing.mdx +++ b/src/content/docs/load-balancing/get-started/enable-load-balancing.mdx @@ -9,10 +9,9 @@ head: - tag: title content: Enable Load Balancing description: Learn how to enable load balancing. - --- -import { Render, DashButton } from "~/components" +import { Render, DashButton } from "~/components"; Load balancing is an add-on for your account, meaning your account needs a [billing profile](/billing/get-started/create-billing-profile/). diff --git a/src/content/docs/load-balancing/get-started/index.mdx b/src/content/docs/load-balancing/get-started/index.mdx index 718f24899007689..42931ed740f8d8a 100644 --- a/src/content/docs/load-balancing/get-started/index.mdx +++ b/src/content/docs/load-balancing/get-started/index.mdx @@ -6,10 +6,9 @@ products: title: Get started sidebar: order: 1 - --- Get started with load balancing in one of two ways: -* [Quickstart](/load-balancing/get-started/quickstart/): Get up and running quickly with Load Balancing. -* [Learning path](/learning-paths/load-balancing/concepts/): Check an in-depth walkthrough for how to plan and set up a load balancer. +- [Quickstart](/load-balancing/get-started/quickstart/): Get up and running quickly with Load Balancing. +- [Learning path](/learning-paths/load-balancing/concepts/): Check an in-depth walkthrough for how to plan and set up a load balancer. diff --git a/src/content/docs/load-balancing/load-balancers/common-configurations.mdx b/src/content/docs/load-balancing/load-balancers/common-configurations.mdx index 47be390136f8260..9e97aeac3cc0923 100644 --- a/src/content/docs/load-balancing/load-balancers/common-configurations.mdx +++ b/src/content/docs/load-balancing/load-balancers/common-configurations.mdx @@ -6,7 +6,6 @@ products: title: Common configurations sidebar: order: 6 - --- Consider the following sections to understand how to achieve some commonly used load balancer configurations. @@ -39,13 +38,11 @@ This setup speeds up overall requests, but is more vulnerable to planned or unpl To set up a load balancer with **active-active failover**, either: -* Create a load balancer with a single pool (`primary`) with multiple endpoints (`endpoint-1` and `endpoint-2`) and set the same [**Weight**](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights) for each endpoint. -* Create a load balancer with two pools (`primary` and `secondary`) and — for [**Traffic Steering**](/load-balancing/understand-basics/traffic-steering/steering-policies/) — select any option except for **Off**. +- Create a load balancer with a single pool (`primary`) with multiple endpoints (`endpoint-1` and `endpoint-2`) and set the same [**Weight**](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights) for each endpoint. +- Create a load balancer with two pools (`primary` and `secondary`) and — for [**Traffic Steering**](/load-balancing/understand-basics/traffic-steering/steering-policies/) — select any option except for **Off**. :::note - For more background reading on server failover and common configurations, refer to [our Learning Center](https://www.cloudflare.com/learning/performance/what-is-server-failover/). - ::: diff --git a/src/content/docs/load-balancing/monitors/index.mdx b/src/content/docs/load-balancing/monitors/index.mdx index 4f3257567e10daf..1e9332fef2a2c18 100644 --- a/src/content/docs/load-balancing/monitors/index.mdx +++ b/src/content/docs/load-balancing/monitors/index.mdx @@ -86,6 +86,6 @@ The following table summarizes the different types of monitors available in Clou | ------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | | HTTP/HTTPS | Public and private | Used for HTTP and HTTPS endpoints with specific protocol attributes. | The probe is configured with settings and success criteria such as Method, Simulate Zone, Follow Redirects, Request Headers, and Response Body. The probe then evaluates the configured success criteria using the HTTP protocol. Throughout the configured timeout period, the TCP connection is kept active using [keep-alives](/fundamentals/reference/tcp-connections/#tcp-connections-and-keep-alives), even if no response is received. | Success is based on meeting the configured HTTP success criteria. No response within the configured timeout and retries is considered unhealthy. | | TCP | Public and private | Checks TCP connectivity by attempting to open a connection to the endpoint. | The monitor sends a TCP SYN message to the specified port. A successful health check requires receiving a SYN/ACK message to establish the connection. The connection is closed by sending a FIN or RST packet, or by receiving a FIN packet from the endpoint. | Failure to establish a TCP connection within the configured timeout and retries is considered unhealthy. | -| ICMP Ping | Public and Tunnel | Confirms basic Layer 3 (L3) connectivity to the endpoint using ICMP. The endpoints need to be allowed to reply to ICMP packets and any intervening networking equipment must support ICMP. | The monitor sends an ICMP/ICMPv6 echo request (ping) and expects an ICMP/ICMPv6 echo reply from the endpoint. | The endpoint must reply to the ICMP ping within the configured timeout and retries to be considered healthy. | -| UDP-ICMP | Public and Tunnel | UDP-ICMP monitor works by sending a UDP probe packet after ICMP Ping monitor completes as healthy. | After receiving a successful ICMP reply, the monitor sends a UDP probe packet to the endpoint. If no ICMP Port Unreachable message is received, the endpoint is considered healthy. | If the monitor receives an ICMP Port Unreachable message within the configured timeout and retries, the endpoint is considered unhealthy. | +| ICMP Ping | Public and Tunnel | Confirms basic Layer 3 (L3) connectivity to the endpoint using ICMP. The endpoints need to be allowed to reply to ICMP packets and any intervening networking equipment must support ICMP. | The monitor sends an ICMP/ICMPv6 echo request (ping) and expects an ICMP/ICMPv6 echo reply from the endpoint. | The endpoint must reply to the ICMP ping within the configured timeout and retries to be considered healthy. | +| UDP-ICMP | Public and Tunnel | UDP-ICMP monitor works by sending a UDP probe packet after ICMP Ping monitor completes as healthy. | After receiving a successful ICMP reply, the monitor sends a UDP probe packet to the endpoint. If no ICMP Port Unreachable message is received, the endpoint is considered healthy. | If the monitor receives an ICMP Port Unreachable message within the configured timeout and retries, the endpoint is considered unhealthy. | | SMTP | Public | Verifies SMTP availability at the application layer. | The monitor establishes a TCP connection and sends an SMTP HELO command. It expects a reply with code 250. The monitor then sends an SMTP QUIT command, expecting a reply with code 221. At the end of each interval, the TCP connection is closed by sending a TCP FIN packet. | The endpoint must respond with correct SMTP codes (250 for HELO, 221 for QUIT) within the configured timeout and retries to be considered healthy. | diff --git a/src/content/docs/load-balancing/monitors/monitor-groups.mdx b/src/content/docs/load-balancing/monitors/monitor-groups.mdx index 50904c9a7de3215..c9523c593355ecb 100644 --- a/src/content/docs/load-balancing/monitors/monitor-groups.mdx +++ b/src/content/docs/load-balancing/monitors/monitor-groups.mdx @@ -6,7 +6,6 @@ products: title: Monitor Groups sidebar: order: 48 - --- Group multiple health monitors together to create sophisticated health checks for your applications, ensuring more intelligent and resilient traffic steering. diff --git a/src/content/docs/load-balancing/private-network/cloudflare-wan.mdx b/src/content/docs/load-balancing/private-network/cloudflare-wan.mdx index db0595b89b0b6ef..3d3b8c26fad9827 100644 --- a/src/content/docs/load-balancing/private-network/cloudflare-wan.mdx +++ b/src/content/docs/load-balancing/private-network/cloudflare-wan.mdx @@ -33,8 +33,10 @@ Pools can be created using either the Cloudflare dashboard or the API. Refer to 1. Go to **Load Balancing** at the account level and select **Create a Load Balancer**. 2. Select **Private Load Balancer**. 3. On the next step you can choose to associate this load balancer with either: - - A CGNAT IP from the Cloudflare range or - - A custom [RFC1918 address](https://datatracker.ietf.org/doc/html/rfc1918). + +- A CGNAT IP from the Cloudflare range or +- A custom [RFC1918 address](https://datatracker.ietf.org/doc/html/rfc1918). + 4. Add a descriptive name to identify your Load Balancer. 5. Proceed through the setup. diff --git a/src/content/docs/load-balancing/reference-architecture-external-link.mdx b/src/content/docs/load-balancing/reference-architecture-external-link.mdx index 09dbce736aec377..0183c3d39e2e8f3 100644 --- a/src/content/docs/load-balancing/reference-architecture-external-link.mdx +++ b/src/content/docs/load-balancing/reference-architecture-external-link.mdx @@ -7,5 +7,4 @@ title: Reference architecture external_link: /reference-architecture/architectures/load-balancing/ sidebar: order: 150 - --- diff --git a/src/content/docs/load-balancing/reference/index.mdx b/src/content/docs/load-balancing/reference/index.mdx index ec8770d1780404a..e6f4d8d2d6c3b20 100644 --- a/src/content/docs/load-balancing/reference/index.mdx +++ b/src/content/docs/load-balancing/reference/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 50 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; See the following pages for more information about Cloudflare Load Balancing: diff --git a/src/content/docs/load-balancing/reference/limitations.mdx b/src/content/docs/load-balancing/reference/limitations.mdx index 5bde030458bc22e..c46c0f6c8a12462 100644 --- a/src/content/docs/load-balancing/reference/limitations.mdx +++ b/src/content/docs/load-balancing/reference/limitations.mdx @@ -6,13 +6,12 @@ products: title: Limitations sidebar: order: 48 - --- - Name | Non-Enterprise | Enterprise | - --- | --- | --- | - Load balancers | 20 | custom | - Monitor intervals | 15s (min), 3600s (max) | 10s (min), 3600s (max) | - Monitors | 1.5x the number of pools | 1.5x the number of pools | - Endpoints | 20 | custom | - Pools | 20 | custom | +| Name | Non-Enterprise | Enterprise | +| ----------------- | ------------------------ | ------------------------ | +| Load balancers | 20 | custom | +| Monitor intervals | 15s (min), 3600s (max) | 10s (min), 3600s (max) | +| Monitors | 1.5x the number of pools | 1.5x the number of pools | +| Endpoints | 20 | custom | +| Pools | 20 | custom | diff --git a/src/content/docs/load-balancing/reference/migration-guides/index.mdx b/src/content/docs/load-balancing/reference/migration-guides/index.mdx index aecc03630e37bc8..f1e1ae6e2a682da 100644 --- a/src/content/docs/load-balancing/reference/migration-guides/index.mdx +++ b/src/content/docs/load-balancing/reference/migration-guides/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/load-balancing/troubleshooting/common-error-codes.mdx b/src/content/docs/load-balancing/troubleshooting/common-error-codes.mdx index ede4a1cdcb502e9..9f0e7e87097a25c 100644 --- a/src/content/docs/load-balancing/troubleshooting/common-error-codes.mdx +++ b/src/content/docs/load-balancing/troubleshooting/common-error-codes.mdx @@ -6,7 +6,6 @@ products: title: Common error codes sidebar: order: 51 - --- The Cloudflare Load Balancing API adds global health to each pool and endpoint. It also gives you a view into what our network sees at a wider level. Cloudflare uses a quorum system to determine pool and endpoint health status. The quorum is taken from PoPs responsible for running health monitor requests in a region, and the majority result is used. @@ -23,7 +22,7 @@ If a health monitor request fails, the breakdown will include the reason. Common troubleshooting causes and solutions are listed below. -*** +--- ## TCP connection failed @@ -35,7 +34,7 @@ Our health monitor requests failed to establish a TCP connection to your endpoin This typically occurs when there is a network failure between Cloudflare and your endpoint, and/or a firewall refused to allow our connection. Ensure your network and firewall configurations are not interfering with load balancing traffic. -*** +--- ## HTTP timeout occurred @@ -47,7 +46,7 @@ The endpoint failed to return an HTTP response within the timeout configured. Th We recommend increasing the HTTP response timeout to allow the endpoint to respond. -*** +--- ## Response code mismatch error @@ -67,7 +66,7 @@ You may also see this issue if you have a monitor configured to use HTTP connect Either change your Cloudflare monitor configuration to use HTTPS, or set the value of `follow_redirect` to `true` so that we can resolve the correct status code. -*** +--- ## Response body mismatch error @@ -75,13 +74,13 @@ Either change your Cloudflare monitor configuration to use HTTPS, or set the val The response body returns from your endpoint and does not include the (case-insensitive) value of `expected_body` configured in your monitor. -Note that we only read the first 10 KB of the response. If you return a larger response, and the expected\_body is not in the first 10 KB, the health monitor request will fail. +Note that we only read the first 10 KB of the response. If you return a larger response, and the expected_body is not in the first 10 KB, the health monitor request will fail. ### Solution -Ensure the expected\_body is in the first 10 KB of the response body. +Ensure the expected_body is in the first 10 KB of the response body. -*** +--- ## TLS untrusted certificate error @@ -93,7 +92,7 @@ The certificate is not trusted by a public Certificate Authority (CA). If you're using a self-signed certificate, we recommend either using a publicly trusted certificate or setting the `allow_insecure` property on your monitor to `true`. -*** +--- ## TLS name mismatch error @@ -105,7 +104,7 @@ Our health monitor (client) was not able to match a name on the server certifica Use the List Monitors command to confirm that the `header` value set in the Cloudflare monitor is correct and the Update Monitors command to make any necessary changes. -*** +--- ## TLS protocol error @@ -117,7 +116,7 @@ This error can occur if you’re using an older version of TLS or your endpoint Ensure that your endpoint supports TLS 1.0 or greater and is configured for HTTPS. -*** +--- ## TLS unrecognized name error @@ -129,7 +128,7 @@ The server did not recognize the name provided by the client. When a host header Set the host header in your monitor object. -*** +--- ## No route to host error @@ -141,7 +140,7 @@ The IP address cannot be reached from our network. Common causes are ISP or host Make sure IP is accurate, and if it is check if there is an ISP or hosting provider network issue. -*** +--- ## Exceeded quota error @@ -155,10 +154,10 @@ If you're using the **Cloudflare API**, you will receive an error message. ### Solution -* Enterprise customers who need to create more objects (load balancers, pools, endpoints, or monitors) should reach out to their account team to discuss this issue. -* Self-service customers can upgrade their Load Balancing subscription with more endpoints to increase load balancing capacity. +- Enterprise customers who need to create more objects (load balancers, pools, endpoints, or monitors) should reach out to their account team to discuss this issue. +- Self-service customers can upgrade their Load Balancing subscription with more endpoints to increase load balancing capacity. -*** +--- ## TCP Timeout @@ -170,7 +169,7 @@ Data transmission was not acknowledged and retransmit of data did not succeed. Confirm whether the SYN-ACK for the handshake takes place at your endpoint and [contact Cloudflare Support](/support/contacting-cloudflare-support/). -*** +--- ## TLS Handshake Failure @@ -182,7 +181,7 @@ Indicates that the browser's connection to the web server is not secure. Change wifi networks, connect to a wired network, or verify the network connection is stable. -*** +--- ## Network Unreachable @@ -194,7 +193,7 @@ Cloudflare cannot connect to the endpoint due to network unavailability. This is Check either the IP entered for the endpoint in Cloudflare's Load Balancer configuration or the IP returned via DNS for the endpoint hostname. -*** +--- ## HTTP Invalid Response @@ -206,7 +205,7 @@ Usually caused by an HTTP 502 error or bad gateway. Ensure the endpoint responds to requests and that no applications have crashed or are under high load. -*** +--- ## DNS Unknown Host @@ -218,7 +217,7 @@ The endpoint hostname does not exist. Confirm the endpoint resolves to an IP address. -*** +--- ## Connection Reset by Peer @@ -230,7 +229,7 @@ A network error occurred while the client received data from the endpoint. Confirm whether the endpoint is experiencing a high amount of traffic or an error. -*** +--- ## Monitor Config Error @@ -242,7 +241,7 @@ There was a configuration error in the monitor and no checks are run against the Review your monitor configuration to ensure it matches an expected request to your endpoint. -*** +--- ## DNS Internal @@ -254,7 +253,7 @@ The endpoint's hostname resolves to an internal or orange-clouded IP address. No Cloudflare does not allow use of an endpoint hostname that is proxied by Cloudflare. -*** +--- ## Load Balancing Not Enabled @@ -266,7 +265,7 @@ Load Balancing is not enabled for your account or zone. For Enterprise customers, reach out to your Cloudflare Account Team. Free, Pro, and Business customers should [Enable Load Balancing](/load-balancing/get-started/enable-load-balancing/). -*** +--- ## Validation failed error @@ -278,7 +277,7 @@ You will receive an error if you try to set the host header value while configur Cloudflare now restricts configured [endpoint host headers](/load-balancing/additional-options/override-http-host-headers/) to fully qualified domain names (FQDNs) that are immediate subdomains of a zone associated with the account. For example, this host header would be the same zone as the load balancer itself, but pools may be used across multiple Load balancers. -*** +--- ## Object referenced by other objects @@ -290,7 +289,7 @@ You will receive this error when you attempt to delete a pool that is referenced Remove the pool from the load balancer's geo steering configuration. If your load balancer no longer uses geo steering, you will need to [re-enable geo steering](/load-balancing/understand-basics/traffic-steering/steering-policies/geo-steering/) and then remove the pool. -*** +--- ## Other Failure diff --git a/src/content/docs/load-balancing/troubleshooting/index.mdx b/src/content/docs/load-balancing/troubleshooting/index.mdx index ab1582dd07df552..2a9154394f0dda7 100644 --- a/src/content/docs/load-balancing/troubleshooting/index.mdx +++ b/src/content/docs/load-balancing/troubleshooting/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 151 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For more guidance related to common issues with load balancers, refer to the following resources: diff --git a/src/content/docs/load-balancing/troubleshooting/load-balancing-faq.mdx b/src/content/docs/load-balancing/troubleshooting/load-balancing-faq.mdx index f9b35fca372872e..49722335e1400f4 100644 --- a/src/content/docs/load-balancing/troubleshooting/load-balancing-faq.mdx +++ b/src/content/docs/load-balancing/troubleshooting/load-balancing-faq.mdx @@ -4,7 +4,6 @@ description: Answers to common Load Balancing questions. products: - load-balancing title: FAQs - --- ## Overview @@ -17,7 +16,7 @@ Are you trying to turn on Load Balancing? [Enable Load Balancing](https://dash.cloudflare.com/?to=/:account/:zone/traffic/load-balancing). ::: -*** +--- ## Why is my origin receiving so many health monitor requests? @@ -35,7 +34,7 @@ To reduce traffic, reduce the number of selected regions or choose an option bes If you have a low interval for your health monitor requests, you may increase the traffic sent to your endpoints. -*** +--- ## Why is my endpoint or pool considered unhealthy? @@ -43,15 +42,15 @@ To learn more about how endpoints and pools become unhealthy, refer to [Endpoint If you know that your endpoint is healthy but load balancing is reporting it as unhealthy, check the following settings on the [monitor](/load-balancing/monitors): -* Perform a `curl` request against the configured endpoint. Make sure the response you are seeing matches your settings for the monitor. -* Ensure your firewall or web server does not block or rate limit [our health monitors](/fundamentals/reference/cloudflare-site-crawling/#specific-products) and accepts requests from [Cloudflare IP addresses](/fundamentals/concepts/cloudflare-ip-addresses/). -* If you are looking for a specific value in the **Response Body**, make sure that value is relatively static and within the first 10 KB of the HTML page. -* If your endpoint responds with a `301` or `302` status code, make sure **Follow Redirects** is selected. -* Try increasing the **Timeout** value. -* Review the **Host Header** for the health monitor. -* If you are using [Authenticated Origin Pulls (mTLS)](/ssl/origin-configuration/authenticated-origin-pull/), [Argo Smart Routing](/argo-smart-routing/), [Bring your own CA (mTLS)](/ssl/client-certificates/byo-ca/), [Dedicated CDN Egress IPs](/smart-shield/configuration/dedicated-egress-ips/), or require [HTTP/2 to Origin](/speed/optimization/protocol/http2-to-origin/), make sure that you entered a zone value for **Simulate Zone** corresponding to the zone with these features configured. +- Perform a `curl` request against the configured endpoint. Make sure the response you are seeing matches your settings for the monitor. +- Ensure your firewall or web server does not block or rate limit [our health monitors](/fundamentals/reference/cloudflare-site-crawling/#specific-products) and accepts requests from [Cloudflare IP addresses](/fundamentals/concepts/cloudflare-ip-addresses/). +- If you are looking for a specific value in the **Response Body**, make sure that value is relatively static and within the first 10 KB of the HTML page. +- If your endpoint responds with a `301` or `302` status code, make sure **Follow Redirects** is selected. +- Try increasing the **Timeout** value. +- Review the **Host Header** for the health monitor. +- If you are using [Authenticated Origin Pulls (mTLS)](/ssl/origin-configuration/authenticated-origin-pull/), [Argo Smart Routing](/argo-smart-routing/), [Bring your own CA (mTLS)](/ssl/client-certificates/byo-ca/), [Dedicated CDN Egress IPs](/smart-shield/configuration/dedicated-egress-ips/), or require [HTTP/2 to Origin](/speed/optimization/protocol/http2-to-origin/), make sure that you entered a zone value for **Simulate Zone** corresponding to the zone with these features configured. -*** +--- ## Why does my load balancer route traffic to a secondary pool when the primary pool is still healthy? @@ -59,7 +58,7 @@ You occasionally might see traffic routed away from a pool if a health monitor r To learn more about how endpoints and pools become unhealthy, refer to [Endpoint and pool health](/load-balancing/understand-basics/health-details). -*** +--- ## What happens when a pool or endpoint becomes unhealthy? @@ -77,7 +76,7 @@ To avoid these scenarios: To learn more about how endpoints and pools become unhealthy, refer to [Endpoint and pool health](/load-balancing/understand-basics/health-details). -*** +--- ## What is the difference between Load Balancing and Health Checks? @@ -85,7 +84,7 @@ To learn more about how endpoints and pools become unhealthy, refer to [Endpoint [Cloudflare Health Checks](/health-checks/) are identical to monitors within a load balancer, but only meant for probing server health (and not distributing traffic). -*** +--- ## Why do I see different numbers of requests in Load Balancing Analytics? @@ -93,16 +92,16 @@ You may see different numbers of requests when reviewing [Load Balancing Analyti Load balancing **requests** are the number of uncached requests made by your load balancer. By default, Cloudflare caches resolved IP addresses for up to five seconds. This built-in caching is often the cause of an discrepancies. -*** +--- ## I'm seeing a specific error code for my load balancer or monitor. For a list of specific error codes and next steps, refer to [Load Balancing Troubleshooting](/load-balancing/troubleshooting). -*** +--- ## Related resources -* [Endpoint and pool health](/load-balancing/understand-basics/health-details) -* [Monitors](/load-balancing/monitors) -* [Load Balancing Analytics](/load-balancing/reference/load-balancing-analytics/) +- [Endpoint and pool health](/load-balancing/understand-basics/health-details) +- [Monitors](/load-balancing/monitors) +- [Load Balancing Analytics](/load-balancing/reference/load-balancing-analytics/) diff --git a/src/content/docs/load-balancing/understand-basics/adaptive-routing.mdx b/src/content/docs/load-balancing/understand-basics/adaptive-routing.mdx index 5932d2fa80bf195..0d58152b129b64d 100644 --- a/src/content/docs/load-balancing/understand-basics/adaptive-routing.mdx +++ b/src/content/docs/load-balancing/understand-basics/adaptive-routing.mdx @@ -6,10 +6,9 @@ products: title: Adaptive routing sidebar: order: 18 - --- -import { Render, DashButton } from "~/components" +import { Render, DashButton } from "~/components"; Adaptive routing controls features that modify the routing of requests to pools and endpoints in response to dynamic conditions, such as during the interval between active health monitoring requests. diff --git a/src/content/docs/load-balancing/understand-basics/index.mdx b/src/content/docs/load-balancing/understand-basics/index.mdx index c85c1403d1845cf..792addac1391985 100644 --- a/src/content/docs/load-balancing/understand-basics/index.mdx +++ b/src/content/docs/load-balancing/understand-basics/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 2 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review the following topics to learn more about the basic concepts and components involved in Cloudflare Load Balancing. diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/index.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/index.mdx index fdba031ab13f323..923d4f04f8cf0f3 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/index.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/index.mdx @@ -6,7 +6,6 @@ products: title: Traffic steering sidebar: order: 4 - --- When requests come to your load balancer, it distributes them across your pools and endpoints according to three factors: diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/hash-origin-steering.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/hash-origin-steering.mdx index 0c4c24f3ea88b14..4cdb38526cfe80e 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/hash-origin-steering.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/hash-origin-steering.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Hash steering - --- **Hash steering** guides Cloudflare to send requests to endpoints based on a combination of [endpoint weights](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights) and previous requests from that IP address. Ensures requests from the same IP address will hit the same endpoint, but actual traffic distribution may differ from endpoint weights. @@ -23,6 +22,3 @@ When a request originates from a browser, it lacks an `x-forwarded-for` header, ### Workaround To ensure Hash Steering works correctly when using a Worker in front of a Load Balancer, manually set the `x-forwarded-for` header in the Worker to the client's original IP address. By manually setting `x-forwarded-for` to `CF-Connecting-IP`, Hash Steering will function as expected, ensuring traffic consistency for end users. - - - diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/least-outstanding-requests-pools.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/least-outstanding-requests-pools.mdx index c51194139beb164..02a10b15022975c 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/least-outstanding-requests-pools.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/least-outstanding-requests-pools.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Least Outstanding Requests steering - Endpoint-level steering - --- **Least Outstanding Requests steering** allows you to route traffic to endpoints that currently have the lowest number of outstanding requests. @@ -22,9 +21,9 @@ Least Outstanding Requests steering is best to use if your endpoints are easily ```json title="Pools" { - "origin_steering": { - "policy": "least_outstanding_requests" - } + "origin_steering": { + "policy": "least_outstanding_requests" + } } ``` diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/random-origin-steering.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/random-origin-steering.mdx index 80045c618e6408a..537f0a763c9de2a 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/random-origin-steering.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/origin-level-steering/random-origin-steering.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Random steering - --- **Random steering** sends requests to endpoints purely based on [endpoint weights](/load-balancing/understand-basics/traffic-steering/origin-level-steering/#weights). Distributes traffic more accurately, but may cause requests from the same IP to hit different endpoints. diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/dynamic-steering.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/dynamic-steering.mdx index 666b471d0af1334..f64ceb698d2ba17 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/dynamic-steering.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/dynamic-steering.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Dynamic steering - --- **Dynamic steering** uses health monitor data to identify the fastest pool for a given Cloudflare Region or data center. diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/index.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/index.mdx index 4ad16dc07656f19..944941d3224b8ce 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/index.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/index.mdx @@ -20,6 +20,7 @@ import { DirectoryListing, GlossaryTooltip, Render } from "~/components"; ## EDNS Client Subnet (ECS) support EDNS Client Subnet (ECS) support provides customers with more control over location-based steering during + gray-clouded DNS resolutions and can be used for proximity or geo (country) steering. Customers can configure their load balancer using the `location_strategy` parameter, which includes the properties `prefer_ecs` and `mode`. diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/least-outstanding-requests.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/least-outstanding-requests.mdx index a52ce97da3eb882..b6cd01080f74721 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/least-outstanding-requests.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/least-outstanding-requests.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Least Outstanding Requests steering - Steering policies - --- **Least Outstanding Requests steering** allows you to route traffic to pools that currently have the lowest number of outstanding requests. @@ -22,7 +21,7 @@ Least Outstanding Requests steering is best to use if your pools are easily over ```json title="Load Balancers" { - "steering_policy": "least_outstanding_requests" + "steering_policy": "least_outstanding_requests" } ``` diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/proximity-steering.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/proximity-steering.mdx index 2b5fbd7114d502e..b5922711d2d91b3 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/proximity-steering.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/proximity-steering.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Proximity steering - --- **Proximity steering** routes visitors or internal services to the closest physical data center. @@ -18,21 +17,19 @@ To use proximity steering on a load balancer, you first need to add GPS coordina ## When to add proximity steering -* For new pools, add GPS coordinates when you create a pool. -* For existing pools, add GPS coordinates when [managing pools](/load-balancing/pools/create-pool/#edit-a-pool) or in the **Add Traffic steering** step of [creating a load balancer](/load-balancing/load-balancers/create-load-balancer/). +- For new pools, add GPS coordinates when you create a pool. +- For existing pools, add GPS coordinates when [managing pools](/load-balancing/pools/create-pool/#edit-a-pool) or in the **Add Traffic steering** step of [creating a load balancer](/load-balancing/load-balancers/create-load-balancer/). ## How to add proximity steering To add coordinates when creating or editing a pool: -1. Click the *Configure coordinates for Proximity Steering* dropdown. +1. Click the _Configure coordinates for Proximity Steering_ dropdown. 2. Enter the latitude and longitude or drag a marker on the map. 3. Select **Save**. :::caution[Warning:] - For accurate proximity steering, add GPS coordinates to all pools within the same load balancer. - ::: diff --git a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/standard-options.mdx b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/standard-options.mdx index 22d271801178c9b..4cb1a555bf452a2 100644 --- a/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/standard-options.mdx +++ b/src/content/docs/load-balancing/understand-basics/traffic-steering/steering-policies/standard-options.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Standard traffic steering policies - --- **Standard steering** policies include **Off - Failover** and **Random**. diff --git a/src/content/docs/log-explorer/api.mdx b/src/content/docs/log-explorer/api.mdx index 305c470002dd3d8..6bdcc752a5d4156 100644 --- a/src/content/docs/log-explorer/api.mdx +++ b/src/content/docs/log-explorer/api.mdx @@ -8,7 +8,7 @@ products: - log-explorer --- -Configuration and Log searches are also available via a public API. +Configuration and Log searches are also available via a public API. ## Authentication @@ -18,7 +18,7 @@ For detailed information on permissions required for each Log Explorer feature, ## Query data -Log Explorer includes a SQL API for submitting queries. +Log Explorer includes a SQL API for submitting queries. For example, to find an HTTP request with a specific [Ray ID](/fundamentals/reference/cloudflare-ray-id/), use the following SQL query: @@ -77,4 +77,4 @@ This command returns the following request details: "errors": [], "messages": [] } -``` \ No newline at end of file +``` diff --git a/src/content/docs/log-explorer/changelog.mdx b/src/content/docs/log-explorer/changelog.mdx index 2f97c532c5ac0e6..707f755e2c52edd 100644 --- a/src/content/docs/log-explorer/changelog.mdx +++ b/src/content/docs/log-explorer/changelog.mdx @@ -12,4 +12,4 @@ import { ProductChangelog } from "~/components"; {/* */} - + ## 2024-10-01 diff --git a/src/content/docs/magic-transit/cloudflare-ips.mdx b/src/content/docs/magic-transit/cloudflare-ips.mdx index 4ee1316b242c1ab..9812bcc56adb708 100644 --- a/src/content/docs/magic-transit/cloudflare-ips.mdx +++ b/src/content/docs/magic-transit/cloudflare-ips.mdx @@ -8,23 +8,26 @@ sidebar: order: 11 --- -import { Render } from "~/components" +import { Render } from "~/components"; + mtLpStaticRoute: + "/magic-transit/how-to/configure-routes/#configure-static-routes", + mtLpBgpPeering: + "/magic-transit/how-to/configure-routes/#configure-bgp-routes", + }} +/> ## Check your Cloudflare IPs \ No newline at end of file +/> diff --git a/src/content/docs/magic-transit/get-started.mdx b/src/content/docs/magic-transit/get-started.mdx index eec224e8dbadd55..8efc46ed319d06b 100644 --- a/src/content/docs/magic-transit/get-started.mdx +++ b/src/content/docs/magic-transit/get-started.mdx @@ -10,6 +10,10 @@ tags: - IPsec --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/glossary.mdx b/src/content/docs/magic-transit/glossary.mdx index b14631d9375bd84..089812e9c6ecd3e 100644 --- a/src/content/docs/magic-transit/glossary.mdx +++ b/src/content/docs/magic-transit/glossary.mdx @@ -4,10 +4,9 @@ pcx_content_type: glossary description: Definitions for terms used across Magic Transit documentation. products: - magic-transit - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Magic Transit documentation. diff --git a/src/content/docs/magic-transit/how-to/advertise-prefixes.mdx b/src/content/docs/magic-transit/how-to/advertise-prefixes.mdx index ec7bc738458e71d..e8f018925c30330 100644 --- a/src/content/docs/magic-transit/how-to/advertise-prefixes.mdx +++ b/src/content/docs/magic-transit/how-to/advertise-prefixes.mdx @@ -8,7 +8,15 @@ sidebar: order: 5 --- -import { APIRequest, DashButton, Details, GlossaryTooltip, Render, Tabs, TabItem } from "~/components" +import { + APIRequest, + DashButton, + Details, + GlossaryTooltip, + Render, + Tabs, + TabItem, +} from "~/components"; ## Onboard prefixes @@ -67,11 +75,11 @@ You should only use one control method per prefix at any given time. Mixing mult Create a [POST request](/api/resources/addressing/subresources/prefixes/subresources/bgp_prefixes/methods/create/) to add a BGP prefix. For example: ### Advertise or withdraw a BGP prefix @@ -117,7 +125,7 @@ Refer to [Safely withdraw a BYOIP prefix](#safely-withdraw-a-byoip-prefix) for m ### Delete an IP prefix -You can only delete a prefix with an *Unapproved* status. To delete prefixes with a different status, contact your administrator or account manager. +You can only delete a prefix with an _Unapproved_ status. To delete prefixes with a different status, contact your administrator or account manager. 1. Go to the **Routes** page. @@ -137,11 +145,11 @@ BGP has different mechanisms to control route priorities which are set by the pe Refer to the following example for how to prepend AS13335 three times to a BGP prefix: AS prepending helps you gracefully transition traffic between network providers. By adding prepends to Cloudflare's advertisement, you make the route through Cloudflare less preferred for some Internet network providers. This allows you to simultaneously advertise the same prefix from an alternate provider with a shorter, more desirable `AS_PATH`. Advertising from both providers at once provides a smoother traffic migration and minimizes packet loss during a change of provider. @@ -155,8 +163,6 @@ When you use AS prepending to migrate traffic away from Magic Transit, the typic - **Introduce new provider**: You begin advertising the same prefix from your alternate provider with a standard (shorter) `AS_PATH`. - **Final state**: External networks now receive two advertisements: the prepended route through Cloudflare and the non-prepended route through your new provider. The external network will select a path based on its BGP policy rules. - - :::caution Cloudflare's internal network enforces local preference for traffic delivery to Magic Transit, even if a more specific or shorter path route is available on the public Internet. Withdraw the prefix from Cloudflare to avoid delivery of Cloudflare-sourced traffic over Magic Transit. This preference is local to our internal network and does not impact the route decision process of other networks. @@ -165,27 +171,32 @@ For example, if you have a CDN zone with a Magic Transit-protected origin that i ## Safely withdraw a BYOIP prefix - + ## BGP control to Magic Transit Virtual Network routing table ### Automatically announce and withdraw anycast-based Magic BGP routes If you use CNI with Dataplane v2, GRE or IPsec tunnels, you can: + - Automatically withdraw your prefixes from Cloudflare's global edge infrastructure when you withdraw all matching BGP learned prefixes from the Magic Transit Virtual Network routing table. - Automatically advertise your prefixes through Cloudflare's global edge infrastructure when you have at least one matching BGP learned prefix in the Magic Transit Virtual Network routing table. To enable automatic global announcement and withdrawal, enable this feature on the BGP prefix using the [Addressing API](/api/resources/addressing/subresources/prefixes/subresources/bgp_prefixes/methods/edit/). For example: Once you configure this for a BGP prefix, Cloudflare applies the following logic: + - If there are no BGP routes in the Magic Transit Virtual Network routing table exactly matching the BGP prefix, Cloudflare withdraws the BGP prefix. - If there is at least one BGP route in the Magic Transit Virtual Network routing table exactly matching the BGP prefix, Cloudflare announces the BGP prefix. @@ -316,7 +327,10 @@ If you use CNI with Dataplane v2, GRE or IPsec tunnels to on-ramp your network t Magic Transit supports both static routing and BGP to steer traffic from Cloudflare's network to your configured off-ramps (GRE tunnels, IPsec tunnels, or CNI). Cloudflare does not currently support advertisement of routes for traffic engineering purposes. As a best practice to reduce last-hop latency, consider scoping your routes regionally. - + The default setting for static route regions is **All Regions**. Configure scoping for your traffic in the **Region code** section when [adding](/magic-transit/how-to/configure-routes/#create-a-static-route) or [editing](/magic-transit/how-to/configure-routes/#edit-a-static-route) a static route. diff --git a/src/content/docs/magic-transit/how-to/configure-routes.mdx b/src/content/docs/magic-transit/how-to/configure-routes.mdx index c3053044b8b28e3..0dfce207230821b 100644 --- a/src/content/docs/magic-transit/how-to/configure-routes.mdx +++ b/src/content/docs/magic-transit/how-to/configure-routes.mdx @@ -11,7 +11,7 @@ tags: - IPsec --- -import { Render } from "~/components" +import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/magic-transit/how-to/configure-tunnel-endpoints.mdx b/src/content/docs/magic-transit/how-to/configure-tunnel-endpoints.mdx index af1eee331945798..ab317378e353ddc 100644 --- a/src/content/docs/magic-transit/how-to/configure-tunnel-endpoints.mdx +++ b/src/content/docs/magic-transit/how-to/configure-tunnel-endpoints.mdx @@ -14,23 +14,31 @@ tags: import { Render } from "~/components"; - \ No newline at end of file +/> diff --git a/src/content/docs/magic-transit/how-to/enable-magic-roles.mdx b/src/content/docs/magic-transit/how-to/enable-magic-roles.mdx index ccf843678ccbee2..7910debecdaac0e 100644 --- a/src/content/docs/magic-transit/how-to/enable-magic-roles.mdx +++ b/src/content/docs/magic-transit/how-to/enable-magic-roles.mdx @@ -7,6 +7,6 @@ head: [] description: You can determine which users have, or do not have, configuration edit access for Magic products. --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/magic-transit/how-to/index.mdx b/src/content/docs/magic-transit/how-to/index.mdx index 962bded34f466cd..a80f260452a9bd5 100644 --- a/src/content/docs/magic-transit/how-to/index.mdx +++ b/src/content/docs/magic-transit/how-to/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 5 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/how-to/safely-withdraw-byoip-prefix.mdx b/src/content/docs/magic-transit/how-to/safely-withdraw-byoip-prefix.mdx index b08bce6faedffc0..95d51e29e27e30d 100644 --- a/src/content/docs/magic-transit/how-to/safely-withdraw-byoip-prefix.mdx +++ b/src/content/docs/magic-transit/how-to/safely-withdraw-byoip-prefix.mdx @@ -8,6 +8,9 @@ sidebar: order: 6 --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/network-flow.mdx b/src/content/docs/magic-transit/network-flow.mdx index 9af74ab7d1573b5..d77808bebde34fe 100644 --- a/src/content/docs/magic-transit/network-flow.mdx +++ b/src/content/docs/magic-transit/network-flow.mdx @@ -6,16 +6,15 @@ products: - magic-transit sidebar: order: 10 - --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/magic-transit/network-health/check-tunnel-health-dashboard.mdx b/src/content/docs/magic-transit/network-health/check-tunnel-health-dashboard.mdx index 99ee9ad379632a8..7218ba148af08d2 100644 --- a/src/content/docs/magic-transit/network-health/check-tunnel-health-dashboard.mdx +++ b/src/content/docs/magic-transit/network-health/check-tunnel-health-dashboard.mdx @@ -14,11 +14,13 @@ import { Render } from "~/components"; file="tunnel-health/check-tunnel-healthchecks-dash" product="networking-services" params={{ - dashInfo: "The dashboard shows the global view of tunnel health as measured from all Cloudflare locations.", + dashInfo: + "The dashboard shows the global view of tunnel health as measured from all Cloudflare locations.", graphQL: "/magic-transit/analytics/query-tunnel-health/", - notificationsPath: "[notifications wizard](/magic-transit/network-health/configure-tunnel-health-alerts/)", + notificationsPath: + "[notifications wizard](/magic-transit/network-health/configure-tunnel-health-alerts/)", packetCaptures: "/cloudflare-network-firewall/packet-captures/", - networkAnalytics: "/magic-transit/analytics/network-analytics/" + networkAnalytics: "/magic-transit/analytics/network-analytics/", }} /> @@ -26,7 +28,7 @@ import { Render } from "~/components"; file="tunnel-health/health-checks-compatible-cmb-eu" product="networking-services" params={{ - productName: "Magic Transit" + productName: "Magic Transit", }} /> @@ -34,4 +36,4 @@ import { Render } from "~/components"; If you received a tunnel health alert but are unsure whether it affects your traffic, refer to [Troubleshoot connectivity](/magic-transit/troubleshooting/connectivity/) to determine whether the alert is relevant. -If your tunnels show as unhealthy or degraded, refer to [Troubleshoot tunnel health](/magic-transit/troubleshooting/tunnel-health/) for common issues and solutions. \ No newline at end of file +If your tunnels show as unhealthy or degraded, refer to [Troubleshoot tunnel health](/magic-transit/troubleshooting/tunnel-health/) for common issues and solutions. diff --git a/src/content/docs/magic-transit/network-health/configure-tunnel-health-alerts.mdx b/src/content/docs/magic-transit/network-health/configure-tunnel-health-alerts.mdx index d606ec4dcd288b1..32dcf34acba8937 100644 --- a/src/content/docs/magic-transit/network-health/configure-tunnel-health-alerts.mdx +++ b/src/content/docs/magic-transit/network-health/configure-tunnel-health-alerts.mdx @@ -17,8 +17,9 @@ import { Render } from "~/components"; params={{ magicWord: "Magic Transit", productName: "Magic Transit", - magicTunnelHealthCheckCalculation: "/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts/", + magicTunnelHealthCheckCalculation: + "/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts/", networkAnalyticsPath: "/magic-transit/analytics/network-analytics/", healthChecks: "/magic-transit/reference/tunnel-health-checks/", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/magic-transit/network-health/index.mdx b/src/content/docs/magic-transit/network-health/index.mdx index 909456bebc21630..ac18e64e89dac4c 100644 --- a/src/content/docs/magic-transit/network-health/index.mdx +++ b/src/content/docs/magic-transit/network-health/index.mdx @@ -8,23 +8,23 @@ sidebar: order: 6 --- -import { DirectoryListing, Render } from "~/components" +import { DirectoryListing, Render } from "~/components"; Magic Transit uses health check probes to determine the status of tunnels. Cloudflare uses this information to steer traffic through the best available route and warn you about potential issues with a tunnel. Service-level indicators (SLIs) and service-level objectives (SLOs) combine to determine when Cloudflare sends you tunnel health alerts. Refer to [How Cloudflare calculates tunnel health alerts](/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts/) for more information about SLIs and SLOs. There are two types of health checks available: endpoint and tunnel health checks. - - Endpoint health checks evaluate connectivity from Cloudflare distributed data centers to your origin network. Endpoint probes flow over available tunnels to provide a broad picture of Internet health and do not inform tunnel selection or steering logic. +- Endpoint health checks evaluate connectivity from Cloudflare distributed data centers to your origin network. Endpoint probes flow over available tunnels to provide a broad picture of Internet health and do not inform tunnel selection or steering logic. - Cloudflare global network servers issue endpoint health checks outside of customer network namespaces and typically target endpoints beyond the tunnel-terminating border router. + Cloudflare global network servers issue endpoint health checks outside of customer network namespaces and typically target endpoints beyond the tunnel-terminating border router. - During onboarding, you specify IP addresses to configure endpoint health checks. + During onboarding, you specify IP addresses to configure endpoint health checks. - Tunnel health checks monitor the status of the tunnels that route traffic from Cloudflare to your origin network. Magic Transit relies on health checks to steer traffic to the best available routes. - During onboarding, you specify the tunnel endpoints or tunnel health check targets that the tunnel probes from Cloudflare's global network will monitor. + During onboarding, you specify the tunnel endpoints or tunnel health check targets that the tunnel probes from Cloudflare's global network will monitor. - You can access tunnel health check results through the API. Cloudflare aggregates these results from individual health check results on Cloudflare servers. + You can access tunnel health check results through the API. Cloudflare aggregates these results from individual health check results on Cloudflare servers. Refer to [Tunnel health checks](/magic-transit/reference/tunnel-health-checks/) for a deep dive into the different types of health checks, what they do, and how they work. @@ -32,10 +32,10 @@ Refer to [Tunnel health checks](/magic-transit/reference/tunnel-health-checks/) file="tunnel-health/health-checks-compatible-cmb-eu" product="networking-services" params={{ - productName: "Magic Transit" + productName: "Magic Transit", }} /> Refer to the following pages for details on how to use the various network health checks available. - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/network-health/run-endpoint-health-checks.mdx b/src/content/docs/magic-transit/network-health/run-endpoint-health-checks.mdx index b734e7357208bff..3fedb7f8c2cb1a3 100644 --- a/src/content/docs/magic-transit/network-health/run-endpoint-health-checks.mdx +++ b/src/content/docs/magic-transit/network-health/run-endpoint-health-checks.mdx @@ -14,7 +14,7 @@ tags: - ICMP --- -import { CURL, Render, DashButton } from '~/components'; +import { CURL, Render, DashButton } from "~/components"; Magic Transit uses endpoint health checks to determine the overall health of your [inter-network connections](/magic-transit/reference/gre-ipsec-tunnels/). Probes originate from Cloudflare infrastructure, outside customer network namespaces, and target IP addresses deep within your network, beyond the tunnel-terminating border router. These "long distance" probes are purely diagnostic. @@ -43,32 +43,35 @@ Refer to the [API documentation](/api/resources/diagnostics/subresources/endpoin ```json output { - "result": { - "id": "", - "check_type": "icmp", - "endpoint": "8.31.160.1", - "name": "Datacenter 1 - primary" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "", + "check_type": "icmp", + "endpoint": "8.31.160.1", + "name": "Datacenter 1 - primary" + }, + "success": true, + "errors": [], + "messages": [] } ``` ## Query endpoint health checks with GraphQL - + ## Configure alerts for endpoint health checks @@ -77,23 +80,23 @@ You can set up alerts to be notified when the state of your endpoint's health is 1. Make a `GET` request to get a list of IDs for all of the endpoint health checks configured: ```json output { - "result": [ - { - "id": "", - "check_type": "icmp", - "endpoint": "8.31.160.1", - "name": "Datacenter 1 - primary" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "id": "", + "check_type": "icmp", + "endpoint": "8.31.160.1", + "name": "Datacenter 1 - primary" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -103,13 +106,13 @@ You can set up alerts to be notified when the state of your endpoint's health is 4. Select **Add**. -5. From the drop-down menu, select *Magic Transit*. +5. From the drop-down menu, select _Magic Transit_. 6. Select **Magic Endpoint Health Check Alert**. 7. Provide a name for your new notification and optionally provide a description. -8. In the *Service Level Objective (SLO)* drop-down menu, select the SLO threshold for your notification. The SLO defines the percentage of endpoint health checks that must pass. If the number of passing endpoint health checks falls below the SLO, Cloudflare generates an alert: - - **High** - 99% - - **Medium** - 98% - - **Low** - 97% +8. In the _Service Level Objective (SLO)_ drop-down menu, select the SLO threshold for your notification. The SLO defines the percentage of endpoint health checks that must pass. If the number of passing endpoint health checks falls below the SLO, Cloudflare generates an alert: + - **High** - 99% + - **Medium** - 98% + - **Low** - 97% 9. In the drop-down menu below SLOs, select the `id` value that matches the `id` you got through the API in step 1. This `id` should match the endpoint health check you want to get notifications for. 10. Select your preferred notification method (such as email or webhooks). 11. Select **Save**. diff --git a/src/content/docs/magic-transit/network-health/update-tunnel-health-checks-frequency.mdx b/src/content/docs/magic-transit/network-health/update-tunnel-health-checks-frequency.mdx index 5abf823c7864447..cc01a8092fae660 100644 --- a/src/content/docs/magic-transit/network-health/update-tunnel-health-checks-frequency.mdx +++ b/src/content/docs/magic-transit/network-health/update-tunnel-health-checks-frequency.mdx @@ -17,7 +17,8 @@ import { Render } from "~/components"; magicWord: "Magic Transit", productName: "Magic Transit", healthChecksUrl: "/magic-transit/reference/tunnel-health-checks/", - addTunnelsPath: "/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels" + addTunnelsPath: + "/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels", }} /> @@ -25,6 +26,6 @@ import { Render } from "~/components"; file="tunnel-health/health-checks-compatible-cmb-eu" product="networking-services" params={{ - productName: "Magic Transit" + productName: "Magic Transit", }} -/> \ No newline at end of file +/> diff --git a/src/content/docs/magic-transit/network-interconnect.mdx b/src/content/docs/magic-transit/network-interconnect.mdx index 44619ba947f13ef..d9cb97232b3510b 100644 --- a/src/content/docs/magic-transit/network-interconnect.mdx +++ b/src/content/docs/magic-transit/network-interconnect.mdx @@ -13,4 +13,4 @@ head: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/on-demand.mdx b/src/content/docs/magic-transit/on-demand.mdx index 019f50728fcda3c..75c387b34768ef6 100644 --- a/src/content/docs/magic-transit/on-demand.mdx +++ b/src/content/docs/magic-transit/on-demand.mdx @@ -9,7 +9,6 @@ sidebar: head: - tag: title content: Magic Transit on-demand - --- If you have access to the Magic Transit on-demand option, you can [configure prefix advertisement](/byoip/concepts/dynamic-advertisement/best-practices/#configure-dynamic-advertisement) from the **IP Prefixes** page in your Cloudflare account home or through the [Cloudflare API](/api/resources/addressing/subresources/prefixes/subresources/advertisement_status/methods/edit/). diff --git a/src/content/docs/magic-transit/partners/index.mdx b/src/content/docs/magic-transit/partners/index.mdx index bfd05db0b774788..6ee348692df331a 100644 --- a/src/content/docs/magic-transit/partners/index.mdx +++ b/src/content/docs/magic-transit/partners/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 15 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/reference/anti-replay-protection.mdx b/src/content/docs/magic-transit/reference/anti-replay-protection.mdx index 7bc128098d8f68c..535769eb632525c 100644 --- a/src/content/docs/magic-transit/reference/anti-replay-protection.mdx +++ b/src/content/docs/magic-transit/reference/anti-replay-protection.mdx @@ -18,7 +18,8 @@ import { Render } from "~/components"; product="networking-services" params={{ productName: "Magic Transit", - productPath: "/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels", + productPath: + "/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels", }} /> diff --git a/src/content/docs/magic-transit/reference/gre-ipsec-tunnels.mdx b/src/content/docs/magic-transit/reference/gre-ipsec-tunnels.mdx index 6b1bfa5d9f79f7f..dc972d88c678590 100644 --- a/src/content/docs/magic-transit/reference/gre-ipsec-tunnels.mdx +++ b/src/content/docs/magic-transit/reference/gre-ipsec-tunnels.mdx @@ -22,12 +22,13 @@ import { Render } from "~/components"; mssURL: "/magic-transit/get-started/#set-maximum-segment-size", productURL: "/magic-transit/reference/anti-replay-protection/", tunnelEndpoints: "/magic-transit/how-to/configure-tunnel-endpoints/", - magicWord: "Magic Transit" + magicWord: "Magic Transit", }} /> ## Troubleshooting For help resolving tunnel issues: + - [Troubleshoot tunnel health](/magic-transit/troubleshooting/tunnel-health/) - Diagnose and fix health check failures - [Troubleshoot with IPsec logs](/magic-transit/troubleshooting/ipsec-troubleshoot/) - Use Logpush to analyze IPsec handshake issues diff --git a/src/content/docs/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx b/src/content/docs/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx index 1fba89abfb6a2f8..f9fbf42cffa7459 100644 --- a/src/content/docs/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx +++ b/src/content/docs/magic-transit/reference/how-cloudflare-calculates-tunnel-health-alerts.mdx @@ -8,9 +8,12 @@ sidebar: order: 9 --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/magic-transit/reference/index.mdx b/src/content/docs/magic-transit/reference/index.mdx index 19ff0a30a962cbc..fe0a8581aa501bb 100644 --- a/src/content/docs/magic-transit/reference/index.mdx +++ b/src/content/docs/magic-transit/reference/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 16 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/magic-transit/reference/mtu-mss.mdx b/src/content/docs/magic-transit/reference/mtu-mss.mdx index aea2b11b3a8ca3a..c35b312d04d675d 100644 --- a/src/content/docs/magic-transit/reference/mtu-mss.mdx +++ b/src/content/docs/magic-transit/reference/mtu-mss.mdx @@ -20,6 +20,6 @@ import { Render } from "~/components"; product="networking-services" params={{ magicWord: "Magic Transit", - productName: "Magic Transit" - }} + productName: "Magic Transit", + }} /> diff --git a/src/content/docs/magic-transit/reference/traffic-steering.mdx b/src/content/docs/magic-transit/reference/traffic-steering.mdx index 6343ed66f6690f6..3864fa3d06c3f68 100644 --- a/src/content/docs/magic-transit/reference/traffic-steering.mdx +++ b/src/content/docs/magic-transit/reference/traffic-steering.mdx @@ -22,7 +22,8 @@ import { Render } from "~/components"; routingTableName: "Magic Transit Virtual Network routing table", mFirewallName: "Cloudflare Network Firewall", mFirewallURL: "/cloudflare-network-firewall/", - warpClientURL: "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", + warpClientURL: + "/cloudflare-one/team-and-resources/devices/cloudflare-one-client/", remoteBrowserURL: "/cloudflare-one/remote-browser-isolation/", accessURL: "/cloudflare-one/access-controls/policies/", gatewayURL: "/cloudflare-one/traffic-policies/", diff --git a/src/content/docs/magic-transit/reference/tunnel-health-checks.mdx b/src/content/docs/magic-transit/reference/tunnel-health-checks.mdx index cc8c425a16b925c..9f4b6435299ad5a 100644 --- a/src/content/docs/magic-transit/reference/tunnel-health-checks.mdx +++ b/src/content/docs/magic-transit/reference/tunnel-health-checks.mdx @@ -20,11 +20,12 @@ import { Render } from "~/components"; params={{ magicWord: "Magic Transit", addTunnels: "/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels", - changeHealthCheckRate: "/magic-transit/network-health/update-tunnel-health-checks-frequency/", + changeHealthCheckRate: + "/magic-transit/network-health/update-tunnel-health-checks-frequency/", probeHealth: "#health-state-and-prioritization", productName: "Magic Transit", staticRoutes: "/magic-transit/how-to/configure-routes/", - tunnelEndpoints: "/magic-transit/how-to/configure-tunnel-endpoints/" + tunnelEndpoints: "/magic-transit/how-to/configure-tunnel-endpoints/", }} /> diff --git a/src/content/docs/magic-transit/troubleshooting/connectivity.mdx b/src/content/docs/magic-transit/troubleshooting/connectivity.mdx index ff5293328e0537b..bc19d9e2ed3a087 100644 --- a/src/content/docs/magic-transit/troubleshooting/connectivity.mdx +++ b/src/content/docs/magic-transit/troubleshooting/connectivity.mdx @@ -17,8 +17,9 @@ import { Render } from "~/components"; productName: "Magic Transit", tunnelHealthLink: "/magic-transit/troubleshooting/tunnel-health/", routingBgpLink: "/magic-transit/troubleshooting/routing-and-bgp/", - checkHealthDashLink: "/magic-transit/network-health/check-tunnel-health-dashboard/", + checkHealthDashLink: + "/magic-transit/network-health/check-tunnel-health-dashboard/", tunnelHealthChecksLink: "/magic-transit/reference/tunnel-health-checks/", - networkAnalyticsLink: "/magic-transit/analytics/network-analytics/" + networkAnalyticsLink: "/magic-transit/analytics/network-analytics/", }} /> diff --git a/src/content/docs/magic-transit/troubleshooting/index.mdx b/src/content/docs/magic-transit/troubleshooting/index.mdx index 6487eea738df77b..24dc284181dfdf0 100644 --- a/src/content/docs/magic-transit/troubleshooting/index.mdx +++ b/src/content/docs/magic-transit/troubleshooting/index.mdx @@ -12,6 +12,6 @@ tags: - Debugging --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/magic-transit/troubleshooting/ipsec-troubleshoot.mdx b/src/content/docs/magic-transit/troubleshooting/ipsec-troubleshoot.mdx index bacfef32c5f77a3..3ad6b0cbb6091ce 100644 --- a/src/content/docs/magic-transit/troubleshooting/ipsec-troubleshoot.mdx +++ b/src/content/docs/magic-transit/troubleshooting/ipsec-troubleshoot.mdx @@ -12,15 +12,17 @@ tags: - Logging --- -import { Render } from "~/components" +import { Render } from "~/components"; - @@ -29,6 +31,7 @@ import { Render } from "~/components" Some customer routers cannot fully disable IPsec anti-replay protection, which is required for optimal Magic Transit operation (packet reordering at the Cloudflare edge can otherwise trigger false drops). **If your router does not support disabling anti-replay:** + 1. Check whether your router supports configuring a **replay window size**. Setting this to `0` is equivalent to disabling anti-replay protection. 2. If neither disabling anti-replay nor setting the window size to `0` is supported, **the router cannot be used as a Magic Transit IPsec on-ramp**. Consider using a GRE tunnel or Cloudflare Network Interconnect (CNI) instead. @@ -41,4 +44,3 @@ If your ISP is blocking these response packets, health checks will fail even whe **Symptom:** Health checks fail but application traffic flows normally through the tunnel. **Resolution:** Switch to bidirectional health checks, which send both the probe and the response through the tunnel. Bidirectional health checks require egress traffic to be turned on for your Magic Transit configuration. For more information, refer to [Tunnel health checks](/magic-transit/reference/tunnel-health-checks/). - diff --git a/src/content/docs/magic-transit/troubleshooting/routing-and-bgp.mdx b/src/content/docs/magic-transit/troubleshooting/routing-and-bgp.mdx index d207cbb1af0bab8..43b9bb867569e75 100644 --- a/src/content/docs/magic-transit/troubleshooting/routing-and-bgp.mdx +++ b/src/content/docs/magic-transit/troubleshooting/routing-and-bgp.mdx @@ -11,14 +11,15 @@ sidebar: import { Render } from "~/components"; diff --git a/src/content/docs/magic-transit/troubleshooting/tunnel-health.mdx b/src/content/docs/magic-transit/troubleshooting/tunnel-health.mdx index 1f0887e6040a0f8..747fc6d131cd7b6 100644 --- a/src/content/docs/magic-transit/troubleshooting/tunnel-health.mdx +++ b/src/content/docs/magic-transit/troubleshooting/tunnel-health.mdx @@ -14,17 +14,20 @@ tags: import { Render } from "~/components"; diff --git a/src/content/docs/moq/feature-matrix.mdx b/src/content/docs/moq/feature-matrix.mdx index 200715e6e3a4ba2..92148c292bc4988 100644 --- a/src/content/docs/moq/feature-matrix.mdx +++ b/src/content/docs/moq/feature-matrix.mdx @@ -3,81 +3,80 @@ pcx_content_type: get-started title: MoQ Feature Matrix sidebar: order: 18 - --- ## Draft-14 Messages ### Supported -| Message | Support | Relevant specification | -| ------- | ------- | ---------------------- | -| SUBSCRIBE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| UNSUBSCRIBE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| TRACK_STATUS | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_NAMESPACE_CANCEL | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_NAMESPACE_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_NAMESPACE_ERROR | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_NAMESPACE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_NAMESPACE_DONE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_DONE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_ERROR | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| TRACK_STATUS_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SETUP_MESSAGES (client and server) | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| Message | Support | Relevant specification | +| ---------------------------------- | ------- | ------------------------------------------------------------------------------------------------ | +| SUBSCRIBE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| UNSUBSCRIBE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| TRACK_STATUS | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_NAMESPACE_CANCEL | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_NAMESPACE_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_NAMESPACE_ERROR | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_NAMESPACE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_NAMESPACE_DONE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_DONE | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_ERROR | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| TRACK_STATUS_OK | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SETUP_MESSAGES (client and server) | ✅ | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | ### Unsupported -| Message | Support | Relevant specification | -| ------- | ------- | ---------------------- | -| GOAWAY | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| MAX_REQUEST_ID | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| REQUESTS_BLOCKED | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_UPDATE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| PUBLISH_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| FETCH | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| FETCH_OK | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| FETCH_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| FETCH_CANCEL | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| TRACK_STATUS_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_NAMESPACE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_NAMESPACE_OK | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| SUBSCRIBE_NAMESPACE_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | -| UNSUBSCRIBE_NAMESPACE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| Message | Support | Relevant specification | +| ------------------------- | ------- | ------------------------------------------------------------------------------------------------ | +| GOAWAY | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| MAX_REQUEST_ID | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| REQUESTS_BLOCKED | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_UPDATE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| PUBLISH_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| FETCH | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| FETCH_OK | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| FETCH_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| FETCH_CANCEL | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| TRACK_STATUS_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_NAMESPACE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_NAMESPACE_OK | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| SUBSCRIBE_NAMESPACE_ERROR | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | +| UNSUBSCRIBE_NAMESPACE | No | [draft-ietf-moq-transport-14](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-14) | ## Draft-07 Messages ### Supported -| Message | Support | Relevant specification | -| ------- | ------- | ---------------------- | -| ANNOUNCE_OK | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| ANNOUNCE_ERROR | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| ANNOUNCE_CANCEL | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| UNSUBSCRIBE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| TRACK_STATUS_REQUEST | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| ANNOUNCE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| UNANNOUNCE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_OK | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_ERROR | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_DONE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| MAX_SUBSCRIBE_ID | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| TRACK_STATUS | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SETUP_MESSAGES (client and server) | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| Message | Support | Relevant specification | +| ---------------------------------- | ------- | ------------------------------------------------------------------------------------------------ | +| ANNOUNCE_OK | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| ANNOUNCE_ERROR | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| ANNOUNCE_CANCEL | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| UNSUBSCRIBE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| TRACK_STATUS_REQUEST | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| ANNOUNCE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| UNANNOUNCE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_OK | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_ERROR | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_DONE | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| MAX_SUBSCRIBE_ID | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| TRACK_STATUS | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SETUP_MESSAGES (client and server) | ✅ | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | ### Unsupported -| Message | Support | Relevant specification | -| ------- | ------- | ---------------------- | -| SUBSCRIBE_UPDATE | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| GOAWAY | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_ANNOUNCES | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_ANNOUNCES_OK | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| SUBSCRIBE_ANNOUNCES_ERROR | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| UNSUBSCRIBE_ANNOUNCES | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| FETCH | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| FETCH_OK | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| FETCH_ERROR | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | -| FETCH_CANCEL | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| Message | Support | Relevant specification | +| ------------------------- | ------- | ------------------------------------------------------------------------------------------------ | +| SUBSCRIBE_UPDATE | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| GOAWAY | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_ANNOUNCES | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_ANNOUNCES_OK | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| SUBSCRIBE_ANNOUNCES_ERROR | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| UNSUBSCRIBE_ANNOUNCES | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| FETCH | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| FETCH_OK | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| FETCH_ERROR | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | +| FETCH_CANCEL | No | [draft-ietf-moq-transport-07](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) | diff --git a/src/content/docs/moq/index.mdx b/src/content/docs/moq/index.mdx index 838ca1c7516741e..d02f8400089cf48 100644 --- a/src/content/docs/moq/index.mdx +++ b/src/content/docs/moq/index.mdx @@ -22,7 +22,7 @@ For the most up-to-date documentation on the protocol, please visit the IETF wor ## Frequently Asked Questions -* What about Safari? +- What about Safari? Safari does not yet have fully functional WebTransport support. Apple never publicly commits to timelines for new features like this. However, Apple has indicated their [intent to support WebTransport](https://github.com/WebKit/standards-positions/issues/18#issuecomment-1495890122). An Apple employee is even a co-author of the [WebTransport over HTTP/3](https://datatracker.ietf.org/doc/draft-ietf-webtrans-http3/) draft. Since Safari 18.4 (2025-03-31), an early (not yet fully functional) implementation of the WebTransport API has been available for testing behind a developer-mode / advanced settings feature flag (including on iOS). @@ -30,12 +30,12 @@ For the most up-to-date documentation on the protocol, please visit the IETF wor ## Known Issues -* Extra Subgroup header field +- Extra Subgroup header field + + The current implementation includes a `subscribe_id` field in Subgroup Headers which [`draft-ietf-moq-transport-07`](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) omits. - The current implementation includes a `subscribe_id` field in Subgroup Headers which [`draft-ietf-moq-transport-07`](https://datatracker.ietf.org/doc/html/draft-ietf-moq-transport-07) omits. - In section 7.3.1, `draft-ietf-moq-transport-07` [specifies](https://www.ietf.org/archive/id/draft-ietf-moq-transport-07.html#section-7.3.1): - + ```txt STREAM_HEADER_SUBGROUP Message { Track Alias (i), @@ -44,8 +44,9 @@ For the most up-to-date documentation on the protocol, please visit the IETF wor Publisher Priority (8), } ``` - + Whereas our implementation expects and produces: + ```txt STREAM_HEADER_SUBGROUP Message { Subscribe ID (i), @@ -55,5 +56,5 @@ For the most up-to-date documentation on the protocol, please visit the IETF wor Publisher Priority (8), } ``` - + This was erroroneously left over from a previous draft version and will be fixed in a future release. Thank you to [@yuki-uchida](https://github.com/yuki-uchida) for reporting. diff --git a/src/content/docs/multi-cloud-networking/changelog.mdx b/src/content/docs/multi-cloud-networking/changelog.mdx index 4374533a030deb1..4bbf7ded14ca757 100644 --- a/src/content/docs/multi-cloud-networking/changelog.mdx +++ b/src/content/docs/multi-cloud-networking/changelog.mdx @@ -13,7 +13,10 @@ import { ProductChangelog } from "~/components"; {/* */} - + ## 2024-11-21 diff --git a/src/content/docs/multi-cloud-networking/cloud-on-ramps.mdx b/src/content/docs/multi-cloud-networking/cloud-on-ramps.mdx index d388a38c069f08b..d20a8425820479e 100644 --- a/src/content/docs/multi-cloud-networking/cloud-on-ramps.mdx +++ b/src/content/docs/multi-cloud-networking/cloud-on-ramps.mdx @@ -6,12 +6,15 @@ products: title: Cloud on-ramps sidebar: order: 3 - --- -import { Render } from "~/components" +import { Render } from "~/components"; - diff --git a/src/content/docs/multi-cloud-networking/get-started.mdx b/src/content/docs/multi-cloud-networking/get-started.mdx index 04c91b1108e2aa5..ef3448467003242 100644 --- a/src/content/docs/multi-cloud-networking/get-started.mdx +++ b/src/content/docs/multi-cloud-networking/get-started.mdx @@ -25,7 +25,7 @@ Once Cloudflare has the credentials required to access your cloud environments, 1. Go to the **Cloud integrations (beta)** page. - + 2. Select **Add** > **AWS integration**. 3. Give a descriptive name to your integration. Optionally, you can also add a description for it. @@ -38,29 +38,29 @@ Once Cloudflare has the credentials required to access your cloud environments, ```json { - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": [ - "ec2:AcceptTransitGatewayPeeringAttachment", - "ec2:CreateTransitGatewayPeeringAttachment", - "ec2:DeleteTransitGatewayPeeringAttachment", - "ec2:DescribeRegions", - "ec2:DescribeTransitGatewayPeeringAttachments", - "ec2:RejectTransitGatewayPeeringAttachment", - "ec2:GetManagedPrefixListEntries", - "ec2:CreateManagedPrefixList", - "ec2:ModifyManagedPrefixList", - "ec2:DeleteManagedPrefixList", - "ec2:CreateTransitGatewayPrefixListReference", - "ec2:DeleteTransitGatewayPrefixListReference", - "ec2:GetTransitGatewayPrefixListReferences", - "ec2:ModifyTransitGatewayPrefixListReference" - ], - "Resource": "*" - } - ] + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:AcceptTransitGatewayPeeringAttachment", + "ec2:CreateTransitGatewayPeeringAttachment", + "ec2:DeleteTransitGatewayPeeringAttachment", + "ec2:DescribeRegions", + "ec2:DescribeTransitGatewayPeeringAttachments", + "ec2:RejectTransitGatewayPeeringAttachment", + "ec2:GetManagedPrefixListEntries", + "ec2:CreateManagedPrefixList", + "ec2:ModifyManagedPrefixList", + "ec2:DeleteManagedPrefixList", + "ec2:CreateTransitGatewayPrefixListReference", + "ec2:DeleteTransitGatewayPrefixListReference", + "ec2:GetTransitGatewayPrefixListReferences", + "ec2:ModifyTransitGatewayPrefixListReference" + ], + "Resource": "*" + } + ] } ``` @@ -69,15 +69,15 @@ Once Cloudflare has the credentials required to access your cloud environments, 1. Create an [AWS role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-custom.html) with the following settings: - **Trusted entity type**: Select **Custom trust policy**, and paste the custom trust policy returned by the Cloudflare dashboard. - **Permissions**: Add the IAM policy you created in the previous step, along with these AWS-managed policies: - - `NetworkAdministrator` - - `AmazonEC2ReadOnlyAccess` - - `AmazonVPCReadOnlyAccess` - - `IAMReadOnlyAccess` + - `NetworkAdministrator` + - `AmazonEC2ReadOnlyAccess` + - `AmazonVPCReadOnlyAccess` + - `IAMReadOnlyAccess` - **ARN**: Copy the ARN for your newly created user. :::note - The trust policy may take several minutes to propagate to all regions. It usually takes less than four minutes, but can sometimes take longer. You may have to retry the **Authorize** button while the propagation takes effect. - ::: + The trust policy may take several minutes to propagate to all regions. It usually takes less than four minutes, but can sometimes take longer. You may have to retry the **Authorize** button while the propagation takes effect. + ::: 2. Select **I authorize Cloudflare to access my AWS account.** 3. Select **Authorize**. @@ -92,7 +92,7 @@ The first discovery of resources may not succeed in all regions while the IAM po 1. In the Cloudflare dashboard, go to **Cloud integrations (beta)**. - + 2. Select **Add** > **Azure integration**. 3. Give a descriptive name to your integration. Optionally, you can also add a description for it. @@ -115,8 +115,8 @@ Multi-Cloud Networking does not support personal Microsoft accounts. Sign in usi 6. In **Verify account ownership**, [add the tags displayed in the Cloudflare dashboard](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/tag-resources-portal). :::note - The tags may take several minutes to propagate and become readable to Cloudflare. It usually takes less than four minutes, but can sometimes take longer. You may have to retry the **Authorize** button while the propagation takes effect. - ::: + The tags may take several minutes to propagate and become readable to Cloudflare. It usually takes less than four minutes, but can sometimes take longer. You may have to retry the **Authorize** button while the propagation takes effect. + ::: 7. Select **I authorize Cloudflare to access my Azure account.** If your account does not have administrator privileges, you may need to pass this link to an account that has administrator privileges. 8. Select **Authorize**. @@ -131,7 +131,7 @@ The first discovery of resources may not succeed in all regions while the IAM po 1. In the Cloudflare dashboard, go to **Cloud integrations (beta)**. - + 2. Select **Add** > **Google integration**. 3. Give a descriptive name to your integration. Optionally, you can also add a description for it. @@ -142,8 +142,8 @@ The first discovery of resources may not succeed in all regions while the IAM po 1. Create a new [GCP service account](https://cloud.google.com/iam/docs/service-accounts-create) in your **Google account** > **GCP Console** > **IAM & Admin** > **Service Accounts**. 2. Grant the new service account these roles: - - `Compute Network Admin` - - `Compute Viewer` + - `Compute Network Admin` + - `Compute Viewer` 3. Under **IAM & Admin** > **Service Accounts**, select the service account you just created, and navigate to the **Permissions** tab. 4. Grant the **Service Account Token Creator** role to our bot account to allow it to impersonate this service account. Learn how to grant a specific role [in Google's documentation](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role): - `mcn-integrations-bot-prod@mcn-gcp-01.iam.gserviceaccount.com` @@ -163,4 +163,4 @@ The first discovery of resources may not succeed in all regions while the IAM po - [Set up Cloudflare WAN](/multi-cloud-networking/cloud-on-ramps/) as an on-ramp to your cloud. - [Manage resources](/multi-cloud-networking/manage-resources/) found by Multi-Cloud Networking. -- [Edit](/multi-cloud-networking/manage-resources/#edit-cloud-integrations) cloud integrations. \ No newline at end of file +- [Edit](/multi-cloud-networking/manage-resources/#edit-cloud-integrations) cloud integrations. diff --git a/src/content/docs/multi-cloud-networking/manage-resources.mdx b/src/content/docs/multi-cloud-networking/manage-resources.mdx index 4307d7b9da2de5c..b9eb3e0bc385769 100644 --- a/src/content/docs/multi-cloud-networking/manage-resources.mdx +++ b/src/content/docs/multi-cloud-networking/manage-resources.mdx @@ -6,7 +6,6 @@ products: title: Manage resources sidebar: order: 4 - --- import { DashButton } from "~/components"; @@ -19,7 +18,7 @@ To browse the resources in your catalog: 1. Go to the **Connectors** page. - + 2. Select the **Cloud (beta)** tab. 3. In **Cloud resources**, select a resource to inspect its details. @@ -30,7 +29,7 @@ You can change which cloud account the integration is linked to or delete the in 1. Go to **Cloud integrations**. - + 2. Select your integration > **Edit**. 3. In **Linked account details**, select **Link integration to a different cloud account**. @@ -43,7 +42,7 @@ You can download a JSON file containing metadata and configuration for all your 1. Go to the **Connectors** page. - + 2. Select the **Cloud (beta)** tab. 3. In **Cloud resources**, select **Download catalog**. diff --git a/src/content/docs/multi-cloud-networking/reference.mdx b/src/content/docs/multi-cloud-networking/reference.mdx index 8c37c24b0eabb74..16d0b78776c4c47 100644 --- a/src/content/docs/multi-cloud-networking/reference.mdx +++ b/src/content/docs/multi-cloud-networking/reference.mdx @@ -6,7 +6,6 @@ products: title: Reference sidebar: order: 5 - --- Refer to this page for details about how Cloudflare orchestrates VPN connectivity to your cloud networks. diff --git a/src/content/docs/network-error-logging/get-started.mdx b/src/content/docs/network-error-logging/get-started.mdx index e211ba22e5e901a..2b07fd6d29a8e84 100644 --- a/src/content/docs/network-error-logging/get-started.mdx +++ b/src/content/docs/network-error-logging/get-started.mdx @@ -6,7 +6,6 @@ products: - network-error-logging tags: - Logging - --- import { DashButton } from "~/components"; @@ -17,7 +16,7 @@ To enable Network Error Logging for Free and Pro zones: 1. In the Cloudflare dashboard, go to the **Account home** page. - + 2. Select **Network** and locate **Network Error Logging Monitoring**. 3. Select the toggle to enable Network Error Logging. diff --git a/src/content/docs/network-error-logging/how-to.mdx b/src/content/docs/network-error-logging/how-to.mdx index 6aac695c1d00025..74f33f4e7eeadff 100644 --- a/src/content/docs/network-error-logging/how-to.mdx +++ b/src/content/docs/network-error-logging/how-to.mdx @@ -11,21 +11,20 @@ head: description: NEL reports show you why a request failed, the country a request failed from, and last mile network a request failed from, and the likely intended Cloudflare data center. - --- import { DashButton } from "~/components"; Use NEL reports to view information such as: -* Why a request failed -* The country a request failed from -* The last mile network a request failed from -* The Cloudflare data center the request was most likely meant for +- Why a request failed +- The country a request failed from +- The last mile network a request failed from +- The Cloudflare data center the request was most likely meant for 1. Log in to your Cloudflare dashboard. - + 2. Select **Analytics & Logs** > **Edge Reachability**. diff --git a/src/content/docs/network-error-logging/index.mdx b/src/content/docs/network-error-logging/index.mdx index b712cac7782fb54..9f1acd04e344ba5 100644 --- a/src/content/docs/network-error-logging/index.mdx +++ b/src/content/docs/network-error-logging/index.mdx @@ -34,21 +34,21 @@ A sample Network Error Report payload appears as follows: ```json { - "age": 20, - "type": "network-error", - "url": "https://example.com/previous-page", - "body": { - "elapsed_time": 18, - "method": "POST", - "phase": "dns", - "protocol": "http/1.1", - "referrer": "https://example.com/previous-page", - "sampling_fraction": 1, - "server_ip": "", - "status_code": 0, - "type": "dns.name_not_resolved", - "url": "https://example-host.com/" - } + "age": 20, + "type": "network-error", + "url": "https://example.com/previous-page", + "body": { + "elapsed_time": 18, + "method": "POST", + "phase": "dns", + "protocol": "http/1.1", + "referrer": "https://example.com/previous-page", + "sampling_fraction": 1, + "server_ip": "", + "status_code": 0, + "type": "dns.name_not_resolved", + "url": "https://example-host.com/" + } } ``` @@ -56,9 +56,9 @@ A sample Network Error Report payload appears as follows: Cloudflare uses geolocation lookups to extract the following information from every client IP in a NEL report: -* Client ASN -* Client country -* Client metro area +- Client ASN +- Client country +- Client metro area Cloudflare uses internal lookups to associate the above data with a customer domain and customer account. @@ -67,9 +67,10 @@ Cloudflare does not store any PII or user-specific data, and any IP data is only The client IP address is only stored in volatile memory for the lifetime of the request to Cloudflare’s NEL endpoint (order of milliseconds) and is dropped immediately after the request completes. Cloudflare does not log the client IP address anywhere in the Network Error Logging pipeline. NEL reports contain information about the end user's network conditions, which could be considered sensitive. Cloudflare takes privacy seriously and has implemented the following safeguards: -* Reports are sent to Cloudflare's infrastructure and are not shared with third parties. -* Reports do not contain personally identifiable information (PII). -* Customers can opt out of having their end users consume the NEL headers using one of the following methods: + +- Reports are sent to Cloudflare's infrastructure and are not shared with third parties. +- Reports do not contain personally identifiable information (PII). +- Customers can opt out of having their end users consume the NEL headers using one of the following methods: 1. **Self-service (Zone setting)** — Use the dashboard toggle or API (`PATCH /zones/{zone_id}/settings/nel`) to disable NEL for your zone. This can be re-enabled by any zone administrator at any time. 2. **Permanent opt-out via Support** — Contact Cloudflare support to have the `nel___enable` feature flag disabled at the product level. This prevents NEL from being enabled on your zone entirely and cannot be reversed by zone administrators. -For Free and Pro plans, the dashboard toggle is typically sufficient. Enterprise customers with strict privacy requirements may prefer the permanent support-level opt-out. + For Free and Pro plans, the dashboard toggle is typically sufficient. Enterprise customers with strict privacy requirements may prefer the permanent support-level opt-out. diff --git a/src/content/docs/network-flow/api.mdx b/src/content/docs/network-flow/api.mdx index abedf0335eb08a4..86093e48a9529bf 100644 --- a/src/content/docs/network-flow/api.mdx +++ b/src/content/docs/network-flow/api.mdx @@ -6,9 +6,8 @@ products: - network-flow sidebar: order: 9 - --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/changelog.mdx b/src/content/docs/network-flow/changelog.mdx index b94beaa04726a51..c0a384cb7ba3378 100644 --- a/src/content/docs/network-flow/changelog.mdx +++ b/src/content/docs/network-flow/changelog.mdx @@ -13,4 +13,7 @@ import { ProductChangelog } from "~/components"; {/* */} - + diff --git a/src/content/docs/network-flow/cloud-flow-logs.mdx b/src/content/docs/network-flow/cloud-flow-logs.mdx index b3b71aa0230d535..1f7b9357b839a4c 100644 --- a/src/content/docs/network-flow/cloud-flow-logs.mdx +++ b/src/content/docs/network-flow/cloud-flow-logs.mdx @@ -16,4 +16,4 @@ sidebar: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/faq.mdx b/src/content/docs/network-flow/faq.mdx index 83e76018f873f71..7f18175619785c3 100644 --- a/src/content/docs/network-flow/faq.mdx +++ b/src/content/docs/network-flow/faq.mdx @@ -11,6 +11,6 @@ sidebar: order: 11 --- -import { Render } from "~/components" +import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/get-started.mdx b/src/content/docs/network-flow/get-started.mdx index 8129f8e3bb7ce5a..4c52c7365d5e149 100644 --- a/src/content/docs/network-flow/get-started.mdx +++ b/src/content/docs/network-flow/get-started.mdx @@ -13,4 +13,4 @@ sidebar: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/glossary.mdx b/src/content/docs/network-flow/glossary.mdx index 560fd3884273263..3000aa1c392cf88 100644 --- a/src/content/docs/network-flow/glossary.mdx +++ b/src/content/docs/network-flow/glossary.mdx @@ -6,10 +6,9 @@ products: - network-flow sidebar: order: 10 - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Network Flow (formerly Magic Network Monitoring) documentation. diff --git a/src/content/docs/network-flow/magic-transit-integration.mdx b/src/content/docs/network-flow/magic-transit-integration.mdx index 8defa83ac2a41fc..0b4ac3859f62b97 100644 --- a/src/content/docs/network-flow/magic-transit-integration.mdx +++ b/src/content/docs/network-flow/magic-transit-integration.mdx @@ -8,16 +8,15 @@ tags: - Integration sidebar: order: 7 - --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/network-flow/network-flow-free.mdx b/src/content/docs/network-flow/network-flow-free.mdx index ca7198f7f03d8fe..645bf56f6cb3a17 100644 --- a/src/content/docs/network-flow/network-flow-free.mdx +++ b/src/content/docs/network-flow/network-flow-free.mdx @@ -11,6 +11,6 @@ head: content: Network Flow free version --- -import { Render } from "~/components" +import { Render } from "~/components"; diff --git a/src/content/docs/network-flow/routers/index.mdx b/src/content/docs/network-flow/routers/index.mdx index dc7bb414eb48ca9..476c0017b240362 100644 --- a/src/content/docs/network-flow/routers/index.mdx +++ b/src/content/docs/network-flow/routers/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 3 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/routers/netflow-ipfix-config.mdx b/src/content/docs/network-flow/routers/netflow-ipfix-config.mdx index 3d1f2222d0b7878..58e65c53add4e60 100644 --- a/src/content/docs/network-flow/routers/netflow-ipfix-config.mdx +++ b/src/content/docs/network-flow/routers/netflow-ipfix-config.mdx @@ -11,9 +11,8 @@ sidebar: head: [] description: A step-by-step configuration guide for exporting NetFlow or IPFIX data to Cloudflare's network. - --- import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/routers/recommended-sampling-rate.mdx b/src/content/docs/network-flow/routers/recommended-sampling-rate.mdx index 82158fe7ad97cf0..b8cd99b68ae977e 100644 --- a/src/content/docs/network-flow/routers/recommended-sampling-rate.mdx +++ b/src/content/docs/network-flow/routers/recommended-sampling-rate.mdx @@ -9,7 +9,6 @@ sidebar: order: 2 head: [] description: The best sampling rate recommendations for your network's traffic volume. - --- import { Render } from "~/components"; @@ -17,4 +16,4 @@ import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/network-flow/routers/sflow-config.mdx b/src/content/docs/network-flow/routers/sflow-config.mdx index ee37c4c868a8ac4..5b7ba843d316df0 100644 --- a/src/content/docs/network-flow/routers/sflow-config.mdx +++ b/src/content/docs/network-flow/routers/sflow-config.mdx @@ -14,7 +14,4 @@ description: A step-by-step configuration guide for exporting sFlow data to import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/routers/supported-routers.mdx b/src/content/docs/network-flow/routers/supported-routers.mdx index 45a57d81dc9d9a9..410865594728185 100644 --- a/src/content/docs/network-flow/routers/supported-routers.mdx +++ b/src/content/docs/network-flow/routers/supported-routers.mdx @@ -13,7 +13,4 @@ description: A list of open source, NetFlow, and sFlow routers. import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/rules/index.mdx b/src/content/docs/network-flow/rules/index.mdx index ef9d83a02553c40..ff541e592e5802a 100644 --- a/src/content/docs/network-flow/rules/index.mdx +++ b/src/content/docs/network-flow/rules/index.mdx @@ -14,4 +14,3 @@ sidebar: import { Render } from "~/components"; - diff --git a/src/content/docs/network-flow/rules/rule-notifications.mdx b/src/content/docs/network-flow/rules/rule-notifications.mdx index 0f85c34f0e1fd3d..cfc447c89cb41dd 100644 --- a/src/content/docs/network-flow/rules/rule-notifications.mdx +++ b/src/content/docs/network-flow/rules/rule-notifications.mdx @@ -10,4 +10,4 @@ sidebar: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/rules/s-flow-ddos-attack.mdx b/src/content/docs/network-flow/rules/s-flow-ddos-attack.mdx index 9dfff3f061f5c5d..34d38296b6570d4 100644 --- a/src/content/docs/network-flow/rules/s-flow-ddos-attack.mdx +++ b/src/content/docs/network-flow/rules/s-flow-ddos-attack.mdx @@ -12,4 +12,4 @@ sidebar: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/rules/static-threshold.mdx b/src/content/docs/network-flow/rules/static-threshold.mdx index 172ca611aa68db2..fa5fca21e7cef6f 100644 --- a/src/content/docs/network-flow/rules/static-threshold.mdx +++ b/src/content/docs/network-flow/rules/static-threshold.mdx @@ -10,4 +10,4 @@ sidebar: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/tutorials/ddos-testing-guide.mdx b/src/content/docs/network-flow/tutorials/ddos-testing-guide.mdx index 0b0bb68e1ebbc8d..d43167ed7936fd7 100644 --- a/src/content/docs/network-flow/tutorials/ddos-testing-guide.mdx +++ b/src/content/docs/network-flow/tutorials/ddos-testing-guide.mdx @@ -15,4 +15,4 @@ description: >- import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/tutorials/encrypt-network-flow-data.mdx b/src/content/docs/network-flow/tutorials/encrypt-network-flow-data.mdx index f7562708d10bd0d..8b86d643dd5ade2 100644 --- a/src/content/docs/network-flow/tutorials/encrypt-network-flow-data.mdx +++ b/src/content/docs/network-flow/tutorials/encrypt-network-flow-data.mdx @@ -19,4 +19,7 @@ description: >- import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/tutorials/graphql-analytics.mdx b/src/content/docs/network-flow/tutorials/graphql-analytics.mdx index 00c00c094490f32..26f062040cac4f3 100644 --- a/src/content/docs/network-flow/tutorials/graphql-analytics.mdx +++ b/src/content/docs/network-flow/tutorials/graphql-analytics.mdx @@ -20,4 +20,4 @@ import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-flow/tutorials/index.mdx b/src/content/docs/network-flow/tutorials/index.mdx index 8fae75e32ca4f24..a13ee6bc966bfd7 100644 --- a/src/content/docs/network-flow/tutorials/index.mdx +++ b/src/content/docs/network-flow/tutorials/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/network-interconnect/changelog.mdx b/src/content/docs/network-interconnect/changelog.mdx index 5b15e2c668e23f3..64c3877fd409947 100644 --- a/src/content/docs/network-interconnect/changelog.mdx +++ b/src/content/docs/network-interconnect/changelog.mdx @@ -13,7 +13,10 @@ import { ProductChangelog } from "~/components"; {/* */} - + ## 2024-10-01 diff --git a/src/content/docs/network-interconnect/get-started.mdx b/src/content/docs/network-interconnect/get-started.mdx index 16c0b376aa76fb9..daba42777661fd5 100644 --- a/src/content/docs/network-interconnect/get-started.mdx +++ b/src/content/docs/network-interconnect/get-started.mdx @@ -11,7 +11,7 @@ tags: - GCP --- -import { Render, DashButton } from "~/components" +import { Render, DashButton } from "~/components"; :::note[BGP architecture and resiliency] CNI supports BGP peering with the Cloudflare Virtual Network routing table. BGP over CNI is in closed beta and is not currently available to new customers. If you are interested in BGP peering over CNI, contact your account team. @@ -26,7 +26,7 @@ For detailed information about BGP architecture, Edge Resiliency Mode, and route Your Cloudflare account team determines CNI eligibility and port availability. Notably: - CNI ports are currently offered at no charge to Enterprise customers. - - Non-Enterprise customers (and any third party) may peer with Cloudflare via Internet Exchange according to our [open peering policy](https://www.cloudflare.com/peering-policy/). + - Non-Enterprise customers (and any third party) may peer with Cloudflare via Internet Exchange according to our [open peering policy](https://www.cloudflare.com/peering-policy/). - CNI is available at select Cloudflare data centers: - The type of Dataplane offered in that location will determine specifications of the supported connection, such as the MTU. - The diversity offered in the location will vary. @@ -43,36 +43,37 @@ To peer with Cloudflare, advertise prefixes with a prefix length of `/24` or sho ## Technical specifications - **Supported port types**: - - **Dataplane v1**: 10GBASE-LR (single-mode fiber) and 100GBASE-LR (single-mode fiber). - - **Dataplane v2**: 10GBASE-LR (single-mode fiber) and 100GBASE-LR4 (single-mode fiber) optics are supported. + - **Dataplane v1**: 10GBASE-LR (single-mode fiber) and 100GBASE-LR (single-mode fiber). + - **Dataplane v2**: 10GBASE-LR (single-mode fiber) and 100GBASE-LR4 (single-mode fiber) optics are supported. - **Distance limitations:** Cloudflare does not support optical links longer than 10 km. For longer distances, you must use intermediate hardware or a third-party provider to extend the connection. - **IP addressing:** All CNI connections and Partner CNI connections use a `/31` subnet for point-to-point IP connectivity between your router and Cloudflare. - **VLAN support:** - - **Dataplane v1**: CNI ports may be assigned a single 802.1Q VLAN tag. - - **Dataplane v2**: VLAN tagging (802.1Q) and QinQ are not yet supported. + - **Dataplane v1**: CNI ports may be assigned a single 802.1Q VLAN tag. + - **Dataplane v2**: VLAN tagging (802.1Q) and QinQ are not yet supported. - **MTU considerations:** - - **Dataplane v1**: Supports a native 1,500-byte MTU for traffic from Cloudflare to you (ingress), but still requires a 1,476-byte MTU for traffic from you to Cloudflare (egress). - - **Dataplane v2**: Supports a maximum MTU of 1,500 bytes bidirectionally with no GRE requirement. + - **Dataplane v1**: Supports a native 1,500-byte MTU for traffic from Cloudflare to you (ingress), but still requires a 1,476-byte MTU for traffic from you to Cloudflare (egress). + - **Dataplane v2**: Supports a maximum MTU of 1,500 bytes bidirectionally with no GRE requirement. - **Bidirectional Forwarding Detection (BFD):** - - **Dataplane v1**: BFD provides fast failure detection for BGP sessions and is supported on direct connections. To enable BFD, contact your account team. Note that BFD on a CNI does not impact the failover time for IPsec/GRE tunnels, which rely on separate health checks. - - **Dataplane v2**: Not yet supported. + - **Dataplane v1**: BFD provides fast failure detection for BGP sessions and is supported on direct connections. To enable BFD, contact your account team. Note that BFD on a CNI does not impact the failover time for IPsec/GRE tunnels, which rely on separate health checks. + - **Dataplane v2**: Not yet supported. - **Link Aggregation Control Protocol (LACP)**: - - **Dataplane v1**: To increase bandwidth and provide link resiliency, Cloudflare supports combining multiple physical CNI ports into a single logical channel using Link Aggregation Control Protocol (LACP). You can bundle multiple connections to increase total throughput and add redundancy to your private connection with Cloudflare. - - **Dataplane v2**: Not yet supported. Use ECMP instead. + - **Dataplane v1**: To increase bandwidth and provide link resiliency, Cloudflare supports combining multiple physical CNI ports into a single logical channel using Link Aggregation Control Protocol (LACP). You can bundle multiple connections to increase total throughput and add redundancy to your private connection with Cloudflare. + - **Dataplane v2**: Not yet supported. Use ECMP instead. ## Performance characteristics The following are the maximum throughput rates supported by the CNI connection. Actual performance will depend on your specific use case and configuration. -| Direction (use case) | 10G Circuit | 100G Circuit | -|----------------------|-------------|--------------| -| From Cloudflare to Customer (all use cases) | Up to 10 Gbps | Up to 100 Gbps | -| From Customer to Cloudflare (peering use case) | Up to 10 Gbps | Up to 100 Gbps | -| From Customer to Cloudflare (Magic Transit/WAN) | **v1**: Up to 1 Gbps per GRE tunnel over the CNI
    **v2**: Up to 1 Gbps per CNI connection | **v1**: Up to 1 Gbps per GRE tunnel over the CNI
    **v2**: Up to 1 Gbps per CNI connection | +| Direction (use case) | 10G Circuit | 100G Circuit | +| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| From Cloudflare to Customer (all use cases) | Up to 10 Gbps | Up to 100 Gbps | +| From Customer to Cloudflare (peering use case) | Up to 10 Gbps | Up to 100 Gbps | +| From Customer to Cloudflare (Magic Transit/WAN) | **v1**: Up to 1 Gbps per GRE tunnel over the CNI
    **v2**: Up to 1 Gbps per CNI connection | **v1**: Up to 1 Gbps per GRE tunnel over the CNI
    **v2**: Up to 1 Gbps per CNI connection | ## Service expectations Consider the following service levels when planning your deployment: + - **No Formal SLA**: - CNI is currently offered at no charge and without a formal [Service Level Agreement (SLA)](https://www.cloudflare.com/service-specific-terms-network-services/#cf-network-interconnect-terms). - Cloudflare will work to restore CNI service in the event of a Cloudflare issue. In some Cloudflare data centers the recovery time could be several days. Therefore, we always recommend backup connectivity to a different device or via an Internet tunnel. @@ -98,8 +99,8 @@ The process of provisioning a CNI typically takes two to four weeks, depending o 1. **Submit request**: Work with your account team to create a CNI request ticket, providing your desired CNI type, location, use case, and technical details. An Implementation Manager will be assigned to guide the process. 2. **Review configuration**: For the v1 Dataplane, the Implementation Manager will provide a detailed configuration document covering IP addressing, VLANs, and other technical specifications. You must review and approve this document. For the v2 Dataplane, this step is not necessary. 3. **Order connection**: - - For a **Direct Interconnect**, you will receive a Letter of Authorization (LOA) from Cloudflare to order the physical cross-connect from the data center facility operator. - - For a **Partner Interconnect**, you will use the provided details to order a virtual circuit from the partner's portal. + - For a **Direct Interconnect**, you will receive a Letter of Authorization (LOA) from Cloudflare to order the physical cross-connect from the data center facility operator. + - For a **Partner Interconnect**, you will use the provided details to order a virtual circuit from the partner's portal. 4. **Configure network**: Both Cloudflare and your network team will configure the respective network devices according to the approved document. 5. **Test and verify**: Once the connection is physically established, teams will perform basic connectivity tests (for example, ping) and, if applicable, verify that the BGP session can be established. 6. Enable tunnel health checks for [Magic Transit](/magic-transit/how-to/configure-tunnel-endpoints/#add-tunnels) and/or [Cloudflare WAN](/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#add-tunnels). @@ -142,7 +143,7 @@ To connect to AWS Direct Connect: 1. In the Cloudflare dashboard, go to **Interconnects**. - + 2. Select **Create an interconnect**. 3. Under **Cloud Interconnect**, select **Create new**. @@ -162,9 +163,5 @@ You can now select **View interconnects** for a list of all interconnects on you After you have configured your Google Cloud Interconnect, you will need to add routes to use the interconnect: -- To create routes in the Cloudflare Virtual Network routing table to direct traffic towards GCP: - - Add [static routes](/cloudflare-wan/configuration/how-to/configure-routes/#configure-static-routes) to your Cloudflare WAN routing table with [legacy bidirectional tunnel health checks](/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#legacy-bidirectional-health-checks) to detect failures and steer traffic to alternative paths. - - Note that routes advertised by BGP from GCP Cloud Router will be ignored. -- To create routes in GCP routing table to direct traffic towards Cloudflare, you must use the GCP Cloud Router: - - Add [custom learned routes to Cloud Router](https://cloud.google.com/network-connectivity/docs/router/how-to/configure-custom-learned-routes). - - Use the BGP session. Reach out to your account team to request a list of one or more prefixes to advertise, and specify the interconnect ID you want to advertise over. +- To create routes in the Cloudflare Virtual Network routing table to direct traffic towards GCP: - Add [static routes](/cloudflare-wan/configuration/how-to/configure-routes/#configure-static-routes) to your Cloudflare WAN routing table with [legacy bidirectional tunnel health checks](/cloudflare-wan/configuration/how-to/configure-tunnel-endpoints/#legacy-bidirectional-health-checks) to detect failures and steer traffic to alternative paths. - Note that routes advertised by BGP from GCP Cloud Router will be ignored. +- To create routes in GCP routing table to direct traffic towards Cloudflare, you must use the GCP Cloud Router: - Add [custom learned routes to Cloud Router](https://cloud.google.com/network-connectivity/docs/router/how-to/configure-custom-learned-routes). - Use the BGP session. Reach out to your account team to request a list of one or more prefixes to advertise, and specify the interconnect ID you want to advertise over. diff --git a/src/content/docs/network-interconnect/index.mdx b/src/content/docs/network-interconnect/index.mdx index 80bde6dd95d9bb1..9b63e926dc454eb 100644 --- a/src/content/docs/network-interconnect/index.mdx +++ b/src/content/docs/network-interconnect/index.mdx @@ -11,10 +11,10 @@ head: content: Overview --- -import { Description, Plan, RelatedProduct, Render } from "~/components" +import { Description, Plan, RelatedProduct, Render } from "~/components"; -Connect your network infrastructure directly to Cloudflare + Connect your network infrastructure directly to Cloudflare @@ -24,6 +24,7 @@ Cloudflare Network Interconnect (CNI) allows you to connect your network infrast ## Benefits Enterprises use CNI to achieve: + - **Enhanced Performance**: Gain lower latency and more consistent network throughput. - **Increased Security**: Reduce your network's attack surface by connecting privately and avoiding the public Internet. @@ -31,15 +32,16 @@ Enterprises use CNI to achieve: Choose the connection type for your infrastructure and operational needs. -| | Direct Interconnect | Partner Interconnect | Cloud Interconnect | -| --- | --- | --- | --- | -| **Port type** | A dedicated physical fiber connection between your network equipment and Cloudflare's hardware in a shared data center. | A virtual connection to Cloudflare established through one of our global connectivity partners. | A private connection between a customer's cloud environments (for example, Amazon Web Services (AWS), Google Cloud) and Cloudflare. | -| **Operations** | You are responsible for procuring and managing the physical cross-connect to Cloudflare's equipment. | Your partner manages the connection logistics, often through a software-defined networking portal. | Cloudflare connects to cloud providers' dedicated services, and customers establish private virtual circuits from their virtual private clouds. | -| **Ideal use case** | For customers collocated with Cloudflare who require maximum control, performance, and reliability. | For customers who are not in the same data center as Cloudflare or prefer a managed connectivity solution. | For customers with workloads in public clouds who need secure, reliable connectivity to Cloudflare services. | +| | Direct Interconnect | Partner Interconnect | Cloud Interconnect | +| ------------------ | ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| **Port type** | A dedicated physical fiber connection between your network equipment and Cloudflare's hardware in a shared data center. | A virtual connection to Cloudflare established through one of our global connectivity partners. | A private connection between a customer's cloud environments (for example, Amazon Web Services (AWS), Google Cloud) and Cloudflare. | +| **Operations** | You are responsible for procuring and managing the physical cross-connect to Cloudflare's equipment. | Your partner manages the connection logistics, often through a software-defined networking portal. | Cloudflare connects to cloud providers' dedicated services, and customers establish private virtual circuits from their virtual private clouds. | +| **Ideal use case** | For customers collocated with Cloudflare who require maximum control, performance, and reliability. | For customers who are not in the same data center as Cloudflare or prefer a managed connectivity solution. | For customers with workloads in public clouds who need secure, reliable connectivity to Cloudflare services. | ## Dataplane Cloudflare's data centers may support one or more interconnect dataplanes. The dataplane is the type of equipment that terminates your direct connection: + - **Dataplane v1**: A peering connection to a Cloudflare edge data center that supports Generic Routing Encapsulation (GRE) tunnels for connecting with the Cloudflare Virtual Network, with optional GRE-less delivery for Magic Transit Direct Server Return. - **Dataplane v2**: Is based on the Customer Connectivity Router (CCR), which is specifically designed for customer connectivity. It provides simplified routing without GRE tunneling and supports a 1,500-byte Maximum Transmission Unit (MTU) bidirectionally. @@ -55,15 +57,25 @@ To protect against a single point of failure, it is critical to design your CNI Refer to [Service Expectations](/network-interconnect/get-started/#service-expectations) for more information. -*** +--- ## Related products - -Magic Transit is a network security and performance solution that offers Distributed Denial of Service (DDoS) protection, traffic acceleration, and more for on-premise, cloud-hosted, and hybrid networks. + + Magic Transit is a network security and performance solution that offers + Distributed Denial of Service (DDoS) protection, traffic acceleration, and + more for on-premise, cloud-hosted, and hybrid networks. - -Improve security and performance for your entire corporate network, reducing cost and operation complexity. + + Improve security and performance for your entire corporate network, reducing + cost and operation complexity. - diff --git a/src/content/docs/network-interconnect/monitoring-and-alerts.mdx b/src/content/docs/network-interconnect/monitoring-and-alerts.mdx index 861b447fcad7132..1b73b9485ee8d93 100644 --- a/src/content/docs/network-interconnect/monitoring-and-alerts.mdx +++ b/src/content/docs/network-interconnect/monitoring-and-alerts.mdx @@ -8,7 +8,7 @@ sidebar: order: 5 --- -import { Render, DashButton } from "~/components" +import { Render, DashButton } from "~/components"; ## Monitoring @@ -22,17 +22,18 @@ The Status column displays three statuses: - **Unhealthy**: The link operational state at interconnect port is down. This might mean the CCR does not see light, cannot negotiate an Ethernet signal, or the light levels are below -20 dBm. You can take general troubleshooting steps to solve the issue (such as checking cables and status lights for connectivity issues). If you are unable to solve the issue in this way, contact your account team. - **Pending**: The link is not yet active. This is expected and can occur for several reasons: the customer has not received a cross-connect, the device is unresponsive, or physical adjustments may be required, such as swapping RX/TX fibers. The **Pending** status will disappear after the customer completes the cross-connect and status moves to **Active**. - ## Alerts (v1 dataplane only) You can configure notifications for upcoming CNI maintenance events using the Notifications feature in the Cloudflare dashboard. It is recommended to subscribe to two types of notifications to stay fully informed. **CNI Connection Maintenance Alert (beta):** This alert informs you about maintenance events (scheduled, updated, or canceled) that directly impact your CNI circuits used with the Cloudflare Virtual Network only. + - You will receive warnings up to two weeks in advance for maintenance impacting your Magic Transit/WAN CNI connections. - You will be notified if the details of a scheduled maintenance change or if it is canceled. - For recently added maintenance, notifications are sent after a six-hour delay to prevent alerting fatigue from minor adjustments. **Cloudflare Status Maintenance Notification:** This alert informs you about maintenance for an entire Cloudflare Point of Presence (PoP). While not specific to your CNI, this maintenance will impact all CNI services in that location. This includes connections used only for peering without Cloudflare Virtual Network. + - You will be warned about potentially disruptive maintenance at the PoP level. - By default, you are notified for all event types (Scheduled, Changed, Canceled), but you can filter these. - By default, you are notified for all Cloudflare PoPs, but you can filter for only the specific locations where you have CNI circuits. @@ -43,7 +44,7 @@ You can configure notifications for upcoming CNI maintenance events using the No 1. In the Cloudflare dashboard, go to the **Notifications** page. - + 2. Select **Add**. 3. From the product drop-down menu, select _Cloudflare Network Interconnect_. @@ -55,9 +56,10 @@ You can configure notifications for upcoming CNI maintenance events using the No ### Enable Cloudflare Status Maintenance Notification First, identify the PoP code for your CNI circuit: + 1. In the Cloudflare dashboard, go to **Interconnects**. - + 2. Select the CNI you want to enable notifications for. 3. In the menu that appears, note the Data Center code (for example, `gru-b`). diff --git a/src/content/docs/network-interconnect/operational-guidance.mdx b/src/content/docs/network-interconnect/operational-guidance.mdx index a94aa4bae85717a..2cf09f24173e915 100644 --- a/src/content/docs/network-interconnect/operational-guidance.mdx +++ b/src/content/docs/network-interconnect/operational-guidance.mdx @@ -52,4 +52,4 @@ If no system-wide problems are reported, gather the following information before - **Identification**: The CNI IP address or point-to-point prefix for the impacted CNI. If your CNI is part of a Magic setup, please also provide the name of the Magic Transit/WAN interconnect as listed in your dashboard. - **Physical Layer**: Light levels of the CNI link (if applicable). - **Service Impact**: Confirmation whether Magic Transit / WAN traffic was affected. -- **Problem Description**: A clear summary of the issue (for example, CNI down, Border Gateway Protocol (BGP) session down, prefixes withdrawn). \ No newline at end of file +- **Problem Description**: A clear summary of the issue (for example, CNI down, Border Gateway Protocol (BGP) session down, prefixes withdrawn). diff --git a/src/content/docs/network/index.mdx b/src/content/docs/network/index.mdx index e6d3e05e3d5a401..e9f9e837d33f580 100644 --- a/src/content/docs/network/index.mdx +++ b/src/content/docs/network/index.mdx @@ -11,38 +11,48 @@ products: - network --- -import { Description, Feature, Plan, RelatedProduct } from "~/components" +import { Description, Feature, Plan, RelatedProduct } from "~/components"; - -Manage network settings for your website. - +Manage network settings for your website. -*** +--- ## Features -Include the country code of the visitor location with all requests to your website. + Include the country code of the visitor location with all requests to your + website. -Enable IPv6 support and gateway. + Enable IPv6 support and gateway. -Allow WebSockets connections to your origin server. + Allow WebSockets connections to your origin server. -*** +--- ## Related products - -The Cloudflare China Network is a package of selected Cloudflare’s performance and security products running on data centers located in mainland China and operated by Cloudflare’s partner JD Cloud. + + The Cloudflare China Network is a package of selected Cloudflare’s performance + and security products running on data centers located in mainland China and + operated by Cloudflare’s partner JD Cloud. - -Managed Transforms allow you to perform common adjustments to HTTP request and response headers with the click of a button. + + Managed Transforms allow you to perform common adjustments to HTTP request and + response headers with the click of a button. diff --git a/src/content/docs/network/websockets.mdx b/src/content/docs/network/websockets.mdx index 77ff14da6b28963..dbb08884e375a08 100644 --- a/src/content/docs/network/websockets.mdx +++ b/src/content/docs/network/websockets.mdx @@ -89,4 +89,3 @@ Cloudflare will close a WebSocket connection when no data is transmitted in eith ### Session affinity for load-balanced WebSocket origins If your WebSocket origin is behind a Cloudflare Load Balancer, turn on **Session affinity** to ensure all requests from the same client are routed to the same origin server. Without session affinity, a WebSocket reconnect may land on a different origin that does not have the session state. - diff --git a/src/content/docs/notifications/get-started/configure-pagerduty.mdx b/src/content/docs/notifications/get-started/configure-pagerduty.mdx index fef6662b17543be..a4e84b32aedd7cb 100644 --- a/src/content/docs/notifications/get-started/configure-pagerduty.mdx +++ b/src/content/docs/notifications/get-started/configure-pagerduty.mdx @@ -12,7 +12,7 @@ import { DashButton } from "~/components"; :::note -This feature is only available if your account has at least one zone on a Business or higher plan. For more information, refer to our [plans](https://www.cloudflare.com/plans/). +This feature is only available if your account has at least one zone on a Business or higher plan. For more information, refer to our [plans](https://www.cloudflare.com/plans/). ::: Cloudflare’s Notification service supports routing notifications to PagerDuty. By sending notifications to PagerDuty you can leverage the same service definitions and escalation paths that you would for other third-party services that you connect to PagerDuty. @@ -23,14 +23,15 @@ To use PagerDuty as a connected service, you must [sign up for a PagerDuty accou :::note -According to PagerDuty, you will need an account with the following permissions to add a connected service: User, Admin, Manager, Global Admin, or Account Owner. +According to PagerDuty, you will need an account with the following permissions to add a connected service: User, Admin, Manager, Global Admin, or Account Owner. ::: ## Connect PagerDuty to a Cloudflare account 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. Go to **Destinations**. 3. In the **Connected notification services** card, select **Connect**. 4. Log in to your [PagerDuty account](https://www.pagerduty.com/) to connect it to your Cloudflare account. @@ -48,8 +49,9 @@ Disconnecting PagerDuty will disable any notifications being sent to PagerDuty w If other delivery destinations were selected, then those notifications will still be routed as configured. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. Go to **Destinations**. 3. In the **Connected notification services** card, select **View** on the PagerDuty service you want to disconnect. 4. Select **Disconnect** > **Confirm**. diff --git a/src/content/docs/notifications/get-started/index.mdx b/src/content/docs/notifications/get-started/index.mdx index 4e0d0a3fba2ffc8..04bb4821e3116e6 100644 --- a/src/content/docs/notifications/get-started/index.mdx +++ b/src/content/docs/notifications/get-started/index.mdx @@ -36,8 +36,9 @@ This guide will help you create, edit, test, or delete notifications using the C You can create a notification via the Cloudflare dashboard. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. Select **Add**. 3. On the notification you want to create, choose **Select**. 4. Name the notification. @@ -45,7 +46,7 @@ You can create a notification via the Cloudflare dashboard. :::note -Professional and Business plans will have access to more notifications and PagerDuty. Accounts with a paid service will additionally have access to webhooks. +Professional and Business plans will have access to more notifications and PagerDuty. Accounts with a paid service will additionally have access to webhooks. ::: 6. (Optional) Specify any additional options for the notification, if required. For example, some notifications require that you select one or more domains or services. @@ -58,8 +59,9 @@ The browser will navigate back to the list of notifications, where the new notif You can edit existing Notifications via the Cloudflare dashboard. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. On the notification that you want to modify, select **Edit**. 3. Make your changes as needed and select **Save**. @@ -70,8 +72,9 @@ The browser will navigate back to the list of notifications. You can delete or disable existing Notifications via the Cloudflare dashboard. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. On the notification that you want to disable, select the **Enabled** toggle. To delete it, select **Delete**. ### Mute a notification @@ -79,8 +82,9 @@ You can delete or disable existing Notifications via the Cloudflare dashboard. You can temporarily mute a notification to stop receiving alerts for a set period of time. Muted notifications create a silence that automatically expires after the specified duration. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. On the notification that you want to mute, select **Mute**. 3. Select a duration preset (**1h**, **12h**, or **24h**), or set a custom time range using the **Start Time** and **End Time** fields. 4. Select **Save**. @@ -95,8 +99,9 @@ While a notification is muted, alerts that would have triggered it are suppresse You can view, edit, or delete existing silences from the **Silences** tab. 1. In the Cloudflare dashboard, go to the **Notifications** page. - - + + + 2. Select the **Silences** tab. 3. To create a new silence, select **Add**. To modify an existing silence, select **Edit**. To remove a silence before it expires, select **Delete**. diff --git a/src/content/docs/notifications/index.mdx b/src/content/docs/notifications/index.mdx index a1d547bdecee617..829b5519eba15c2 100644 --- a/src/content/docs/notifications/index.mdx +++ b/src/content/docs/notifications/index.mdx @@ -1,5 +1,4 @@ --- - pcx_content_type: overview title: Notifications sidebar: @@ -9,7 +8,7 @@ products: description: Configure alerts for your Cloudflare account. --- -import { Plan } from "~/components" +import { Plan } from "~/components"; @@ -29,4 +28,4 @@ The availability of delivery methods like PagerDuty and webhooks in Free or Prof - PagerDuty is available in zones on a Free/Professional plan if your Cloudflare account has at least one zone in a Business plan (or higher). - Webhooks are available in zones on a Free plan if your Cloudflare account has at least one zone in a Professional plan (or higher). -::: + ::: diff --git a/src/content/docs/notifications/notification-available.mdx b/src/content/docs/notifications/notification-available.mdx index 6712c3aee831957..b41697b971f7c3d 100644 --- a/src/content/docs/notifications/notification-available.mdx +++ b/src/content/docs/notifications/notification-available.mdx @@ -8,7 +8,7 @@ products: description: Browse available notification types by product. --- -import { AvailableNotifications } from "~/components" +import { AvailableNotifications } from "~/components"; Available Notifications depend on your Cloudflare plan. Cloudflare offers a variety of Notifications for our products and services, such as [Billing](/billing/), [Denial of Service protection](/ddos-protection/), [Magic Transit](/magic-transit/), and [SSL/TLS](/ssl/). diff --git a/src/content/docs/notifications/notification-history.mdx b/src/content/docs/notifications/notification-history.mdx index 57b80f9b1bd7402..4bbc04b274ecd9b 100644 --- a/src/content/docs/notifications/notification-history.mdx +++ b/src/content/docs/notifications/notification-history.mdx @@ -32,5 +32,5 @@ Notification History is available on all plans. The amount of history clients ha :::note -Customers will not be able to access Notification History from before 2021-10-11. +Customers will not be able to access Notification History from before 2021-10-11. ::: diff --git a/src/content/docs/notifications/reference/index.mdx b/src/content/docs/notifications/reference/index.mdx index 38d8d2becb9beec..6d7a07ae02df9e1 100644 --- a/src/content/docs/notifications/reference/index.mdx +++ b/src/content/docs/notifications/reference/index.mdx @@ -10,7 +10,7 @@ products: description: Reference information for Cloudflare Notifications. --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Refer to the following pages for more information about Notifications: diff --git a/src/content/docs/notifications/reference/traffic-alerts.mdx b/src/content/docs/notifications/reference/traffic-alerts.mdx index 9741d0e2d2dcc30..42527aee765f7ca 100644 --- a/src/content/docs/notifications/reference/traffic-alerts.mdx +++ b/src/content/docs/notifications/reference/traffic-alerts.mdx @@ -28,7 +28,7 @@ This approach does not work as well for low traffic zones. If there are not many ### Service-level objective recommendations -SLOs determine the sensitivity of an alert. For example, if you want to be alerted on all spikes in 5xx errors, you should select high sensitivity. If you want to be alerted on only large spikes, you should select a lower sensitivity. +SLOs determine the sensitivity of an alert. For example, if you want to be alerted on all spikes in 5xx errors, you should select high sensitivity. If you want to be alerted on only large spikes, you should select a lower sensitivity. Your traffic levels impact the accuracy of high sensitivity alerts. High sensitivity alerts are not recommended for zones with low traffic since the Error Rate alert will likely alert on every 5xx error. However, If you have a zone that has very high traffic (hundreds of millions of requests per day), High Sensitivity SLOs are recommended. diff --git a/src/content/docs/pages/configuration/api.mdx b/src/content/docs/pages/configuration/api.mdx index 5f49f4fd6a70543..d813c97fe6c9adf 100644 --- a/src/content/docs/pages/configuration/api.mdx +++ b/src/content/docs/pages/configuration/api.mdx @@ -19,6 +19,7 @@ To create an API token: 1. In the Cloudflare dashboard, go to the **Account API tokens** page. + 2. Select **Create Token**. 3. You can go to **Edit Cloudflare Workers** template > **Use template** or go to **Create Custom Token** > **Get started**. If you create a custom token, you will need to make sure to add the **Cloudflare Pages** permission with **Edit** access. diff --git a/src/content/docs/pages/configuration/build-caching.mdx b/src/content/docs/pages/configuration/build-caching.mdx index 3cd918887d0b276..436cc3e60e5c6d3 100644 --- a/src/content/docs/pages/configuration/build-caching.mdx +++ b/src/content/docs/pages/configuration/build-caching.mdx @@ -37,15 +37,15 @@ Some frameworks provide a cache directory that is typically populated by the fra The following frameworks support build output caching: -| Framework | Directories cached | -| ---------- | ----------------------------------------------------------- | -| Astro | `node_modules/.astro` | -| Docusaurus | `node_modules/.cache`, `.docusaurus`, `build` | -| Eleventy | `.cache` | -| Gatsby | `.cache`, `public` | -| Next.js | `.next/cache` | -| Nuxt | `node_modules/.cache/nuxt` | -| SvelteKit | `node_modules/.cache/imagetools` | +| Framework | Directories cached | +| ---------- | --------------------------------------------- | +| Astro | `node_modules/.astro` | +| Docusaurus | `node_modules/.cache`, `.docusaurus`, `build` | +| Eleventy | `.cache` | +| Gatsby | `.cache`, `public` | +| Next.js | `.next/cache` | +| Nuxt | `node_modules/.cache/nuxt` | +| SvelteKit | `node_modules/.cache/imagetools` | ### Limits diff --git a/src/content/docs/pages/configuration/build-image.mdx b/src/content/docs/pages/configuration/build-image.mdx index d2c7006afebcc61..e4596187251d055 100644 --- a/src/content/docs/pages/configuration/build-image.mdx +++ b/src/content/docs/pages/configuration/build-image.mdx @@ -88,6 +88,7 @@ To migrate to this new version, configure your Pages project settings in the das 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Deployments** > **All deployments** > and select the latest version. @@ -109,7 +110,6 @@ Cloudflare Pages builds are run in a [gVisor](https://gvisor.dev/docs/) containe - ## Build Image Policy ### Build Image Version Deprecation @@ -131,6 +131,7 @@ Preinstalled software (languages and tools) will be updated before reaching end- - **Major version updates**: Updated to the next stable long-term support (LTS) version with 3 months’ notice. **How you'll be notified (for changes requiring notice):** + - [Cloudflare Changelog](https://developers.cloudflare.com/changelog/) - Dashboard notifications for projects that will receive the update - Email notifications to project owners @@ -140,6 +141,7 @@ To maintain a specific version and avoid automatic updates, [override the defaul ### Best Practices To avoid unexpected build failures: + - **Monitor announcements** via the [Cloudflare Changelog](https://developers.cloudflare.com/changelog/), dashboard notifications, and email - **Plan for migration** when you receive update notices -- **Pin specific versions** of critical preinstalled software by [overriding default versions](/pages/configuration/build-image/#override-default-versions) \ No newline at end of file +- **Pin specific versions** of critical preinstalled software by [overriding default versions](/pages/configuration/build-image/#override-default-versions) diff --git a/src/content/docs/pages/configuration/deploy-hooks.mdx b/src/content/docs/pages/configuration/deploy-hooks.mdx index 66418eb9f810990..b40eb6d48f435bb 100644 --- a/src/content/docs/pages/configuration/deploy-hooks.mdx +++ b/src/content/docs/pages/configuration/deploy-hooks.mdx @@ -19,6 +19,7 @@ To create a Deploy Hook: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Builds** and select **Add deploy hook** to start configuration. diff --git a/src/content/docs/pages/framework-guides/deploy-a-vite3-project.mdx b/src/content/docs/pages/framework-guides/deploy-a-vite3-project.mdx index 377ecb62654d209..46e064b4a0d8063 100644 --- a/src/content/docs/pages/framework-guides/deploy-a-vite3-project.mdx +++ b/src/content/docs/pages/framework-guides/deploy-a-vite3-project.mdx @@ -68,6 +68,7 @@ To deploy your site to Pages: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select **Create application** > **Pages** > **Import from an existing Git repository**. 3. Select your new GitHub repository. 4. In the **Set up builds and deployments**, set `npm run build` as the **Build command**, and `dist` as the **Build output directory**. diff --git a/src/content/docs/pages/functions/api-reference.mdx b/src/content/docs/pages/functions/api-reference.mdx index e15d8a9a4aa0a15..9a521a8c592d30b 100644 --- a/src/content/docs/pages/functions/api-reference.mdx +++ b/src/content/docs/pages/functions/api-reference.mdx @@ -18,35 +18,27 @@ The following methods can be used to configure your Pages Function. The `onRequest` method will be called unless a more specific `onRequestVerb` method is exported. For example, if both `onRequest` and `onRequestGet` are exported, only `onRequestGet` will be called for `GET` requests. - onRequest(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all requests no matter what the request method is, as long as no specific request verb (like one of the methods below) is exported. - onRequestGet(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `GET` requests. - onRequestPost(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `POST` requests. - onRequestPatch(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `PATCH` requests. - onRequestPut(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `PUT` requests. - onRequestDelete(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `DELETE` requests. - onRequestHead(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `HEAD` requests. - onRequestOptions(context[EventContext](#eventcontext)) Response | Promise\ - - This function will be invoked on all `OPTIONS` requests. ### `env.ASSETS.fetch()` diff --git a/src/content/docs/pages/functions/bindings.mdx b/src/content/docs/pages/functions/bindings.mdx index b6f53b59192f9eb..4b1016b85d127f3 100644 --- a/src/content/docs/pages/functions/bindings.mdx +++ b/src/content/docs/pages/functions/bindings.mdx @@ -14,7 +14,13 @@ products: - durable-objects --- -import { Render, TabItem, Tabs, WranglerConfig, DashButton } from "~/components"; +import { + Render, + TabItem, + Tabs, + WranglerConfig, + DashButton, +} from "~/components"; A [binding](/workers/runtime-apis/bindings/) enables your Pages Functions to interact with resources on the Cloudflare developer platform. Use bindings to integrate your Pages Functions with Cloudflare resources like [KV](/kv/concepts/how-kv-works/), [Durable Objects](/durable-objects/), [R2](/r2/), and [D1](/d1/). You can set bindings for both production and preview environments. @@ -37,6 +43,7 @@ To configure a KV namespace binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **KV namespace**. 4. Give your binding a name under **Variable name**. @@ -97,6 +104,7 @@ To configure a Durable Object binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **Durable Object**. 4. Give your binding a name under **Variable name**. @@ -161,6 +169,7 @@ To configure a R2 bucket binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **R2 bucket**. 4. Give your binding a name under **Variable name**. @@ -233,6 +242,7 @@ To configure a D1 database binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add**> **D1 database bindings**. 4. Give your binding a name under **Variable name**. @@ -309,12 +319,13 @@ To configure a Vectorize index binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Choose whether you would like to set up the binding in your **Production** or **Preview** environment. 3. Select your Pages project > **Settings**. 4. Go to **Bindings** > **Add** > **Vectorize index**. 5. Give your binding a name under **Variable name**. 6. Under **Vectorize index**, select your desired Vectorize index. -8. Redeploy your project for the binding to take effect. +7. Redeploy your project for the binding to take effect. ### Use Vectorize index bindings @@ -449,6 +460,7 @@ To configure a Workers AI binding via the Cloudflare dashboard: 1. Go to the **Workers & Pages** page. + 2. Select your Pages project > **Settings**. 3. Select your Pages environment > **Bindings** > **Add** > **Workers AI**. 4. Give your binding a name under **Variable name**. @@ -522,6 +534,7 @@ To configure a Service binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **Service binding**. 4. Give your binding a name under **Variable name**. @@ -586,6 +599,7 @@ To configure a queue producer binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **Queue**. 4. Give your binding a name under **Variable name**. @@ -662,6 +676,7 @@ To configure a Hyperdrive binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **Hyperdrive**. 4. Give your binding a name under **Variable name**. @@ -735,6 +750,7 @@ To configure an Analytics Engine binding via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Bindings** > **Add** > **Analytics engine**. 4. Give your binding a name under **Variable name**. @@ -796,6 +812,7 @@ To configure an environment variable via the Cloudflare dashboard: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Variables and Secrets** > **Add** . 4. After setting a variable name and value, select **Save**. @@ -854,6 +871,7 @@ To add secrets to your Pages project: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Variables and Secrets** > **Add**. 4. Set a variable name and value. diff --git a/src/content/docs/pages/functions/examples/ab-testing.mdx b/src/content/docs/pages/functions/examples/ab-testing.mdx index 96d45b37cd3e0f8..125a99e100cd193 100644 --- a/src/content/docs/pages/functions/examples/ab-testing.mdx +++ b/src/content/docs/pages/functions/examples/ab-testing.mdx @@ -1,5 +1,4 @@ --- - summary: Set up an A/B test by controlling what page is served based on cookies. This version supports passing the request through to test and control on the origin. diff --git a/src/content/docs/pages/functions/examples/cors-headers.mdx b/src/content/docs/pages/functions/examples/cors-headers.mdx index 0011928013bbd10..48c58ea881e153c 100644 --- a/src/content/docs/pages/functions/examples/cors-headers.mdx +++ b/src/content/docs/pages/functions/examples/cors-headers.mdx @@ -1,5 +1,4 @@ --- - summary: A Pages Functions for appending CORS headers. tags: - Headers diff --git a/src/content/docs/pages/functions/examples/index.mdx b/src/content/docs/pages/functions/examples/index.mdx index 26f22f52cf8ceca..a7ae43643a007ce 100644 --- a/src/content/docs/pages/functions/examples/index.mdx +++ b/src/content/docs/pages/functions/examples/index.mdx @@ -1,5 +1,4 @@ --- - pcx_content_type: navigation title: Examples description: Code examples for common Pages Functions use cases. diff --git a/src/content/docs/pages/functions/metrics.mdx b/src/content/docs/pages/functions/metrics.mdx index 12b285087c355a7..802ad2e19dd4a42 100644 --- a/src/content/docs/pages/functions/metrics.mdx +++ b/src/content/docs/pages/functions/metrics.mdx @@ -19,6 +19,7 @@ Functions metrics aggregate request data for an individual Pages project. To vie 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. In your Pages project, select **Functions Metrics**. diff --git a/src/content/docs/pages/functions/plugins/community-plugins.mdx b/src/content/docs/pages/functions/plugins/community-plugins.mdx index 164f24737e7be5c..69d5080b51c5b6f 100644 --- a/src/content/docs/pages/functions/plugins/community-plugins.mdx +++ b/src/content/docs/pages/functions/plugins/community-plugins.mdx @@ -17,7 +17,6 @@ The following are some of the community-maintained Pages Plugins. If you have cr - [proxyflare-for-pages](https://github.com/flaregun-net/proxyflare-for-pages) Move traffic around your Cloudflare Pages domain with ease. Proxyflare is a reverse-proxy that enables you to: - - Port forward, redirect, and reroute HTTP and websocket traffic anywhere on the Internet. - Mount an entire website on a subpath (for example, `mysite.com/docs`) on your apex domain. - Serve static text (like `robots.txt` and other structured metadata) from any endpoint. diff --git a/src/content/docs/pages/get-started/c3.mdx b/src/content/docs/pages/get-started/c3.mdx index 68c5c783012edad..c88153d094feefa 100644 --- a/src/content/docs/pages/get-started/c3.mdx +++ b/src/content/docs/pages/get-started/c3.mdx @@ -10,7 +10,6 @@ description: Use C3 (`create-cloudflare` CLI) to set up and deploy new deployment. products: - pages - --- import { @@ -85,30 +84,24 @@ This is the full format of a C3 invocation alongside the possible CLI arguments: /> - `DIRECTORY` - - The directory where the application should be created. The name of the application is taken from the directory name. - `NESTED ARGS..` - - CLI arguments to pass to eventual third party CLIs C3 might invoke (in the case of full-stack applications). - `--category` - - The kind of templates that should be created. - The possible values for this option are: - - `hello-world`: Hello World example - `web-framework`: Framework Starter - `demo`: Application Starter - `remote-template`: Template from a GitHub repo - `--type` - - The type of application that should be created. - The possible values for this option are: - - `hello-world`: A basic "Hello World" Cloudflare Worker. - `hello-world-durable-object`: A [Durable Object](/durable-objects/) and a Worker to communicate with it. - `common`: A Cloudflare Worker which implements a common example of routing/proxying functionalities. @@ -118,11 +111,9 @@ This is the full format of a C3 invocation alongside the possible CLI arguments: - `pre-existing`: Fetch a Worker initialized from the Cloudflare dashboard. - `--framework` - - The type of framework to use to create a web application (when using this option, `--type` is ignored). - The possible values for this option are: - - `angular` - `astro` - `docusaurus` @@ -139,11 +130,9 @@ This is the full format of a C3 invocation alongside the possible CLI arguments: - `vue` - `--template` - - Create a new project via an external template hosted in a git repository - The value for this option may be specified as any of the following: - - `user/repo` - `git@github.com:user/repo` - `https://github.com/user/repo` @@ -156,7 +145,6 @@ This is the full format of a C3 invocation alongside the possible CLI arguments: See the `degit` [docs](https://github.com/Rich-Harris/degit) for more details. At a minimum, templates must contain the following: - - `package.json` - [Wrangler configuration file](/pages/functions/wrangler-configuration/) - `src/` containing a worker script referenced from the Wrangler configuration file @@ -164,51 +152,40 @@ This is the full format of a C3 invocation alongside the possible CLI arguments: See the [templates folder](https://github.com/cloudflare/workers-sdk/tree/main/packages/create-cloudflare/templates) of this repo for more examples. - `--deploy` - - Deploy your application after it has been created. - `--lang` - - The programming language of the template. - The possible values for this option are: - - `ts` - `js` - `python` - `--ts` - - Use TypeScript in your application. Deprecated. Use `--lang=ts` instead. - `--git` - - Initialize a local git repository for your application. - `--open` - - Open with your browser the deployed application (this option is ignored if the application is not deployed). - `--existing-script` - - The name of an existing Cloudflare Workers script to clone locally. When using this option, `--type` is coerced to `pre-existing`. - When `--existing-script` is specified, `deploy` will be ignored. - `-y`, `--accept-defaults` - - Use all the default C3 options each can also be overridden by specifying it. - `--auto-update` - - Automatically uses the latest version of C3. - `-v`, `--version` - - Show version number. - `-h`, `--help` - - Show a help message. :::note diff --git a/src/content/docs/pages/get-started/direct-upload.mdx b/src/content/docs/pages/get-started/direct-upload.mdx index 9f7252898b5ddba..f1f5228ef2053d0 100644 --- a/src/content/docs/pages/get-started/direct-upload.mdx +++ b/src/content/docs/pages/get-started/direct-upload.mdx @@ -8,7 +8,6 @@ description: Upload your prebuilt assets to Pages and deploy them via the Wrangler CLI or the Cloudflare dashboard. products: - pages - --- import { Render, DashButton } from "~/components"; @@ -128,6 +127,7 @@ To deploy with drag and drop: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select **Create application** > **Get started** > **Drag and drop your files**. 3. Enter your project name in the provided field and drag and drop your assets. 4. Select **Deploy site**. diff --git a/src/content/docs/pages/get-started/git-integration.mdx b/src/content/docs/pages/get-started/git-integration.mdx index 3b6cb58789596cb..5ac8218965fb505 100644 --- a/src/content/docs/pages/get-started/git-integration.mdx +++ b/src/content/docs/pages/get-started/git-integration.mdx @@ -7,7 +7,6 @@ head: description: Connect your Git provider to Pages. products: - pages - --- import { Details, Render } from "~/components"; diff --git a/src/content/docs/pages/get-started/index.mdx b/src/content/docs/pages/get-started/index.mdx index 328bd28a8396d9c..e76af4b0b86da8a 100644 --- a/src/content/docs/pages/get-started/index.mdx +++ b/src/content/docs/pages/get-started/index.mdx @@ -6,7 +6,6 @@ sidebar: order: 2 products: - pages - --- import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/pages/how-to/add-custom-http-headers.mdx b/src/content/docs/pages/how-to/add-custom-http-headers.mdx index 3402e5e5a66d4e5..7dedb62c0645ef1 100644 --- a/src/content/docs/pages/how-to/add-custom-http-headers.mdx +++ b/src/content/docs/pages/how-to/add-custom-http-headers.mdx @@ -5,7 +5,6 @@ description: Customize HTTP headers on Cloudflare Pages using a Workers function products: - pages - workers - --- import { WranglerConfig } from "~/components"; diff --git a/src/content/docs/pages/how-to/build-commands-branches.mdx b/src/content/docs/pages/how-to/build-commands-branches.mdx index 46ab3dfafb2d1a1..d91423afb902d99 100644 --- a/src/content/docs/pages/how-to/build-commands-branches.mdx +++ b/src/content/docs/pages/how-to/build-commands-branches.mdx @@ -5,7 +5,6 @@ title: Set build commands per branch description: Run different build commands on specific branches in your Cloudflare Pages project. products: - pages - --- import { DashButton } from "~/components"; @@ -46,6 +45,7 @@ To put your changes into effect: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Build & deployments** > **Build configurations** > **Edit configurations**. 4. Update the **Build command** field value to `bash build.sh` and select **Save**. diff --git a/src/content/docs/pages/how-to/custom-branch-aliases.mdx b/src/content/docs/pages/how-to/custom-branch-aliases.mdx index a50f4c6b38fe0a3..818ca533a5bf852 100644 --- a/src/content/docs/pages/how-to/custom-branch-aliases.mdx +++ b/src/content/docs/pages/how-to/custom-branch-aliases.mdx @@ -4,7 +4,6 @@ title: Add a custom domain to a branch description: Point a custom domain to a specific branch deployment of your Cloudflare Pages project. products: - pages - --- import { DashButton } from "~/components"; @@ -32,6 +31,7 @@ To do this: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Select **Custom domains** > **Setup a custom domain**. 4. Input the domain you would like to use, such as `staging.example.com` diff --git a/src/content/docs/pages/how-to/enable-zaraz.mdx b/src/content/docs/pages/how-to/enable-zaraz.mdx index a421e08bb06a094..20a3092b435873c 100644 --- a/src/content/docs/pages/how-to/enable-zaraz.mdx +++ b/src/content/docs/pages/how-to/enable-zaraz.mdx @@ -4,7 +4,6 @@ title: Enable Zaraz description: Set up Zaraz on your Cloudflare Pages project using a custom domain. products: - pages - --- import { Render } from "~/components"; diff --git a/src/content/docs/pages/how-to/index.mdx b/src/content/docs/pages/how-to/index.mdx index d2707643d72ee16..3da369ff33b9913 100644 --- a/src/content/docs/pages/how-to/index.mdx +++ b/src/content/docs/pages/how-to/index.mdx @@ -1,5 +1,4 @@ --- - pcx_content_type: navigation title: How to description: Step-by-step guides for common Cloudflare Pages tasks and configurations. @@ -9,7 +8,6 @@ sidebar: hideIndex: true products: - pages - --- import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/pages/how-to/npm-private-registry.mdx b/src/content/docs/pages/how-to/npm-private-registry.mdx index 95889b262b4dd84..a03e59ef22f9dc3 100644 --- a/src/content/docs/pages/how-to/npm-private-registry.mdx +++ b/src/content/docs/pages/how-to/npm-private-registry.mdx @@ -4,7 +4,6 @@ title: Install private packages description: Use custom npm registries and private dependencies in your Cloudflare Pages builds. products: - pages - --- import { Steps, DashButton } from "~/components"; diff --git a/src/content/docs/pages/how-to/preview-with-cloudflare-tunnel.mdx b/src/content/docs/pages/how-to/preview-with-cloudflare-tunnel.mdx index 8780a611c5c465c..76183d80849d09f 100644 --- a/src/content/docs/pages/how-to/preview-with-cloudflare-tunnel.mdx +++ b/src/content/docs/pages/how-to/preview-with-cloudflare-tunnel.mdx @@ -5,7 +5,6 @@ description: Use Cloudflare Tunnel to share locally running Pages projects over products: - pages - tunnel - --- [Cloudflare Tunnel](/cloudflare-one/networks/connectors/cloudflare-tunnel/) runs a lightweight daemon (`cloudflared`) in your infrastructure that establishes outbound connections (Tunnels) between your origin web server and the Cloudflare global network. In practical terms, you can use Cloudflare Tunnel to allow remote access to services running on your local machine. It is an alternative to popular tools like [Ngrok](https://ngrok.com), and provides free, long-running tunnels via the [TryCloudflare](/cloudflare-one/networks/connectors/cloudflare-tunnel/do-more-with-tunnels/trycloudflare/) service. diff --git a/src/content/docs/pages/how-to/refactor-a-worker-to-pages-functions.mdx b/src/content/docs/pages/how-to/refactor-a-worker-to-pages-functions.mdx index e70f762274f2772..4349352400a31e5 100644 --- a/src/content/docs/pages/how-to/refactor-a-worker-to-pages-functions.mdx +++ b/src/content/docs/pages/how-to/refactor-a-worker-to-pages-functions.mdx @@ -6,7 +6,6 @@ sidebar: hidden: true products: - pages - --- import { Render } from "~/components"; diff --git a/src/content/docs/pages/how-to/use-direct-upload-with-continuous-integration.mdx b/src/content/docs/pages/how-to/use-direct-upload-with-continuous-integration.mdx index 1770a4c1621da73..5526154ba6650bd 100644 --- a/src/content/docs/pages/how-to/use-direct-upload-with-continuous-integration.mdx +++ b/src/content/docs/pages/how-to/use-direct-upload-with-continuous-integration.mdx @@ -4,7 +4,6 @@ title: Use Direct Upload with continuous integration description: Deploy prebuilt assets to Cloudflare Pages using Wrangler in your CI/CD pipeline. products: - pages - --- import { DashButton } from "~/components"; @@ -29,6 +28,7 @@ To generate an API token: 1. In the Cloudflare dashboard, go to the **API Tokens** page. + 2. Select **Create Token**. 3. Under **Custom Token**, select **Get started**. 4. Name your API Token in the **Token name** field. @@ -43,7 +43,7 @@ Now that you have created your API token, you can use it to push your project fr To find your account ID, go to the **Zone Overview** page in the Cloudflare dashboard. - + Find your account ID in the **API** section on the right-hand side menu. diff --git a/src/content/docs/pages/how-to/use-worker-for-ab-testing-in-pages.mdx b/src/content/docs/pages/how-to/use-worker-for-ab-testing-in-pages.mdx index 2d7fb92626a856d..8e750ac70df0a77 100644 --- a/src/content/docs/pages/how-to/use-worker-for-ab-testing-in-pages.mdx +++ b/src/content/docs/pages/how-to/use-worker-for-ab-testing-in-pages.mdx @@ -4,7 +4,6 @@ title: Use Pages Functions for A/B testing description: Implement A/B testing in Cloudflare Pages using Pages Functions and cookies. products: - pages - --- import { DashButton } from "~/components"; @@ -162,4 +161,5 @@ After you have deployed your application, review your middleware Function: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project > **Settings** > **Functions** > **Configuration**. diff --git a/src/content/docs/pages/how-to/web-analytics.mdx b/src/content/docs/pages/how-to/web-analytics.mdx index 723b5241d55c0e2..80cab7cc7a0ebda 100644 --- a/src/content/docs/pages/how-to/web-analytics.mdx +++ b/src/content/docs/pages/how-to/web-analytics.mdx @@ -4,7 +4,6 @@ title: Enable Web Analytics description: Set up Cloudflare Web Analytics on your Pages project with one-click configuration. products: - pages - --- import { Render, DashButton } from "~/components"; @@ -24,6 +23,7 @@ To view the metrics associated with your Pages project: 1. In the Cloudflare dashboard, go to the **Web Analytics** page. + 2. Select the analytics associated with your Pages project. For more details about how to use Web Analytics, refer to the [Web Analytics documentation](/web-analytics/data-metrics/). diff --git a/src/content/docs/pages/migrations/index.mdx b/src/content/docs/pages/migrations/index.mdx index dfac1294f41d646..462426a9667eb83 100644 --- a/src/content/docs/pages/migrations/index.mdx +++ b/src/content/docs/pages/migrations/index.mdx @@ -1,5 +1,4 @@ --- - pcx_content_type: navigation title: Migration guides description: Migrate your existing site from another platform to Cloudflare Pages. @@ -8,7 +7,6 @@ sidebar: order: 4 products: - pages - --- import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/pages/platform/index.mdx b/src/content/docs/pages/platform/index.mdx index 1a133b13acfc655..925be7f4266e12b 100644 --- a/src/content/docs/pages/platform/index.mdx +++ b/src/content/docs/pages/platform/index.mdx @@ -8,7 +8,6 @@ sidebar: hideIndex: true products: - pages - --- import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/pages/platform/known-issues.mdx b/src/content/docs/pages/platform/known-issues.mdx index cd105ebacb7fa5e..3a0b439ae2c0327 100644 --- a/src/content/docs/pages/platform/known-issues.mdx +++ b/src/content/docs/pages/platform/known-issues.mdx @@ -6,7 +6,6 @@ sidebar: order: 4 products: - pages - --- import { DashButton } from "~/components"; @@ -40,7 +39,6 @@ Here are some known bugs and issues with Cloudflare Pages: ## Custom Domains - It is currently not possible to add a custom domain with - - a wildcard, for example, `*.domain.com`. - a Worker already routed on that domain. @@ -67,6 +65,7 @@ If you would like to enable [Cloudflare Access](https://www.cloudflare.com/teams 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select your Pages project. 3. Go to **Settings** > **Enable access policy**. 4. Select **Manage** on the Access policy created for your preview deployments. diff --git a/src/content/docs/pages/platform/limits.mdx b/src/content/docs/pages/platform/limits.mdx index dd994f7de3cd191..372373843e2b19a 100644 --- a/src/content/docs/pages/platform/limits.mdx +++ b/src/content/docs/pages/platform/limits.mdx @@ -6,7 +6,6 @@ sidebar: order: 1 products: - pages - --- import { Render } from "~/components"; @@ -18,10 +17,10 @@ Below are limits observed by the Cloudflare Free plan. For more details on remov ## Builds Each time you push new code to your Git repository, Pages will build and deploy your site. Build limits depend on your plan: -| | Free | Pro | Business | +| | Free | Pro | Business | | ---------------- | ----------------- | ------------------- | -------------------- | -| Builds | 1 build at a time | 5 concurrent builds | 20 concurrent builds | -| Builds per month | 500 | 5,000 | 20,000 | +| Builds | 1 build at a time | 5 concurrent builds | 20 concurrent builds | +| Builds per month | 500 | 5,000 | 20,000 | Builds will timeout after 20 minutes. Concurrent builds are counted per account. diff --git a/src/content/docs/pages/tutorials/add-a-react-form-with-formspree.mdx b/src/content/docs/pages/tutorials/add-a-react-form-with-formspree.mdx index 880fe3088aafd05..499da32c9d96168 100644 --- a/src/content/docs/pages/tutorials/add-a-react-form-with-formspree.mdx +++ b/src/content/docs/pages/tutorials/add-a-react-form-with-formspree.mdx @@ -114,7 +114,7 @@ import ContactForm from "./ContactForm"; Then insert the form into the page as a react component: ```jsx - +; ``` For example, you can update your `src/App.js` file to add the form: diff --git a/src/content/docs/pages/tutorials/build-a-blog-using-nuxt-and-sanity.mdx b/src/content/docs/pages/tutorials/build-a-blog-using-nuxt-and-sanity.mdx index d8a492d5d29124e..413e037121afc72 100644 --- a/src/content/docs/pages/tutorials/build-a-blog-using-nuxt-and-sanity.mdx +++ b/src/content/docs/pages/tutorials/build-a-blog-using-nuxt-and-sanity.mdx @@ -365,6 +365,7 @@ After you have pushed your project to GitHub, deploy your site to Pages: 1. In the Cloudflare dashboard, go to the **Workers & Pages** page. + 2. Select **Create application** > **Pages** > **Import an existing Git repository**. 3. Select the new GitHub repository that you created and select **Begin setup**. 4. In the **Set up builds and deployments** section, under **Build settings** > **Framework preset**, choose _Nuxt_. Pages will set the correct fields for you automatically. diff --git a/src/content/docs/pipelines/reference/wrangler-commands.mdx b/src/content/docs/pipelines/reference/wrangler-commands.mdx index 655d91f87e8a583..154b40b6ccb4976 100644 --- a/src/content/docs/pipelines/reference/wrangler-commands.mdx +++ b/src/content/docs/pipelines/reference/wrangler-commands.mdx @@ -10,5 +10,4 @@ products: import { WranglerNamespace } from "~/components"; - - + diff --git a/src/content/docs/pipelines/sinks/manage-sinks.mdx b/src/content/docs/pipelines/sinks/manage-sinks.mdx index 7623ca305f5c3e1..5f4d14b28b01f0a 100644 --- a/src/content/docs/pipelines/sinks/manage-sinks.mdx +++ b/src/content/docs/pipelines/sinks/manage-sinks.mdx @@ -101,4 +101,4 @@ Deleting a sink stops all data writes to that destination. ## Limitations - Sinks cannot be modified after creation. To change sink configuration, you must delete and recreate the sink. -- The R2 Data Catalog Sink does not currently support writing to R2 buckets into a different jurisdiction. \ No newline at end of file +- The R2 Data Catalog Sink does not currently support writing to R2 buckets into a different jurisdiction. diff --git a/src/content/docs/pipelines/sql-reference/scalar-functions/string.mdx b/src/content/docs/pipelines/sql-reference/scalar-functions/string.mdx index b47c9b02de9b990..da91b792332d4d5 100644 --- a/src/content/docs/pipelines/sql-reference/scalar-functions/string.mdx +++ b/src/content/docs/pipelines/sql-reference/scalar-functions/string.mdx @@ -521,7 +521,6 @@ uuid() Returns the string which is replaced by another string from the specified position and specified count length. For example, `overlay('Txxxxas' placing 'hom' from 2 for 4) → Thomas` - ``` overlay(str PLACING substr FROM pos [FOR count]) ``` diff --git a/src/content/docs/privacy-gateway/get-started.mdx b/src/content/docs/privacy-gateway/get-started.mdx index 41f956ba77f1276..05973978d5a98cd 100644 --- a/src/content/docs/privacy-gateway/get-started.mdx +++ b/src/content/docs/privacy-gateway/get-started.mdx @@ -14,13 +14,13 @@ Privacy Gateway implementation consists of three main parts: 2. Client configuration (operated by you). 3. Connection to a Privacy Gateway Relay Server (operated by Cloudflare). -*** +--- ## Before you begin Privacy Gateway is currently in closed beta. If you are interested, [contact us](https://www.cloudflare.com/lp/privacy-edge/). -*** +--- ## Step 1 - Configure your server @@ -34,13 +34,13 @@ Applications can also implement this functionality themselves. Details about [pu Use the following resources for help with server configuration: -* **Go**: - * [Sample gateway server](https://github.com/cloudflare/privacy-gateway-server-go) - * [Gateway library](https://github.com/chris-wood/ohttp-go) -* **Rust**: [Gateway library](https://github.com/martinthomson/ohttp/tree/main/ohttp-server) -* **JavaScript / TypeScript**: [Gateway library](https://github.com/chris-wood/ohttp-js) +- **Go**: + - [Sample gateway server](https://github.com/cloudflare/privacy-gateway-server-go) + - [Gateway library](https://github.com/chris-wood/ohttp-go) +- **Rust**: [Gateway library](https://github.com/martinthomson/ohttp/tree/main/ohttp-server) +- **JavaScript / TypeScript**: [Gateway library](https://github.com/chris-wood/ohttp-js) -*** +--- ## Step 2 - Configure your client @@ -52,21 +52,21 @@ Additionally, app developers need to [configure the client](#resources-1) to fet Use the following resources for help with client configuration: -* **Objective C**: [Sample application](https://github.com/cloudflare/privacy-gateway-client-demo) -* **Rust**: [Client library](https://github.com/martinthomson/ohttp/tree/main/ohttp-client) -* **JavaScript / TypeScript**: [Client library](https://github.com/chris-wood/ohttp-js) +- **Objective C**: [Sample application](https://github.com/cloudflare/privacy-gateway-client-demo) +- **Rust**: [Client library](https://github.com/martinthomson/ohttp/tree/main/ohttp-client) +- **JavaScript / TypeScript**: [Client library](https://github.com/chris-wood/ohttp-js) -*** +--- ## Step 3 - Review your application After you have configured your client and server, review your application to make sure you are only sending intended data to Cloudflare and the application backend. In particular, application data should not contain anything unique to an end-user, as this would invalidate the benefits that OHTTP provides. -* Applications should scrub identifying user data from requests forwarded through the Privacy Gateway. This includes, for example, names, email addresses, phone numbers, etc. -* Applications should encourage users to disable crash reporting when using Privacy Gateway. Crash reports can contain sensitive user information and data, including email addresses. -* Where possible, application data should be encrypted on the client device with a key known only to the client. For example, iOS generally has good support for [client-side encryption (and key synchronization via the KeyChain)](https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys). Android likely has similar features available. +- Applications should scrub identifying user data from requests forwarded through the Privacy Gateway. This includes, for example, names, email addresses, phone numbers, etc. +- Applications should encourage users to disable crash reporting when using Privacy Gateway. Crash reports can contain sensitive user information and data, including email addresses. +- Where possible, application data should be encrypted on the client device with a key known only to the client. For example, iOS generally has good support for [client-side encryption (and key synchronization via the KeyChain)](https://developer.apple.com/documentation/security/certificate_key_and_trust_services/keys). Android likely has similar features available. -*** +--- ## Step 4 - Relay requests through Cloudflare diff --git a/src/content/docs/privacy-gateway/reference/index.mdx b/src/content/docs/privacy-gateway/reference/index.mdx index 50d23832e8505f7..bdcb0f1f7729beb 100644 --- a/src/content/docs/privacy-gateway/reference/index.mdx +++ b/src/content/docs/privacy-gateway/reference/index.mdx @@ -8,6 +8,6 @@ products: - privacy-gateway --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/privacy-gateway/reference/legal.mdx b/src/content/docs/privacy-gateway/reference/legal.mdx index 22928aac224e0f6..8f68db4684d0d76 100644 --- a/src/content/docs/privacy-gateway/reference/legal.mdx +++ b/src/content/docs/privacy-gateway/reference/legal.mdx @@ -24,5 +24,5 @@ Cloudflare retains the Privacy Gateway Logs information for the most recent quar ## What Privacy Gateway customers see -* The application content of requests. -* The IP address and associated metadata of the Cloudflare Privacy Gateway server the request came from. +- The application content of requests. +- The IP address and associated metadata of the Cloudflare Privacy Gateway server the request came from. diff --git a/src/content/docs/privacy-gateway/reference/metrics.mdx b/src/content/docs/privacy-gateway/reference/metrics.mdx index f40cb4d6ffbc6ee..6a0751366ca483b 100644 --- a/src/content/docs/privacy-gateway/reference/metrics.mdx +++ b/src/content/docs/privacy-gateway/reference/metrics.mdx @@ -10,8 +10,8 @@ products: Privacy Gateway now supports enhanced monitoring through our GraphQL API, providing detailed insights into your gateway traffic and performance. To access these metrics, ensure you have: -* A relay gateway proxy implementation where Cloudflare acts as the oblivious relay party. -* An API token with Analytics Read permissions. +- A relay gateway proxy implementation where Cloudflare acts as the oblivious relay party. +- An API token with Analytics Read permissions. We offer two GraphQL nodes to retrieve metrics: `ohttpMetricsAdaptive` and `ohttpMetricsAdaptiveGroups`. The first node provides comprehensive request data, while the second facilitates grouped analytics. ## ohttpMetricsAdaptive @@ -20,33 +20,27 @@ The `ohttpMetricsAdaptive` node is designed for detailed insights into individua ### Key Arguments - - -* `filter` required - * Apply filters to narrow down your data set. `accountTag` is a required filter. -* `limit` optional - * Specify the maximum number of records to return. -* `orderBy` optional - * Choose how to sort your data, with options for various dimensions and metrics. - +- `filter` required + - Apply filters to narrow down your data set. `accountTag` is a required filter. +- `limit` optional + - Specify the maximum number of records to return. +- `orderBy` optional + - Choose how to sort your data, with options for various dimensions and metrics. ### Available Fields - - -* `bytesToClient` int optional - * The number of bytes returned to the client. -* `bytesToGateway` int optional - * Total bytes received from the client. -* `colo` string optional - * Airport code of the Cloudflare data center that served the request. -* `datetime` Time optional - * The date and time when the event was recorded. -* `gatewayStatusCode` int optional - * Status code returned by the gateway. -* `relayStatusCode` int optional - * Status code returned by the relay. - +- `bytesToClient` int optional + - The number of bytes returned to the client. +- `bytesToGateway` int optional + - Total bytes received from the client. +- `colo` string optional + - Airport code of the Cloudflare data center that served the request. +- `datetime` Time optional + - The date and time when the event was recorded. +- `gatewayStatusCode` int optional + - Status code returned by the gateway. +- `relayStatusCode` int optional + - Status code returned by the relay. This node is useful for a granular view of traffic, helping you identify patterns, performance issues, or anomalies in your data flow. @@ -56,66 +50,56 @@ The `ohttpMetricsAdaptiveGroups` node allows for aggregated analysis of OHTTP re ### Key Arguments - - -* `filter` required - * Apply filters to narrow down your data set. `accountTag` is a required filter. -* `limit` optional - * Specify the maximum number of records to return. -* `orderBy` optional - * Choose how to sort your data, with options for various dimensions and metrics. - +- `filter` required + - Apply filters to narrow down your data set. `accountTag` is a required filter. +- `limit` optional + - Specify the maximum number of records to return. +- `orderBy` optional + - Choose how to sort your data, with options for various dimensions and metrics. ### Available Fields - - -* `count` int optional - * The number of records that meet the criteria. -* `dimensions` optional - * Specifies the grouping dimensions for your data. -* `sum` optional - * Aggregated totals for various metrics, per dimension. - +- `count` int optional + - The number of records that meet the criteria. +- `dimensions` optional + - Specifies the grouping dimensions for your data. +- `sum` optional + - Aggregated totals for various metrics, per dimension. **Dimensions** You can group your metrics by various dimensions to get a more segmented view of your data: - -* `colo` string optional - * The airport code of the Cloudflare data center. -* `date` Date optional - * The date of OHTTP request metrics. -* `datetimeFifteenMinutes` Time optional - * Timestamp truncated to fifteen minutes. -* `datetimeFiveMinutes` Time optional - * Timestamp truncated to five minutes. -* `datetimeHour` Time optional - * Timestamp truncated to the hour. -* `datetimeMinute` Time optional - * Timestamp truncated to the minute. -* `endpoint` string optional - * The appId that generated traffic. -* `gatewayStatusCode` int optional - * Status code returned by the gateway. -* `relayStatusCode` int optional - * Status code returned by the relay. - +- `colo` string optional + - The airport code of the Cloudflare data center. +- `date` Date optional + - The date of OHTTP request metrics. +- `datetimeFifteenMinutes` Time optional + - Timestamp truncated to fifteen minutes. +- `datetimeFiveMinutes` Time optional + - Timestamp truncated to five minutes. +- `datetimeHour` Time optional + - Timestamp truncated to the hour. +- `datetimeMinute` Time optional + - Timestamp truncated to the minute. +- `endpoint` string optional + - The appId that generated traffic. +- `gatewayStatusCode` int optional + - Status code returned by the gateway. +- `relayStatusCode` int optional + - Status code returned by the relay. **Sum Fields** Sum fields offer a cumulative view of various metrics over your selected time period: - -* `bytesToClient` int optional - * Total bytes sent from the gateway to the client. -* `bytesToGateway` int optional - * Total bytes from the client to the gateway. -* `clientRequestErrors` int optional - * Total number of client request errors. -* `gatewayResponseErrors` int optional - * Total number of gateway response errors. - +- `bytesToClient` int optional + - Total bytes sent from the gateway to the client. +- `bytesToGateway` int optional + - Total bytes from the client to the gateway. +- `clientRequestErrors` int optional + - Total number of client request errors. +- `gatewayResponseErrors` int optional + - Total number of gateway response errors. Utilize the ohttpMetricsAdaptiveGroups node to gain comprehensive, aggregated insights into your traffic patterns, helping you optimize performance and user experience. diff --git a/src/content/docs/privacy-gateway/reference/product-compatibility.mdx b/src/content/docs/privacy-gateway/reference/product-compatibility.mdx index f6f435416d2e986..e319b9824e7ef2c 100644 --- a/src/content/docs/privacy-gateway/reference/product-compatibility.mdx +++ b/src/content/docs/privacy-gateway/reference/product-compatibility.mdx @@ -12,6 +12,6 @@ When [using Privacy Gateway](/privacy-gateway/get-started/), the majority of Clo However, the following products are not compatible: -* [API Shield](/api-shield/): [Schema Validation](/api-shield/security/schema-validation/) and [API discovery](/api-shield/security/api-discovery/) are not possible since Cloudflare cannot see the request URLs. -* [Cache](/cache/): Caching of application content is no longer possible since each between client and gateway is end-to-end encrypted. -* [WAF](/waf/): Rules implemented based on request content are not supported since Cloudflare cannot see the request or response content. +- [API Shield](/api-shield/): [Schema Validation](/api-shield/security/schema-validation/) and [API discovery](/api-shield/security/api-discovery/) are not possible since Cloudflare cannot see the request URLs. +- [Cache](/cache/): Caching of application content is no longer possible since each between client and gateway is end-to-end encrypted. +- [WAF](/waf/): Rules implemented based on request content are not supported since Cloudflare cannot see the request or response content. diff --git a/src/content/docs/privacy-proxy/concepts/authentication.mdx b/src/content/docs/privacy-proxy/concepts/authentication.mdx index 5adead0bc45a818..344ac01c3d65a39 100644 --- a/src/content/docs/privacy-proxy/concepts/authentication.mdx +++ b/src/content/docs/privacy-proxy/concepts/authentication.mdx @@ -14,11 +14,11 @@ Privacy Proxy requires clients to authenticate before proxying traffic. This pag Privacy Proxy supports three authentication methods: -| Method | Use case | Privacy level | -| -------- | ---------- | --------------- | -| Pre-shared key (PSK) | Proof of concept, testing | Lower | -| Privacy Pass tokens | Client to server | High | -| mTLS | Server to server | Higher | +| Method | Use case | Privacy level | +| -------------------- | ------------------------- | ------------- | +| Pre-shared key (PSK) | Proof of concept, testing | Lower | +| Privacy Pass tokens | Client to server | High | +| mTLS | Server to server | Higher | --- @@ -166,7 +166,7 @@ Proxy A (which you operate) authenticates users. Common methods include: - Privacy Pass tokens issued by your infrastructure - Client certificates (mTLS) -### Proxy A to Proxy B +### Proxy A to Proxy B Proxy B authenticates itself to Proxy A using TLS. Depending on your configuration, this can use: diff --git a/src/content/docs/privacy-proxy/concepts/deployment-models.mdx b/src/content/docs/privacy-proxy/concepts/deployment-models.mdx index 72190396733d8b8..dfe5168ada7b9a2 100644 --- a/src/content/docs/privacy-proxy/concepts/deployment-models.mdx +++ b/src/content/docs/privacy-proxy/concepts/deployment-models.mdx @@ -65,12 +65,12 @@ In a double-hop deployment, you operate the first proxy (Proxy A), and Cloudflar The double-hop architecture ensures: -| Information | Proxy A (you) | Proxy B (Cloudflare) | -| ------------- | --------------- | ---------------------- | -| Client IP address | Yes | No | -| User account | Yes | No | -| Destination server | Encrypted | Yes | -| Request content | Encrypted | Encrypted | +| Information | Proxy A (you) | Proxy B (Cloudflare) | +| ------------------ | ------------- | -------------------- | +| Client IP address | Yes | No | +| User account | Yes | No | +| Destination server | Encrypted | Yes | +| Request content | Encrypted | Encrypted | Proxy A knows who the user is but cannot see where they are going (the destination is encrypted). Proxy B knows the destination but not who is making the request. Neither party has the complete picture. @@ -90,13 +90,13 @@ Double-hop deployment works well when: ## Comparison -| Aspect | Single-hop | Double-hop | -| -------- | ------------ | ------------ | -| Infrastructure | Cloudflare only | You + Cloudflare | -| Privacy separation | Proxy sees identity + destination | Split across two parties | -| Operational complexity | Lower | Higher | -| Authentication | Cloudflare-managed | You manage first-hop auth | -| Use case | Browser VPNs, simple privacy | Maximum privacy separation | +| Aspect | Single-hop | Double-hop | +| ---------------------- | --------------------------------- | -------------------------- | +| Infrastructure | Cloudflare only | You + Cloudflare | +| Privacy separation | Proxy sees identity + destination | Split across two parties | +| Operational complexity | Lower | Higher | +| Authentication | Cloudflare-managed | You manage first-hop auth | +| Use case | Browser VPNs, simple privacy | Maximum privacy separation | --- diff --git a/src/content/docs/privacy-proxy/concepts/geolocation.mdx b/src/content/docs/privacy-proxy/concepts/geolocation.mdx index 987c5e96e5514ab..2c60dc4cbde92c0 100644 --- a/src/content/docs/privacy-proxy/concepts/geolocation.mdx +++ b/src/content/docs/privacy-proxy/concepts/geolocation.mdx @@ -30,12 +30,12 @@ Privacy Proxy uses geohashes to preserve location without revealing precise coor A [geohash](https://en.wikipedia.org/wiki/Geohash) is a compact representation of latitude and longitude. Geohashes use a hierarchical encoding where longer strings represent more precise locations: | Geohash length | Approximate area | -| ---------------- | ------------------ | -| 1 character | ~5,000 km | -| 2 characters | ~1,250 km | -| 3 characters | ~150 km | -| 4 characters | ~40 km | -| 5 characters | ~5 km | +| -------------- | ---------------- | +| 1 character | ~5,000 km | +| 2 characters | ~1,250 km | +| 3 characters | ~150 km | +| 4 characters | ~40 km | +| 5 characters | ~5 km | Privacy Proxy uses reduced-precision geohashes (typically four to five characters) to locate users to a city or region without pinpointing their exact location. diff --git a/src/content/docs/privacy-proxy/concepts/how-it-works.mdx b/src/content/docs/privacy-proxy/concepts/how-it-works.mdx index 3c4634922f9757c..6d1b3146f38fc82 100644 --- a/src/content/docs/privacy-proxy/concepts/how-it-works.mdx +++ b/src/content/docs/privacy-proxy/concepts/how-it-works.mdx @@ -35,15 +35,14 @@ Privacy Proxy uses the MASQUE protocol suite to create encrypted tunnels between Throughout this process, the proxy learns the destination but not the content. The destination learns the egress IP address but not the client's real IP. - ## MASQUE protocols [MASQUE](https://datatracker.ietf.org/wg/masque/about/) (Multiplexed Application Substrate over QUIC Encryption) defines methods for proxying traffic over HTTP. Privacy Proxy supports two MASQUE methods: -| Method | Transport | Use case | -| -------- | ----------- | ---------- | -| HTTP CONNECT | TCP | Traditional HTTPS traffic | -| CONNECT-UDP | UDP | QUIC-based traffic, real-time applications | +| Method | Transport | Use case | +| ------------ | --------- | ------------------------------------------ | +| HTTP CONNECT | TCP | Traditional HTTPS traffic | +| CONNECT-UDP | UDP | QUIC-based traffic, real-time applications | Both methods create encrypted tunnels where the proxy forwards traffic without inspecting the content. The proxy sees only the destination hostname and port, not the actual requests, paths, or data exchanged. @@ -55,11 +54,11 @@ For a technical deep dive into how these protocols work, refer to our [blog post Privacy Proxy creates a privacy boundary between user identity and user activity: -| Information | Who knows it | -| ------------- | -------------- | +| Information | Who knows it | +| ----------------------------------- | ------------------------------------------------------------- | | User identity (IP address, account) | Authentication service, first-hop proxy (if using double-hop) | -| Destination server | Privacy Proxy, destination server | -| Request content | Client, destination server only | +| Destination server | Privacy Proxy, destination server | +| Request content | Client, destination server only | The proxy authenticates users to verify they have permission to use the service, but authentication happens separately from proxying. Once authenticated, the proxy forwards traffic without linking individual requests to specific users. diff --git a/src/content/docs/privacy-proxy/get-started.mdx b/src/content/docs/privacy-proxy/get-started.mdx index f07aa967b04f5d0..951b12a8ad7876e 100644 --- a/src/content/docs/privacy-proxy/get-started.mdx +++ b/src/content/docs/privacy-proxy/get-started.mdx @@ -37,7 +37,7 @@ curl -v \ https://example.com ``` -### Use Chaussette +### Use Chaussette [Chaussette](/privacy-proxy/reference/client-libraries/#chaussette) is a local SOCKS5 proxy that handles authentication and forwards requests to Privacy Proxy. diff --git a/src/content/docs/privacy-proxy/reference/http-headers.mdx b/src/content/docs/privacy-proxy/reference/http-headers.mdx index 39788fd3a51a37b..da3750df07b72b9 100644 --- a/src/content/docs/privacy-proxy/reference/http-headers.mdx +++ b/src/content/docs/privacy-proxy/reference/http-headers.mdx @@ -30,10 +30,10 @@ Privacy Pass token format: Proxy-Authorization: PrivateToken token= ``` -| Parameter | Description | -| ----------- | ------------- | -| `` | The pre-shared key provided by Cloudflare | -| `` | A base64-encoded Privacy Pass token | +| Parameter | Description | +| ------------------------ | ----------------------------------------- | +| `` | The pre-shared key provided by Cloudflare | +| `` | A base64-encoded Privacy Pass token | ### GraphQL Analytics API request headers @@ -47,10 +47,10 @@ Specifies the client's geographic location for egress IP selection. Optional but sec-ch-geohash: - ``` -| Parameter | Description | -| ----------- | ------------- | -| `` | A [geohash](https://en.wikipedia.org/wiki/Geohash) string (typically 4-8 characters) | -| `` | ISO 3166-1 alpha-2 country code | +| Parameter | Description | +| ---------------- | ------------------------------------------------------------------------------------ | +| `` | A [geohash](https://en.wikipedia.org/wiki/Geohash) string (typically 4-8 characters) | +| `` | ISO 3166-1 alpha-2 country code | ```http title="Example" sec-ch-geohash: u4pruydqqvj-GB @@ -72,8 +72,8 @@ Provides timing information about proxy processing. This is part of the [OpenTel Server-Timing: proxy;dur= ``` -| Parameter | Description | -| ----------- | ------------- | +| Parameter | Description | +| ---------------- | ------------------------------------------------------- | | `` | Processing time in milliseconds introduced by the proxy | ```http title="Example" @@ -99,9 +99,9 @@ sec-ch-geohash: 9q8yy-US The proxy responds with a status code indicating success or failure: -| Status | Meaning | -| -------- | --------- | -| `200 OK` | Tunnel established successfully | -| `403 Forbidden` | Authentication failed | -| `502 Bad Gateway` | Could not connect to destination | -| `503 Service Unavailable` | Proxy temporarily unavailable | +| Status | Meaning | +| ------------------------- | -------------------------------- | +| `200 OK` | Tunnel established successfully | +| `403 Forbidden` | Authentication failed | +| `502 Bad Gateway` | Could not connect to destination | +| `503 Service Unavailable` | Proxy temporarily unavailable | diff --git a/src/content/docs/privacy-proxy/reference/proxy-status.mdx b/src/content/docs/privacy-proxy/reference/proxy-status.mdx index 8a0a873a9b6ca6f..3cd177c2306ccca 100644 --- a/src/content/docs/privacy-proxy/reference/proxy-status.mdx +++ b/src/content/docs/privacy-proxy/reference/proxy-status.mdx @@ -16,29 +16,29 @@ The `proxyStatus` dimension provides proxy-level error classification. This fiel ## `proxyStatus` values -| Value | Description | -| --- | --- | -| `dns_error` | The proxy encountered a DNS error when resolving the next hop hostname. | -| `dns_timeout` | The proxy timed out while resolving the next hop hostname. | -| `destination_not_found` | The proxy cannot determine the appropriate next hop for this request. | -| `destination_unavailable` | The proxy considers the next hop unavailable (for example, recent failures or health check is down). | -| `destination_ip_prohibited` | The proxy is configured to prohibit connections to the next hop IP address. | -| `destination_ip_unroutable` | The proxy cannot find a route to the next hop IP address. | -| `connection_refused` | The proxy's connection to the next hop was refused. | -| `connection_terminated` | The proxy's connection to the next hop was closed before any response was received. | -| `connection_timeout` | The proxy's attempt to open a connection to the next hop timed out. | -| `connection_read_timeout` | The proxy was expecting data on a connection but received none within the configured time limit. | -| `connection_write_timeout` | The proxy was attempting to write data to a connection but was unable to. | -| `connection_limit_reached` | The proxy's configured connection limit to the next hop has been exceeded. | -| `source_addr_in_use` | The proxy cannot assign a source address when connecting to the next hop. | -| `source_addr_not_available` | The proxy cannot assign a source address (bind failure or source host resolution failure). | -| `tls_protocol_error` | The proxy encountered a TLS error when communicating with the next hop. | -| `tls_certificate_error` | The proxy encountered an error verifying the certificate presented by the next hop. | -| `http_request_error` | The proxy is generating a client (4xx) response on the origin's behalf. | -| `http_upgrade_failed` | The HTTP Upgrade between the proxy and the next hop failed. | -| `http_request_denied` | The proxy rejected the HTTP request based on its configuration or policy. | -| `proxy_internal_error` | The proxy encountered an internal error unrelated to the origin. | -| `proxy_loop_detected` | The proxy tried to forward the request to itself. | -| `http_protocol_error` | The proxy encountered an HTTP protocol error when communicating with the next hop. | -| `http_response_incomplete` | The proxy received an incomplete response from the next hop. | -| `rate_limited` | The client has reached the maximum number of connections per second to a single origin. | +| Value | Description | +| --------------------------- | ---------------------------------------------------------------------------------------------------- | +| `dns_error` | The proxy encountered a DNS error when resolving the next hop hostname. | +| `dns_timeout` | The proxy timed out while resolving the next hop hostname. | +| `destination_not_found` | The proxy cannot determine the appropriate next hop for this request. | +| `destination_unavailable` | The proxy considers the next hop unavailable (for example, recent failures or health check is down). | +| `destination_ip_prohibited` | The proxy is configured to prohibit connections to the next hop IP address. | +| `destination_ip_unroutable` | The proxy cannot find a route to the next hop IP address. | +| `connection_refused` | The proxy's connection to the next hop was refused. | +| `connection_terminated` | The proxy's connection to the next hop was closed before any response was received. | +| `connection_timeout` | The proxy's attempt to open a connection to the next hop timed out. | +| `connection_read_timeout` | The proxy was expecting data on a connection but received none within the configured time limit. | +| `connection_write_timeout` | The proxy was attempting to write data to a connection but was unable to. | +| `connection_limit_reached` | The proxy's configured connection limit to the next hop has been exceeded. | +| `source_addr_in_use` | The proxy cannot assign a source address when connecting to the next hop. | +| `source_addr_not_available` | The proxy cannot assign a source address (bind failure or source host resolution failure). | +| `tls_protocol_error` | The proxy encountered a TLS error when communicating with the next hop. | +| `tls_certificate_error` | The proxy encountered an error verifying the certificate presented by the next hop. | +| `http_request_error` | The proxy is generating a client (4xx) response on the origin's behalf. | +| `http_upgrade_failed` | The HTTP Upgrade between the proxy and the next hop failed. | +| `http_request_denied` | The proxy rejected the HTTP request based on its configuration or policy. | +| `proxy_internal_error` | The proxy encountered an internal error unrelated to the origin. | +| `proxy_loop_detected` | The proxy tried to forward the request to itself. | +| `http_protocol_error` | The proxy encountered an HTTP protocol error when communicating with the next hop. | +| `http_response_incomplete` | The proxy received an incomplete response from the next hop. | +| `rate_limited` | The client has reached the maximum number of connections per second to a single origin. | diff --git a/src/content/docs/pulumi/tutorial/index.mdx b/src/content/docs/pulumi/tutorial/index.mdx index a221bc981254072..2d5a00e48f838d0 100644 --- a/src/content/docs/pulumi/tutorial/index.mdx +++ b/src/content/docs/pulumi/tutorial/index.mdx @@ -12,19 +12,16 @@ products: Before you begin, make sure you [install Pulumi](/pulumi/installing/). 1. [Add a Site](/pulumi/tutorial/add-site/) - - Bring your existing site under Cloudflare with Pulumi IaC. - Introduction of `pulumi new`, `up`, and `destroy`. - Cloudflare resources defined: Zone and DNS records. 2. [Manage secrets](/pulumi/tutorial/manage-secrets/) - - Develop Workers securely with Pulumi ESC and Wrangler. - Introduction to the ESC CLI and the Wrangler CLI. - Manage Cloudflare credentials, Worker secrets, and `.dev.vars`. 3. [Deploy a Worker](/pulumi/tutorial/hello-world/) - - Brief introduction to deploying a Cloudflare Workers application with Pulumi. - Introduction of `pulumi new`, `up`, and `destroy`. - Cloudflare resources defined: Worker script, Worker route, and DNS record. diff --git a/src/content/docs/queues/configuration/configure-queues.mdx b/src/content/docs/queues/configuration/configure-queues.mdx index 67aaf22fcf32e57..cec7b05be692f5a 100644 --- a/src/content/docs/queues/configuration/configure-queues.mdx +++ b/src/content/docs/queues/configuration/configure-queues.mdx @@ -15,35 +15,33 @@ import { WranglerConfig, Type } from "~/components"; Cloudflare Queues can be configured using [Wrangler](/workers/wrangler/install-and-update/), the command-line interface for Cloudflare's Developer Platform, which includes [Workers](/workers/), [R2](/r2/), and other developer products. - Each Producer and Consumer Worker has a [Wrangler configuration file](/workers/wrangler/configuration/) that specifies environment variables, triggers, and resources, such as a queue. To enable Worker-to-resource communication, you must set up a [binding](/workers/runtime-apis/bindings/) in your Worker project's Wrangler file. Use the options below to configure your queue. :::note - Below are options for queues, refer to the Wrangler documentation for a full reference of the [Wrangler configuration file](/workers/wrangler/configuration/). - ::: ## Queue configuration + The following queue level settings can be configured using Wrangler: ```sh npx wrangler queues update --delivery-delay-secs 60 --message-retention-period-secs 3000 ``` -* `--delivery-delay-secs` - * How long a published message is delayed for, before it is delivered to consumers. - * Must be between 0 and 86400 (24 hours). - * Defaults to 0. +- `--delivery-delay-secs` + - How long a published message is delayed for, before it is delivered to consumers. + - Must be between 0 and 86400 (24 hours). + - Defaults to 0. -* `--message-retention-period-secs` - * How long messages are retained on the Queue. - * Defaults to 345600 (4 days). - * Must be between 60 and 1209600 (14 days) +- `--message-retention-period-secs` + - How long messages are retained on the Queue. + - Defaults to 345600 (4 days). + - Must be between 60 and 1209600 (14 days) ## Producer Worker configuration @@ -68,24 +66,16 @@ To produce to a queue, set up a binding in your Wrangler file. These options sho
    +- queue + - The name of the queue. - -* queue - - * The name of the queue. - -* binding - - * The name of the binding, which is a JavaScript variable. - - +- binding + - The name of the binding, which is a JavaScript variable. ## Consumer Worker Configuration To consume messages from one or more queues, set up a binding in your Wrangler file. These options should be used when a Worker wants to receive messages from a queue. - - ```jsonc @@ -108,39 +98,29 @@ To consume messages from one or more queues, set up a binding in your Wrangler f Refer to [Limits](/queues/platform/limits) to review the maximum values for each of these options. +- queue + - The name of the queue. +- max\_batch\_size + - The maximum number of messages allowed in each batch. + - Defaults to `10` messages. -* queue - - * The name of the queue. - -* max\_batch\_size - - * The maximum number of messages allowed in each batch. - * Defaults to `10` messages. - -* max\_batch\_timeout - - * The maximum number of seconds to wait until a batch is full. - * Defaults to `5` seconds. - -* max\_retries - - * The maximum number of retries for a message, if it fails or [`retryAll()`](/queues/configuration/javascript-apis/#messagebatch) is invoked. - * Defaults to `3` retries. - -* dead\_letter\_queue - - * The name of another queue to send a message if it fails processing at least `max_retries` times. - * If a `dead_letter_queue` is not defined, messages that repeatedly fail processing will eventually be discarded. - * If there is no queue with the specified name, it will be created automatically. - -* max\_concurrency +- max\_batch\_timeout + - The maximum number of seconds to wait until a batch is full. + - Defaults to `5` seconds. - * The maximum number of concurrent consumers allowed to run at once. Leaving this unset will mean that the number of invocations will scale to the [currently supported maximum](/queues/platform/limits/). - * Refer to [Consumer concurrency](/queues/configuration/consumer-concurrency/) for more information on how consumers autoscale, particularly when messages are retried. +- max\_retries + - The maximum number of retries for a message, if it fails or [`retryAll()`](/queues/configuration/javascript-apis/#messagebatch) is invoked. + - Defaults to `3` retries. +- dead\_letter\_queue + - The name of another queue to send a message if it fails processing at least `max_retries` times. + - If a `dead_letter_queue` is not defined, messages that repeatedly fail processing will eventually be discarded. + - If there is no queue with the specified name, it will be created automatically. +- max\_concurrency + - The maximum number of concurrent consumers allowed to run at once. Leaving this unset will mean that the number of invocations will scale to the [currently supported maximum](/queues/platform/limits/). + - Refer to [Consumer concurrency](/queues/configuration/consumer-concurrency/) for more information on how consumers autoscale, particularly when messages are retried. ## Pull-based diff --git a/src/content/docs/queues/configuration/consumer-concurrency.mdx b/src/content/docs/queues/configuration/consumer-concurrency.mdx index 072aa3381bd5001..503b8d2fdba5fa2 100644 --- a/src/content/docs/queues/configuration/consumer-concurrency.mdx +++ b/src/content/docs/queues/configuration/consumer-concurrency.mdx @@ -71,7 +71,7 @@ To configure the concurrency settings for your consumer Worker from the dashboar 1. In the Cloudflare dashboard, go to the **Queues** page. - + 2. Select your queue > **Settings**. 3. Select **Edit Consumer** under Consumer details. diff --git a/src/content/docs/queues/configuration/index.mdx b/src/content/docs/queues/configuration/index.mdx index fb230019e4a5916..bc7e0d0237bb4c5 100644 --- a/src/content/docs/queues/configuration/index.mdx +++ b/src/content/docs/queues/configuration/index.mdx @@ -8,6 +8,6 @@ products: - queues --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/queues/configuration/javascript-apis.mdx b/src/content/docs/queues/configuration/javascript-apis.mdx index 9a34dca675084e9..a948c75c6c39862 100644 --- a/src/content/docs/queues/configuration/javascript-apis.mdx +++ b/src/content/docs/queues/configuration/javascript-apis.mdx @@ -94,30 +94,27 @@ A binding that allows a producer to send messages to a Queue. ```ts interface Queue { - send(body: Body, options?: QueueSendOptions): Promise; - sendBatch(messages: Iterable>, options?: QueueSendBatchOptions): Promise; - metrics(): Promise; + send(body: Body, options?: QueueSendOptions): Promise; + sendBatch( + messages: Iterable>, + options?: QueueSendBatchOptions, + ): Promise; + metrics(): Promise; } ``` +- `send(body: unknown, options?: {contentType?: QueuesContentType })` + - Sends a message to the Queue. The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. + - When the promise resolves, the message is confirmed to be written to disk. + - Returns a [QueueSendResult](#queuesendresult) containing realtime metrics about the queue. +- `sendBatch(messages: Iterable>, options?: QueueSendBatchOptions)` + - Sends a batch of messages to the Queue. Each item in the provided [Iterable](https://www.typescriptlang.org/docs/handbook/iterators-and-generators.html) must be supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types). A batch can contain up to 100 messages, though items are limited to 128 KB each, and the total size of the array cannot exceed 256 KB. + - The optional `options` parameter can be used to apply settings (such as `delaySeconds`) to all messages in the batch. See [QueueSendBatchOptions](#queuesendbatchoptions). + - When the promise resolves, the messages are confirmed to be written to disk. -* `send(body: unknown, options?: {contentType?: QueuesContentType })` - - * Sends a message to the Queue. The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. - * When the promise resolves, the message is confirmed to be written to disk. - * Returns a [QueueSendResult](#queuesendresult) containing realtime metrics about the queue. - -* `sendBatch(messages: Iterable>, options?: QueueSendBatchOptions)` - - * Sends a batch of messages to the Queue. Each item in the provided [Iterable](https://www.typescriptlang.org/docs/handbook/iterators-and-generators.html) must be supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types). A batch can contain up to 100 messages, though items are limited to 128 KB each, and the total size of the array cannot exceed 256 KB. - * The optional `options` parameter can be used to apply settings (such as `delaySeconds`) to all messages in the batch. See [QueueSendBatchOptions](#queuesendbatchoptions). - * When the promise resolves, the messages are confirmed to be written to disk. - -* `metrics()` - - * Returns realtime [QueueMetrics](#queuemetrics) for the queue. - +- `metrics()` + - Returns realtime [QueueMetrics](#queuemetrics) for the queue. ### `MessageSendRequest` @@ -125,54 +122,44 @@ A wrapper type used for sending message batches. ```ts interface MessageSendRequest { - body: Body; - contentType?: QueueContentType; - delaySeconds?: number; + body: Body; + contentType?: QueueContentType; + delaySeconds?: number; } ``` +- body + - The body of the message. + - The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. +- contentType + - The explicit content type of a message so it can be previewed correctly with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. Optional argument. + - See [QueuesContentType](#queuescontenttype) for possible values. -* body - - * The body of the message. - * The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. - -* contentType - - * The explicit content type of a message so it can be previewed correctly with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. Optional argument. - * See [QueuesContentType](#queuescontenttype) for possible values. - -* delaySeconds - - * The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. - * Must be an integer between 0 and 86400 (24 hours). - - +- delaySeconds + - The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. + - Must be an integer between 0 and 86400 (24 hours). ### `QueueSendOptions` Optional configuration that applies when sending a message to a queue. -* contentType - - * The explicit content type of a message so it can be previewed correctly with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. Optional argument. - * As of now, this option is for internal use. In the future, `contentType` will be used by alternative consumer types to explicitly mark messages as serialized so they can be consumed in the desired type. - * See [QueuesContentType](#queuescontenttype) for possible values. +- contentType + - The explicit content type of a message so it can be previewed correctly with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. Optional argument. + - As of now, this option is for internal use. In the future, `contentType` will be used by alternative consumer types to explicitly mark messages as serialized so they can be consumed in the desired type. + - See [QueuesContentType](#queuescontenttype) for possible values. -* delaySeconds - - * The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. - * Must be an integer between 0 and 86400 (24 hours). Setting this value to zero will explicitly prevent the message from being delayed, even if there is a global (default) delay at the queue level. +- delaySeconds + - The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. + - Must be an integer between 0 and 86400 (24 hours). Setting this value to zero will explicitly prevent the message from being delayed, even if there is a global (default) delay at the queue level. ### `QueueSendBatchOptions` Optional configuration that applies when sending a batch of messages to a queue. -* delaySeconds - - * The number of seconds to [delay messages](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. - * Must be a positive integer. +- delaySeconds + - The number of seconds to [delay messages](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. + - Must be a positive integer. ### `QueuesContentType` @@ -183,17 +170,15 @@ A union type containing valid message content types. type QueuesContentType = "text" | "bytes" | "json" | "v8"; ``` -* Use `"json"` to send a JavaScript object that can be JSON-serialized. This content type can be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com). The `json` content type is the default. -* Use `"text"` to send a `String`. This content type can be previewed with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. -* Use `"bytes"` to send an `ArrayBuffer`. This content type cannot be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com) and will display as Base64-encoded. -* Use `"v8"` to send a JavaScript object that cannot be JSON-serialized but is supported by [structured clone](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types) (for example `Date` and `Map`). This content type cannot be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com) and will display as Base64-encoded. +- Use `"json"` to send a JavaScript object that can be JSON-serialized. This content type can be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com). The `json` content type is the default. +- Use `"text"` to send a `String`. This content type can be previewed with the [List messages from the dashboard](/queues/examples/list-messages-from-dash/) feature. +- Use `"bytes"` to send an `ArrayBuffer`. This content type cannot be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com) and will display as Base64-encoded. +- Use `"v8"` to send a JavaScript object that cannot be JSON-serialized but is supported by [structured clone](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types) (for example `Date` and `Map`). This content type cannot be previewed from the [Cloudflare dashboard](https://dash.cloudflare.com) and will display as Base64-encoded. :::note - The default content type for Queues changed to `json` (from `v8`) to improve compatibility with pull-based consumers for any Workers with a [compatibility date](/workers/configuration/compatibility-flags/#queues-send-messages-in-json-format) after `2024-03-18`. - ::: If you specify an invalid content type, or if your specified content type does not match the message content's type, the send operation will fail with an error. @@ -210,15 +195,11 @@ interface QueueSendResult { } ``` +- metadata + - Contains metadata about the queue after the send operation. - -* metadata - - * Contains metadata about the queue after the send operation. - -* metadata.metrics - - * Realtime metrics for the queue. See [QueueMetrics](#queuemetrics). +- metadata.metrics + - Realtime metrics for the queue. See [QueueMetrics](#queuemetrics). ### `QueueMetrics` @@ -232,19 +213,14 @@ interface QueueMetrics { } ``` +- backlogCount + - The number of messages currently in the queue. +- backlogBytes + - The total size of messages in the queue, in bytes. -* backlogCount - - * The number of messages currently in the queue. - -* backlogBytes - - * The total size of messages in the queue, in bytes. - -* oldestMessageTimestamp - - * The timestamp (in milliseconds since epoch) of the oldest message in the queue. +- oldestMessageTimestamp + - The timestamp (in milliseconds since epoch) of the oldest message in the queue. ## Consumer @@ -262,10 +238,8 @@ If the `queue()` function throws, or the promise returned by it or any of the pr :::note - `waitUntil()` is the only supported method to run tasks (such as logging or metrics calls) that resolve after a queue handler has completed. Promises that have not resolved by the time the queue handler returns may not complete and will not block completion of execution. - ::: @@ -304,19 +278,19 @@ You can type queue messages with `Queue` on the producer and `ExportedHandler ```ts type MyMessage = { - id: string; + id: string; }; interface Env { - MY_QUEUE: Queue; + MY_QUEUE: Queue; } export default { - async queue(batch) { - for (const message of batch.messages) { - console.log(message.body.id); - } - }, + async queue(batch) { + for (const message of batch.messages) { + console.log(message.body.id); + } + }, } satisfies ExportedHandler; ``` @@ -325,7 +299,7 @@ For primitive messages, use `Queue` or `satisfies ExportedHandler { +addEventListener("queue", (event) => { event.waitUntil(handleMessages(event)); }); ``` @@ -334,10 +308,8 @@ In service worker syntax, `event` provides the same fields and methods as `Messa :::note - When performing asynchronous tasks in your queue handler that iterates through messages, use an asynchronous version of iterating through your messages. For example, `for (const m of batch.messages)`or `await Promise.all(batch.messages.map(work))` allow for waiting for the results of asynchronous calls. `batch.messages.forEach()` does not. - ::: ### `MessageBatch` @@ -346,34 +318,25 @@ A batch of messages that are sent to a consumer Worker. ```ts interface MessageBatch { - readonly queue: string; - readonly messages: readonly Message[]; - ackAll(): void; - retryAll(options?: QueueRetryOptions): void; + readonly queue: string; + readonly messages: readonly Message[]; + ackAll(): void; + retryAll(options?: QueueRetryOptions): void; } ``` +- queue + - The name of the Queue that belongs to this batch. +- messages + - An array of messages in the batch. Ordering of messages is best effort -- not guaranteed to be exactly the same as the order in which they were published. -* queue - - * The name of the Queue that belongs to this batch. - -* messages - - * An array of messages in the batch. Ordering of messages is best effort -- not guaranteed to be exactly the same as the order in which they were published. - -* ackAll() - - - * Marks every message as successfully delivered, regardless of whether your `queue()` consumer handler returns successfully or not. - -* retryAll(options?: QueueRetryOptions) - - * Marks every message to be retried in the next batch. - * Supports an optional `options` object. - +- ackAll() + - Marks every message as successfully delivered, regardless of whether your `queue()` consumer handler returns successfully or not. +- retryAll(options?: QueueRetryOptions) + - Marks every message to be retried in the next batch. + - Supports an optional `options` object. ### `Message` @@ -381,44 +344,34 @@ A message that is sent to a consumer Worker. ```ts interface Message { - readonly id: string; - readonly timestamp: Date; - readonly body: Body; + readonly id: string; + readonly timestamp: Date; + readonly body: Body; readonly attempts: number; - ack(): void; - retry(options?: QueueRetryOptions): void; + ack(): void; + retry(options?: QueueRetryOptions): void; } ``` +- id + - A unique, system-generated ID for the message. +- timestamp + - A timestamp when the message was sent. -* id - - * A unique, system-generated ID for the message. - -* timestamp - - * A timestamp when the message was sent. - -* body - - * The body of the message. - * The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. - -* attempts - - * The number of times the consumer has attempted to process this message. Starts at 1. - -* ack() - - * Marks a message as successfully delivered, regardless of whether your `queue()` consumer handler returns successfully or not. - -* retry(options?: QueueRetryOptions) +- body + - The body of the message. + - The body can be any type supported by the [structured clone algorithm](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm#supported_types), as long as its size is less than 128 KB. - * Marks a message to be retried in the next batch. - * Supports an optional `options` object. +- attempts + - The number of times the consumer has attempted to process this message. Starts at 1. +- ack() + - Marks a message as successfully delivered, regardless of whether your `queue()` consumer handler returns successfully or not. +- retry(options?: QueueRetryOptions) + - Marks a message to be retried in the next batch. + - Supports an optional `options` object. ### `QueueRetryOptions` @@ -426,13 +379,13 @@ Optional configuration when marking a message or a batch of messages for retry. ```ts interface QueueRetryOptions { - delaySeconds?: number; + delaySeconds?: number; } ``` -* delaySeconds +- delaySeconds + - The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. + - Must be a positive integer. - * The number of seconds to [delay a message](/queues/configuration/batching-retries/) for within the queue, before it can be delivered to a consumer. - * Must be a positive integer. -* When the promise resolves, the messages are written to disk. - * Returns a [QueueSendResult](#queuesendresult) containing realtime metrics about the queue. +- When the promise resolves, the messages are written to disk. + - Returns a [QueueSendResult](#queuesendresult) containing realtime metrics about the queue. diff --git a/src/content/docs/queues/configuration/local-development.mdx b/src/content/docs/queues/configuration/local-development.mdx index 69ba57856a90286..557fb80e5c067c5 100644 --- a/src/content/docs/queues/configuration/local-development.mdx +++ b/src/content/docs/queues/configuration/local-development.mdx @@ -23,6 +23,7 @@ To develop locally with Queues, you will need: ## Start a local development session Open your terminal and run the following commands to start a local development session: + ```sh npx wrangler@latest dev ``` @@ -40,13 +41,15 @@ Local development sessions create a standalone, local-only environment that mirr Refer to the [`wrangler dev` documentation](/workers/wrangler/commands/general/#dev) to learn more about how to configure a local development session. ## Separating producer & consumer Workers + Wrangler supports running multiple Workers simultaneously with a single command. If your architecture separates the producer and consumer into distinct Workers, you can use this functionality to test the entire message flow locally. :::caution Support for running multiple Workers at once with one Wrangler command is experimental, and subject to change as we work on the experience. If you run into bugs or have any feedback, [open an issue on the workers-sdk repository](https://github.com/cloudflare/workers-sdk/issues/new) ::: -For example, if your project has the following directory structure: +For example, if your project has the following directory structure: + ``` producer-worker/ ├── wrangler.jsonc @@ -57,6 +60,7 @@ producer-worker/ ``` You can start development servers for both workers with the following command: + ```sh npx wrangler@latest dev -c wrangler.jsonc -c consumer-worker/wrangler.jsonc --persist-to .wrangler/state ``` @@ -67,4 +71,5 @@ When the producer Worker sends messages to the queue, the consumer Worker will a ::: ## Known Issues + - Queues does not support Wrangler remote mode (`wrangler dev --remote`). diff --git a/src/content/docs/queues/configuration/pause-purge.mdx b/src/content/docs/queues/configuration/pause-purge.mdx index 0ca72cdbb02b121..aa3e793a9a0dc2e 100644 --- a/src/content/docs/queues/configuration/pause-purge.mdx +++ b/src/content/docs/queues/configuration/pause-purge.mdx @@ -7,6 +7,7 @@ sidebar: products: - queues --- + import { WranglerConfig, Type, MetaInfo } from "~/components"; ## Pause Delivery @@ -38,9 +39,11 @@ $ npx wrangler queues resume-delivery - The name of the queue for which delivery should be resumed. ### What happens to HTTP Pull consumers with a paused queue? + When a queue is paused, messages cannot be pulled by an [HTTP pull based consumer](/queues/configuration/pull-consumers). Requests to pull messages will receive a `409` response, along with an error message stating `queue_delivery_paused`. ## Purge queue + Purging a queue permanently deletes any messages currently stored in the Queue. Purging is useful while developing a new application, especially to clear out any test data. It can also be useful in production to handle scenarios when a batch of bad messages have been sent to a Queue. Note that any in flight messages, which are currently being processed by consumers, might still be processed. Messages sent to a queue during a purge operation might not be purged. Any delayed messages will also be deleted from the queue. @@ -50,7 +53,9 @@ Purging a queue is an irreversible operation. Make sure to use this operation ca ::: ### Purge queue using Wrangler + The following command will purge messages from your queue. You will be prompted to enter the queue name to confirm the operation. + ```sh $ npx wrangler queues purge @@ -58,4 +63,5 @@ This operation will permanently delete all the messages in Queue . T ``` ### Does purging a Queue affect my bill? + Purging a queue counts as a single billable operation, regardless of how many messages are deleted. For example, if you purge a queue which has 100 messages, all 100 messages will be permanently deleted, and you will be billed for 1 billable operation. Refer to the [pricing](/queues/platform/pricing) page for more information about how Queues is billed. diff --git a/src/content/docs/queues/event-subscriptions/index.mdx b/src/content/docs/queues/event-subscriptions/index.mdx index 7fea1b1b89a7a1d..8d7a0aa847de518 100644 --- a/src/content/docs/queues/event-subscriptions/index.mdx +++ b/src/content/docs/queues/event-subscriptions/index.mdx @@ -12,7 +12,7 @@ products: - workers --- -import { LinkCard } from "~/components" +import { LinkCard } from "~/components"; Event subscriptions allow you to receive messages when events occur across your Cloudflare account. Cloudflare products (e.g., [KV](/kv/), [Workers AI](/workers-ai), [Workers](/workers)) can publish structured events to a queue, which you can then consume with Workers or [HTTP pull consumers](/queues/configuration/pull-consumers/) to build custom workflows, integrations, or logic. @@ -34,4 +34,4 @@ An event is a structured record of something happening in your Cloudflare accoun title="Events & schemas" href="/queues/event-subscriptions/events-schemas/" description="Explore available event types and their corresponding data schemas." -/> \ No newline at end of file +/> diff --git a/src/content/docs/queues/event-subscriptions/manage-event-subscriptions.mdx b/src/content/docs/queues/event-subscriptions/manage-event-subscriptions.mdx index aa2f5a7998b8f6d..d7dc089f45b0751 100644 --- a/src/content/docs/queues/event-subscriptions/manage-event-subscriptions.mdx +++ b/src/content/docs/queues/event-subscriptions/manage-event-subscriptions.mdx @@ -8,11 +8,7 @@ sidebar: order: 1 --- -import { - Steps, - LinkCard, - DashButton, -} from "~/components"; +import { Steps, LinkCard, DashButton } from "~/components"; Learn how to: @@ -102,4 +98,4 @@ npx wrangler queues subscription delete --id title="Events & schemas" href="/queues/event-subscriptions/events-schemas/" description="Explore available event sources and types that you can subscribe to." -/> \ No newline at end of file +/> diff --git a/src/content/docs/queues/examples/publish-to-a-queue-via-http.mdx b/src/content/docs/queues/examples/publish-to-a-queue-via-http.mdx index 58bc8f327afbbc5..4875bc7d1174f24 100644 --- a/src/content/docs/queues/examples/publish-to-a-queue-via-http.mdx +++ b/src/content/docs/queues/examples/publish-to-a-queue-via-http.mdx @@ -22,7 +22,6 @@ This allows you to write to a Queue from any service or programming language tha - A [queue created](/queues/get-started/#3-create-a-queue) via the [Cloudflare dashboard](https://dash.cloudflare.com) or the [wrangler CLI](/workers/wrangler/install-and-update/). - A Cloudflare API token with the `Queues Edit` permission. - ### 1. Send a test message To make sure you successfully authenticate and write a message to your queue, use `curl` on the command line: diff --git a/src/content/docs/queues/examples/publish-to-a-queue-via-workers.mdx b/src/content/docs/queues/examples/publish-to-a-queue-via-workers.mdx index 45926ceeb6e587d..fb595d622adf56c 100644 --- a/src/content/docs/queues/examples/publish-to-a-queue-via-workers.mdx +++ b/src/content/docs/queues/examples/publish-to-a-queue-via-workers.mdx @@ -66,7 +66,10 @@ export default { messages = await req.json(); } catch { // Return a HTTP 400 (Bad Request) if the payload isn't JSON - return Response.json({ error: "payload not valid JSON" }, { status: 400 }); + return Response.json( + { error: "payload not valid JSON" }, + { status: 400 }, + ); } // Publish to the Queue diff --git a/src/content/docs/queues/examples/send-errors-to-r2.mdx b/src/content/docs/queues/examples/send-errors-to-r2.mdx index ba6649a7b277a6a..0ff30d559be40f2 100644 --- a/src/content/docs/queues/examples/send-errors-to-r2.mdx +++ b/src/content/docs/queues/examples/send-errors-to-r2.mdx @@ -63,33 +63,33 @@ interface Env { } export default { - async fetch(req, env, ctx): Promise { - try { - return doRequest(req); - } catch (e) { - const error: ErrorMessage = { - message: e instanceof Error ? e.message : String(e), - stack: e instanceof Error ? e.stack : undefined, - }; - await env.ERROR_QUEUE.send(error); - return new Response(error.message, { status: 500 }); - } - }, - async queue(batch, env, ctx): Promise { - let file = ""; - for (const message of batch.messages) { - const error = message.body; - file += error.stack ?? error.message; - file += "\r\n"; - } - await env.ERROR_BUCKET.put(`errors/${Date.now()}.log`, file); - }, + async fetch(req, env, ctx): Promise { + try { + return doRequest(req); + } catch (e) { + const error: ErrorMessage = { + message: e instanceof Error ? e.message : String(e), + stack: e instanceof Error ? e.stack : undefined, + }; + await env.ERROR_QUEUE.send(error); + return new Response(error.message, { status: 500 }); + } + }, + async queue(batch, env, ctx): Promise { + let file = ""; + for (const message of batch.messages) { + const error = message.body; + file += error.stack ?? error.message; + file += "\r\n"; + } + await env.ERROR_BUCKET.put(`errors/${Date.now()}.log`, file); + }, } satisfies ExportedHandler; function doRequest(request: Request): Response { - if (Math.random() > 0.5) { - return new Response("Success!"); - } - throw new Error("Failed!"); + if (Math.random() > 0.5) { + return new Response("Success!"); + } + throw new Error("Failed!"); } ``` diff --git a/src/content/docs/queues/examples/send-messages-from-dash.mdx b/src/content/docs/queues/examples/send-messages-from-dash.mdx index 6d384b6b6bd668a..1a2b6cc2f1b7455 100644 --- a/src/content/docs/queues/examples/send-messages-from-dash.mdx +++ b/src/content/docs/queues/examples/send-messages-from-dash.mdx @@ -22,14 +22,14 @@ To send messages from the dashboard: 1. In the Cloudflare dashboard, go to the **Queues** page. - + 2. Select the queue to send a message to. 3. Select the **Messages** tab. 4. Select **Send**. 5. Choose your message **Content Type**: _Text_ or _JSON_. -5. Enter your message. Alternatively, drag a file over the textbox to upload a file as a message. -6. Select **Send**. +6. Enter your message. Alternatively, drag a file over the textbox to upload a file as a message. +7. Select **Send**. Your message will be sent to the queue. diff --git a/src/content/docs/queues/examples/use-queues-with-durable-objects.mdx b/src/content/docs/queues/examples/use-queues-with-durable-objects.mdx index 481b9a11fe9e225..4803ac4d16c217c 100644 --- a/src/content/docs/queues/examples/use-queues-with-durable-objects.mdx +++ b/src/content/docs/queues/examples/use-queues-with-durable-objects.mdx @@ -73,45 +73,45 @@ Extending the `DurableObject` base class makes your `Env` available on `this.env import { DurableObject } from "cloudflare:workers"; interface Env { - YOUR_QUEUE: Queue; - YOUR_DO_CLASS: DurableObjectNamespace; + YOUR_QUEUE: Queue; + YOUR_DO_CLASS: DurableObjectNamespace; } export default { - async fetch(req, env, ctx): Promise { - // Assume each Durable Object is mapped to a userId in a query parameter - // In a production application, this will be a userId defined by your application - // that you validate (and/or authenticate) first. - const url = new URL(req.url); - const userIdParam = url.searchParams.get("userId"); - - if (userIdParam) { - // Get a stub that allows you to call that Durable Object - const durableObjectStub = env.YOUR_DO_CLASS.getByName(userIdParam); - - // Pass the request to that Durable Object and await the response - // This invokes the constructor once on your Durable Object class (defined further down) - // on the first initialization, and the fetch method on each request. - // We pass the original Request to the Durable Object's fetch method - const response = await durableObjectStub.fetch(req); - - // This would return "wrote to queue", but you could return any response. - return response; - } - return new Response("userId must be provided", { status: 400 }); - }, + async fetch(req, env, ctx): Promise { + // Assume each Durable Object is mapped to a userId in a query parameter + // In a production application, this will be a userId defined by your application + // that you validate (and/or authenticate) first. + const url = new URL(req.url); + const userIdParam = url.searchParams.get("userId"); + + if (userIdParam) { + // Get a stub that allows you to call that Durable Object + const durableObjectStub = env.YOUR_DO_CLASS.getByName(userIdParam); + + // Pass the request to that Durable Object and await the response + // This invokes the constructor once on your Durable Object class (defined further down) + // on the first initialization, and the fetch method on each request. + // We pass the original Request to the Durable Object's fetch method + const response = await durableObjectStub.fetch(req); + + // This would return "wrote to queue", but you could return any response. + return response; + } + return new Response("userId must be provided", { status: 400 }); + }, } satisfies ExportedHandler; export class YourDurableObject extends DurableObject { - async fetch(req: Request): Promise { - // Error handling elided for brevity. - // Publish to your queue - await this.env.YOUR_QUEUE.send({ - id: this.ctx.id.toString(), // Write the ID of the Durable Object to your queue - // Write any other properties to your queue - }); - - return new Response("wrote to queue"); - } + async fetch(req: Request): Promise { + // Error handling elided for brevity. + // Publish to your queue + await this.env.YOUR_QUEUE.send({ + id: this.ctx.id.toString(), // Write the ID of the Durable Object to your queue + // Write any other properties to your queue + }); + + return new Response("wrote to queue"); + } } ``` diff --git a/src/content/docs/queues/glossary.mdx b/src/content/docs/queues/glossary.mdx index 845aecc4bdd10b3..4bb72d0ab69bbf6 100644 --- a/src/content/docs/queues/glossary.mdx +++ b/src/content/docs/queues/glossary.mdx @@ -8,7 +8,7 @@ products: - queues --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Queues documentation. diff --git a/src/content/docs/queues/observability/index.mdx b/src/content/docs/queues/observability/index.mdx index c9ebe21e8103fb1..7becde1ad32ae99 100644 --- a/src/content/docs/queues/observability/index.mdx +++ b/src/content/docs/queues/observability/index.mdx @@ -10,6 +10,6 @@ products: - queues --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/queues/observability/metrics.mdx b/src/content/docs/queues/observability/metrics.mdx index e003fb8ca5507e5..39c918a48ff366b 100644 --- a/src/content/docs/queues/observability/metrics.mdx +++ b/src/content/docs/queues/observability/metrics.mdx @@ -74,10 +74,10 @@ The `queueMessageOperationsAdaptiveGroups` dataset provides the following dimens You can access realtime backlog metrics via the [Queues REST API](/api/resources/queues/) and [JavaScript API](/queues/configuration/javascript-apis/). These metrics provide point-in-time values rather than aggregated data. -| Metric | Field Name | Description | -| ------------------------ | -------------------------- | -------------------------------------------------------------- | -| Backlog count | `backlog_count` | Number of messages currently in the queue | -| Backlog bytes | `backlog_bytes` | Total size of messages in the queue, in bytes | +| Metric | Field Name | Description | +| ------------------------ | ----------------------------- | -------------------------------------------------------------- | +| Backlog count | `backlog_count` | Number of messages currently in the queue | +| Backlog bytes | `backlog_bytes` | Total size of messages in the queue, in bytes | | Oldest message timestamp | `oldest_message_timestamp_ms` | Timestamp (in milliseconds) of the oldest message in the queue | To retrieve these metrics via the REST API, use the metrics endpoint (`/accounts/{account_id}/queues/{queue_id}/metrics`). diff --git a/src/content/docs/queues/platform/index.mdx b/src/content/docs/queues/platform/index.mdx index a227085598b92e9..db2ed89685726c9 100644 --- a/src/content/docs/queues/platform/index.mdx +++ b/src/content/docs/queues/platform/index.mdx @@ -10,6 +10,6 @@ products: - queues --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/queues/platform/limits.mdx b/src/content/docs/queues/platform/limits.mdx index 4ca7f09527545a6..7da1292c246a72b 100644 --- a/src/content/docs/queues/platform/limits.mdx +++ b/src/content/docs/queues/platform/limits.mdx @@ -8,42 +8,49 @@ products: - queues --- -import { Render, WranglerConfig } from "~/components" +import { Render, WranglerConfig } from "~/components"; :::caution The following limits apply to both Workers Paid and Workers Free plans with the exception of **Message Retention**, which is non-configurable at 24 hours for the Workers Free plan. ::: -| Feature | Limit | -| ----------------------------------------------------------------| ------------------------------------------------------------- | -| Queues | 10,000 per account | -| Message size | 128 KB 1 | -| Message retries | 100 | -| Maximum consumer batch size | 100 messages | -| Maximum messages per `sendBatch` call | 100 (or 256KB in total) | -| Maximum Batch wait time | 60 seconds | -| Per-queue message throughput | 5,000 messages per second 2 | -| Message retention period 3 | [Configurable up to 14 days](/queues/configuration/configure-queues/#queue-configuration). | -| Per-queue backlog size 4 | 25GB | -| Concurrent consumer invocations | 250 push-based only | -| Consumer duration (wall clock time) | 15 minutes 5 | -| [Consumer CPU time](/workers/platform/limits/#cpu-time)| [Configurable to 5 minutes](/queues/platform/limits/#increasing-queue-consumer-worker-cpu-limits) | -| `visibilityTimeout` (pull-based queues) | 12 hours | -| `delaySeconds` (when sending or retrying) | 24 hours | - -1 1 KB is measured as 1000 bytes. Messages can include up to \~100 bytes of internal metadata that counts towards total message limits. - -2 Exceeding the maximum message throughput will cause the `send()` and `sendBatch()` methods to throw an exception with a `Too Many Requests` error until your producer falls below the limit. - -3 Messages in a queue that reach the maximum message retention are deleted from the queue. Queues does not delete messages in the same queue that have not reached this limit. - -4 Individual queues that reach this limit will receive a `Storage Limit Exceeded` error when calling `send()` or `sendBatch()` on the queue. +| Feature | Limit | +| ------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | +| Queues | 10,000 per account | +| Message size | 128 KB 1 | +| Message retries | 100 | +| Maximum consumer batch size | 100 messages | +| Maximum messages per `sendBatch` call | 100 (or 256KB in total) | +| Maximum Batch wait time | 60 seconds | +| Per-queue message throughput | 5,000 messages per second 2 | +| Message retention period 3 | [Configurable up to 14 days](/queues/configuration/configure-queues/#queue-configuration). | +| Per-queue backlog size 4 | 25GB | +| Concurrent consumer invocations | 250 push-based only | +| Consumer duration (wall clock time) | 15 minutes 5 | +| [Consumer CPU time](/workers/platform/limits/#cpu-time) | [Configurable to 5 minutes](/queues/platform/limits/#increasing-queue-consumer-worker-cpu-limits) | +| `visibilityTimeout` (pull-based queues) | 12 hours | +| `delaySeconds` (when sending or retrying) | 24 hours | + +1 1 KB is measured as 1000 bytes. Messages can include up to \~100 +bytes of internal metadata that counts towards total message limits. + +2 Exceeding the maximum message throughput will cause the `send()` +and `sendBatch()` methods to throw an exception with a `Too Many Requests` error +until your producer falls below the limit. + +3 Messages in a queue that reach the maximum message retention are +deleted from the queue. Queues does not delete messages in the same queue that +have not reached this limit. + +4 Individual queues that reach this limit will receive a `Storage +Limit Exceeded` error when calling `send()` or `sendBatch()` on the queue. 5 Refer to [Workers limits](/workers/platform/limits/#cpu-time). ### Increasing Queue Consumer Worker CPU Limits + [Queue consumer Workers](/queues/reference/how-queues-works/#consumers) are Worker scripts, and share the same [per invocation CPU limits](/workers/platform/limits/#account-plan-limits) as any Workers do. Note that CPU time is active processing time: not time spent waiting on network requests, storage calls, or other general I/O. By default, the maximum CPU time per consumer Worker invocation is set to 30 seconds, but can be increased by setting `limits.cpu_ms` in your Wrangler configuration: diff --git a/src/content/docs/queues/platform/pricing.mdx b/src/content/docs/queues/platform/pricing.mdx index f8336c97f5b08a3..0a2d005b5559044 100644 --- a/src/content/docs/queues/platform/pricing.mdx +++ b/src/content/docs/queues/platform/pricing.mdx @@ -11,7 +11,7 @@ products: - queues --- -import { Render } from "~/components" +import { Render } from "~/components"; @@ -19,23 +19,16 @@ import { Render } from "~/components" If an application writes, reads and deletes (consumes) one million messages a day (in a 30 day month), and each message is less than 64 KB in size, the estimated bill for the month would be: - - | | Total Usage | Free Usage | Billed Usage | Price | | ------------------- | --------------------- | ---------- | ------------ | ---------- | | Standard operations | 3 \* 30 \* 1,000,000 | 1,000,000 | 89,000,000 | $35.60 | | | (write, read, delete) | | | | | **TOTAL** | | | | **$35.60** | - - An application that writes, reads and deletes (consumes) 100 million \~127 KB messages (each message counts as two 64 KB chunks) per month would have an estimated bill resembling the following: - - | | Total Usage | Free Usage | Billed Usage | Price | | ------------------- | ---------------------------- | ---------- | ------------ | ----------- | | Standard operations | 2 \* 3 \* 100 \* 1,000,000 | 1,000,000 | 599,000,000 | $239.60 | | | (2x ops for > 64KB messages) | | | | | **TOTAL** | | | | **$239.60** | - diff --git a/src/content/docs/queues/reference/delivery-guarantees.mdx b/src/content/docs/queues/reference/delivery-guarantees.mdx index 1f78e3276a09305..bd589fd8317c267 100644 --- a/src/content/docs/queues/reference/delivery-guarantees.mdx +++ b/src/content/docs/queues/reference/delivery-guarantees.mdx @@ -12,8 +12,8 @@ Delivery guarantees define how strongly a messaging system enforces the delivery As you make stronger guarantees about message delivery, the system needs to perform more checks and acknowledgments to ensure that messages are delivered, or maintain state to ensure a message is only delivered the specified number of times. This increases the latency of the system and reduces the overall throughput of the system. Each message may require an additional internal acknowledgements, and an equivalent number of additional roundtrips, before it can be considered delivered. -* **Queues provides *at least once* delivery by default** in order to optimize for reliability. -* This means that messages are guaranteed to be delivered at least once, and in rare occasions, may be delivered more than once. -* For the majority of applications, this is the right balance between not losing any messages and minimizing end-to-end latency, as exactly once delivery incurs additional overheads in any messaging system. +- **Queues provides _at least once_ delivery by default** in order to optimize for reliability. +- This means that messages are guaranteed to be delivered at least once, and in rare occasions, may be delivered more than once. +- For the majority of applications, this is the right balance between not losing any messages and minimizing end-to-end latency, as exactly once delivery incurs additional overheads in any messaging system. In cases where processing the same message more than once would introduce unintended behaviour, generating a unique ID when writing the message to the queue and using that as the primary key on database inserts and/or as an idempotency key to de-duplicate the message after processing. For example, using this idempotency key as the ID in an upstream email API or payment API will allow those services to reject the duplicate on your behalf, without you having to carry additional state in your application. diff --git a/src/content/docs/queues/reference/error-codes.mdx b/src/content/docs/queues/reference/error-codes.mdx index 1a227b114e29bfe..94d502fd00435b6 100644 --- a/src/content/docs/queues/reference/error-codes.mdx +++ b/src/content/docs/queues/reference/error-codes.mdx @@ -17,7 +17,7 @@ For the [JavaScript APIs](/queues/configuration/javascript-apis/), Queues operat ```js try { await env.MY_QUEUE.send("message", { delaySeconds: 999999 }); - return new Response("Sent message to the queue"); + return new Response("Sent message to the queue"); } catch (error) { console.error(error); return new Response("Failed to send message to the queue", { status: 500 }); @@ -28,20 +28,18 @@ For the [Cloudflare API via HTTP](/api/resources/queues/subresources/messages/), ```json { - "errors": [ - { - "code": 7003, - "message": "No route for the URI", - "documentation_url": "documentation_url", - "source": { - "pointer": "pointer" - } - } - ], - "messages": [ - "string" - ], - "success": true + "errors": [ + { + "code": 7003, + "message": "No route for the URI", + "documentation_url": "documentation_url", + "source": { + "pointer": "pointer" + } + } + ], + "messages": ["string"], + "success": true } ``` @@ -49,19 +47,19 @@ For the [Cloudflare API via HTTP](/api/resources/queues/subresources/messages/), ### Client side errors -| Error Code | Error | Details | Recommended actions | -| ---------- | ------------------------ | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 10104 | QueueNotFound | Queue does not exist | Check for existence of `queue_id` in [List Queues endpoint](/api/resources/queues/) | -| 10106 | Unauthorized | Unauthorized request | Ensure that current user has permission to push to that queue. | -| 10107 | QueueIDMalformed | The queue ID in the request URL is not a valid queue identifier | Ensure that `queue_id` contains only alphanumeric characters. | -| 10201 | ClientDisconnected | Client disconnected during request processing | Consider increasing timeout and retry message send. | -| 10202 | BatchDelayInvalid | Invalid batch delay | Ensure that `batch_delay` is within 1 and 86400 seconds | +| Error Code | Error | Details | Recommended actions | +| ---------- | ------------------------ | -------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 10104 | QueueNotFound | Queue does not exist | Check for existence of `queue_id` in [List Queues endpoint](/api/resources/queues/) | +| 10106 | Unauthorized | Unauthorized request | Ensure that current user has permission to push to that queue. | +| 10107 | QueueIDMalformed | The queue ID in the request URL is not a valid queue identifier | Ensure that `queue_id` contains only alphanumeric characters. | +| 10201 | ClientDisconnected | Client disconnected during request processing | Consider increasing timeout and retry message send. | +| 10202 | BatchDelayInvalid | Invalid batch delay | Ensure that `batch_delay` is within 1 and 86400 seconds | | 10203 | MessageMetadataInvalid | Invalid message metadata (includes invalid content type and invalid delay) | Ensure `contentType` is one of `text`, `bytes`, `json`, or `v8`. Ensure the message delay does not exceed the [maximum of 24 hours](/queues/platform/limits/) | -| 10204 | MessageSizeOutOfBounds | Message size out of bounds | Ensure that message size is within 0 and 128 KB | -| 10205 | BatchSizeOutOfBounds | Batch size out of bounds | Ensure that batch size is within 0 and 256 KB | -| 10206 | BatchCountOutOfBounds | Batch count out of bounds | Ensure that batch count is within 0 and 100 messages | -| 10207 | JSONRequestBodyInvalid | Request JSON body does not match expected schema | Ensure that JSON body matches the expected schema | -| 10208 | JSONRequestBodyMalformed | Request body is not valid JSON | [REST API](/api/resources/queues/methods/create/) request body is not valid. Look at error message for additional details. | +| 10204 | MessageSizeOutOfBounds | Message size out of bounds | Ensure that message size is within 0 and 128 KB | +| 10205 | BatchSizeOutOfBounds | Batch size out of bounds | Ensure that batch size is within 0 and 256 KB | +| 10206 | BatchCountOutOfBounds | Batch count out of bounds | Ensure that batch count is within 0 and 100 messages | +| 10207 | JSONRequestBodyInvalid | Request JSON body does not match expected schema | Ensure that JSON body matches the expected schema | +| 10208 | JSONRequestBodyMalformed | Request body is not valid JSON | [REST API](/api/resources/queues/methods/create/) request body is not valid. Look at error message for additional details. | ### 429 type errors diff --git a/src/content/docs/queues/reference/how-queues-works.mdx b/src/content/docs/queues/reference/how-queues-works.mdx index efc649900122fdd..807d34b52e91d6c 100644 --- a/src/content/docs/queues/reference/how-queues-works.mdx +++ b/src/content/docs/queues/reference/how-queues-works.mdx @@ -29,9 +29,9 @@ Queues does not guarantee that messages will be delivered to a consumer in the s Developers can create multiple queues. Creating multiple queues can be useful to: -* Separate different use-cases and processing requirements: for example, a logging queue vs. a password reset queue. -* Horizontally scale your overall throughput (messages per second) by using multiple queues to scale out. -* Configure different batching strategies for each consumer connected to a queue. +- Separate different use-cases and processing requirements: for example, a logging queue vs. a password reset queue. +- Horizontally scale your overall throughput (messages per second) by using multiple queues to scale out. +- Configure different batching strategies for each consumer connected to a queue. For most applications, a single producer Worker per queue, with a single consumer Worker consuming messages from that queue allows you to logically separate the processing for each of your queues. @@ -43,31 +43,29 @@ For example, if we bound a queue named `my-first-queue` to a binding of `MY_FIRS ```ts interface Env { - readonly MY_FIRST_QUEUE: Queue; + readonly MY_FIRST_QUEUE: Queue; } export default { - async fetch(req, env, ctx): Promise { - const message = { - url: req.url, - method: req.method, - headers: Object.fromEntries(req.headers), - }; - - await env.MY_FIRST_QUEUE.send(message); // This will throw an exception if the send fails for any reason - return new Response("Sent!"); - }, + async fetch(req, env, ctx): Promise { + const message = { + url: req.url, + method: req.method, + headers: Object.fromEntries(req.headers), + }; + + await env.MY_FIRST_QUEUE.send(message); // This will throw an exception if the send fails for any reason + return new Response("Sent!"); + }, } satisfies ExportedHandler; ``` :::note - You can also use [`context.waitUntil()`](/workers/runtime-apis/context/#waituntil) to send the message without blocking the response. Note that because `waitUntil()` is non-blocking, any errors raised from the `send()` or `sendBatch()` methods on a queue will be implicitly ignored. - ::: A queue can have multiple producer Workers. For example, you may have multiple producer Workers writing events or logs to a shared queue based on incoming HTTP requests from users. There is no limit to the total number of producer Workers that can write to a single queue. @@ -82,25 +80,25 @@ To explicitly set the content type or specify an alternative content type, pass ```ts interface Env { - readonly MY_FIRST_QUEUE: Queue; + readonly MY_FIRST_QUEUE: Queue; } export default { - async fetch(req, env, ctx): Promise { - const message = { - url: req.url, - method: req.method, - headers: Object.fromEntries(req.headers), - }; - try { - await env.MY_FIRST_QUEUE.send(message, { contentType: "json" }); // "json" is the default - return new Response("Sent!"); - } catch (e) { - // Catch cases where send fails, including due to a mismatched content type - const msg = e instanceof Error ? e.message : "Unknown error"; - return Response.json({ error: msg }, { status: 500 }); - } - }, + async fetch(req, env, ctx): Promise { + const message = { + url: req.url, + method: req.method, + headers: Object.fromEntries(req.headers), + }; + try { + await env.MY_FIRST_QUEUE.send(message, { contentType: "json" }); // "json" is the default + return new Response("Sent!"); + } catch (e) { + // Catch cases where send fails, including due to a mismatched content type + const msg = e instanceof Error ? e.message : "Unknown error"; + return Response.json({ error: msg }, { status: 500 }); + } + }, } satisfies ExportedHandler; ``` @@ -108,21 +106,21 @@ To only accept simple strings when writing to a queue, set `{ contentType: "text ```ts interface Env { - readonly MY_FIRST_QUEUE: Queue; + readonly MY_FIRST_QUEUE: Queue; } export default { - async fetch(req, env, ctx): Promise { - try { - // This will throw an exception (error) if you pass a non-string to the queue, - // such as a native JavaScript object or ArrayBuffer. - await env.MY_FIRST_QUEUE.send("hello there", { contentType: "text" }); // explicitly set 'text' - return new Response("Sent!"); - } catch (e) { - const msg = e instanceof Error ? e.message : "Unknown error"; - return Response.json({ error: msg }, { status: 500 }); - } - }, + async fetch(req, env, ctx): Promise { + try { + // This will throw an exception (error) if you pass a non-string to the queue, + // such as a native JavaScript object or ArrayBuffer. + await env.MY_FIRST_QUEUE.send("hello there", { contentType: "text" }); // explicitly set 'text' + return new Response("Sent!"); + } catch (e) { + const msg = e instanceof Error ? e.message : "Unknown error"; + return Response.json({ error: msg }, { status: 500 }); + } + }, } satisfies ExportedHandler; ``` @@ -139,22 +137,22 @@ A queue can only have one type of consumer configured. ### Create a consumer Worker -A consumer is the term for a client that is subscribing to or *consuming* messages from a queue. In its most basic form, a consumer is defined by creating a `queue` handler in a Worker: +A consumer is the term for a client that is subscribing to or _consuming_ messages from a queue. In its most basic form, a consumer is defined by creating a `queue` handler in a Worker: ```ts interface Env { - // Add your bindings here, e.g. KV namespaces, R2 buckets, D1 databases + // Add your bindings here, e.g. KV namespaces, R2 buckets, D1 databases } export default { - async queue(batch, env, ctx): Promise { - // Do something with messages in the batch - // i.e. write to R2 storage, D1 database, or POST to an external API - for (const msg of batch.messages) { - // Process each message - console.log(msg.body); - } - }, + async queue(batch, env, ctx): Promise { + // Do something with messages in the batch + // i.e. write to R2 storage, D1 database, or POST to an external API + for (const msg of batch.messages) { + // Process each message + console.log(msg.body); + } + }, } satisfies ExportedHandler; ``` @@ -182,42 +180,40 @@ Importantly, each queue can only have one active consumer. This allows Cloudflar :::note[Best practice] - Configure a single consumer per queue. This both logically separates your queues, and ensures that errors (failures) in processing messages from one queue do not impact your other queues. - ::: Notably, you can use the same consumer with multiple queues. The queue handler that defines your consumer Worker will be invoked by the queues it is connected to. -* The `MessageBatch` that is passed to your `queue` handler includes a `queue` property with the name of the queue the batch was read from. -* This can reduce the amount of code you need to write, and allow you to process messages based on the name of your queues. +- The `MessageBatch` that is passed to your `queue` handler includes a `queue` property with the name of the queue the batch was read from. +- This can reduce the amount of code you need to write, and allow you to process messages based on the name of your queues. For example, a consumer configured to consume messages from multiple queues would resemble the following: ```ts interface Env { - // Add your bindings here + // Add your bindings here } export default { - async queue(batch, env, ctx): Promise { - // MessageBatch has a `queue` property we can switch on - switch (batch.queue) { - case "log-queue": - // Write the batch to R2 - break; - case "debug-queue": - // Write the message to the console or to another queue - break; - case "email-reset": - // Trigger a password reset email via an external API - break; - default: - // Handle messages we haven't mentioned explicitly (write a log, push to a DLQ) - break; - } - }, + async queue(batch, env, ctx): Promise { + // MessageBatch has a `queue` property we can switch on + switch (batch.queue) { + case "log-queue": + // Write the batch to R2 + break; + case "debug-queue": + // Write the message to the console or to another queue + break; + case "email-reset": + // Trigger a password reset email via an external API + break; + default: + // Handle messages we haven't mentioned explicitly (write a log, push to a DLQ) + break; + } + }, } satisfies ExportedHandler; ``` diff --git a/src/content/docs/queues/reference/index.mdx b/src/content/docs/queues/reference/index.mdx index 5470c10d9bcf385..a4b4b60c39f76b3 100644 --- a/src/content/docs/queues/reference/index.mdx +++ b/src/content/docs/queues/reference/index.mdx @@ -10,6 +10,6 @@ products: - queues --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/r2-sql/reference/limitations-best-practices.mdx b/src/content/docs/r2-sql/reference/limitations-best-practices.mdx index ca3746a34a661dd..1f5af0257e338e5 100644 --- a/src/content/docs/r2-sql/reference/limitations-best-practices.mdx +++ b/src/content/docs/r2-sql/reference/limitations-best-practices.mdx @@ -27,15 +27,15 @@ This page summarizes supported features, limitations, and best practices. | 173 scalar functions | Yes | Math, string, datetime, regex, crypto, array, map, struct, JSON | | 33 aggregate functions | Yes | Basic, approximate, statistical, bitwise, boolean, positional | | Approximate aggregates | Yes | `approx_distinct`, `approx_median`, `approx_percentile_cont`, `approx_top_k` | -| Struct / Array / Map column types | Yes | Bracket notation, `get_field()`, array functions, map functions | +| Struct / Array / Map column types | Yes | Bracket notation, `get_field()`, array functions, map functions | | CTEs (`WITH ... AS`) | Yes | Can reference different tables and include JOINs | | JOINs (INNER, LEFT, RIGHT, FULL OUTER, CROSS) | Yes | All standard join types | -| Implicit joins (comma FROM) | Yes | | -| Subqueries (`IN`, `NOT IN`) | Yes | `NOT IN` not supported on nullable columns — use `NOT EXISTS` instead | -| Subqueries (`EXISTS`, `NOT EXISTS`) | Yes | semi-join and anti-join patterns | -| Scalar subqueries | Yes | In SELECT, WHERE, HAVING | -| Derived tables (FROM subqueries) | Yes | Can be nested and joined. `LATERAL` derived tables not supported. | -| Self-joins | Yes | Same table with different aliases | +| Implicit joins (comma FROM) | Yes | | +| Subqueries (`IN`, `NOT IN`) | Yes | `NOT IN` not supported on nullable columns — use `NOT EXISTS` instead | +| Subqueries (`EXISTS`, `NOT EXISTS`) | Yes | semi-join and anti-join patterns | +| Scalar subqueries | Yes | In SELECT, WHERE, HAVING | +| Derived tables (FROM subqueries) | Yes | Can be nested and joined. `LATERAL` derived tables not supported. | +| Self-joins | Yes | Same table with different aliases | | Window functions (`OVER`) | No | | | `SELECT DISTINCT` | No | Use `approx_distinct` | | `OFFSET` | No | | @@ -49,44 +49,44 @@ For the full SQL syntax, refer to the [SQL reference](/r2-sql/sql-reference/). ## Unsupported SQL features -| Feature | Error | -| :---------------------------------------------------------------------------- | :------------------------------------------------------- | -| `SELECT DISTINCT` | `unsupported feature: SELECT DISTINCT is not supported` | -| `OFFSET` | `unsupported feature: OFFSET clause is not supported` | -| `UNION` / `INTERSECT` / `EXCEPT` | Set operations not supported | -| Window functions (`OVER`) | `unsupported feature: window functions (OVER clause)` | -| `INSERT` / `UPDATE` / `DELETE` | `only read-only queries are allowed` | -| `CREATE` / `DROP` / `ALTER` | `only read-only queries are allowed` | -| `UNNEST` / `PIVOT` / `UNPIVOT` | Not supported | -| Wildcard modifiers (`ILIKE`, `EXCLUDE`, `EXCEPT`, `REPLACE`, `RENAME` on `*`) | Not supported | -| Nested (parenthesized) joins | Not supported | -| `LATERAL` derived tables | Not supported | -| `LATERAL VIEW` / `QUALIFY` | Not supported | +| Feature | Error | +| :---------------------------------------------------------------------------- | :------------------------------------------------------ | +| `SELECT DISTINCT` | `unsupported feature: SELECT DISTINCT is not supported` | +| `OFFSET` | `unsupported feature: OFFSET clause is not supported` | +| `UNION` / `INTERSECT` / `EXCEPT` | Set operations not supported | +| Window functions (`OVER`) | `unsupported feature: window functions (OVER clause)` | +| `INSERT` / `UPDATE` / `DELETE` | `only read-only queries are allowed` | +| `CREATE` / `DROP` / `ALTER` | `only read-only queries are allowed` | +| `UNNEST` / `PIVOT` / `UNPIVOT` | Not supported | +| Wildcard modifiers (`ILIKE`, `EXCLUDE`, `EXCEPT`, `REPLACE`, `RENAME` on `*`) | Not supported | +| Nested (parenthesized) joins | Not supported | +| `LATERAL` derived tables | Not supported | +| `LATERAL VIEW` / `QUALIFY` | Not supported | --- ## Unsupported expression patterns -| Pattern | Alternative | -| :------------------------------------------------------ | :------------------------------------------------------------------------------------------------ | -| `func(DISTINCT ...)` on any aggregate | Use `approx_distinct` for counting | -| `PERCENTILE_CONT` / `PERCENTILE_DISC` | Use [`approx_percentile_cont`](/r2-sql/sql-reference/aggregate-functions/#approx_percentile_cont) | -| `MEDIAN` | Use [`approx_median`](/r2-sql/sql-reference/aggregate-functions/#approx_median) | -| `ARRAY_AGG` | No alternative (unsupported for memory safety) | -| `STRING_AGG` | No alternative (unsupported for memory safety) | -| `NOT IN` subquery on nullable columns | Use `NOT EXISTS` with a correlated subquery instead | +| Pattern | Alternative | +| :------------------------------------ | :------------------------------------------------------------------------------------------------ | +| `func(DISTINCT ...)` on any aggregate | Use `approx_distinct` for counting | +| `PERCENTILE_CONT` / `PERCENTILE_DISC` | Use [`approx_percentile_cont`](/r2-sql/sql-reference/aggregate-functions/#approx_percentile_cont) | +| `MEDIAN` | Use [`approx_median`](/r2-sql/sql-reference/aggregate-functions/#approx_median) | +| `ARRAY_AGG` | No alternative (unsupported for memory safety) | +| `STRING_AGG` | No alternative (unsupported for memory safety) | +| `NOT IN` subquery on nullable columns | Use `NOT EXISTS` with a correlated subquery instead | --- ## Runtime constraints -| Constraint | Details | -| :----------------------------------- | :---------------------------------------------------------------------------------------------------- | +| Constraint | Details | +| :----------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Multi-table queries | JOINs, subqueries (IN, EXISTS, scalar, derived tables), and multi-table CTEs are supported. Performance depends on intermediate result size; use WHERE filters to manage join selectivity. | -| Partitioned and unpartitioned tables | Both partitioned and unpartitioned Iceberg tables are supported. | -| Parquet format only | No CSV, JSON, or other formats. | -| Read-only | R2 SQL is a query engine, not a database. No writes. | -| `now()` / `current_time()` precision | Quantized to 10ms boundaries and forced to UTC. | +| Partitioned and unpartitioned tables | Both partitioned and unpartitioned Iceberg tables are supported. | +| Parquet format only | No CSV, JSON, or other formats. | +| Read-only | R2 SQL is a query engine, not a database. No writes. | +| `now()` / `current_time()` precision | Quantized to 10ms boundaries and forced to UTC. | --- diff --git a/src/content/docs/r2-sql/reference/wrangler-commands.mdx b/src/content/docs/r2-sql/reference/wrangler-commands.mdx index 26a591c683434f5..f9765698d06f77d 100644 --- a/src/content/docs/r2-sql/reference/wrangler-commands.mdx +++ b/src/content/docs/r2-sql/reference/wrangler-commands.mdx @@ -10,4 +10,4 @@ products: import { Render, Type, MetaInfo } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/r2-sql/sql-reference/index.mdx b/src/content/docs/r2-sql/sql-reference/index.mdx index 70227b97d4db20a..58ed3641062a224 100644 --- a/src/content/docs/r2-sql/sql-reference/index.mdx +++ b/src/content/docs/r2-sql/sql-reference/index.mdx @@ -194,14 +194,14 @@ R2 SQL supports joining multiple Iceberg tables in a single query. All join type ### Supported join types -| Join type | Syntax | Description | -| :--------------- | :---------------------------------- | :----------------------------------------------------------------- | -| Inner join | `INNER JOIN ... ON` | Returns rows that match in both tables | -| Left outer join | `LEFT JOIN ... ON` | Returns all rows from the left table, NULLs for non-matching right | -| Right outer join | `RIGHT JOIN ... ON` | Returns all rows from the right table, NULLs for non-matching left | -| Full outer join | `FULL OUTER JOIN ... ON` | Returns all rows from both tables, NULLs where no match | -| Cross join | `CROSS JOIN` | Cartesian product of both tables | -| Implicit join | `FROM t1, t2 WHERE t1.id = t2.id` | Comma-separated tables with join condition in `WHERE` | +| Join type | Syntax | Description | +| :--------------- | :-------------------------------- | :----------------------------------------------------------------- | +| Inner join | `INNER JOIN ... ON` | Returns rows that match in both tables | +| Left outer join | `LEFT JOIN ... ON` | Returns all rows from the left table, NULLs for non-matching right | +| Right outer join | `RIGHT JOIN ... ON` | Returns all rows from the right table, NULLs for non-matching left | +| Full outer join | `FULL OUTER JOIN ... ON` | Returns all rows from both tables, NULLs where no match | +| Cross join | `CROSS JOIN` | Cartesian product of both tables | +| Implicit join | `FROM t1, t2 WHERE t1.id = t2.id` | Comma-separated tables with join condition in `WHERE` | ### Syntax @@ -264,6 +264,7 @@ SELECT * FROM (t1 JOIN t2 ON t1.id = t2.id) JOIN t3 ON t2.id = t3.id -- Supported SELECT * FROM t1 JOIN t2 ON t1.id = t2.id JOIN t3 ON t2.id = t3.id ``` + ::: ### Best practices for joins @@ -358,6 +359,7 @@ WHERE NOT EXISTS ( ) LIMIT 20 ``` + ::: ### `EXISTS` / `NOT EXISTS` subqueries diff --git a/src/content/docs/r2/api/error-codes.mdx b/src/content/docs/r2/api/error-codes.mdx index 49ec6f7e7bff0ec..27e9cbdf09979fb 100644 --- a/src/content/docs/r2/api/error-codes.mdx +++ b/src/content/docs/r2/api/error-codes.mdx @@ -16,10 +16,10 @@ For the **Workers API**, R2 operations throw exceptions that you can catch. The ```js try { - await env.MY_BUCKET.put("my-key", data, { customMetadata: largeMetadata }); + await env.MY_BUCKET.put("my-key", data, { customMetadata: largeMetadata }); } catch (error) { - console.error(error.message); - // "put: Your metadata headers exceed the maximum allowed metadata size. (10012)" + console.error(error.message); + // "put: Your metadata headers exceed the maximum allowed metadata size. (10012)" } ``` @@ -37,59 +37,59 @@ For the **S3-compatible API**, errors are returned as XML in the response body: ### Authentication and authorization errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10002 | Unauthorized | 401 | Missing or invalid authentication credentials. | Verify your [API token](/r2/api/tokens/) or access key credentials are correct and have not expired. | -| 10003 | AccessDenied | 403 | Insufficient permissions for the requested operation. | Check that your [API token](/r2/api/tokens/) has the required permissions for the bucket and operation. | -| 10018 | ExpiredRequest | 400 | Presigned URL or request signature has expired. | Regenerate the [presigned URL](/r2/api/s3/presigned-urls/) or signature. | -| 10035 | SignatureDoesNotMatch | 403 | Request signature does not match calculated signature. | Verify your secret key and signing algorithm. Check for URL encoding issues. | -| 10042 | NotEntitled | 403 | Account not entitled to this feature. | Ensure your account has an [R2 subscription](/r2/pricing/). | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | --------------------- | ----------- | ------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | +| 10002 | Unauthorized | 401 | Missing or invalid authentication credentials. | Verify your [API token](/r2/api/tokens/) or access key credentials are correct and have not expired. | +| 10003 | AccessDenied | 403 | Insufficient permissions for the requested operation. | Check that your [API token](/r2/api/tokens/) has the required permissions for the bucket and operation. | +| 10018 | ExpiredRequest | 400 | Presigned URL or request signature has expired. | Regenerate the [presigned URL](/r2/api/s3/presigned-urls/) or signature. | +| 10035 | SignatureDoesNotMatch | 403 | Request signature does not match calculated signature. | Verify your secret key and signing algorithm. Check for URL encoding issues. | +| 10042 | NotEntitled | 403 | Account not entitled to this feature. | Ensure your account has an [R2 subscription](/r2/pricing/). | ### Bucket errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10005 | InvalidBucketName | 400 | Bucket name does not meet naming requirements. | Bucket names must be 3-63 chars, lowercase alphanumeric and hyphens, start/end with alphanumeric. | -| 10006 | NoSuchBucket | 404 | The specified bucket does not exist. | Verify the bucket name is correct and the bucket exists in your account. | -| 10008 | BucketNotEmpty | 409 | Cannot delete bucket that contains objects. | Delete all objects in the bucket before deleting the bucket. | -| 10009 | TooManyBuckets | 400 | Account bucket limit exceeded (default: 1,000,000 buckets). | Request a limit increase via the [Limits Increase Request Form](https://forms.gle/ukpeZVLWLnKeixDu7). | -| 10073 | BucketConflict | 409 | Bucket name already exists. | Choose a different bucket name. Bucket names must be unique within your account. | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | ----------------- | ----------- | ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| 10005 | InvalidBucketName | 400 | Bucket name does not meet naming requirements. | Bucket names must be 3-63 chars, lowercase alphanumeric and hyphens, start/end with alphanumeric. | +| 10006 | NoSuchBucket | 404 | The specified bucket does not exist. | Verify the bucket name is correct and the bucket exists in your account. | +| 10008 | BucketNotEmpty | 409 | Cannot delete bucket that contains objects. | Delete all objects in the bucket before deleting the bucket. | +| 10009 | TooManyBuckets | 400 | Account bucket limit exceeded (default: 1,000,000 buckets). | Request a limit increase via the [Limits Increase Request Form](https://forms.gle/ukpeZVLWLnKeixDu7). | +| 10073 | BucketConflict | 409 | Bucket name already exists. | Choose a different bucket name. Bucket names must be unique within your account. | ### Object errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10007 | NoSuchKey | 404 | The specified object key does not exist. For the [Workers API](/r2/api/workers/workers-api-reference/), `get()` and `head()` return `null` instead of throwing. | Verify the object key is correct and the object has not been deleted. | -| 10020 | InvalidObjectName | 400 | Object key contains invalid characters or is too long. | Use valid UTF-8 characters. Maximum key length is 1024 bytes. | -| 100100 | EntityTooLarge | 400 | Object exceeds maximum size (5 GiB for single upload, 5 TiB for multipart). | Use [multipart upload](/r2/objects/upload-objects/#multipart-upload) for objects larger than 5 GiB. Maximum object size is 5 TiB. | -| 10012 | MetadataTooLarge | 400 | Custom metadata exceeds the 8,192 byte limit. | Reduce custom metadata size. Maximum is 8,192 bytes total for all custom metadata. | -| 10069 | ObjectLockedByBucketPolicy | 403 | Object is protected by a bucket lock rule and cannot be modified or deleted. | Wait for the retention period to expire. Refer to [bucket locks](/r2/buckets/bucket-locks/). | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | -------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | +| 10007 | NoSuchKey | 404 | The specified object key does not exist. For the [Workers API](/r2/api/workers/workers-api-reference/), `get()` and `head()` return `null` instead of throwing. | Verify the object key is correct and the object has not been deleted. | +| 10020 | InvalidObjectName | 400 | Object key contains invalid characters or is too long. | Use valid UTF-8 characters. Maximum key length is 1024 bytes. | +| 100100 | EntityTooLarge | 400 | Object exceeds maximum size (5 GiB for single upload, 5 TiB for multipart). | Use [multipart upload](/r2/objects/upload-objects/#multipart-upload) for objects larger than 5 GiB. Maximum object size is 5 TiB. | +| 10012 | MetadataTooLarge | 400 | Custom metadata exceeds the 8,192 byte limit. | Reduce custom metadata size. Maximum is 8,192 bytes total for all custom metadata. | +| 10069 | ObjectLockedByBucketPolicy | 403 | Object is protected by a bucket lock rule and cannot be modified or deleted. | Wait for the retention period to expire. Refer to [bucket locks](/r2/buckets/bucket-locks/). | ### Upload and request errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10033 | MissingContentLength | 411 | `Content-Length` header required but missing. | Include the `Content-Length` header in PUT/POST requests. | -| 10013 | IncompleteBody | 400 | Request body terminated before expected `Content-Length`. | Ensure the full request body is sent. Check for network interruptions or client timeouts. | -| 10014 | InvalidDigest | 400 | Checksum header format is malformed. | Ensure checksums are properly encoded (base64 for SHA/CRC checksums). | -| 10037 | BadDigest | 400 | Provided checksum does not match the uploaded content. | Verify data integrity and retry the upload. | -| 10039 | InvalidRange | 416 | Requested byte range is not satisfiable. | Ensure the range start is less than object size. Check `Range` header format. | -| 10031 | PreconditionFailed | 412 | Conditional headers (`If-Match`, `If-Unmodified-Since`, etc.) were not satisfied. | Object's ETag or modification time does not match your condition. Refetch and retry. Refer to [conditional operations](/r2/api/s3/extensions/#conditional-operations-in-putobject). | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | -------------------- | ----------- | --------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 10033 | MissingContentLength | 411 | `Content-Length` header required but missing. | Include the `Content-Length` header in PUT/POST requests. | +| 10013 | IncompleteBody | 400 | Request body terminated before expected `Content-Length`. | Ensure the full request body is sent. Check for network interruptions or client timeouts. | +| 10014 | InvalidDigest | 400 | Checksum header format is malformed. | Ensure checksums are properly encoded (base64 for SHA/CRC checksums). | +| 10037 | BadDigest | 400 | Provided checksum does not match the uploaded content. | Verify data integrity and retry the upload. | +| 10039 | InvalidRange | 416 | Requested byte range is not satisfiable. | Ensure the range start is less than object size. Check `Range` header format. | +| 10031 | PreconditionFailed | 412 | Conditional headers (`If-Match`, `If-Unmodified-Since`, etc.) were not satisfied. | Object's ETag or modification time does not match your condition. Refetch and retry. Refer to [conditional operations](/r2/api/s3/extensions/#conditional-operations-in-putobject). | ### Multipart upload errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10011 | EntityTooSmall | 400 | Multipart part is below minimum size (5 MiB), except for the last part. | Ensure each part (except the last) is at least 5 MiB. | -| 10024 | NoSuchUpload | 404 | Multipart upload does not exist or was aborted. | Verify the `uploadId` is correct. By default, incomplete multipart uploads expire after 7 days. Refer to [object lifecycles](/r2/buckets/object-lifecycles/). | -| 10025 | InvalidPart | 400 | One or more parts could not be found when completing the upload. | Verify each part was uploaded successfully and use the exact ETag returned from `UploadPart`. | -| 10048 | InvalidPart | 400 | All non-trailing parts must have the same size. | Ensure all parts except the last have identical sizes. R2 requires uniform part sizes for multipart uploads. | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | -------------- | ----------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 10011 | EntityTooSmall | 400 | Multipart part is below minimum size (5 MiB), except for the last part. | Ensure each part (except the last) is at least 5 MiB. | +| 10024 | NoSuchUpload | 404 | Multipart upload does not exist or was aborted. | Verify the `uploadId` is correct. By default, incomplete multipart uploads expire after 7 days. Refer to [object lifecycles](/r2/buckets/object-lifecycles/). | +| 10025 | InvalidPart | 400 | One or more parts could not be found when completing the upload. | Verify each part was uploaded successfully and use the exact ETag returned from `UploadPart`. | +| 10048 | InvalidPart | 400 | All non-trailing parts must have the same size. | Ensure all parts except the last have identical sizes. R2 requires uniform part sizes for multipart uploads. | ### Service errors -| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | -|------------|------|-------------|---------|-----------------| -| 10001 | InternalError | 500 | An internal error occurred. | Retry the request. If persistent, check [Cloudflare Status](https://www.cloudflarestatus.com) or contact support. | -| 10043 | ServiceUnavailable | 503 | Service is temporarily unavailable. | Retry with exponential backoff. Check [Cloudflare Status](https://www.cloudflarestatus.com). | -| 10054 | ClientDisconnect | 400 | Client disconnected before request completed. | Check network connectivity and retry. | -| 10058 | TooManyRequests | 429 | Rate limit exceeded. Often caused by multiple concurrent requests to the same object key (limit: 1 write/second per key). | Check if multiple clients are accessing the same object key. See [R2 limits](/r2/platform/limits/). | +| Error Code | S3 Code | HTTP Status | Details | Recommended Fix | +| ---------- | ------------------ | ----------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| 10001 | InternalError | 500 | An internal error occurred. | Retry the request. If persistent, check [Cloudflare Status](https://www.cloudflarestatus.com) or contact support. | +| 10043 | ServiceUnavailable | 503 | Service is temporarily unavailable. | Retry with exponential backoff. Check [Cloudflare Status](https://www.cloudflarestatus.com). | +| 10054 | ClientDisconnect | 400 | Client disconnected before request completed. | Check network connectivity and retry. | +| 10058 | TooManyRequests | 429 | Rate limit exceeded. Often caused by multiple concurrent requests to the same object key (limit: 1 write/second per key). | Check if multiple clients are accessing the same object key. See [R2 limits](/r2/platform/limits/). | diff --git a/src/content/docs/r2/api/index.mdx b/src/content/docs/r2/api/index.mdx index ea9d2d32f1163c9..c7113b1969a8c64 100644 --- a/src/content/docs/r2/api/index.mdx +++ b/src/content/docs/r2/api/index.mdx @@ -8,7 +8,7 @@ products: - r2 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; R2 provides three API surfaces for interacting with your data: diff --git a/src/content/docs/r2/api/s3/extensions.mdx b/src/content/docs/r2/api/s3/extensions.mdx index 79016396a6a9091..3d837887f7d5b66 100644 --- a/src/content/docs/r2/api/s3/extensions.mdx +++ b/src/content/docs/r2/api/s3/extensions.mdx @@ -16,13 +16,11 @@ HTTP header names and values may only contain ASCII characters, which is a small :::caution[Metadata variance] -Be mindful when using both Workers and S3 API endpoints to access the same data. If the R2 metadata keys contain Unicode, they are stripped when accessed through the S3 API and the `x-amz-missing-meta` header is set to the number of keys that were omitted. +Be mindful when using both Workers and S3 API endpoints to access the same data. If the R2 metadata keys contain Unicode, they are stripped when accessed through the S3 API and the `x-amz-missing-meta` header is set to the number of keys that were omitted. ::: These headers map to the `httpMetadata` field in the [R2 bindings](/workers/runtime-apis/bindings/): - - | HTTP Header | Property Name | | --------------------- | --------------------------------- | | `Content-Encoding` | `httpMetadata.contentEncoding` | @@ -73,8 +71,6 @@ The `x-amz-metadata-directive` allows a `MERGE` value, in addition to the standa `ListBuckets` supports all the same search parameters as `ListObjectsV2` in R2 because some customers may have more than 1,000 buckets. Because tooling, like existing S3 libraries, may not expose a way to set these search parameters, these values may also be sent in via headers. Values in headers take precedence over the search parameters. - - | Search parameter | HTTP Header | Meaning | | -------------------- | ----------------------- | ----------------------------------------------------------------- | | `prefix` | `cf-prefix` | Show buckets with this prefix only. | @@ -85,8 +81,6 @@ The `x-amz-metadata-directive` allows a `MERGE` value, in addition to the standa The XML response contains a `NextContinuationToken` and `IsTruncated` elements as appropriate. Since these may not be accessible from existing S3 APIs, these are also available in response headers: - - | XML Response Element | HTTP Response Header | Meaning | | ----------------------- | ---------------------------- | ---------------------------------------------------------------------------------------------- | | `IsTruncated` | `cf-is-truncated` | This is set to `true` if the list of buckets returned is not all the buckets on the account. | @@ -101,15 +95,15 @@ The XML response contains a `NextContinuationToken` and `IsTruncated` elements a :::note -This feature is currently in beta. If you have feedback, reach out to us on the [Cloudflare Developer Discord](https://discord.cloudflare.com) in the #r2-storage channel or open a thread on the [Community Forum](https://community.cloudflare.com/c/developers/storage/81). +This feature is currently in beta. If you have feedback, reach out to us on the [Cloudflare Developer Discord](https://discord.cloudflare.com) in the #r2-storage channel or open a thread on the [Community Forum](https://community.cloudflare.com/c/developers/storage/81). ::: `CopyObject` already supports conditions that relate to the source object through the `x-amz-copy-source-if-...` headers as part of our compliance with the S3 API. In addition to this, R2 supports an R2 specific set of headers that allow the `CopyObject` operation to be conditional on the target object: -* `cf-copy-destination-if-match` -* `cf-copy-destination-if-none-match` -* `cf-copy-destination-if-modified-since` -* `cf-copy-destination-if-unmodified-since` +- `cf-copy-destination-if-match` +- `cf-copy-destination-if-none-match` +- `cf-copy-destination-if-modified-since` +- `cf-copy-destination-if-unmodified-since` These headers work akin to the similarly named conditional headers supported on `PutObject`. When the preceding state of the destination object to does not match the specified conditions the `CopyObject` operation will be rejected with a `412 PreconditionFailed` error code. diff --git a/src/content/docs/r2/api/s3/presigned-urls.mdx b/src/content/docs/r2/api/s3/presigned-urls.mdx index 4b4c1fc51449c91..bda593cdc55a82e 100644 --- a/src/content/docs/r2/api/s3/presigned-urls.mdx +++ b/src/content/docs/r2/api/s3/presigned-urls.mdx @@ -6,7 +6,7 @@ products: - r2 --- -import {Tabs, TabItem, LinkCard } from "~/components"; +import { Tabs, TabItem, LinkCard } from "~/components"; Presigned URLs are an [S3 concept](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-presigned-url.html) for granting temporary access to objects without exposing your API credentials. A presigned URL includes signature parameters in the URL itself, authorizing anyone with the URL to perform a specific operation (like `GetObject` or `PutObject`) on a specific object until the URL expires. @@ -24,10 +24,10 @@ Presigned URLs are generated client-side with no communication with R2, requirin R2 supports two patterns for time-limited access. They overlap but have different trade-offs: -| Pattern | Grants | Good for | -| --- | --- | --- | -| Presigned URLs (this page) | A single S3 operation on a single object | Granting direct HTTP access to a single object without an S3 client, such as a browser upload or a shareable download link | -| [Temporary credentials](/r2/api/s3/temporary-credentials/) | Multiple S3 operations, scoped to a bucket and a set of permitted operations, and optionally to specific paths | Callers that use a standard S3 client or SDK to perform multiple operations in a scoped session | +| Pattern | Grants | Good for | +| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| Presigned URLs (this page) | A single S3 operation on a single object | Granting direct HTTP access to a single object without an S3 client, such as a browser upload or a shareable download link | +| [Temporary credentials](/r2/api/s3/temporary-credentials/) | Multiple S3 operations, scoped to a bucket and a set of permitted operations, and optionally to specific paths | Callers that use a standard S3 client or SDK to perform multiple operations in a scoped session | ## Generate a presigned URL @@ -136,6 +136,7 @@ aws s3 presign --endpoint-url https://.r2.cloudflarestorage.com \ For complete examples and additional operations, refer to the SDK-specific documentation: + - [AWS SDK for JavaScript](/r2/examples/aws/aws-sdk-js-v3/#generate-presigned-urls) - [AWS SDK for Python (Boto3)](/r2/examples/aws/boto3/#generate-presigned-urls) - [AWS CLI](/r2/examples/aws/aws-cli/#generate-presigned-urls) diff --git a/src/content/docs/r2/api/s3/temporary-credentials.mdx b/src/content/docs/r2/api/s3/temporary-credentials.mdx index eabe88c5d475d9f..42a48a5428e8ec4 100644 --- a/src/content/docs/r2/api/s3/temporary-credentials.mdx +++ b/src/content/docs/r2/api/s3/temporary-credentials.mdx @@ -16,10 +16,10 @@ Use temporary credentials to delegate access without issuing a long-lived token. R2 supports two patterns for time-limited access. They overlap but have different trade-offs: -| Pattern | Grants | Good for | -| --- | --- | --- | -| Temporary credentials (this page) | Multiple S3 operations, scoped to a bucket and a set of permitted operations, and optionally to specific paths | Callers that use a standard S3 client or SDK to perform multiple operations in a scoped session | -| [Presigned URLs](/r2/api/s3/presigned-urls/) | A single S3 operation on a single object | Granting direct HTTP access to a single object without an S3 client, such as a browser upload or a shareable download link | +| Pattern | Grants | Good for | +| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| Temporary credentials (this page) | Multiple S3 operations, scoped to a bucket and a set of permitted operations, and optionally to specific paths | Callers that use a standard S3 client or SDK to perform multiple operations in a scoped session | +| [Presigned URLs](/r2/api/s3/presigned-urls/) | A single S3 operation on a single object | Granting direct HTTP access to a single object without an S3 client, such as a browser upload or a shareable download link | ## Generate temporary credentials @@ -108,11 +108,11 @@ For example, `actions: ["GetObject", "HeadObject"]` grants read of individual ob Valid actions: -| Category | Actions | -| --- | --- | -| Read | `HeadObject`, `GetObject`, `GetBucketLocation`, `ListObjectsV1`, `ListObjectsV2`, `ListMultipartUploads`, `ListParts` | -| Write | `PutObject`, `DeleteObject`, `DeleteObjects`, `CopyObject` | -| Multipart | `CreateMultipartUpload`, `UploadPart`, `UploadPartCopy`, `AbortMultipartUpload`, `CompleteMultipartUpload` | +| Category | Actions | +| --------- | --------------------------------------------------------------------------------------------------------------------- | +| Read | `HeadObject`, `GetObject`, `GetBucketLocation`, `ListObjectsV1`, `ListObjectsV2`, `ListMultipartUploads`, `ListParts` | +| Write | `PutObject`, `DeleteObject`, `DeleteObjects`, `CopyObject` | +| Multipart | `CreateMultipartUpload`, `UploadPart`, `UploadPartCopy`, `AbortMultipartUpload`, `CompleteMultipartUpload` | ### Paths @@ -122,8 +122,8 @@ Restrict access to specific prefixes or objects within the bucket. Omit these fi ```jsonc { - "prefixes": ["uploads/user-123/"], - "objects": ["shared/manifest.json"] + "prefixes": ["uploads/user-123/"], + "objects": ["shared/manifest.json"], } ``` @@ -131,10 +131,10 @@ Restrict access to specific prefixes or objects within the bucket. Omit these fi ```jsonc { - "paths": { - "prefixPaths": ["uploads/user-123/"], - "objectPaths": ["shared/manifest.json"] - } + "paths": { + "prefixPaths": ["uploads/user-123/"], + "objectPaths": ["shared/manifest.json"], + }, } ``` @@ -205,25 +205,25 @@ Treat temporary credentials as bearer tokens. Anyone in possession of all three ## Related resources diff --git a/src/content/docs/r2/api/workers/workers-api-reference.mdx b/src/content/docs/r2/api/workers/workers-api-reference.mdx index b7489165a08ccee..d60ffa3b2d79709 100644 --- a/src/content/docs/r2/api/workers/workers-api-reference.mdx +++ b/src/content/docs/r2/api/workers/workers-api-reference.mdx @@ -103,40 +103,33 @@ class Default(WorkerEntrypoint):
    - `head` - - Retrieves the `R2Object` for the given key containing only object metadata, if the key exists, and `null` if the key does not exist. - `get` - - Retrieves the `R2ObjectBody` for the given key containing object metadata and the object body as a ReadableStream, if the key exists, and `null` if the key does not exist. - In the event that a precondition specified in options fails, get() returns an R2Object with body undefined. - `put` - - Stores the given value and metadata under the associated key. Once the write succeeds, returns an `R2Object` containing metadata about the stored Object. - In the event that a precondition specified in options fails, put() returns `null`, and the object will not be stored. - R2 writes are strongly consistent. Once the Promise resolves, all subsequent read operations will see this key value pair globally. - `delete` - - Deletes the given values and metadata under the associated keys. Once the delete succeeds, returns void. - R2 deletes are strongly consistent. Once the Promise resolves, all subsequent read operations will no longer see the provided key value pairs globally. - Up to 1000 keys may be deleted per call. - `list` - - * Returns an R2Objects containing a list of R2Object contained within the bucket. - * The returned list of objects is ordered lexicographically. - * Returns up to 1000 entries, but may return less in order to minimize memory pressure within the Worker. - * To explicitly set the number of objects to list, provide an [R2ListOptions](/r2/api/workers/workers-api-reference/#r2listoptions) object with the `limit` property set. + - Returns an R2Objects containing a list of R2Object contained within the bucket. + - The returned list of objects is ordered lexicographically. + - Returns up to 1000 entries, but may return less in order to minimize memory pressure within the Worker. + - To explicitly set the number of objects to list, provide an [R2ListOptions](/r2/api/workers/workers-api-reference/#r2listoptions) object with the `limit` property set. * `createMultipartUpload` - - Creates a multipart upload. - Returns Promise which resolves to an `R2MultipartUpload` object representing the newly created multipart upload. Once the multipart upload has been created, the multipart upload can be immediately interacted with globally, either through the Workers API, or through the S3 API. - `resumeMultipartUpload` - - Returns an object representing a multipart upload with the given key and uploadId. - The resumeMultipartUpload operation does not perform any checks to ensure the validity of the uploadId, nor does it verify the existence of a corresponding active multipart upload. This is done to minimize latency before being able to call subsequent operations on the `R2MultipartUpload` object. @@ -145,15 +138,12 @@ class Default(WorkerEntrypoint): `R2Object` is created when you `PUT` an object into an R2 bucket. `R2Object` represents the metadata of an object based on the information provided by the uploader. Every object that you `PUT` into an R2 bucket will have an `R2Object` created. - `key` - - The object's key. - `version` - - Random unique string associated with a specific upload of a key. - `size` - - Size of the object in bytes. - `etag` @@ -166,39 +156,30 @@ Cloudflare recommends using the `httpEtag` field when returning an etag in a res - The etag associated with the object upload. - `httpEtag` - - The object's etag, in quotes so as to be returned as a header. - `uploaded` - - A Date object representing the time the object was uploaded. - `httpMetadata` - - Various HTTP headers associated with the object. Refer to [HTTP Metadata](#http-metadata). - `customMetadata` - - A map of custom, user-defined metadata associated with the object. - `range` - - A `R2Range` object containing the returned range of the object. - `checksums` - - A `R2Checksums` object containing the stored checksums of the object. Refer to [checksums](#checksums). - `writeHttpMetadata` - - Retrieves the `httpMetadata` from the `R2Object` and applies their corresponding HTTP headers to the `Headers` input object. Refer to [HTTP Metadata](#http-metadata). - `storageClass` - - The storage class associated with the object. Refer to [Storage Classes](#storage-class). - `ssecKeyMd5` - - Hex-encoded MD5 hash of the [SSE-C](/r2/examples/ssec) key used for encryption (if one was provided). Hash can be used to identify which key is needed to decrypt object. ## `R2ObjectBody` definition @@ -206,27 +187,21 @@ Cloudflare recommends using the `httpEtag` field when returning an etag in a res `R2ObjectBody` represents an object's metadata combined with its body. It is returned when you `GET` an object from an R2 bucket. The full list of keys for `R2ObjectBody` includes the list below and all keys inherited from [`R2Object`](#r2object-definition). - `body` - - The object's value. - `bodyUsed` - - Whether the object's value has been consumed or not. - `arrayBuffer` - - Returns a Promise that resolves to an `ArrayBuffer` containing the object's value. - `text` - - Returns a Promise that resolves to an string containing the object's value. - `json` - - Returns a Promise that resolves to the given object containing the object's value. - `blob` - - Returns a Promise that resolves to a binary Blob containing the object's value. ## `R2MultipartUpload` definition @@ -244,24 +219,19 @@ A multipart upload can be completed or aborted at any time, either through the S ::: - `key` - - The `key` for the multipart upload. - `uploadId` - - The `uploadId` for the multipart upload. - `uploadPart` - - Uploads a single part with the specified part number to this multipart upload. Each part must be uniform in size with an exception for the final part which can be smaller. - Returns an `R2UploadedPart` object containing the `etag` and `partNumber`. These `R2UploadedPart` objects are required when completing the multipart upload. - `abort` - - Aborts the multipart upload. Returns a Promise that resolves when the upload has been successfully aborted. - `complete` - - Completes the multipart upload with the given parts. - Returns a Promise that resolves when the complete operation has finished. Once this happens, the object is immediately accessible globally by any subsequent read operation. @@ -270,15 +240,12 @@ A multipart upload can be completed or aborted at any time, either through the S ### R2GetOptions - `onlyIf` - - Specifies that the object should only be returned given satisfaction of certain conditions in the `R2Conditional` or in the conditional Headers. Refer to [Conditional operations](#conditional-operations). - `range` - - Specifies that only a specific length (from an optional offset) or suffix of bytes from the object should be returned. Refer to [Ranged reads](#ranged-reads). - `ssecKey` - - Specifies a key to be used for [SSE-C](/r2/examples/ssec). Key must be 32 bytes in length, in the form of a hex-encoded string or an ArrayBuffer. #### Ranged reads @@ -292,29 +259,23 @@ There are 3 variations of arguments that can be used in a range: - A suffix. - `offset` - - The byte to begin returning data from, inclusive. - `length` - - The number of bytes to return. If more bytes are requested than exist in the object, fewer bytes than this number may be returned. - `suffix` - - The number of bytes to return from the end of the file, starting from the last byte. If more bytes are requested than exist in the object, fewer bytes than this number may be returned. ### R2PutOptions - `onlyIf` - - Specifies that the object should only be stored given satisfaction of certain conditions in the `R2Conditional`. Refer to [Conditional operations](#conditional-operations). - `httpMetadata` - - Various HTTP headers associated with the object. Refer to [HTTP Metadata](#http-metadata). - `customMetadata` - - A map of custom, user-defined metadata that will be stored with the object. :::note @@ -324,73 +285,57 @@ Only a single hashing algorithm can be specified at once. ::: - `md5` - - A md5 hash to use to check the received object's integrity. - `sha1` - - A SHA-1 hash to use to check the received object's integrity. - `sha256` - - A SHA-256 hash to use to check the received object's integrity. - `sha384` - - A SHA-384 hash to use to check the received object's integrity. - `sha512` - - A SHA-512 hash to use to check the received object's integrity. - `storageClass` - - Sets the storage class of the object if provided. Otherwise, the object will be stored in the default storage class associated with the bucket. Refer to [Storage Classes](#storage-class). - `ssecKey` - - Specifies a key to be used for [SSE-C](/r2/examples/ssec). Key must be 32 bytes in length, in the form of a hex-encoded string or an ArrayBuffer. ### R2MultipartOptions - `httpMetadata` - - Various HTTP headers associated with the object. Refer to [HTTP Metadata](#http-metadata). - `customMetadata` - - A map of custom, user-defined metadata that will be stored with the object. - `storageClass` - - Sets the storage class of the object if provided. Otherwise, the object will be stored in the default storage class associated with the bucket. Refer to [Storage Classes](#storage-class). - `ssecKey` - - Specifies a key to be used for [SSE-C](/r2/examples/ssec). Key must be 32 bytes in length, in the form of a hex-encoded string or an ArrayBuffer. ### R2ListOptions - `limit` - - The number of results to return. Defaults to `1000`, with a maximum of `1000`. - If `include` is set, you may receive fewer than `limit` results in your response to accommodate metadata. - `prefix` - - The prefix to match keys against. Keys will only be returned if they start with given prefix. - `cursor` - - An opaque token that indicates where to continue listing objects from. A cursor can be retrieved from a previous list operation. - `delimiter` - - The character to use when grouping keys. - `include` - - Can include `httpMetadata` and/or `customMetadata`. If included, items returned by the list will include the specified metadata. - Note that there is a limit on the total amount of data that a single `list` operation can return. If you request data, you may receive fewer than `limit` results in your response to accommodate metadata. @@ -435,19 +380,15 @@ while (truncated) { An object containing an `R2Object` array, returned by `BUCKET_BINDING.list()`. - `objects` - - An array of objects matching the `list` request. - `truncated` boolean - - If true, indicates there are more results to be retrieved for the current `list` request. - `cursor` - - A token that can be passed to future `list` calls to resume listing from that point. Only present if truncated is true. - `delimitedPrefixes` - - If a delimiter has been specified, contains all prefixes between the specified prefix and the next occurrence of the delimiter. - For example, if no prefix is provided and the delimiter is '/', `foo/bar/baz` would return `foo` as a delimited prefix. If `foo/` was passed as a prefix with the same structure and delimiter, `foo/bar` would be returned as a delimited prefix. @@ -459,19 +400,15 @@ You can pass an `R2Conditional` object to `R2GetOptions` and `R2PutOptions`. If If the condition check for `put()` fails, `null` will be returned instead of the `R2Object`. - `etagMatches` - - Performs the operation if the object's etag matches the given string. - `etagDoesNotMatch` - - Performs the operation if the object's etag does not match the given string. - `uploadedBefore` - - Performs the operation if the object was uploaded before the given date. - `uploadedAfter` - - Performs the operation if the object was uploaded after the given date. Alternatively, you can pass a `Headers` object containing conditional headers to `R2GetOptions` and `R2PutOptions`. For information on these conditional headers, refer to [the MDN docs on conditional requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#conditional_headers). All conditional headers aside from `If-Range` are supported. @@ -499,23 +436,18 @@ Generally, these fields match the HTTP metadata passed when the object was creat If a checksum was provided when using the `put()` binding, it will be available on the returned object under the `checksums` property. The MD5 checksum will be included by default for non-multipart objects. - `md5` - - The MD5 checksum of the object. - `sha1` - - The SHA-1 checksum of the object. - `sha256` - - The SHA-256 checksum of the object. - `sha384` - - The SHA-384 checksum of the object. - `sha512` - - The SHA-512 checksum of the object. ### `R2UploadedPart` @@ -523,11 +455,9 @@ If a checksum was provided when using the `put()` binding, it will be available An `R2UploadedPart` object represents a part that has been uploaded. `R2UploadedPart` objects are returned from `uploadPart` operations and must be passed to `completeMultipartUpload` operations. - `partNumber` - - The number of the part. - `etag` - - The `etag` of the part. ### Storage Class diff --git a/src/content/docs/r2/api/workers/workers-api-usage.mdx b/src/content/docs/r2/api/workers/workers-api-usage.mdx index 6cfb3742ecf0dbe..3201040184b441e 100644 --- a/src/content/docs/r2/api/workers/workers-api-usage.mdx +++ b/src/content/docs/r2/api/workers/workers-api-usage.mdx @@ -251,6 +251,7 @@ class Default(WorkerEntrypoint): ```
    + ## 5. Bucket access and privacy diff --git a/src/content/docs/r2/buckets/bucket-locks.mdx b/src/content/docs/r2/buckets/bucket-locks.mdx index 464a1623fef1b18..d7bcec562a81685 100644 --- a/src/content/docs/r2/buckets/bucket-locks.mdx +++ b/src/content/docs/r2/buckets/bucket-locks.mdx @@ -22,6 +22,7 @@ Before getting started, you will need: 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you would like to add bucket lock rule to. 3. Switch to the **Settings** tab, then scroll down to the **Bucket lock rules** card. 4. Select **Add rule** and enter the rule name, prefix, and retention period. @@ -97,6 +98,7 @@ If your bucket is setup with [jurisdictional restrictions](/r2/reference/data-lo 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you would like to add bucket lock rule to. 3. Switch to the **Settings** tab, then scroll down to the **Bucket lock rules** card. @@ -119,6 +121,7 @@ For more information on required parameters and examples of how to get bucket lo 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you would like to add bucket lock rule to. 3. Switch to the **Settings** tab, then scroll down to the **Bucket lock rules** card. 4. Locate the rule you want to remove, select the `...` icon next to it, and then select **Delete**. diff --git a/src/content/docs/r2/buckets/cors.mdx b/src/content/docs/r2/buckets/cors.mdx index 509574538198e4b..e377d4c3587d41b 100644 --- a/src/content/docs/r2/buckets/cors.mdx +++ b/src/content/docs/r2/buckets/cors.mdx @@ -8,7 +8,7 @@ products: - r2 --- -import {DashButton} from "~/components"; +import { DashButton } from "~/components"; [Cross-Origin Resource Sharing (CORS)](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS) is a standardized method that prevents domain X from accessing the resources of domain Y. It does so by using special headers in HTTP responses from domain Y, that allow your browser to verify that domain Y permits domain X to access these resources. @@ -56,13 +56,13 @@ The following example allows browser-based uploads from `https://example.com` wi ```json [ - { - "AllowedOrigins": ["https://example.com"], - "AllowedMethods": ["PUT"], - "AllowedHeaders": ["Content-Type"], - "ExposeHeaders": ["ETag"], - "MaxAgeSeconds": 3600 - } + { + "AllowedOrigins": ["https://example.com"], + "AllowedMethods": ["PUT"], + "AllowedHeaders": ["Content-Type"], + "ExposeHeaders": ["ETag"], + "MaxAgeSeconds": 3600 + } ] ``` @@ -83,6 +83,7 @@ If you set a CORS policy on a bucket that is already serving traffic using a cus 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Locate and select your bucket from the list. 3. Select **Settings**. 4. Under **CORS Policy**, select **Add CORS policy**. @@ -99,14 +100,14 @@ You can configure CORS rules using the [Wrangler CLI](/r2/reference/wrangler-com ```json title="cors.json" { - "rules": [ - { - "allowed": { - "origins": ["https://example.com"], - "methods": ["GET"] - } - } - ] + "rules": [ + { + "allowed": { + "origins": ["https://example.com"], + "methods": ["GET"] + } + } + ] } ``` @@ -126,13 +127,13 @@ npx wrangler r2 bucket cors list The following fields in an R2 CORS policy map to HTTP response headers. These response headers are only returned when the incoming HTTP request is a valid CORS request. -| Field Name | Description | Example | -| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `AllowedOrigins` | Specifies the value for the `Access-Control-Allow-Origin` header R2 sets when requesting objects in a bucket from a browser. | If a website at `www.test.com` needs to access resources (e.g. fonts, scripts) on a [custom domain](/r2/buckets/public-buckets/#custom-domains) of `static.example.com`, you would set `https://www.test.com` as an `AllowedOrigin`. | -| `AllowedMethods` | Specifies the value for the `Access-Control-Allow-Methods` header R2 sets when requesting objects in a bucket from a browser. | `GET`, `POST`, `PUT` | -| `AllowedHeaders` | Specifies the value for the `Access-Control-Allow-Headers` header R2 sets when requesting objects in this bucket from a browser.Cross-origin requests that include custom headers (e.g. `x-user-id`) should specify these headers as `AllowedHeaders`. | `x-requested-by`, `User-Agent` | +| Field Name | Description | Example | +| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `AllowedOrigins` | Specifies the value for the `Access-Control-Allow-Origin` header R2 sets when requesting objects in a bucket from a browser. | If a website at `www.test.com` needs to access resources (e.g. fonts, scripts) on a [custom domain](/r2/buckets/public-buckets/#custom-domains) of `static.example.com`, you would set `https://www.test.com` as an `AllowedOrigin`. | +| `AllowedMethods` | Specifies the value for the `Access-Control-Allow-Methods` header R2 sets when requesting objects in a bucket from a browser. | `GET`, `POST`, `PUT` | +| `AllowedHeaders` | Specifies the value for the `Access-Control-Allow-Headers` header R2 sets when requesting objects in this bucket from a browser.Cross-origin requests that include custom headers (e.g. `x-user-id`) should specify these headers as `AllowedHeaders`. | `x-requested-by`, `User-Agent` | | `ExposeHeaders` | Specifies the headers that can be exposed back, and accessed by, the JavaScript making the cross-origin request. If you need to access headers beyond the [safelisted response headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Access-Control-Expose-Headers#examples), such as `Content-Encoding` or `cf-cache-status`, you must specify it here. | `Content-Encoding`, `cf-cache-status`, `Date` | -| `MaxAgeSeconds` | Specifies the amount of time (in seconds) browsers are allowed to cache CORS preflight responses. Browsers may limit this to 2 hours or less, even if the maximum value (86400) is specified. | `3600` | +| `MaxAgeSeconds` | Specifies the amount of time (in seconds) browsers are allowed to cache CORS preflight responses. Browsers may limit this to 2 hours or less, even if the maximum value (86400) is specified. | `3600` | ## Example diff --git a/src/content/docs/r2/buckets/delete-buckets.mdx b/src/content/docs/r2/buckets/delete-buckets.mdx index cae21c981e67944..71cdbc593f9c6e8 100644 --- a/src/content/docs/r2/buckets/delete-buckets.mdx +++ b/src/content/docs/r2/buckets/delete-buckets.mdx @@ -27,6 +27,7 @@ The dashboard provides an **Empty Bucket** action that handles this for you, reg 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you want to empty. 3. Go to the **Settings** tab. 4. Scroll to the **Empty Bucket** section. @@ -86,6 +87,7 @@ You can delete a bucket in various ways. 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you want to delete. 3. Go to the **Settings** tab. 4. Scroll to the **Delete Bucket** section. If the bucket is not empty, select **Empty Bucket** first to clear all objects. @@ -129,25 +131,25 @@ curl -X DELETE "https://api.cloudflare.com/client/v4/accounts//r2/bu ## Related resources diff --git a/src/content/docs/r2/buckets/event-notifications.mdx b/src/content/docs/r2/buckets/event-notifications.mdx index b0fe30eb775ad6f..e910f9b896e6223 100644 --- a/src/content/docs/r2/buckets/event-notifications.mdx +++ b/src/content/docs/r2/buckets/event-notifications.mdx @@ -26,6 +26,7 @@ Before getting started, you will need: 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select the bucket you'd like to add an event notification rule to. 3. Switch to the **Settings** tab, then scroll down to the **Event notifications** card. 4. Select **Add notification** and choose the queue you'd like to receive notifications and the [type of events](/r2/buckets/event-notifications/#event-types) that will trigger them. @@ -66,10 +67,10 @@ Event notification rules determine the [event types](/r2/buckets/event-notificat ## Event types -| Event type | Description | Trigger actions | -|------------|-------------|----------------| +| Event type | Description | Trigger actions | +| --------------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | `object-create` | Triggered when new objects are created or existing objects are overwritten. |
    • `PutObject`
    • `CopyObject`
    • `CompleteMultipartUpload`
    | -| `object-delete` | Triggered when an object is explicitly removed from the bucket. |
    • `DeleteObject`
    • `LifecycleDeletion`
    | +| `object-delete` | Triggered when an object is explicitly removed from the bucket. |
    • `DeleteObject`
    • `LifecycleDeletion`
    | ## Message format @@ -95,19 +96,19 @@ Queue consumers receive notifications as [Messages](/queues/configuration/javasc ### Properties -| Property | Type | Description | -|----------|------|-------------| -| `account` | String | The Cloudflare account ID that the event is associated with. | -| `action` | String | The type of action that triggered the event notification. Example actions include: `PutObject`, `CopyObject`, `CompleteMultipartUpload`, `DeleteObject`. | -| `bucket` | String | The name of the bucket where the event occurred. | -| `object` | Object | A nested object containing details about the object involved in the event. | -| `object.key` | String | The key (or name) of the object within the bucket. | -| `object.size` | Number | The size of the object in bytes. Note: not present for object-delete events. | -| `object.eTag` | String | The entity tag (eTag) of the object. Note: not present for object-delete events. | -| `eventTime` | String | The time when the action that triggered the event occurred. | -| `copySource` | Object | A nested object containing details about the source of a copied object. Note: only present for events triggered by `CopyObject`. | -| `copySource.bucket` | String | The bucket that contained the source object. | -| `copySource.object` | String | The name of the source object. | +| Property | Type | Description | +| ------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `account` | String | The Cloudflare account ID that the event is associated with. | +| `action` | String | The type of action that triggered the event notification. Example actions include: `PutObject`, `CopyObject`, `CompleteMultipartUpload`, `DeleteObject`. | +| `bucket` | String | The name of the bucket where the event occurred. | +| `object` | Object | A nested object containing details about the object involved in the event. | +| `object.key` | String | The key (or name) of the object within the bucket. | +| `object.size` | Number | The size of the object in bytes. Note: not present for object-delete events. | +| `object.eTag` | String | The entity tag (eTag) of the object. Note: not present for object-delete events. | +| `eventTime` | String | The time when the action that triggered the event occurred. | +| `copySource` | Object | A nested object containing details about the source of a copied object. Note: only present for events triggered by `CopyObject`. | +| `copySource.bucket` | String | The bucket that contained the source object. | +| `copySource.object` | String | The name of the source object. | ## Notes diff --git a/src/content/docs/r2/buckets/index.mdx b/src/content/docs/r2/buckets/index.mdx index 6b32cf898b1518c..56bda3ed5e0d4ce 100644 --- a/src/content/docs/r2/buckets/index.mdx +++ b/src/content/docs/r2/buckets/index.mdx @@ -8,7 +8,7 @@ products: - r2 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; With object storage, all of your objects are stored in buckets. Buckets do not contain folders that group the individual files, but instead, buckets have a flat structure which simplifies the way you access and retrieve the objects in your bucket. diff --git a/src/content/docs/r2/buckets/object-lifecycles.mdx b/src/content/docs/r2/buckets/object-lifecycles.mdx index 8aa7719e17e7b1a..0eaef01b4fefed0 100644 --- a/src/content/docs/r2/buckets/object-lifecycles.mdx +++ b/src/content/docs/r2/buckets/object-lifecycles.mdx @@ -35,6 +35,7 @@ When you create an object lifecycle rule, you can specify which prefix you would 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Locate and select your bucket from the list. 3. From the bucket page, select **Settings**. 4. Under **Object Lifecycle Rules**, select **Add rule**. @@ -186,6 +187,7 @@ console.log( 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Locate and select your bucket from the list. 3. From the bucket page, select **Settings**. 4. Under **Object lifecycle rules**, select the rules you would like to delete. diff --git a/src/content/docs/r2/buckets/storage-classes.mdx b/src/content/docs/r2/buckets/storage-classes.mdx index d26bd2b34d5a359..329e212d619b99e 100644 --- a/src/content/docs/r2/buckets/storage-classes.mdx +++ b/src/content/docs/r2/buckets/storage-classes.mdx @@ -6,22 +6,22 @@ products: - r2 --- -import { Badge, Tabs, TabItem } from "~/components" +import { Badge, Tabs, TabItem } from "~/components"; Storage classes allow you to trade off between the cost of storage and the cost of accessing data. Every object stored in R2 has an associated storage class. All storage classes share the following characteristics: -* Compatible with Workers API, S3 API, and public buckets. -* 99.999999999% (eleven 9s) of annual durability. -* No minimum object size. +- Compatible with Workers API, S3 API, and public buckets. +- 99.999999999% (eleven 9s) of annual durability. +- No minimum object size. ## Available storage classes -| Storage class | Minimum storage duration | Data retrieval fees (processing) | Egress fees (data transfer to Internet) | -|--------------------------------|---------------------------|----------------------------------|------------------------------------------| -| Standard | None | None | None | -| Infrequent Access | 30 days | Yes | None | +| Storage class | Minimum storage duration | Data retrieval fees (processing) | Egress fees (data transfer to Internet) | +| ----------------- | ------------------------ | -------------------------------- | --------------------------------------- | +| Standard | None | None | None | +| Infrequent Access | 30 days | Yes | None | For more information on how storage classes impact pricing, refer to [Pricing](/r2/pricing/). @@ -31,11 +31,11 @@ Standard storage is designed for data that is accessed frequently. This is the d #### Example use cases -* Website and application data -* Media content (e.g., images, video) -* Storing large datasets for analysis and processing -* AI training data -* Other workloads involving frequently accessed data +- Website and application data +- Media content (e.g., images, video) +- Storing large datasets for analysis and processing +- AI training data +- Other workloads involving frequently accessed data ### Infrequent Access storage @@ -47,9 +47,9 @@ For objects stored in Infrequent Access storage, you will be charged for the obj #### Example use cases -* Long-term data archiving (for example, logs and historical records needed for compliance) -* Data backup and disaster recovery -* Long tail user-generated content +- Long-term data archiving (for example, logs and historical records needed for compliance) +- Data backup and disaster recovery +- Long tail user-generated content ## Set default storage class for buckets diff --git a/src/content/docs/r2/data-migration/index.mdx b/src/content/docs/r2/data-migration/index.mdx index 05a1dabde3c991d..1fc637f6979b11a 100644 --- a/src/content/docs/r2/data-migration/index.mdx +++ b/src/content/docs/r2/data-migration/index.mdx @@ -58,4 +58,4 @@ Quickly and easily migrate data from other cloud providers to R2. Explore each o -For information on how to leverage these tools effectively, refer to [Migration Strategies](/r2/data-migration/migration-strategies/) \ No newline at end of file +For information on how to leverage these tools effectively, refer to [Migration Strategies](/r2/data-migration/migration-strategies/) diff --git a/src/content/docs/r2/data-migration/migration-strategies.mdx b/src/content/docs/r2/data-migration/migration-strategies.mdx index 9771c0a5eb95eb3..484528cc3c1eabc 100644 --- a/src/content/docs/r2/data-migration/migration-strategies.mdx +++ b/src/content/docs/r2/data-migration/migration-strategies.mdx @@ -60,4 +60,4 @@ You can create separate jobs with prefixes such as: - `/photos/2024` to migrate all 2024 files - `/photos/202` to migrate all files from 2023 and 2024 -Each prefix runs as an independent migration job, allowing Slurper to transfer data in parallel. This improves total transfer speed and ensures that a failure in one job does not interrupt the others. \ No newline at end of file +Each prefix runs as an independent migration job, allowing Slurper to transfer data in parallel. This improves total transfer speed and ensures that a failure in one job does not interrupt the others. diff --git a/src/content/docs/r2/data-migration/sippy.mdx b/src/content/docs/r2/data-migration/sippy.mdx index 66ef2a76b92a898..5715798fe2b8a77 100644 --- a/src/content/docs/r2/data-migration/sippy.mdx +++ b/src/content/docs/r2/data-migration/sippy.mdx @@ -85,10 +85,10 @@ If your bucket is setup with [jurisdictional restrictions](/r2/reference/data-lo When enabled, Sippy exposes metrics that help you understand the progress of your ongoing migrations. -| Metric | Description | -|--------|-------------| +| Metric | Description | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Requests served by Sippy | The percentage of overall requests served by R2 over a period of time. A higher percentage indicates that fewer requests need to be made to the source bucket. | -| Data migrated by Sippy | The amount of data that has been copied from the source bucket to R2 over a period of time. Reported in bytes. | +| Data migrated by Sippy | The amount of data that has been copied from the source bucket to R2 over a period of time. Reported in bytes. | To view current and historical metrics: @@ -138,12 +138,12 @@ Cloudflare currently supports copying data from the following cloud object stora When Sippy is enabled, it changes the behavior of certain actions on your R2 bucket across [Workers](/r2/api/workers/), [S3 API](/r2/api/s3/), and [public buckets](/r2/buckets/public-buckets/). -| Action | New behavior | -|--------|-------------| -| GetObject | Calls to GetObject will first attempt to retrieve the object from your R2 bucket. If the object is not present, the object will be served from the source storage bucket and simultaneously uploaded to the requested R2 bucket.

    Additional considerations:
    • Modifications to objects in the source bucket will not be reflected in R2 after the initial copy. Once an object is stored in R2, it will not be re-retrieved and updated.
    • Only user-defined metadata that is prefixed by `x-amz-meta-` in the HTTP response will be migrated. Remaining metadata will be omitted.
    • For larger objects (greater than 199 MiB), multiple GET requests may be required to fully copy the object to R2.
    • If there are multiple simultaneous GET requests for an object which has not yet been fully copied to R2, Sippy may fetch the object from the source storage bucket multiple times to serve those requests.
    | -| HeadObject | Behaves similarly to GetObject, but only retrieves object metadata. Will not copy objects to the requested R2 bucket. | -| PutObject | No change to behavior. Calls to PutObject will add objects to the requested R2 bucket. | -| DeleteObject | No change to behavior. Calls to DeleteObject will delete objects in the requested R2 bucket.

    Additional considerations:
    • If deletes to objects in R2 are not also made in the source storage bucket, subsequent GetObject requests will result in objects being retrieved from the source bucket and copied to R2.
    | +| Action | New behavior | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| GetObject | Calls to GetObject will first attempt to retrieve the object from your R2 bucket. If the object is not present, the object will be served from the source storage bucket and simultaneously uploaded to the requested R2 bucket.

    Additional considerations:
    • Modifications to objects in the source bucket will not be reflected in R2 after the initial copy. Once an object is stored in R2, it will not be re-retrieved and updated.
    • Only user-defined metadata that is prefixed by `x-amz-meta-` in the HTTP response will be migrated. Remaining metadata will be omitted.
    • For larger objects (greater than 199 MiB), multiple GET requests may be required to fully copy the object to R2.
    • If there are multiple simultaneous GET requests for an object which has not yet been fully copied to R2, Sippy may fetch the object from the source storage bucket multiple times to serve those requests.
    | +| HeadObject | Behaves similarly to GetObject, but only retrieves object metadata. Will not copy objects to the requested R2 bucket. | +| PutObject | No change to behavior. Calls to PutObject will add objects to the requested R2 bucket. | +| DeleteObject | No change to behavior. Calls to DeleteObject will delete objects in the requested R2 bucket.

    Additional considerations:
    • If deletes to objects in R2 are not also made in the source storage bucket, subsequent GetObject requests will result in objects being retrieved from the source bucket and copied to R2.
    | Actions not listed above have no change in behavior. For more information, refer to [Workers API reference](/r2/api/workers/workers-api-reference/) or [S3 API compatibility](/r2/api/s3/api/). diff --git a/src/content/docs/r2/data-migration/super-slurper.mdx b/src/content/docs/r2/data-migration/super-slurper.mdx index 584c6edca51ca0f..9788052b63d58ac 100644 --- a/src/content/docs/r2/data-migration/super-slurper.mdx +++ b/src/content/docs/r2/data-migration/super-slurper.mdx @@ -32,6 +32,7 @@ For migration use cases that do not meet the above criteria, we recommend using 1. In the Cloudflare dashboard, go to the **R2 data migration** page. + 2. Select **Migrate files**. 3. Select the source cloud storage provider that you will be migrating data from. 4. Enter your source bucket name and associated credentials and select **Next**. @@ -136,7 +137,11 @@ You can now use this JSON key file when enabling Super Slurper. ### ETags - + ### Archive storage classes diff --git a/src/content/docs/r2/examples/authenticate-r2-auth-tokens.mdx b/src/content/docs/r2/examples/authenticate-r2-auth-tokens.mdx index a4c2c23cbae798d..d603be9a7e32e27 100644 --- a/src/content/docs/r2/examples/authenticate-r2-auth-tokens.mdx +++ b/src/content/docs/r2/examples/authenticate-r2-auth-tokens.mdx @@ -7,7 +7,7 @@ products: - r2 --- -import { PackageManagers, Tabs, TabItem } from '~/components'; +import { PackageManagers, Tabs, TabItem } from "~/components"; The following example shows how to authenticate against R2 using the S3 API and an API token. diff --git a/src/content/docs/r2/examples/authenticate-r2-temp-credentials.mdx b/src/content/docs/r2/examples/authenticate-r2-temp-credentials.mdx index 76b0c32d6744f0f..0d2a8e4861600f8 100644 --- a/src/content/docs/r2/examples/authenticate-r2-temp-credentials.mdx +++ b/src/content/docs/r2/examples/authenticate-r2-temp-credentials.mdx @@ -40,14 +40,14 @@ The response wraps the credentials in a `result` object: ```json { - "result": { - "accessKeyId": "", - "secretAccessKey": "", - "sessionToken": "" - }, - "errors": [], - "messages": [], - "success": true + "result": { + "accessKeyId": "", + "secretAccessKey": "", + "sessionToken": "" + }, + "errors": [], + "messages": [], + "success": true } ``` @@ -63,77 +63,77 @@ The following helper signs a JWT with your parent secret access key and derives import { SignJWT } from "jose"; type R2Scope = - | "object-read-only" - | "object-read-write" - | "admin-read-only" - | "admin-read-write"; + | "object-read-only" + | "object-read-write" + | "admin-read-only" + | "admin-read-write"; export interface TempCredentialOptions { - scope: R2Scope; - // Optional: narrow the credential to specific S3 operations. - actions?: string[]; - // Time-to-live in seconds. Defaults to 1 hour. - ttlSeconds?: number; - // Optional: restrict access to specific prefixes or objects. - paths?: { prefixPaths?: string[]; objectPaths?: string[] }; + scope: R2Scope; + // Optional: narrow the credential to specific S3 operations. + actions?: string[]; + // Time-to-live in seconds. Defaults to 1 hour. + ttlSeconds?: number; + // Optional: restrict access to specific prefixes or objects. + paths?: { prefixPaths?: string[]; objectPaths?: string[] }; } export async function createTempCredentials( - endpoint: string, - accountId: string, - parentAccessKeyId: string, - parentSecretAccessKey: string, - bucket: string, - opts: TempCredentialOptions, + endpoint: string, + accountId: string, + parentAccessKeyId: string, + parentSecretAccessKey: string, + bucket: string, + opts: TempCredentialOptions, ): Promise<{ - accessKeyId: string; - secretAccessKey: string; - sessionToken: string; + accessKeyId: string; + secretAccessKey: string; + sessionToken: string; }> { - const ttl = opts.ttlSeconds ?? 3600; - - const claims: Record = { - bucket, - scope: opts.scope, - }; - - if (opts.actions !== undefined && opts.actions.length > 0) { - claims.actions = opts.actions; - } - - if (opts.paths !== undefined) { - claims.paths = { - prefixPaths: opts.paths.prefixPaths ?? [], - objectPaths: opts.paths.objectPaths ?? [], - }; - } - - // Sign the JWT with the parent secret access key. R2 validates this signature. - const jwt = await new SignJWT(claims) - .setProtectedHeader({ alg: "HS256", typ: "JWT" }) - .setSubject(accountId) - .setIssuer(parentAccessKeyId) - .setAudience(new URL(endpoint).host) - .setIssuedAt() - .setExpirationTime(`${ttl}s`) - .sign(new TextEncoder().encode(parentSecretAccessKey)); - - // The temporary secret access key is the SHA-256 hex digest of the signed JWT. - const digest = await crypto.subtle.digest( - "SHA-256", - new TextEncoder().encode(jwt), - ); - const secretAccessKey = Array.from(new Uint8Array(digest)) - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); - - return { - // Reuse the parent access key ID as the temporary access key ID. - accessKeyId: parentAccessKeyId, - secretAccessKey, - // The session token is base64("jwt/" + signed JWT). - sessionToken: btoa(`jwt/${jwt}`), - }; + const ttl = opts.ttlSeconds ?? 3600; + + const claims: Record = { + bucket, + scope: opts.scope, + }; + + if (opts.actions !== undefined && opts.actions.length > 0) { + claims.actions = opts.actions; + } + + if (opts.paths !== undefined) { + claims.paths = { + prefixPaths: opts.paths.prefixPaths ?? [], + objectPaths: opts.paths.objectPaths ?? [], + }; + } + + // Sign the JWT with the parent secret access key. R2 validates this signature. + const jwt = await new SignJWT(claims) + .setProtectedHeader({ alg: "HS256", typ: "JWT" }) + .setSubject(accountId) + .setIssuer(parentAccessKeyId) + .setAudience(new URL(endpoint).host) + .setIssuedAt() + .setExpirationTime(`${ttl}s`) + .sign(new TextEncoder().encode(parentSecretAccessKey)); + + // The temporary secret access key is the SHA-256 hex digest of the signed JWT. + const digest = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(jwt), + ); + const secretAccessKey = Array.from(new Uint8Array(digest)) + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + + return { + // Reuse the parent access key ID as the temporary access key ID. + accessKeyId: parentAccessKeyId, + secretAccessKey, + // The session token is base64("jwt/" + signed JWT). + sessionToken: btoa(`jwt/${jwt}`), + }; } ``` @@ -145,17 +145,17 @@ import { createTempCredentials } from "./temp-credentials"; const R2_URL = `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`; const creds = await createTempCredentials( - R2_URL, - ACCOUNT_ID, - PARENT_ACCESS_KEY_ID, - PARENT_SECRET_ACCESS_KEY, - "my-bucket", - { - scope: "object-read-only", - actions: ["GetObject", "HeadObject"], - ttlSeconds: 900, - paths: { prefixPaths: ["data/"] }, - }, + R2_URL, + ACCOUNT_ID, + PARENT_ACCESS_KEY_ID, + PARENT_SECRET_ACCESS_KEY, + "my-bucket", + { + scope: "object-read-only", + actions: ["GetObject", "HeadObject"], + ttlSeconds: 900, + paths: { prefixPaths: ["data/"] }, + }, ); ``` @@ -169,10 +169,10 @@ import { AwsClient } from "aws4fetch"; const R2_URL = `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`; const client = new AwsClient({ - accessKeyId: ACCESS_KEY_ID, - secretAccessKey: SECRET_ACCESS_KEY, - sessionToken: SESSION_TOKEN, - service: "s3", + accessKeyId: ACCESS_KEY_ID, + secretAccessKey: SECRET_ACCESS_KEY, + sessionToken: SESSION_TOKEN, + service: "s3", }); // Allowed: object under the data/ prefix. diff --git a/src/content/docs/r2/examples/aws/aws-sdk-js-v3.mdx b/src/content/docs/r2/examples/aws/aws-sdk-js-v3.mdx index 8c7b8736c9498a9..1fb6ee02263c766 100644 --- a/src/content/docs/r2/examples/aws/aws-sdk-js-v3.mdx +++ b/src/content/docs/r2/examples/aws/aws-sdk-js-v3.mdx @@ -58,9 +58,7 @@ console.log(await S3.send(new ListBucketsCommand({}))); // } // } -console.log( - await S3.send(new ListObjectsV2Command({ Bucket: "my-bucket" })), -); +console.log(await S3.send(new ListObjectsV2Command({ Bucket: "my-bucket" }))); // { // '$metadata': { // httpStatusCode: 200, @@ -157,13 +155,13 @@ When generating presigned URLs for uploads, you can limit abuse and misuse by: ```json [ - { - "AllowedOrigins": ["https://example.com"], - "AllowedMethods": ["PUT"], - "AllowedHeaders": ["Content-Type"], - "ExposeHeaders": ["ETag"], - "MaxAgeSeconds": 3600 - } + { + "AllowedOrigins": ["https://example.com"], + "AllowedMethods": ["PUT"], + "AllowedHeaders": ["Content-Type"], + "ExposeHeaders": ["ETag"], + "MaxAgeSeconds": 3600 + } ] ``` @@ -182,5 +180,6 @@ const putUrl = await getSignedUrl( ``` When a client uses this presigned URL, they must: + - Make the request from an allowed origin (enforced by CORS) - Include the `Content-Type: image/png` header (enforced by the signature) diff --git a/src/content/docs/r2/examples/aws/aws-sdk-js.mdx b/src/content/docs/r2/examples/aws/aws-sdk-js.mdx index 3143d3c15d33437..a7845d865d25f16 100644 --- a/src/content/docs/r2/examples/aws/aws-sdk-js.mdx +++ b/src/content/docs/r2/examples/aws/aws-sdk-js.mdx @@ -74,11 +74,11 @@ You can also generate presigned links that can be used to share public read or w ```ts // Use the expires property to determine how long the presigned link is valid. console.log( -await s3.getSignedUrlPromise("getObject", { - Bucket: "my-bucket", - Key: "dog.png", - Expires: 3600, -}), + await s3.getSignedUrlPromise("getObject", { + Bucket: "my-bucket", + Key: "dog.png", + Expires: 3600, + }), ); // You can also create links for operations such as putObject to allow temporary write access to a specific key. // Specify ContentType to restrict uploads to a specific file type. @@ -115,13 +115,13 @@ When generating presigned URLs for uploads, you can limit abuse and misuse by: ```json [ - { - "AllowedOrigins": ["https://example.com"], - "AllowedMethods": ["PUT"], - "AllowedHeaders": ["Content-Type"], - "ExposeHeaders": ["ETag"], - "MaxAgeSeconds": 3600 - } + { + "AllowedOrigins": ["https://example.com"], + "AllowedMethods": ["PUT"], + "AllowedHeaders": ["Content-Type"], + "ExposeHeaders": ["ETag"], + "MaxAgeSeconds": 3600 + } ] ``` @@ -137,5 +137,6 @@ const putUrl = await s3.getSignedUrlPromise("putObject", { ``` When a client uses this presigned URL, they must: + - Make the request from an allowed origin (enforced by CORS) - Include the `Content-Type: image/png` header (enforced by the signature) diff --git a/src/content/docs/r2/examples/aws/aws-sdk-kotlin.mdx b/src/content/docs/r2/examples/aws/aws-sdk-kotlin.mdx index e19b20b7d19fdd1..ef0c34ebe76c4fc 100644 --- a/src/content/docs/r2/examples/aws/aws-sdk-kotlin.mdx +++ b/src/content/docs/r2/examples/aws/aws-sdk-kotlin.mdx @@ -104,4 +104,3 @@ To download a file using the GET URL: ```bash curl -X GET "https://" -o downloaded-file.txt ``` - diff --git a/src/content/docs/r2/examples/aws/aws4fetch.mdx b/src/content/docs/r2/examples/aws/aws4fetch.mdx index 6330b4a288944d3..51411a247aef736 100644 --- a/src/content/docs/r2/examples/aws/aws4fetch.mdx +++ b/src/content/docs/r2/examples/aws/aws4fetch.mdx @@ -144,13 +144,13 @@ When generating presigned URLs for uploads, you can limit abuse and misuse by: ```json [ - { - "AllowedOrigins": ["https://example.com"], - "AllowedMethods": ["PUT"], - "AllowedHeaders": ["Content-Type"], - "ExposeHeaders": ["ETag"], - "MaxAgeSeconds": 3600 - } + { + "AllowedOrigins": ["https://example.com"], + "AllowedMethods": ["PUT"], + "AllowedHeaders": ["Content-Type"], + "ExposeHeaders": ["ETag"], + "MaxAgeSeconds": 3600 + } ] ``` @@ -172,5 +172,6 @@ const putUrl = signedRequest.url.toString(); ``` When a client uses this presigned URL, they must: + - Make the request from an allowed origin (enforced by CORS) - Include the `Content-Type: image/png` header (enforced by the signature) diff --git a/src/content/docs/r2/examples/aws/boto3.mdx b/src/content/docs/r2/examples/aws/boto3.mdx index fe1fe466ad3d55c..9dce860b7a623d6 100644 --- a/src/content/docs/r2/examples/aws/boto3.mdx +++ b/src/content/docs/r2/examples/aws/boto3.mdx @@ -118,13 +118,13 @@ When generating presigned URLs for uploads, you can limit abuse and misuse by: ```json [ - { - "AllowedOrigins": ["https://example.com"], - "AllowedMethods": ["PUT"], - "AllowedHeaders": ["Content-Type"], - "ExposeHeaders": ["ETag"], - "MaxAgeSeconds": 3600 - } + { + "AllowedOrigins": ["https://example.com"], + "AllowedMethods": ["PUT"], + "AllowedHeaders": ["Content-Type"], + "ExposeHeaders": ["ETag"], + "MaxAgeSeconds": 3600 + } ] ``` @@ -145,5 +145,6 @@ put_url = s3.generate_presigned_url( ``` When a client uses this presigned URL, they must: + - Make the request from an allowed origin (enforced by CORS) - Include the `Content-Type: image/png` header (enforced by the signature) diff --git a/src/content/docs/r2/examples/aws/custom-header.mdx b/src/content/docs/r2/examples/aws/custom-header.mdx index 59695cb8019c958..31c3e784bed5934 100644 --- a/src/content/docs/r2/examples/aws/custom-header.mdx +++ b/src/content/docs/r2/examples/aws/custom-header.mdx @@ -45,35 +45,32 @@ print(response) `aws-sdk-js-v3` allows the customization of request behavior through the use of its [middleware stack](https://aws.amazon.com/blogs/developer/middleware-stack-modular-aws-sdk-js/). This example adds a middleware to the client which adds a header to every `PutObject` request being made. ```ts -import { - PutObjectCommand, - S3Client, -} from "@aws-sdk/client-s3"; +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; const client = new S3Client({ - region: "auto", // Required by SDK but not used by R2 - endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`, - // Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens) - credentials: { - accessKeyId: ACCESS_KEY_ID, - secretAccessKey: SECRET_ACCESS_KEY, - }, + region: "auto", // Required by SDK but not used by R2 + endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`, + // Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens) + credentials: { + accessKeyId: ACCESS_KEY_ID, + secretAccessKey: SECRET_ACCESS_KEY, + }, }); client.middlewareStack.add( - (next, context) => async (args) => { - const r = args.request as RequestInit - r.headers["cf-create-bucket-if-missing"] = "true"; + (next, context) => async (args) => { + const r = args.request as RequestInit; + r.headers["cf-create-bucket-if-missing"] = "true"; - return await next(args) - }, - { step: 'build', name: 'customHeaders' }, -) + return await next(args); + }, + { step: "build", name: "customHeaders" }, +); const command = new PutObjectCommand({ - Bucket: "my_bucket", - Key: "my_key", - Body: "my_data" + Bucket: "my_bucket", + Key: "my_key", + Body: "my_data", }); const response = await client.send(command); @@ -127,44 +124,40 @@ print(response) Here we again configure the header we would like to set by creating a middleware, but this time we add the middleware to the request itself instead of to the whole client. ```ts -import { - PutObjectCommand, - S3Client, -} from "@aws-sdk/client-s3"; +import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3"; const client = new S3Client({ - region: "auto", // Required by SDK but not used by R2 - // Provide your Cloudflare account ID - endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`, - // Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens) - credentials: { - accessKeyId: ACCESS_KEY_ID, - secretAccessKey: SECRET_ACCESS_KEY, - }, + region: "auto", // Required by SDK but not used by R2 + // Provide your Cloudflare account ID + endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`, + // Retrieve your S3 API credentials for your R2 bucket via API tokens (see: https://developers.cloudflare.com/r2/api/tokens) + credentials: { + accessKeyId: ACCESS_KEY_ID, + secretAccessKey: SECRET_ACCESS_KEY, + }, }); const command = new PutObjectCommand({ - Bucket: "my_bucket", - Key: "my_key", - Body: "my_data" + Bucket: "my_bucket", + Key: "my_key", + Body: "my_data", }); -const headers = { 'If-Match': '"29d911f495d1ba7cb3a4d7d15e63236a"' } +const headers = { "If-Match": '"29d911f495d1ba7cb3a4d7d15e63236a"' }; command.middlewareStack.add( - (next) => - (args) => { - const r = args.request as RequestInit - - Object.entries(headers).forEach( - ([k, v]: [key: string, value: string]): void => { - r.headers[k] = v - }, - ) - - return next(args) - }, - { step: 'build', name: 'customHeaders' }, -) + (next) => (args) => { + const r = args.request as RequestInit; + + Object.entries(headers).forEach( + ([k, v]: [key: string, value: string]): void => { + r.headers[k] = v; + }, + ); + + return next(args); + }, + { step: "build", name: "customHeaders" }, +); const response = await client.send(command); console.log(response); diff --git a/src/content/docs/r2/examples/cache-api.mdx b/src/content/docs/r2/examples/cache-api.mdx index 8b5d8ebd9354ccc..c5b5a3f0b9d2437 100644 --- a/src/content/docs/r2/examples/cache-api.mdx +++ b/src/content/docs/r2/examples/cache-api.mdx @@ -11,67 +11,64 @@ Use the [Cache API](/workers/runtime-apis/cache/) to store R2 objects in Cloudfl :::note - You will need to [connect a custom domain](/workers/configuration/routing/custom-domains/) or [route](/workers/configuration/routing/routes/) to your Worker in order to use the Cache API. Cache API operations in the Cloudflare Workers dashboard editor, Playground previews, and any `*.workers.dev` deployments will have no impact. - ::: ```js - export default { - async fetch(request, env, context) { - try { - const url = new URL(request.url); - - // Construct the cache key from the cache URL - const cacheKey = new Request(url.toString(), request); - const cache = caches.default; - - // Check whether the value is already available in the cache - // if not, you will need to fetch it from R2, and store it in the cache - // for future access - let response = await cache.match(cacheKey); - - if (response) { - console.log(`Cache hit for: ${request.url}.`); - return response; - } - - console.log( - `Response for request url: ${request.url} not present in cache. Fetching and caching request.` - ); - - // If not in cache, get it from R2 - const objectKey = url.pathname.slice(1); - const object = await env.MY_BUCKET.get(objectKey); - if (object === null) { - return new Response('Object Not Found', { status: 404 }); - } - - // Set the appropriate object headers - const headers = new Headers(); - object.writeHttpMetadata(headers); - headers.set('etag', object.httpEtag); - - // Cache API respects Cache-Control headers. Setting s-max-age to 10 - // will limit the response to be in cache for 10 seconds max - // Any changes made to the response here will be reflected in the cached value - headers.append('Cache-Control', 's-maxage=10'); - - response = new Response(object.body, { - headers, - }); - - // Store the fetched response as cacheKey - // Use waitUntil so you can return the response without blocking on - // writing to cache - context.waitUntil(cache.put(cacheKey, response.clone())); - - return response; - } catch (e) { - return new Response('Error thrown ' + e.message); - } - }, + async fetch(request, env, context) { + try { + const url = new URL(request.url); + + // Construct the cache key from the cache URL + const cacheKey = new Request(url.toString(), request); + const cache = caches.default; + + // Check whether the value is already available in the cache + // if not, you will need to fetch it from R2, and store it in the cache + // for future access + let response = await cache.match(cacheKey); + + if (response) { + console.log(`Cache hit for: ${request.url}.`); + return response; + } + + console.log( + `Response for request url: ${request.url} not present in cache. Fetching and caching request.`, + ); + + // If not in cache, get it from R2 + const objectKey = url.pathname.slice(1); + const object = await env.MY_BUCKET.get(objectKey); + if (object === null) { + return new Response("Object Not Found", { status: 404 }); + } + + // Set the appropriate object headers + const headers = new Headers(); + object.writeHttpMetadata(headers); + headers.set("etag", object.httpEtag); + + // Cache API respects Cache-Control headers. Setting s-max-age to 10 + // will limit the response to be in cache for 10 seconds max + // Any changes made to the response here will be reflected in the cached value + headers.append("Cache-Control", "s-maxage=10"); + + response = new Response(object.body, { + headers, + }); + + // Store the fetched response as cacheKey + // Use waitUntil so you can return the response without blocking on + // writing to cache + context.waitUntil(cache.put(cacheKey, response.clone())); + + return response; + } catch (e) { + return new Response("Error thrown " + e.message); + } + }, }; ``` diff --git a/src/content/docs/r2/examples/terraform.mdx b/src/content/docs/r2/examples/terraform.mdx index 70ba59913732088..6298b67ad2b5e29 100644 --- a/src/content/docs/r2/examples/terraform.mdx +++ b/src/content/docs/r2/examples/terraform.mdx @@ -7,18 +7,17 @@ products: - r2 --- -import { Render } from "~/components" +import { Render } from "~/components"; -
    + +
    This example shows how to configure R2 with Terraform using the [Cloudflare provider](https://github.com/cloudflare/terraform-provider-cloudflare). :::note[Note for using AWS provider] - When using the Cloudflare Terraform provider, you can only manage buckets. To configure items such as CORS and object lifecycles, you will need to use the [AWS Provider](/r2/examples/terraform-aws/). - ::: With [`terraform`](https://developer.hashicorp.com/terraform/downloads) installed, create `main.tf` and copy the content below replacing with your API Token. diff --git a/src/content/docs/r2/get-started/cli.mdx b/src/content/docs/r2/get-started/cli.mdx index 96eb679c9c1e3f1..9d545d0ef4b0755 100644 --- a/src/content/docs/r2/get-started/cli.mdx +++ b/src/content/docs/r2/get-started/cli.mdx @@ -8,7 +8,14 @@ products: - r2 --- -import { PackageManagers, LinkCard, Render, Tabs, TabItem, Steps } from "~/components"; +import { + PackageManagers, + LinkCard, + Render, + Tabs, + TabItem, + Steps, +} from "~/components"; Manage R2 buckets and objects directly from your terminal. Use CLI tools to automate tasks and manage objects. diff --git a/src/content/docs/r2/get-started/index.mdx b/src/content/docs/r2/get-started/index.mdx index f23578ee0cbb2f0..dd498e4f6f5b795 100644 --- a/src/content/docs/r2/get-started/index.mdx +++ b/src/content/docs/r2/get-started/index.mdx @@ -16,6 +16,7 @@ Cloudflare R2 Storage allows developers to store large amounts of unstructured d ## Before you begin You need a Cloudflare account with an R2 subscription. If you do not have one: + 1. Go to the [Cloudflare Dashboard](https://dash.cloudflare.com/). 2. Select **Storage & databases > R2 > Overview** 3. Complete the checkout flow to add an R2 subscription to your account. diff --git a/src/content/docs/r2/get-started/s3.mdx b/src/content/docs/r2/get-started/s3.mdx index d8f07cb88333887..30f8f11008b2c09 100644 --- a/src/content/docs/r2/get-started/s3.mdx +++ b/src/content/docs/r2/get-started/s3.mdx @@ -8,7 +8,14 @@ products: - r2 --- -import { LinkCard, PackageManagers, Render, Tabs, TabItem, Steps } from "~/components"; +import { + LinkCard, + PackageManagers, + Render, + Tabs, + TabItem, + Steps, +} from "~/components"; R2 provides support for a [S3-compatible API](/r2/api/s3/api/), which means you can use any S3 SDK, library, or tool to interact with your buckets. If you have existing code that works with S3, you can use it with R2 by changing the endpoint URL. diff --git a/src/content/docs/r2/get-started/workers-api.mdx b/src/content/docs/r2/get-started/workers-api.mdx index 2fca2b0febc4696..408785ea7255ff2 100644 --- a/src/content/docs/r2/get-started/workers-api.mdx +++ b/src/content/docs/r2/get-started/workers-api.mdx @@ -15,7 +15,7 @@ import { Render, Tabs, TabItem, - Steps + Steps, } from "~/components"; [Workers](/workers/) let you run code at the edge. When you bind an R2 bucket to a Worker, you can read and write objects directly using the [Workers API](/r2/api/workers/workers-api-usage/). diff --git a/src/content/docs/r2/objects/delete-objects.mdx b/src/content/docs/r2/objects/delete-objects.mdx index a890b14c861b46d..30dedcd5ba096ac 100644 --- a/src/content/docs/r2/objects/delete-objects.mdx +++ b/src/content/docs/r2/objects/delete-objects.mdx @@ -17,6 +17,7 @@ You can delete objects from R2 using the dashboard, Workers API, S3 API, or comm 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select your bucket. 3. (Optional) Select the **View prefixes as directories** checkbox to view prefixes grouped as [folders](/r2/objects/#prefixes-and-folders). 4. Select the objects or folders you want to delete. You can select a mix of both in the same operation. @@ -110,19 +111,19 @@ wrangler r2 object delete test-bucket/image.png ## Related resources diff --git a/src/content/docs/r2/objects/download-objects.mdx b/src/content/docs/r2/objects/download-objects.mdx index d060979a0b675d4..78ebe64fe9940ee 100644 --- a/src/content/docs/r2/objects/download-objects.mdx +++ b/src/content/docs/r2/objects/download-objects.mdx @@ -17,6 +17,7 @@ You can download objects from R2 using the dashboard, Workers API, S3 API, or co 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select your bucket. 3. Locate the object you want to download. 4. Select **...** for the object and click **Download**. @@ -108,4 +109,4 @@ Use [Wrangler](/workers/wrangler/install-and-update/) to download objects. Run t wrangler r2 object get test-bucket/image.png ``` -The file will be downloaded into the current working directory. You can also use the `--file` flag to set a new name for the object as it is downloaded, and the `--pipe` flag to pipe the download to standard output (stdout). \ No newline at end of file +The file will be downloaded into the current working directory. You can also use the `--file` flag to set a new name for the object as it is downloaded, and the `--pipe` flag to pipe the download to standard output (stdout). diff --git a/src/content/docs/r2/objects/index.mdx b/src/content/docs/r2/objects/index.mdx index 7cee8cf9e982a0c..147e55a78a576d7 100644 --- a/src/content/docs/r2/objects/index.mdx +++ b/src/content/docs/r2/objects/index.mdx @@ -8,7 +8,7 @@ products: - r2 --- -import { DirectoryListing, Render } from "~/components" +import { DirectoryListing, Render } from "~/components"; Objects are individual files or data that you store in an R2 bucket. Each object is identified by its key, a string like `images/photo.png`. @@ -22,4 +22,4 @@ The R2 dashboard groups objects that share a common prefix into folders when the - \ No newline at end of file + diff --git a/src/content/docs/r2/platform/audit-logs.mdx b/src/content/docs/r2/platform/audit-logs.mdx index 56b604e8c1363a0..ca1e6d74b1b1059 100644 --- a/src/content/docs/r2/platform/audit-logs.mdx +++ b/src/content/docs/r2/platform/audit-logs.mdx @@ -22,18 +22,18 @@ For more information on how to access and use audit logs, refer to [Review audit The following configuration actions are logged: -| Operation | Description | -|-----------|-------------| -| CreateBucket | Creation of a new bucket. | -| DeleteBucket | Deletion of an existing bucket. | -| AddCustomDomain | Addition of a custom domain to a bucket. | -| RemoveCustomDomain | Removal of a custom domain from a bucket. | -| ChangeBucketVisibility | Change to the managed public access (`r2.dev`) settings of a bucket. | -| PutBucketStorageClass | Change to the default storage class of a bucket. | -| PutBucketLifecycleConfiguration | Change to the object lifecycle configuration of a bucket. | -| DeleteBucketLifecycleConfiguration | Deletion of the object lifecycle configuration for a bucket. | -| PutBucketCors | Change to the CORS configuration for a bucket. | -| DeleteBucketCors | Deletion of the CORS configuration for a bucket. | +| Operation | Description | +| ---------------------------------- | -------------------------------------------------------------------- | +| CreateBucket | Creation of a new bucket. | +| DeleteBucket | Deletion of an existing bucket. | +| AddCustomDomain | Addition of a custom domain to a bucket. | +| RemoveCustomDomain | Removal of a custom domain from a bucket. | +| ChangeBucketVisibility | Change to the managed public access (`r2.dev`) settings of a bucket. | +| PutBucketStorageClass | Change to the default storage class of a bucket. | +| PutBucketLifecycleConfiguration | Change to the object lifecycle configuration of a bucket. | +| DeleteBucketLifecycleConfiguration | Deletion of the object lifecycle configuration for a bucket. | +| PutBucketCors | Change to the CORS configuration for a bucket. | +| DeleteBucketCors | Deletion of the CORS configuration for a bucket. | :::note Logs for data access operations, such as `GetObject` and `PutObject`, are not included in audit logs. To log HTTP requests made to public R2 buckets, use the [HTTP requests](/logs/logpush/logpush-job/datasets/zone/http_requests/) Logpush dataset. @@ -45,23 +45,22 @@ Below is an example of an audit log entry showing the creation of a new bucket: ```json { - "action": { "info": "CreateBucket", "result": true, "type": "create" }, - "actor": { - "email": "", - "id": "3f7b730e625b975bc1231234cfbec091", - "ip": "fe32:43ed:12b5:526::1d2:13", - "type": "user" - }, - "id": "5eaeb6be-1234-406a-87ab-1971adc1234c", - "interface": "API", - "metadata": { "zone_name": "r2.cloudflarestorage.com" }, - "newValue": "", - "newValueJson": {}, - "oldValue": "", - "oldValueJson": {}, - "owner": { "id": "1234d848c0b9e484dfc37ec392b5fa8a" }, - "resource": { "id": "my-bucket", "type": "r2.bucket" }, - "when": "2024-07-15T16:32:52.412Z" + "action": { "info": "CreateBucket", "result": true, "type": "create" }, + "actor": { + "email": "", + "id": "3f7b730e625b975bc1231234cfbec091", + "ip": "fe32:43ed:12b5:526::1d2:13", + "type": "user" + }, + "id": "5eaeb6be-1234-406a-87ab-1971adc1234c", + "interface": "API", + "metadata": { "zone_name": "r2.cloudflarestorage.com" }, + "newValue": "", + "newValueJson": {}, + "oldValue": "", + "oldValueJson": {}, + "owner": { "id": "1234d848c0b9e484dfc37ec392b5fa8a" }, + "resource": { "id": "my-bucket", "type": "r2.bucket" }, + "when": "2024-07-15T16:32:52.412Z" } - ``` diff --git a/src/content/docs/r2/platform/metrics-analytics.mdx b/src/content/docs/r2/platform/metrics-analytics.mdx index 91288c6dcf21e47..e28dc53a56af003 100644 --- a/src/content/docs/r2/platform/metrics-analytics.mdx +++ b/src/content/docs/r2/platform/metrics-analytics.mdx @@ -6,7 +6,7 @@ products: - r2 --- -import { DashButton } from "~/components" +import { DashButton } from "~/components"; R2 exposes analytics that allow you to inspect the requests and storage of the buckets in your account. @@ -16,8 +16,8 @@ The metrics displayed for a bucket in the [Cloudflare dashboard](https://dash.cl R2 currently has two datasets: -|
    Dataset
    |
    GraphQL Dataset Name
    | Description | -| --------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------------- | +|
    Dataset
    |
    GraphQL Dataset Name
    | Description | +| --------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------------------------------- | | Operations | `r2OperationsAdaptiveGroups` | This dataset consists of the operations taken on a bucket within an account. | | Storage | `r2StorageAdaptiveGroups` | This dataset consists of the storage of a bucket within an account. | @@ -58,6 +58,7 @@ Per-bucket analytics for R2 are available in the Cloudflare dashboard. To view c 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select your bucket. 3. Select the **Metrics** tab. diff --git a/src/content/docs/r2/platform/troubleshooting.mdx b/src/content/docs/r2/platform/troubleshooting.mdx index e42a38c8bff9748..726ef97a385e92b 100644 --- a/src/content/docs/r2/platform/troubleshooting.mdx +++ b/src/content/docs/r2/platform/troubleshooting.mdx @@ -21,6 +21,7 @@ If you do have a CORS issue, refer to [Resolving CORS issues](#if-it-is-actually 1. Open developer tools on your browser. 2. Go to the **Network** tab and find the failing request. You may need to reload the page, as requests are only logged after developer tools have been opened. 3. Check the response headers for the following two headers: + - `cf-cache-status` - `cf-mitigated` @@ -64,7 +65,7 @@ If your users are directly uploading to the bucket (for example, using the S3 or ### Bucket sharding -For higher capacity at the cost of added complexity, consider bucket sharding. This approach distributes reads and writes across multiple buckets, reducing the load on any single bucket. While sharding cannot prevent a single hot object from exhausting capacity, it can mitigate the overall impact and improve system resilience. +For higher capacity at the cost of added complexity, consider bucket sharding. This approach distributes reads and writes across multiple buckets, reducing the load on any single bucket. While sharding cannot prevent a single hot object from exhausting capacity, it can mitigate the overall impact and improve system resilience. ## Objects named `This object is unnamed` @@ -84,4 +85,4 @@ For example, uploading an object named `example/` into an R2 bucket will be disp - example - `This object is unnamed` - \ No newline at end of file + diff --git a/src/content/docs/r2/pricing.mdx b/src/content/docs/r2/pricing.mdx index 7c3d3a55663af73..6d420e4740d8b39 100644 --- a/src/content/docs/r2/pricing.mdx +++ b/src/content/docs/r2/pricing.mdx @@ -27,13 +27,13 @@ To learn about potential cost savings from using R2, refer to the [R2 pricing ca ## R2 pricing -| | Standard storage | Infrequent Access storage | -| ---------------------------------- | ------------------------ | ------------------------------------------------------- | -| Storage | $0.015 / GB-month | $0.01 / GB-month | -| Class A Operations | $4.50 / million requests | $9.00 / million requests | -| Class B Operations | $0.36 / million requests | $0.90 / million requests | -| Data Retrieval (processing) | None | $0.01 / GB | -| Egress (data transfer to Internet) | Free [^1] | Free [^1] | +| | Standard storage | Infrequent Access storage | +| ---------------------------------- | ------------------------ | ------------------------- | +| Storage | $0.015 / GB-month | $0.01 / GB-month | +| Class A Operations | $4.50 / million requests | $9.00 / million requests | +| Class B Operations | $0.36 / million requests | $0.90 / million requests | +| Data Retrieval (processing) | None | $0.01 / GB | +| Egress (data transfer to Internet) | Free [^1] | Free [^1] | :::caution[Billable unit rounding] Cloudflare rounds up your usage to the next billing unit. @@ -43,7 +43,7 @@ For example: - If you have performed one million and one operations, you will be billed for two million operations. - If you have used 1.1 GB-month, you will be billed for 2 GB-month. - If you have retrieved data (for infrequent access storage) for 1.1 GB, you will be billed for 2 GB. -::: + ::: ### Free tier @@ -92,10 +92,10 @@ Data retrieval fees apply when you access or retrieve data from the Infrequent A For objects stored in Infrequent Access storage, you will be charged for the object for the minimum storage duration even if the object was deleted, moved, or replaced before the specified duration. -| Storage class | Minimum storage duration | -| ------------------------------------------------------ | ------------------------ | -| Standard storage | None | -| Infrequent Access storage | 30 days | +| Storage class | Minimum storage duration | +| ------------------------- | ------------------------ | +| Standard storage | None | +| Infrequent Access storage | 30 days | ## R2 Data Catalog pricing @@ -127,25 +127,25 @@ To learn about potential cost savings from using R2, refer to the [R2 pricing ca If a user writes 1,000 objects in R2 **Standard storage** for 1 month with an average size of 1 GB and reads each object 1,000 times during the month, the estimated cost for the month would be: -| | Usage | Free Tier | Billable Quantity | Price | -| --------------------------- | ------------------------------------------------------------- | ------------ | ----------------- | ----------- | -| Storage | (1,000 objects) \* (1 GB per object) = 1,000 GB-months | 10 GB-months | 990 GB-months | $14.85 | -| Class A Operations | (1,000 objects) \* (1 write per object) = 1,000 writes | 1 million | 0 | $0.00 | -| Class B Operations | (1,000 objects) \* (1,000 reads per object) = 1 million reads | 10 million | 0 | $0.00 | -| Data retrieval (processing) | (1,000 objects) \* (1 GB per object) = 1,000 GB | NA | None | $0.00 | -| **TOTAL** | | | | **$14.85** | +| | Usage | Free Tier | Billable Quantity | Price | +| --------------------------- | ------------------------------------------------------------- | ------------ | ----------------- | ---------- | +| Storage | (1,000 objects) \* (1 GB per object) = 1,000 GB-months | 10 GB-months | 990 GB-months | $14.85 | +| Class A Operations | (1,000 objects) \* (1 write per object) = 1,000 writes | 1 million | 0 | $0.00 | +| Class B Operations | (1,000 objects) \* (1,000 reads per object) = 1 million reads | 10 million | 0 | $0.00 | +| Data retrieval (processing) | (1,000 objects) \* (1 GB per object) = 1,000 GB | NA | None | $0.00 | +| **TOTAL** | | | | **$14.85** | ### Infrequent access example If a user writes 1,000 objects in R2 Infrequent Access storage with an average size of 1 GB, stores them for 5 days, and then deletes them (delete operations are free), and during those 5 days each object is read 1,000 times, the estimated cost for the month would be: -| | Usage | Free Tier | Billable Quantity | Price | -| --------------------------- | ------------------------------------------------------------- | ------------ | ----------------- | ----------- | -| Storage | (1,000 objects) \* (1 GB per object) = 1,000 GB-months | NA | 1,000 GB-months | $10.00 | -| Class A Operations | (1,000 objects) \* (1 write per object) = 1,000 writes | NA | 1,000 | $9.00 | -| Class B Operations | (1,000 objects) \* (1,000 reads per object) = 1 million reads | NA | 1 million | $0.90 | -| Data retrieval (processing) | (1,000 objects) \* (1 GB per object) = 1,000 GB | NA | 1,000 GB | $10.00 | -| **TOTAL** | | | | **$29.90** | +| | Usage | Free Tier | Billable Quantity | Price | +| --------------------------- | ------------------------------------------------------------- | --------- | ----------------- | ---------- | +| Storage | (1,000 objects) \* (1 GB per object) = 1,000 GB-months | NA | 1,000 GB-months | $10.00 | +| Class A Operations | (1,000 objects) \* (1 write per object) = 1,000 writes | NA | 1,000 | $9.00 | +| Class B Operations | (1,000 objects) \* (1,000 reads per object) = 1 million reads | NA | 1 million | $0.90 | +| Data retrieval (processing) | (1,000 objects) \* (1 GB per object) = 1,000 GB | NA | 1,000 GB | $10.00 | +| **TOTAL** | | | | **$29.90** | Note that the minimal storage duration for infrequent access storage is 30 days, which means the billable quantity is 1,000 GB-months, rather than 167 GB-months. diff --git a/src/content/docs/r2/r2-sql.mdx b/src/content/docs/r2/r2-sql.mdx index 690e0b283548807..727a004053c732a 100644 --- a/src/content/docs/r2/r2-sql.mdx +++ b/src/content/docs/r2/r2-sql.mdx @@ -10,4 +10,4 @@ description: >- R2 SQL is a serverless SQL interface for Cloudflare R2, enabling querying and analyzing data. products: - r2 ---- \ No newline at end of file +--- diff --git a/src/content/docs/r2/reference/data-location.mdx b/src/content/docs/r2/reference/data-location.mdx index 64607b3dbd621ac..a55ac28a3ebbc87 100644 --- a/src/content/docs/r2/reference/data-location.mdx +++ b/src/content/docs/r2/reference/data-location.mdx @@ -29,6 +29,7 @@ You can choose to automatically create your bucket in the closest available regi 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select **Create bucket**. 3. Enter a name for the bucket. 4. Under **Location**, leave _None_ selected for automatic selection or choose a region from the list. @@ -79,6 +80,7 @@ Use Jurisdictional Restrictions when you need to ensure data is stored and proce 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select **Create bucket**. 3. Enter a name for the bucket. 4. Under **Location**, select **Specify jurisdiction** and choose a jurisdiction from the list. diff --git a/src/content/docs/r2/reference/data-security.mdx b/src/content/docs/r2/reference/data-security.mdx index 15c1260d9648ae3..96c66a58a3eb8df 100644 --- a/src/content/docs/r2/reference/data-security.mdx +++ b/src/content/docs/r2/reference/data-security.mdx @@ -26,10 +26,8 @@ Access over plaintext HTTP (without TLS/SSL) can be disabled by connecting a [cu :::note - R2 custom domains use Cloudflare for SaaS certificates and cannot be customized. Even if you have [Advanced Certificate Manager](/ssl/edge-certificates/advanced-certificate-manager/), the advanced certificate will not be used due to [certificate prioritization](/ssl/reference/certificate-and-hostname-priority/). - ::: ## Compliance diff --git a/src/content/docs/r2/reference/durability.mdx b/src/content/docs/r2/reference/durability.mdx index 177e6ed4bd08d13..5d15f76865bd036 100644 --- a/src/content/docs/r2/reference/durability.mdx +++ b/src/content/docs/r2/reference/durability.mdx @@ -8,7 +8,7 @@ products: - r2 --- -R2 is designed to provide 99.999999999% (eleven 9s) of annual durability. This means that if you store 10,000,000 objects on R2, you can expect to lose an object once every 10,000 years on average. +R2 is designed to provide 99.999999999% (eleven 9s) of annual durability. This means that if you store 10,000,000 objects on R2, you can expect to lose an object once every 10,000 years on average. ## How R2 achieves eleven-nines durability @@ -22,7 +22,7 @@ R2's durability is built on multiple layers of redundancy and data protection: ### Considerations -* Durability is not a guarantee of data availability. It is a measure of the likelihood of data loss. -* R2 provides an availability [SLA of 99.9%](https://www.cloudflare.com/r2-service-level-agreement/) -* Durability does not prevent intentional or accidental deletion of data. Use [bucket locks](/r2/buckets/bucket-locks/) and/or bucket-scoped [API tokens](/r2/api/tokens/) to limit access to data. -* Durability is also distinct from [consistency](/r2/reference/consistency/), which describes how reads and writes are reflected in the system's state (e.g. eventual consistency vs. strong consistency). +- Durability is not a guarantee of data availability. It is a measure of the likelihood of data loss. +- R2 provides an availability [SLA of 99.9%](https://www.cloudflare.com/r2-service-level-agreement/) +- Durability does not prevent intentional or accidental deletion of data. Use [bucket locks](/r2/buckets/bucket-locks/) and/or bucket-scoped [API tokens](/r2/api/tokens/) to limit access to data. +- Durability is also distinct from [consistency](/r2/reference/consistency/), which describes how reads and writes are reflected in the system's state (e.g. eventual consistency vs. strong consistency). diff --git a/src/content/docs/r2/reference/unicode-interoperability.mdx b/src/content/docs/r2/reference/unicode-interoperability.mdx index 1543c6629fa5744..77796a1f1294a90 100644 --- a/src/content/docs/r2/reference/unicode-interoperability.mdx +++ b/src/content/docs/r2/reference/unicode-interoperability.mdx @@ -16,8 +16,8 @@ R2 preserves the encoding for display though. When you list the objects, you wil There are still some platform-specific differences to consider: -* Windows and macOS filenames are case-insensitive while R2 and Linux are not. -* Windows console support for Unicode can be error-prone. Make sure to run `chcp 65001` before using command-line tools or use Cygwin if your object names appear to be incorrect. -* Linux allows distinct files that are unicode-equivalent because filenames are byte streams. Unicode-equivalent filenames on Linux will point to the same R2 object. +- Windows and macOS filenames are case-insensitive while R2 and Linux are not. +- Windows console support for Unicode can be error-prone. Make sure to run `chcp 65001` before using command-line tools or use Cygwin if your object names appear to be incorrect. +- Linux allows distinct files that are unicode-equivalent because filenames are byte streams. Unicode-equivalent filenames on Linux will point to the same R2 object. If it is important for you to be able to bypass the unicode equivalence and use byte-oriented key names, contact your Cloudflare account team. diff --git a/src/content/docs/r2/tutorials/cloudflare-access.mdx b/src/content/docs/r2/tutorials/cloudflare-access.mdx index 0c041c84fc44833..1025cfea8f7c9bb 100644 --- a/src/content/docs/r2/tutorials/cloudflare-access.mdx +++ b/src/content/docs/r2/tutorials/cloudflare-access.mdx @@ -49,7 +49,7 @@ To create an Access application for your R2 bucket: Ensure that your policies only allow the users within your organization that need access to this R2 bucket. ::: -6. Follow the remaining [self-hosted application creation steps](/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/) to publish the application. +5. Follow the remaining [self-hosted application creation steps](/cloudflare-one/access-controls/applications/http-apps/self-hosted-public-app/) to publish the application. ## 3. Connect a custom domain diff --git a/src/content/docs/r2/tutorials/mastodon.mdx b/src/content/docs/r2/tutorials/mastodon.mdx index 3a1bb7b0eae2ed8..dd7a6b339aace64 100644 --- a/src/content/docs/r2/tutorials/mastodon.mdx +++ b/src/content/docs/r2/tutorials/mastodon.mdx @@ -23,10 +23,8 @@ Different from the default hostname of your Mastodon instance, object storage fo :::note - If you move from R2 to another S3 compatible service later on, you can continue using the same hostname determined in this step. We do not recommend changing the hostname after the instance has been running to avoid breaking historical file references. In such a scenario, [Bulk Redirects](/rules/url-forwarding/bulk-redirects/) can be used to instruct requests reaching the previous hostname to refer to the new hostname. - ::: ### 2. Create and set up an R2 bucket @@ -34,6 +32,7 @@ If you move from R2 to another S3 compatible service later on, you can continue 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. Select **Create bucket**. 3. Enter your bucket name and then select **Create bucket**. This name is internal when setting up your Mastodon instance and is not publicly accessible. 4. Once the bucket is created, navigate to the **Settings** tab of this bucket and copy the value of **S3 API**. diff --git a/src/content/docs/r2/tutorials/postman.mdx b/src/content/docs/r2/tutorials/postman.mdx index 2c8fbc313867b2b..4bec7f80443cc16 100644 --- a/src/content/docs/r2/tutorials/postman.mdx +++ b/src/content/docs/r2/tutorials/postman.mdx @@ -11,7 +11,7 @@ products: import { DashButton } from "~/components"; -Postman is an API platform that makes interacting with APIs easier. This guide will explain how to use Postman to make authenticated R2 requests to create a bucket, upload a new object, and then retrieve the object. The R2 [Postman collection](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share\&creator=20913290) includes a complete list of operations supported by the platform. +Postman is an API platform that makes interacting with APIs easier. This guide will explain how to use Postman to make authenticated R2 requests to create a bucket, upload a new object, and then retrieve the object. The R2 [Postman collection](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share&creator=20913290) includes a complete list of operations supported by the platform. ## 1. Purchase R2 @@ -19,11 +19,11 @@ This guide assumes that you have made a Cloudflare account and purchased R2. ## 2. Explore R2 in Postman -Explore R2's publicly available [Postman collection](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share\&creator=20913290). The collection is organized into a `Buckets` folder for bucket-level operations and an `Objects` folder for object-level operations. Operations in the `Objects > Upload` folder allow for adding new objects to R2. +Explore R2's publicly available [Postman collection](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share&creator=20913290). The collection is organized into a `Buckets` folder for bucket-level operations and an `Objects` folder for object-level operations. Operations in the `Objects > Upload` folder allow for adding new objects to R2. ## 3. Configure your R2 credentials -In the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share\&creator=20913290\&ctx=documentation), select the **Cloudflare R2** collection and navigate to the **Variables** tab. In **Variables**, you can set variables within the R2 collection. They will be used to authenticate and interact with the R2 platform. Remember to always select **Save** after updating a variable. +In the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share&creator=20913290&ctx=documentation), select the **Cloudflare R2** collection and navigate to the **Variables** tab. In **Variables**, you can set variables within the R2 collection. They will be used to authenticate and interact with the R2 platform. Remember to always select **Save** after updating a variable. To execute basic operations, you must set the `account-id`, `r2-access-key-id`, and `r2-secret-access-key` variables in the Postman dashboard > **Variables**. @@ -32,8 +32,9 @@ To do this: 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. In **R2**, under **Manage R2 API Tokens** on the right side of the dashboard, copy your Cloudflare account ID. -3. Go back to the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share\&creator=20913290\&ctx=documentation). +3. Go back to the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share&creator=20913290&ctx=documentation). 4. Set the **CURRENT VALUE** of `account-id` to your Cloudflare account ID and select **Save**. Next, generate an R2 API token: @@ -41,6 +42,7 @@ Next, generate an R2 API token: 1. In the Cloudflare dashboard, go to the **R2 object storage** page. + 2. On the right hand sidebar, select **Manage R2 API Tokens**. 3. Select **Create API token**. 4. Name your token **Postman** by selecting the pencil icon next to the API name and grant it the **Edit** permission. @@ -49,7 +51,7 @@ Guard this token and the **Access Key ID** and **Secret Access Key** closely. Yo After you have created your API token in the Cloudflare dashboard: -1. Go to the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share\&creator=20913290\&ctx=documentation) > **Variables**. +1. Go to the [Postman dashboard](https://www.postman.com/cloudflare-r2/workspace/cloudflare-r2/collection/20913290-14ddd8d8-3212-490d-8647-88c9dc557659?action=share&creator=20913290&ctx=documentation) > **Variables**. 2. Copy `Access Key ID` value from the Cloudflare dashboard and paste it into Postman’s `r2-access-key-id` variable value and select **Save**. 3. Copy the `Secret Access Key` value from the Cloudflare dashboard and paste it into Postman’s `r2-secret-access-key` variable value and select **Save**. diff --git a/src/content/docs/r2/video-tutorials.mdx b/src/content/docs/r2/video-tutorials.mdx index 67585e1469ac91a..f92a3914495462c 100644 --- a/src/content/docs/r2/video-tutorials.mdx +++ b/src/content/docs/r2/video-tutorials.mdx @@ -12,9 +12,9 @@ products: import { CardGrid, LinkCard } from "~/components"; - + diff --git a/src/content/docs/radar/concepts/index.mdx b/src/content/docs/radar/concepts/index.mdx index e8c3c876f284ebb..e439f4733f5f884 100644 --- a/src/content/docs/radar/concepts/index.mdx +++ b/src/content/docs/radar/concepts/index.mdx @@ -8,6 +8,6 @@ products: - radar --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/radar/concepts/normalization.mdx b/src/content/docs/radar/concepts/normalization.mdx index dbf55dfbe42a9f7..3a2a09e5b4ebd78 100644 --- a/src/content/docs/radar/concepts/normalization.mdx +++ b/src/content/docs/radar/concepts/normalization.mdx @@ -19,7 +19,7 @@ Refer to the `result.meta.normalization` property in the response to check which | `PERCENTAGE` | Values represent percentages. | | `PERCENTAGE_CHANGE` | Values represent a [percentage change](https://en.wikipedia.org/wiki/Relative_change_and_difference#Percentage_change) from a baseline period. | | `OVERLAPPED_PERCENTAGE` | Values represent percentages that exceed 100% due to overlap. | -| `MIN_MAX` | Values have been normalized using [min-max](https://en.wikipedia.org/wiki/Feature_scaling#Rescaling_\(min-max_normalization\)). | +| `MIN_MAX` | Values have been normalized using [min-max](). | | `MIN0_MAX` | Values have been normalized using min-max, but setting the minimum value to `0`. Equivalent to a proportion of the maximum value in the entire response, scaled between 0 and 1. | | `RAW_VALUES` | Values are raw and have not been changed. | diff --git a/src/content/docs/radar/get-started/configure-alerts.mdx b/src/content/docs/radar/get-started/configure-alerts.mdx index 6e7641992176d98..64ad4396db7c424 100644 --- a/src/content/docs/radar/get-started/configure-alerts.mdx +++ b/src/content/docs/radar/get-started/configure-alerts.mdx @@ -8,7 +8,7 @@ products: - radar --- -import { AvailableNotifications, Render } from "~/components" +import { AvailableNotifications, Render } from "~/components"; You can configure alerts to receive notifications when Radar detects changes impacting countries, regions, or autonomous systems. diff --git a/src/content/docs/radar/get-started/embed.mdx b/src/content/docs/radar/get-started/embed.mdx index 249eccb402d8918..bf036cde8f960ad 100644 --- a/src/content/docs/radar/get-started/embed.mdx +++ b/src/content/docs/radar/get-started/embed.mdx @@ -25,8 +25,8 @@ Charts supporting this feature will have a share icon next to its description. 1. Select the Share icon next to the description of the chart you wish to share. 2. Select between Fixed Time and Real Time. - * Real Time uses a “sliding window” based on the selected date range, and will display data points looking back over that duration from the current date/time. - * Fixed Time will always display a chart with only the currently visible data points. + - Real Time uses a “sliding window” based on the selected date range, and will display data points looking back over that duration from the current date/time. + - Fixed Time will always display a chart with only the currently visible data points. 3. Select Copy Code and paste the code into your web page. **Note**: Your current selections, such as date range, location, autonomous system (ASN), and visible series, will be reflected in the shared chart. diff --git a/src/content/docs/radar/get-started/index.mdx b/src/content/docs/radar/get-started/index.mdx index 1ce36868a710f4f..809a736dd35ebc9 100644 --- a/src/content/docs/radar/get-started/index.mdx +++ b/src/content/docs/radar/get-started/index.mdx @@ -8,6 +8,6 @@ products: - radar --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/radar/get-started/making-comparisons.mdx b/src/content/docs/radar/get-started/making-comparisons.mdx index 9bffd560f9e690b..984fcafb3a77490 100644 --- a/src/content/docs/radar/get-started/making-comparisons.mdx +++ b/src/content/docs/radar/get-started/making-comparisons.mdx @@ -35,26 +35,26 @@ The response (shortened below for brevity) uses the provided `name` property to ```json { - "success": true, - "errors": [], - "result": { - "us_data": { - "timestamps": [ "2022-10-26T17:00:00Z", "2022-11-02T15:00:00Z" ], - "values": [ "0.871752", "1" ] - }, - "pt_data": { - "timestamps": [ "2022-10-26T17:00:00Z", "2022-11-02T15:00:00Z" ], - "values": [ "0.020457", "0.012313" ] - }, - "meta": { - "dateRange": { - "startTime": "2022-10-26T17:00:00Z", - "endTime": "2022-11-02T17:00:00Z" - }, - "aggInterval": "ONE_HOUR", + "success": true, + "errors": [], + "result": { + "us_data": { + "timestamps": ["2022-10-26T17:00:00Z", "2022-11-02T15:00:00Z"], + "values": ["0.871752", "1"] + }, + "pt_data": { + "timestamps": ["2022-10-26T17:00:00Z", "2022-11-02T15:00:00Z"], + "values": ["0.020457", "0.012313"] + }, + "meta": { + "dateRange": { + "startTime": "2022-10-26T17:00:00Z", + "endTime": "2022-11-02T17:00:00Z" + }, + "aggInterval": "ONE_HOUR" // ... - } - } + } + } } ``` @@ -81,14 +81,24 @@ Now, in the `result` property, you should get something like this: ```json { - "this_week": { - "timestamps": [ "2022-10-27T13:00:00Z", "2022-10-27T14:00:00Z", "...", "2022-11-03T12:00:00Z" ], - "values": [ "0.794321", "1", "...", "0.718433"] - }, - "previous_week": { - "timestamps": [ "2022-10-20T13:00:00Z", "2022-10-20T14:00:00Z", "...", "2022-10-27T12:00:00Z" ], - "values": [ "0.774392", "0.835071", "...", "0.720181"] - } + "this_week": { + "timestamps": [ + "2022-10-27T13:00:00Z", + "2022-10-27T14:00:00Z", + "...", + "2022-11-03T12:00:00Z" + ], + "values": ["0.794321", "1", "...", "0.718433"] + }, + "previous_week": { + "timestamps": [ + "2022-10-20T13:00:00Z", + "2022-10-20T14:00:00Z", + "...", + "2022-10-27T12:00:00Z" + ], + "values": ["0.774392", "0.835071", "...", "0.720181"] + } } ``` @@ -118,11 +128,21 @@ The `result` property should return a response like this: ```json { "tonga": { - "timestamps": ["2022-10-15T02:00:00Z", "2022-10-15T03:00:00Z", "2022-10-15T04:00:00Z", "2022-10-15T05:00:00Z"], + "timestamps": [ + "2022-10-15T02:00:00Z", + "2022-10-15T03:00:00Z", + "2022-10-15T04:00:00Z", + "2022-10-15T05:00:00Z" + ], "values": ["1.0", "0.832473", "0.820083", "0.79408"] }, "tonga_outage": { - "timestamps": ["2022-01-15T02:00:00Z", "2022-01-15T03:00:00Z", "2022-01-15T04:00:00Z", "2022-01-15T05:00:00Z"], + "timestamps": [ + "2022-01-15T02:00:00Z", + "2022-01-15T03:00:00Z", + "2022-01-15T04:00:00Z", + "2022-01-15T05:00:00Z" + ], "values": ["0.354105", "0.357287", "0.181811", "0.044198"] } } diff --git a/src/content/docs/radar/investigate/application-layer-attacks.mdx b/src/content/docs/radar/investigate/application-layer-attacks.mdx index bef19dc325ce63d..62b6591ff068b45 100644 --- a/src/content/docs/radar/investigate/application-layer-attacks.mdx +++ b/src/content/docs/radar/investigate/application-layer-attacks.mdx @@ -40,27 +40,27 @@ From the abbreviated response below, we can conclude that distributed denial-of- ```json { - "success": true, - "errors": [], - "result": { - "attacks": { - "timestamps": ["2022-11-05T11:00:00Z", ".."], - "ddos": ["53.824302", "54.305823", ".."], - "waf": ["39.760956", "39.31228", ".."], - "ip_reputation": ["5.623487", "5.485468", ".."], - "access_rules": ["0.648368", "0.676456", ".."], - "bot_management": ["0.139733", "0.217155", ".."], - "api_shield": ["0.003154", "0.002819", ".."], - "data_loss_prevention": ["0.0", "0.0", ".."] - }, - "meta": { - "dateRange": { - "startTime": "2022-11-05T11:00:00Z", - "endTime": "2022-11-06T11:00:00Z" - }, + "success": true, + "errors": [], + "result": { + "attacks": { + "timestamps": ["2022-11-05T11:00:00Z", ".."], + "ddos": ["53.824302", "54.305823", ".."], + "waf": ["39.760956", "39.31228", ".."], + "ip_reputation": ["5.623487", "5.485468", ".."], + "access_rules": ["0.648368", "0.676456", ".."], + "bot_management": ["0.139733", "0.217155", ".."], + "api_shield": ["0.003154", "0.002819", ".."], + "data_loss_prevention": ["0.0", "0.0", ".."] + }, + "meta": { + "dateRange": { + "startTime": "2022-11-05T11:00:00Z", + "endTime": "2022-11-06T11:00:00Z" + } // ... - } - } + } + } } ``` @@ -79,9 +79,9 @@ curl "https://api.cloudflare.com/client/v4/radar/attacks/layer7/summary?location ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "attacks_gb": { "waf": "75.012138", "ddos": "18.539149", @@ -90,10 +90,10 @@ curl "https://api.cloudflare.com/client/v4/radar/attacks/layer7/summary?location "bot_management": "0.131998", "api_shield": "0.003178", "data_loss_prevention": "0.0" - }, + }, "meta": { // ... - } + } } } ``` @@ -115,10 +115,10 @@ curl "https://api.cloudflare.com/client/v4/radar/attacks/layer7/top/locations/ta ```json { - "success": true, - "errors": [], - "result": { - "attacks_target": [ + "success": true, + "errors": [], + "result": { + "attacks_target": [ { "targetCountryName": "Belgium", "targetCountryAlpha2": "BE", @@ -150,14 +150,14 @@ curl "https://api.cloudflare.com/client/v4/radar/attacks/layer7/top/locations/ta "rank": 5 } ], - "meta": { - "dateRange": { - "startTime": "2022-11-05T12:00:00Z", - "endTime": "2022-11-06T12:00:00Z" - }, + "meta": { + "dateRange": { + "startTime": "2022-11-05T12:00:00Z", + "endTime": "2022-11-06T12:00:00Z" + } // ... - } - } + } + } } ``` @@ -178,9 +178,9 @@ A typical response will be similar to the following: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "top_0": [ { "originCountryName": "United States", @@ -223,10 +223,10 @@ A typical response will be similar to the following: "rank": 5 } ], - "meta": { + "meta": { // ... - } - } + } + } } ``` diff --git a/src/content/docs/radar/investigate/dns.mdx b/src/content/docs/radar/investigate/dns.mdx index 59db1f37eb09dbc..837edba24ef5632 100644 --- a/src/content/docs/radar/investigate/dns.mdx +++ b/src/content/docs/radar/investigate/dns.mdx @@ -27,9 +27,9 @@ The response shows that most queries come from the United States and Brazil: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "top_0": [ { "clientCountryAlpha2": "US", @@ -43,9 +43,9 @@ The response shows that most queries come from the United States and Brazil: } ], "meta": { - // ... - } - } + // ... + } + } } ``` @@ -60,9 +60,9 @@ Returns the following response: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "top_0": [ { "clientCountryAlpha2": "RU", @@ -76,9 +76,9 @@ Returns the following response: } ], "meta": { - // ... - } - } + // ... + } + } } ``` @@ -86,7 +86,7 @@ As expected, most queries come from Russia. :::note -Note that these examples return the total number of DNS queries from a location to a hostname, *out* of the total DNS queries to a given hostname. In this sense, it is expected that locations with higher population numbers — like the United States — frequently appear in the top spots, even if the actual percentage is low. +Note that these examples return the total number of DNS queries from a location to a hostname, _out_ of the total DNS queries to a given hostname. In this sense, it is expected that locations with higher population numbers — like the United States — frequently appear in the top spots, even if the actual percentage is low. ::: You can also provide multiple hostnames. Refer to [Get DNS top locations](/api/resources/radar/subresources/dns/subresources/top/methods/locations/) for more information. This is useful when the application you want to explore uses several hostnames to serve its content (like a hostname for the main website, another hostname dedicated to its API, etc.). diff --git a/src/content/docs/radar/investigate/domain-ranking-datasets.mdx b/src/content/docs/radar/investigate/domain-ranking-datasets.mdx index 9c025150aa46f67..26d9f65fea55f7d 100644 --- a/src/content/docs/radar/investigate/domain-ranking-datasets.mdx +++ b/src/content/docs/radar/investigate/domain-ranking-datasets.mdx @@ -8,10 +8,10 @@ products: - radar --- -Cloudflare regularly generates a domain ranking based on DNS queries to [1.1.1.1](/1.1.1.1/), Cloudflare's public DNS resolver. Refer to the [blog post](https://blog.cloudflare.com/radar-domain-rankings/) for a deep dive. In short, Cloudflare generates two types of listings: +Cloudflare regularly generates a domain ranking based on DNS queries to [1.1.1.1](/1.1.1.1/), Cloudflare's public DNS resolver. Refer to the [blog post](https://blog.cloudflare.com/radar-domain-rankings/) for a deep dive. In short, Cloudflare generates two types of listings: -* An ordered list of the top 100 most popular domains globally and per country. This includes the last 24 hours and is updated daily. -* An unordered global most popular domains dataset, divided into buckets of the following number of domains: 200, 500, 1,000, 2,000, 5,000, 10,000, 20,000, 50,000, 100,000, 200,000, 500,000, 1,000,000. It includes the last seven days and is updated weekly. +- An ordered list of the top 100 most popular domains globally and per country. This includes the last 24 hours and is updated daily. +- An unordered global most popular domains dataset, divided into buckets of the following number of domains: 200, 500, 1,000, 2,000, 5,000, 10,000, 20,000, 50,000, 100,000, 200,000, 500,000, 1,000,000. It includes the last seven days and is updated weekly. ## List of endpoints @@ -26,10 +26,10 @@ curl "https://api.cloudflare.com/client/v4/radar/ranking/top?name=top&limit=5" \ ```json { - "success": true, - "errors": [], - "result": { - "top_0": [ + "success": true, + "errors": [], + "result": { + "top_0": [ { "rank": 1, "domain": "google.com" @@ -50,8 +50,8 @@ curl "https://api.cloudflare.com/client/v4/radar/ranking/top?name=top&limit=5" \ "rank": 5, "domain": "apple.com" } - ] - }, + ] + }, "meta": { // ... } @@ -75,24 +75,21 @@ curl "https://api.cloudflare.com/client/v4/radar/datasets?limit=10&datasetType=R ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "datasets": [ { "id": 213, "title": "Top 1000000 ranking domains", "description": "Unordered top 1000000 from 2023-01-02 to 2023-01-09", "type": "RANKING_BUCKET", - "tags": [ - "GLOBAL", - "top_1000000" - ], + "tags": ["GLOBAL", "top_1000000"], "meta": { "top": 1000000 }, "alias": "ranking_top_1000000" - }, + } // ... ] } @@ -114,9 +111,9 @@ curl "https://api.cloudflare.com/client/v4/radar/datasets/download" \ ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "dataset": { "url": "https://example.com/download" } diff --git a/src/content/docs/radar/investigate/http-requests.mdx b/src/content/docs/radar/investigate/http-requests.mdx index 8fcdba8ef35ed24..f850973ae9af912 100644 --- a/src/content/docs/radar/investigate/http-requests.mdx +++ b/src/content/docs/radar/investigate/http-requests.mdx @@ -19,9 +19,9 @@ Most of the charts in the [Adoption and Usage](https://radar.cloudflare.com/adop These endpoints can be broadly split into: -* `timeseries`: A time series of a group of metrics. For example, when looking at IP version, displays an IPv4 time series and an IPv6 time series. -* `summary`: Displays a summary of a group of metrics over the specified time range. For example, IPv4 traffic percentage out of the total HTTP traffic during that time period. -* `top`: A list of the top locations or [Autonomous Systems](https://www.cloudflare.com/en-gb/learning/network-layer/what-is-an-autonomous-system/) (ASes) ranked by adoption of a specific metric. For example, top locations by mobile device traffic (like which locations have a higher percentage of mobile traffic out of the total traffic for that location). +- `timeseries`: A time series of a group of metrics. For example, when looking at IP version, displays an IPv4 time series and an IPv6 time series. +- `summary`: Displays a summary of a group of metrics over the specified time range. For example, IPv4 traffic percentage out of the total HTTP traffic during that time period. +- `top`: A list of the top locations or [Autonomous Systems](https://www.cloudflare.com/en-gb/learning/network-layer/what-is-an-autonomous-system/) (ASes) ranked by adoption of a specific metric. For example, top locations by mobile device traffic (like which locations have a higher percentage of mobile traffic out of the total traffic for that location). ## List of endpoints @@ -40,29 +40,29 @@ Here is the abbreviated response: ```json { - "success": true, - "errors": [], - "result": { - "human": { - "timestamps": ["2022-11-03T13:00:00Z", "2022-11-03T14:00:00Z", ".."], - "mobile": ["52.5532", "52.146628", ".."], - "desktop": ["47.394791", "47.800731", ".."], - "other": ["0.052009", "0.052642", ".."] - }, - "bot": { - "timestamps": ["2022-11-03T13:00:00Z", "2022-11-03T14:00:00Z", ".."], - "desktop": ["83.833892", "84.017711", ".."], - "mobile": ["16.156748", "15.969936", ".."], - "other": ["0.00936", "0.012353", ".."] - }, - "meta": { - "dateRange": { - "startTime": "2022-11-03T13:00:00Z", - "endTime": "2022-11-04T13:00:00Z" - }, - "normalization": "PERCENTAGE" - } - } + "success": true, + "errors": [], + "result": { + "human": { + "timestamps": ["2022-11-03T13:00:00Z", "2022-11-03T14:00:00Z", ".."], + "mobile": ["52.5532", "52.146628", ".."], + "desktop": ["47.394791", "47.800731", ".."], + "other": ["0.052009", "0.052642", ".."] + }, + "bot": { + "timestamps": ["2022-11-03T13:00:00Z", "2022-11-03T14:00:00Z", ".."], + "desktop": ["83.833892", "84.017711", ".."], + "mobile": ["16.156748", "15.969936", ".."], + "other": ["0.00936", "0.012353", ".."] + }, + "meta": { + "dateRange": { + "startTime": "2022-11-03T13:00:00Z", + "endTime": "2022-11-04T13:00:00Z" + }, + "normalization": "PERCENTAGE" + } + } } ``` @@ -90,9 +90,9 @@ Here is the abbreviated response: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "human": { "mobile": "54.967243", "desktop": "44.974006", @@ -103,7 +103,7 @@ Here is the abbreviated response: "mobile": "16.707455", "other": "0.017093" } - } + } } ``` @@ -122,9 +122,9 @@ This returns the following: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "human": { "IPv4": "76.213647", "IPv6": "23.786353" @@ -133,7 +133,7 @@ This returns the following: "IPv4": "91.492032", "IPv6": "8.507968" } - } + } } ``` @@ -156,9 +156,9 @@ curl "https://api.cloudflare.com/client/v4/radar/http/top/locations/ip_version/I ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "ipv6": [ { "clientCountryAlpha2": "IN", @@ -186,7 +186,7 @@ curl "https://api.cloudflare.com/client/v4/radar/http/top/locations/ip_version/I "value": "39.1514" } ] - } + } } ``` diff --git a/src/content/docs/radar/investigate/index.mdx b/src/content/docs/radar/investigate/index.mdx index c377e8628eba30c..5c1a9cd5a898a6c 100644 --- a/src/content/docs/radar/investigate/index.mdx +++ b/src/content/docs/radar/investigate/index.mdx @@ -8,7 +8,7 @@ products: - radar --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Explore the different types of data available in Cloudflare Radar, from NetFlows (what feeds the [Internet Traffic Change](https://radar.cloudflare.com/) chart in Radar) to HTTP requests and DNS queries. diff --git a/src/content/docs/radar/investigate/netflows.mdx b/src/content/docs/radar/investigate/netflows.mdx index 1d7c85ee2290995..3971efa9cabc498 100644 --- a/src/content/docs/radar/investigate/netflows.mdx +++ b/src/content/docs/radar/investigate/netflows.mdx @@ -36,9 +36,9 @@ This is the abbreviated response: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "AS3243_all": { "timestamps": ["2022-11-08T14:00:00Z", "2022-11-08T15:00:00Z", "..."], "values": ["0.565885", "0.586434", "..."] @@ -64,9 +64,9 @@ The abbreviated response is: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "AS174_all": { "timestamps": ["2022-11-08T14:00:00Z", "2022-11-08T15:00:00Z", "..."], "values": ["0.917348", "1.0", "..."] @@ -92,9 +92,9 @@ which would lead to a response like this: ```json { - "success": true, - "errors": [], - "result": { + "success": true, + "errors": [], + "result": { "AS174_all": { "timestamps": ["2022-11-08T14:00:00Z", "2022-11-08T15:00:00Z", "..."], "values": ["0.917348", "1.0", "..."] diff --git a/src/content/docs/radar/investigate/network-layer-attacks.mdx b/src/content/docs/radar/investigate/network-layer-attacks.mdx index edd685c50ae34f8..56394fa33270271 100644 --- a/src/content/docs/radar/investigate/network-layer-attacks.mdx +++ b/src/content/docs/radar/investigate/network-layer-attacks.mdx @@ -35,36 +35,36 @@ If we inspect the abbreviated response below, we can conclude that globally, at ```json { - "success": true, - "errors": [], - "result": { - "global": { - "timestamps": ["2022-11-06T13:00:00Z", "2022-11-06T14:00:00Z", "..."], - "udp": ["50.784034", "51.055221", "..."], - "tcp": ["49.213944", "48.943769", "..."], - "icmp": ["0.002023", "0.001009", "..."], - "gre": ["0.0", "0.0", "0.0", "..."] - }, - "singapore": { - "timestamps": ["2022-11-06T13:00:00Z", "2022-11-06T14:00:00Z", "..."], - "tcp": ["79.605287", "83.943885", "..."], - "udp": ["20.394594", "16.056115", "..."], - "icmp": ["0.000119", "0.0", "..."], - "gre": ["0.0", "0.0", "..."] - }, - "meta": { - "dateRange": { - "startTime": "2022-11-06T13:00:00Z", - "endTime": "2022-11-07T13:00:00Z" - }, - "normalization": "PERCENTAGE", + "success": true, + "errors": [], + "result": { + "global": { + "timestamps": ["2022-11-06T13:00:00Z", "2022-11-06T14:00:00Z", "..."], + "udp": ["50.784034", "51.055221", "..."], + "tcp": ["49.213944", "48.943769", "..."], + "icmp": ["0.002023", "0.001009", "..."], + "gre": ["0.0", "0.0", "0.0", "..."] + }, + "singapore": { + "timestamps": ["2022-11-06T13:00:00Z", "2022-11-06T14:00:00Z", "..."], + "tcp": ["79.605287", "83.943885", "..."], + "udp": ["20.394594", "16.056115", "..."], + "icmp": ["0.000119", "0.0", "..."], + "gre": ["0.0", "0.0", "..."] + }, + "meta": { + "dateRange": { + "startTime": "2022-11-06T13:00:00Z", + "endTime": "2022-11-07T13:00:00Z" + }, + "normalization": "PERCENTAGE" // ... - } - } + } + } } ``` -We can also conclude that the distribution of network layer attacks coming from Singapore — or, more accurately, reaching Cloudflare's data center located in Singapore — differs quite a bit from the worldwide distribution. At those times, the distribution of network layer attacks clearly favors [TCP](https://www.cloudflare.com/learning/ddos/glossary/tcp-ip/). +We can also conclude that the distribution of network layer attacks coming from Singapore — or, more accurately, reaching Cloudflare's data center located in Singapore — differs quite a bit from the worldwide distribution. At those times, the distribution of network layer attacks clearly favors [TCP](https://www.cloudflare.com/learning/ddos/glossary/tcp-ip/). For more information refer to the [API reference](/api/resources/radar/subresources/attacks/subresources/layer3/methods/timeseries/) for this endpoint. @@ -81,24 +81,24 @@ curl "https://api.cloudflare.com/client/v4/radar/attacks/layer3/summary?location ```json { - "success": true, - "errors": [], - "result": { - "attacks_ru": { - "udp": "86.682356", - "tcp": "11.928664", - "gre": "1.381015", - "icmp": "0.007965" - }, - "meta": { - "dateRange": { - "startTime": "2022-11-06T15:00:00Z", - "endTime": "2022-11-07T15:00:00Z" - }, - "normalization": "PERCENTAGE", + "success": true, + "errors": [], + "result": { + "attacks_ru": { + "udp": "86.682356", + "tcp": "11.928664", + "gre": "1.381015", + "icmp": "0.007965" + }, + "meta": { + "dateRange": { + "startTime": "2022-11-06T15:00:00Z", + "endTime": "2022-11-07T15:00:00Z" + }, + "normalization": "PERCENTAGE" // ... - } - } + } + } } ``` diff --git a/src/content/docs/radar/investigate/outages.mdx b/src/content/docs/radar/investigate/outages.mdx index 6d6f0d662f2a97e..4627c42298d06d6 100644 --- a/src/content/docs/radar/investigate/outages.mdx +++ b/src/content/docs/radar/investigate/outages.mdx @@ -12,13 +12,13 @@ products: Refer the [blog post](https://blog.cloudflare.com/announcing-cloudflare-radar-outage-center/) for more information but, in short, Radar provides the following information: -* **Location**: Where was the outage? -* **ASN**: What autonomous system experienced a disruption in connectivity? -* **Type**: How broad was the outage? Did connectivity fail nationwide, or at a sub-national level? Did just a single network provider have an outage? -* **Scope**: If it was a sub-national/regional outage, what state or city was impacted? If it was a network-level outage, which one was it? -* **Cause**: Insight into the likely cause of the outage, based on publicly available information. Historically, some outages have been government directed shutdowns, while others are caused by severe weather or natural disasters, or by infrastructure issues such as cable cuts, power outages, or filtering/blocking. -* **Start time**: When did the outage start? -* **End time**: When did the outage end? +- **Location**: Where was the outage? +- **ASN**: What autonomous system experienced a disruption in connectivity? +- **Type**: How broad was the outage? Did connectivity fail nationwide, or at a sub-national level? Did just a single network provider have an outage? +- **Scope**: If it was a sub-national/regional outage, what state or city was impacted? If it was a network-level outage, which one was it? +- **Cause**: Insight into the likely cause of the outage, based on publicly available information. Historically, some outages have been government directed shutdowns, while others are caused by severe weather or natural disasters, or by infrastructure issues such as cable cuts, power outages, or filtering/blocking. +- **Start time**: When did the outage start? +- **End time**: When did the outage end? ## List of endpoints diff --git a/src/content/docs/radar/investigate/url-scanner.mdx b/src/content/docs/radar/investigate/url-scanner.mdx index ec99e52a8ef0c7b..ab5ce64f3fd1662 100644 --- a/src/content/docs/radar/investigate/url-scanner.mdx +++ b/src/content/docs/radar/investigate/url-scanner.mdx @@ -14,7 +14,7 @@ To better understand Internet usage around the world, use Cloudflare's URL Scann ## Use the API -To make your first URL scan using the API, you must obtain a URL Scanner specific [API token](/fundamentals/api/get-started/create-token/). Create a Custom Token with *Account* > *URL Scanner* in the **Permissions** group, and select *Edit* as the access level. +To make your first URL scan using the API, you must obtain a URL Scanner specific [API token](/fundamentals/api/get-started/create-token/). Create a Custom Token with _Account_ > _URL Scanner_ in the **Permissions** group, and select _Edit_ as the access level. Once you have the token, and you know your `account_id`, you are ready to make your first request to the API at `https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/`. @@ -37,11 +37,11 @@ A successful response will have a status code of `200` and be similar to the fol ```json { - "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", - "api": "https://api.cloudflare.com/client/v4/accounts//urlscanner/v2/result/095be615-a8ad-4c33-8e9c-c7612fbf6c9f", - "visibility": "public", - "url": "https://www.example.com", - "message": "Submission successful" + "uuid": "095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "api": "https://api.cloudflare.com/client/v4/accounts//urlscanner/v2/result/095be615-a8ad-4c33-8e9c-c7612fbf6c9f", + "visibility": "public", + "url": "https://www.example.com", + "message": "Submission successful" } ``` @@ -56,11 +56,9 @@ Here's an example request body with some custom configuration options: ```json { "url": "https://example.com", - "screenshotsResolutions": [ - "desktop", "mobile", "tablet" - ], - "customagent": "XXX-my-user-agent", - "referer": "example", + "screenshotsResolutions": ["desktop", "mobile", "tablet"], + "customagent": "XXX-my-user-agent", + "referer": "example", "customHeaders": { "Authorization": "xxx-token" }, @@ -68,7 +66,7 @@ Here's an example request body with some custom configuration options: } ``` -Above, the visibility level is set as `Unlisted`, which means that the scan report won't be included in the [recent scans](https://radar.cloudflare.com/scan#recent-scans) list nor in search results. In effect, only users with knowledge of the scan ID will be able to access it. +Above, the visibility level is set as `Unlisted`, which means that the scan report won't be included in the [recent scans](https://radar.cloudflare.com/scan#recent-scans) list nor in search results. In effect, only users with knowledge of the scan ID will be able to access it. There will also be three screenshots taken of the webpage, one per target device type. The [`User-Agent`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/User-Agent) will be set as "XXX-my-user-agent". Note that you can set any custom HTTP header, including [Authorization](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Authorization). @@ -84,38 +82,38 @@ While the scan is in progress, the HTTP status code will be `404`; once it is fi The response will include, among others, the following top properties: -* `task` - Information on the scan submission. -* `page` - Information pertaining to the primary response, for example IP address, ASN, server, and page redirect history. -* `data.requests` - Request chains involved in the page load. -* `data.cookies` - Cookies set by the page. -* `data.globals` - Non-standard JavaScript global variables. -* `data.console` - Console logs. -* `data.performance` - Timings as given by the [`PerformanceNavigationTiming`](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) interface. -* `meta` - Meta processors output including detected technologies, domain and URL categories, rank, geolocation information, and others. -* `lists.ips` - IPs contacted. -* `lists.asns` - AS Numbers contacted. -* `lists.domains` - Hostnames contacted, including `dns` record information. -* `lists.hashes` - Hashes of response bodies, of the main page HTML structure, screenshots, and favicons. -* `lists.certificates` - TLS certificates of HTTP responses. -* `verdicts` - Verdicts on malicious content. +- `task` - Information on the scan submission. +- `page` - Information pertaining to the primary response, for example IP address, ASN, server, and page redirect history. +- `data.requests` - Request chains involved in the page load. +- `data.cookies` - Cookies set by the page. +- `data.globals` - Non-standard JavaScript global variables. +- `data.console` - Console logs. +- `data.performance` - Timings as given by the [`PerformanceNavigationTiming`](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) interface. +- `meta` - Meta processors output including detected technologies, domain and URL categories, rank, geolocation information, and others. +- `lists.ips` - IPs contacted. +- `lists.asns` - AS Numbers contacted. +- `lists.domains` - Hostnames contacted, including `dns` record information. +- `lists.hashes` - Hashes of response bodies, of the main page HTML structure, screenshots, and favicons. +- `lists.certificates` - TLS certificates of HTTP responses. +- `verdicts` - Verdicts on malicious content. Some examples of more specific properties include: -* `task.uuid` - ID of the scan. -* `task.url` - Submitted URL of the scan. May differ from final URL (`page.url`) if there are HTTP redirects. -* `task.success` - Whether scan was successful or not. Scans can fail for various reasons, including DNS errors. -* `task.status` - Current scan status, for example, `Queued`, `InProgress`, or `Finished`. -* `meta.processors.domainCategories` - Cloudflare categories of the main hostname contacted. -* `meta.processors.phishing` - What kind of phishing, if any, was detected. -* `meta.processors.radarRank` - [Cloudflare Radar Rank](http://blog.cloudflare.com/radar-domain-rankings/) of the main hostname contacted. -* `meta.processors.wappa` - The kind of technologies detected as being in use by the website, with the help of [Wappalyzer](https://github.com/Lissy93/wapalyzer). -* `page.url` - URL of the primary request, after all HTTP redirects. -* `page.country` - Country name from geolocation data associated with the main IP address contacted. -* `page.history` - Main page history, including any HTTP redirects. -* `page.screenshot` - Various hashes of the main screenshot. Can be used to search for sites with similar screenshots. -* `page.domStructHash` - HTML structure hash. Use it to search for sites with similar structure. -* `page.favicon.hash` - MD5 hash of the favicon. -* `verdicts.overall.malicious` - Whether the website was considered malicious *at the time of the scan*. Please check the remaining properties for each subsystem(s) for specific threats detected. +- `task.uuid` - ID of the scan. +- `task.url` - Submitted URL of the scan. May differ from final URL (`page.url`) if there are HTTP redirects. +- `task.success` - Whether scan was successful or not. Scans can fail for various reasons, including DNS errors. +- `task.status` - Current scan status, for example, `Queued`, `InProgress`, or `Finished`. +- `meta.processors.domainCategories` - Cloudflare categories of the main hostname contacted. +- `meta.processors.phishing` - What kind of phishing, if any, was detected. +- `meta.processors.radarRank` - [Cloudflare Radar Rank](http://blog.cloudflare.com/radar-domain-rankings/) of the main hostname contacted. +- `meta.processors.wappa` - The kind of technologies detected as being in use by the website, with the help of [Wappalyzer](https://github.com/Lissy93/wapalyzer). +- `page.url` - URL of the primary request, after all HTTP redirects. +- `page.country` - Country name from geolocation data associated with the main IP address contacted. +- `page.history` - Main page history, including any HTTP redirects. +- `page.screenshot` - Various hashes of the main screenshot. Can be used to search for sites with similar screenshots. +- `page.domStructHash` - HTML structure hash. Use it to search for sites with similar structure. +- `page.favicon.hash` - MD5 hash of the favicon. +- `verdicts.overall.malicious` - Whether the website was considered malicious _at the time of the scan_. Please check the remaining properties for each subsystem(s) for specific threats detected. The [Get URL Scan](/api/resources/url_scanner/subresources/scans/methods/get/) API endpoint documentation contains the full response schema. @@ -132,7 +130,6 @@ curl 'https://api.cloudflare.com/client/v4/accounts/{account_id}/urlscanner/v2/s --header "Authorization: Bearer " ``` - If, instead, you wanted to search for scans that made at least one request to the hostname `cdnjs.cloudflare.com`, for example sites that use a JavaScript library hosted at `cdnjs.cloudflare.com`, use the query parameter `hostname=cdnjs.cloudflare.com`: ```bash @@ -153,14 +150,13 @@ Some other example queries: Go to [Search URL scans](/api/resources/url_scanner/subresources/scans/methods/list/) in the API documentation for the full list of available options. - ### Security Center Alternatively, you can search in the Security Center: 1. In the Cloudflare dashboard, go to the **Investigate** page. - + 2. Enter your query and select **Search**. @@ -176,7 +172,7 @@ To scan a URL based on your geographic location: 2. Go to **Location** > Select which country to scan the URL from. 3. Select **Scan now**. -You can also use the [API](https://developers.cloudflare.com/api/resources/url_scanner/subresources/scans/methods/create/#(params)%20default%20%3E%20(param)%20account_id%20%3E%20) to scan a URL from a specific location. +You can also use the [API]() to scan a URL from a specific location. In Security Center, you can retrieve pre-filtered information by: @@ -187,4 +183,4 @@ In Security Center, you can retrieve pre-filtered information by: - Identical ASN - Identical IP - Identical domain -- Identical final URL (after all redirections) \ No newline at end of file +- Identical final URL (after all redirections) diff --git a/src/content/docs/radar/mcp-server.mdx b/src/content/docs/radar/mcp-server.mdx index ef902ec41e498a5..56303e7fd5ac8ad 100644 --- a/src/content/docs/radar/mcp-server.mdx +++ b/src/content/docs/radar/mcp-server.mdx @@ -10,4 +10,4 @@ sidebar: variant: note products: - radar ---- \ No newline at end of file +--- diff --git a/src/content/docs/radar/reference/index.mdx b/src/content/docs/radar/reference/index.mdx index 605b54567f61ed5..1223e257fc2e24e 100644 --- a/src/content/docs/radar/reference/index.mdx +++ b/src/content/docs/radar/reference/index.mdx @@ -8,7 +8,7 @@ products: - radar --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Review reference information related to Cloudflare Radar: diff --git a/src/content/docs/radar/reference/quarterly-ddos-reports.mdx b/src/content/docs/radar/reference/quarterly-ddos-reports.mdx index 7b84e9fcb6eff4b..d08ecc4c77e6915 100644 --- a/src/content/docs/radar/reference/quarterly-ddos-reports.mdx +++ b/src/content/docs/radar/reference/quarterly-ddos-reports.mdx @@ -6,7 +6,7 @@ products: - radar --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Quarterly DDoS threat reports provide a comprehensive overview of DDoS attack insights and trends over a three-month period. @@ -14,7 +14,7 @@ Thanks to our vast network, Cloudflare provides insights on the evolving threat Find the latest quarterly DDoS threat reports in the [**Reports**](https://radar.cloudflare.com/reports) section of Cloudflare Radar. -*** +--- ## Methodologies @@ -58,7 +58,7 @@ To calculate the attack size, duration, attack vectors, and emerging threats, Cl However, in the **Network layer attack distribution** graph of the [**Security & Attacks**](https://radar.cloudflare.com/security-and-attacks) Radar page these trends are calculated by number of bytes instead. Since attacks may vary greatly in number of bytes from one another, this could lead to trends differing between the quarterly reports and the graph displayed in Cloudflare Radar. -*** +--- ## Final remarks diff --git a/src/content/docs/randomness-beacon/about/background.mdx b/src/content/docs/randomness-beacon/about/background.mdx index 34ad6ab86602697..3985a768398b9d4 100644 --- a/src/content/docs/randomness-beacon/about/background.mdx +++ b/src/content/docs/randomness-beacon/about/background.mdx @@ -11,7 +11,7 @@ products: description: History and development of the drand project. --- -Over the years, a generation of public randomness (often referred to as *common coins*) has attracted interest from the cryptography research community. Many distributed systems, including various consensus mechanisms, anonymity networks such as Tor, or blockchain systems, assume access to such public randomness. However, it remained a major unsolved issue to generate public randomness in a distributed, scalable, and robust way. Currently, there is no service deployed to produce this type of randomness. The only choice is a centralized, prototype-only randomness beacon run by [NIST](https://www.nist.gov/). +Over the years, a generation of public randomness (often referred to as _common coins_) has attracted interest from the cryptography research community. Many distributed systems, including various consensus mechanisms, anonymity networks such as Tor, or blockchain systems, assume access to such public randomness. However, it remained a major unsolved issue to generate public randomness in a distributed, scalable, and robust way. Currently, there is no service deployed to produce this type of randomness. The only choice is a centralized, prototype-only randomness beacon run by [NIST](https://www.nist.gov/). Realizing this, [Ewa Syta](http://ewa.syta.us/) started a project on [Scalable Bias-Resistant Distributed Randomness](https://eprint.iacr.org/2016/1067) during her PhD studies under the supervision of [Michael J. Fischer](http://www.cs.yale.edu/homes/fischer/) and [Bryan Ford](https://bford.info/) at Yale University. After Bryan moved to EPFL in 2015, the new members of the DEDIS team at EPFL ([Nicolas Gailly](https://github.com/nikkolasg/), [Linus Gasser](https://people.epfl.ch/linus.gasser), [Philipp Jovanovic](https://jovanovic.io/), [Ismail Khoffi](https://ismailkhoffi.com/), [Eleftherios Kokoris Kogias](https://lefteriskk.github.io/)) joined the project and together published a research paper at the [2017 IEEE Symposium on Security and Privacy](https://ieeexplore.ieee.org/abstract/document/7958592). diff --git a/src/content/docs/randomness-beacon/about/future.mdx b/src/content/docs/randomness-beacon/about/future.mdx index 486975f9356ffc8..76c17926bf29159 100644 --- a/src/content/docs/randomness-beacon/about/future.mdx +++ b/src/content/docs/randomness-beacon/about/future.mdx @@ -15,10 +15,10 @@ As of spring 2020, the drand network is production-ready and can now be consider While the project has reached a mature state, we believe there are several ways for drand to continue to evolve. -* We would like to continue to see reliable partners join the network; the more participants in the network, the stronger the guarantees. +- We would like to continue to see reliable partners join the network; the more participants in the network, the stronger the guarantees. -* We would like to investigate how to generate public randomness in a post-quantum secure way (like, through isogeny, lattice, and so on). +- We would like to investigate how to generate public randomness in a post-quantum secure way (like, through isogeny, lattice, and so on). -* We would like to consider standardization of the core drand protocol. +- We would like to consider standardization of the core drand protocol. We are proud to be a part of these efforts and hope to see even more adoption of drand in third-party applications and systems. diff --git a/src/content/docs/randomness-beacon/cryptographic-background/index.mdx b/src/content/docs/randomness-beacon/cryptographic-background/index.mdx index 59049a2b40a28d4..0678464a6ad4525 100644 --- a/src/content/docs/randomness-beacon/cryptographic-background/index.mdx +++ b/src/content/docs/randomness-beacon/cryptographic-background/index.mdx @@ -12,11 +12,11 @@ drand is an efficient randomness beacon daemon that utilizes pairing-based crypt This is an overview of the cryptographic building blocks drand uses to generate publicly-verifiable, unbiasable, and unpredictable randomness in a distributed manner. -The drand beacon has two phases: a setup phase and a beacon phase. Generally, we assume that there are *n* participants, out of which at most *f\ + diff --git a/src/content/docs/realtime/realtimekit/ai/index.mdx b/src/content/docs/realtime/realtimekit/ai/index.mdx index 69baea7896467dd..0b4b56d2c3a2e40 100644 --- a/src/content/docs/realtime/realtimekit/ai/index.mdx +++ b/src/content/docs/realtime/realtimekit/ai/index.mdx @@ -17,7 +17,7 @@ RealtimeKit provides AI-powered features using Cloudflare's AI infrastructure to ## Available features | Feature | Description | -| -------------------------------------------------------- | ----------------------------------------- | +| -------------------------------------------------------- | ------------------------------------------- | | [Transcription](/realtime/realtimekit/ai/transcription/) | Real-time and end-of-meeting speech-to-text | | [Summary](/realtime/realtimekit/ai/summary/) | AI-generated meeting summaries | diff --git a/src/content/docs/realtime/realtimekit/ai/summary.mdx b/src/content/docs/realtime/realtimekit/ai/summary.mdx index 47577ad2f26f95d..f541baa92f1c99c 100644 --- a/src/content/docs/realtime/realtimekit/ai/summary.mdx +++ b/src/content/docs/realtime/realtimekit/ai/summary.mdx @@ -20,44 +20,44 @@ Set `summarize_on_end: true` when [creating a meeting](/realtime/realtimekit/con ```json { - "title": "Product Review", - "ai_config": { - "transcription": { - "language": "en-US" - }, - "summarization": { - "word_limit": 500, - "text_format": "markdown", - "summary_type": "team_meeting" - } - }, - "summarize_on_end": true + "title": "Product Review", + "ai_config": { + "transcription": { + "language": "en-US" + }, + "summarization": { + "word_limit": 500, + "text_format": "markdown", + "summary_type": "team_meeting" + } + }, + "summarize_on_end": true } ``` ## Configuration -| Option | Type | Default | Description | -|--------|------|---------|-------------| -| `word_limit` | number | 300 | Summary length (150-1000 words) | -| `text_format` | string | `plain_text` | Output format: `plain_text` or `markdown` | -| `summary_type` | string | `general` | Meeting context for tailored summaries | +| Option | Type | Default | Description | +| -------------- | ------ | ------------ | ----------------------------------------- | +| `word_limit` | number | 300 | Summary length (150-1000 words) | +| `text_format` | string | `plain_text` | Output format: `plain_text` or `markdown` | +| `summary_type` | string | `general` | Meeting context for tailored summaries | ### Summary types Choose a type that matches your meeting for better results: -| Type | Best for | -|------|----------| -| `general` | Any meeting (default) | -| `team_meeting` | Regular team syncs | -| `daily_standup` | Agile standups | -| `one_on_one_meeting` | 1:1 meetings | -| `sales_call` | Customer sales conversations | -| `client_check_in` | Client status updates | -| `interview` | Job interviews | -| `lecture` | Educational content | -| `code_review` | Technical code reviews | +| Type | Best for | +| -------------------- | ---------------------------- | +| `general` | Any meeting (default) | +| `team_meeting` | Regular team syncs | +| `daily_standup` | Agile standups | +| `one_on_one_meeting` | 1:1 meetings | +| `sales_call` | Customer sales conversations | +| `client_check_in` | Client status updates | +| `interview` | Job interviews | +| `lecture` | Educational content | +| `code_review` | Technical code reviews | ## Consume summaries @@ -67,11 +67,11 @@ Configure `meeting.summary` event in [webhooks](/api/resources/realtime_kit/subr ```json { - "event": "meeting.summary", - "meetingId": "meeting-123", - "sessionId": "session-456", - "summaryDownloadUrl": "https://...", - "summaryDownloadUrlExpiry": "2024-08-14T10:15:30.000Z" + "event": "meeting.summary", + "meetingId": "meeting-123", + "sessionId": "session-456", + "summaryDownloadUrl": "https://...", + "summaryDownloadUrlExpiry": "2024-08-14T10:15:30.000Z" } ``` @@ -103,16 +103,19 @@ With `text_format: "markdown"` and `summary_type: "team_meeting"`: ## Meeting Summary ### Key Discussion Points + - Reviewed Q4 roadmap priorities - Discussed deployment timeline for v2.0 - Identified blockers for the auth migration ### Action Items + - @alice: Update design specs by Friday - @bob: Schedule security review - @charlie: Create migration runbook ### Decisions Made + - Approved moving forward with Kubernetes migration - Delayed analytics dashboard to next sprint ``` diff --git a/src/content/docs/realtime/realtimekit/ai/transcription.mdx b/src/content/docs/realtime/realtimekit/ai/transcription.mdx index fbedd591aeb9eb5..0c3a1720bf0478a 100644 --- a/src/content/docs/realtime/realtimekit/ai/transcription.mdx +++ b/src/content/docs/realtime/realtimekit/ai/transcription.mdx @@ -13,7 +13,7 @@ import { Render } from "~/components"; RealtimeKit provides two transcription modes powered by Cloudflare Workers AI: | Mode | Model | Use Case | -| ---------------- | -------------------------------------------------------------------- | ------------------------------ | +| ------------------ | -------------------------------------------------------------------- | ------------------------------ | | **Real-time** | [Deepgram Nova-3](/workers-ai/models/nova-3/) | Live captions during meeting | | **End-of-meeting** | [Whisper Large v3 Turbo](/workers-ai/models/whisper-large-v3-turbo/) | Accurate offline transcription | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKAi.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKAi.md index bfe857bd9ca8b92..f4de77a1ba6d15d 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKAi.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKAi.md @@ -12,48 +12,50 @@ This module consists of the `ai` object which is used to interface with product' You can obtain the live meeting transcript and use other meeting AI features such as summary, and agenda using this object. - -* [RTKAi](#module_RTKAi) - * _instance_ - * [.telemetry](#module_RTKAi+telemetry) - * [.onTranscript(transcript)](#module_RTKAi+onTranscript) - * _static_ - * [.parseTranscript(transcriptData, [isPartialTranscript])](#module_RTKAi.parseTranscript) - * [.parseTranscripts(transcriptData)](#module_RTKAi.parseTranscripts) +- [RTKAi](#module_RTKAi) + - _instance_ + - [.telemetry](#module_RTKAi+telemetry) + - [.onTranscript(transcript)](#module_RTKAi+onTranscript) + - _static_ + - [.parseTranscript(transcriptData, [isPartialTranscript])](#module_RTKAi.parseTranscript) + - [.parseTranscripts(transcriptData)](#module_RTKAi.parseTranscripts) ### meeting.ai.telemetry + **Kind**: instance property of [RTKAi](#module_RTKAi) ### meeting.ai.onTranscript(transcript) -**Kind**: instance method of [RTKAi](#module_RTKAi) -| Param | Type | Description | -| --- | --- | --- | +**Kind**: instance method of [RTKAi](#module_RTKAi) + +| Param | Type | Description | +| ---------- | ------------------------------ | ------------------------------------------- | | transcript | TranscriptionData | Transcript data received for a participant. | ### meeting.ai.parseTranscript(transcriptData, [isPartialTranscript]) + Parse a single line transcript -**Kind**: static method of [RTKAi](#module_RTKAi) +**Kind**: static method of [RTKAi](#module_RTKAi) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| transcriptData | string | | The transcript data to parse | +| Param | Type | Default | Description | +| --------------------- | -------------------- | ------------------ | --------------------------------- | +| transcriptData | string | | The transcript data to parse | | [isPartialTranscript] | boolean | false | Whether the transcript is partial | ### meeting.ai.parseTranscripts(transcriptData) + Parse a multi-line transcript -**Kind**: static method of [RTKAi](#module_RTKAi) +**Kind**: static method of [RTKAi](#module_RTKAi) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| -------------- | ------------------- | ---------------------------- | | transcriptData | string | The transcript data to parse | - diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKChat.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKChat.md index f0dc2d5d09f31ea..c5262c512d5524e 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKChat.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKChat.md @@ -10,340 +10,367 @@ web_core_version: 1.2.4 This is the chat module, which can be used to send and receive messages from the meeting. - -* [RTKChat](#module_RTKChat) - * [module.exports](#exp_module_RTKChat--module.exports) ⏏ - * [new module.exports(context, chatSocketHandler, self, participants)](#new_module_RTKChat--module.exports_new) - * ~~[.messages](#module_RTKChat--module.exports+messages)~~ - * [.telemetry](#module_RTKChat--module.exports+telemetry) - * [.pinned](#module_RTKChat--module.exports+pinned) - * [.setMaxTextLimit(limit)](#module_RTKChat--module.exports+setMaxTextLimit) - * [.sendMessageInternal(message, [participantIds])](#module_RTKChat--module.exports+sendMessageInternal) - * [.sendTextMessageInternal(message, [peerIds])](#module_RTKChat--module.exports+sendTextMessageInternal) - * [.sendImageMessageInternal(image, [peerIds])](#module_RTKChat--module.exports+sendImageMessageInternal) - * [.sendFileMessageInternal(file, [peerIds])](#module_RTKChat--module.exports+sendFileMessageInternal) - * [.updateRateLimits(num, period)](#module_RTKChat--module.exports+updateRateLimits) - * [.sendTextMessage(message, [peerIds])](#module_RTKChat--module.exports+sendTextMessage) - * [.sendCustomMessage(message, [peerIds])](#module_RTKChat--module.exports+sendCustomMessage) - * [.sendImageMessage(image, [peerIds])](#module_RTKChat--module.exports+sendImageMessage) - * [.sendFileMessage(file, [peerIds])](#module_RTKChat--module.exports+sendFileMessage) - * [.sendMessage(message, [participantIds])](#module_RTKChat--module.exports+sendMessage) - * [.editTextMessage(messageId, message)](#module_RTKChat--module.exports+editTextMessage) - * [.editImageMessage(messageId, image)](#module_RTKChat--module.exports+editImageMessage) - * [.editFileMessage(messageId, file)](#module_RTKChat--module.exports+editFileMessage) - * [.editMessage(messageId, message)](#module_RTKChat--module.exports+editMessage) - * [.deleteMessage(messageId)](#module_RTKChat--module.exports+deleteMessage) - * ~~[.getMessagesByUser(userId)](#module_RTKChat--module.exports+getMessagesByUser)~~ - * ~~[.getMessagesByType(type)](#module_RTKChat--module.exports+getMessagesByType)~~ - * [.pin(id)](#module_RTKChat--module.exports+pin) - * [.unpin(id)](#module_RTKChat--module.exports+unpin) - * [.fetchPublicMessages(options)](#module_RTKChat--module.exports+fetchPublicMessages) - * [.fetchPrivateMessages(options)](#module_RTKChat--module.exports+fetchPrivateMessages) - * [.fetchPinnedMessages(options)](#module_RTKChat--module.exports+fetchPinnedMessages) - * ~~[.getMessages(timeStamp, size, reversed, [offset])](#module_RTKChat--module.exports+getMessages)~~ - * ~~[.searchMessages(query, [filters])](#module_RTKChat--module.exports+searchMessages)~~ +- [RTKChat](#module_RTKChat) + - [module.exports](#exp_module_RTKChat--module.exports) ⏏ + - [new module.exports(context, chatSocketHandler, self, participants)](#new_module_RTKChat--module.exports_new) + - ~~[.messages](#module_RTKChat--module.exports+messages)~~ + - [.telemetry](#module_RTKChat--module.exports+telemetry) + - [.pinned](#module_RTKChat--module.exports+pinned) + - [.setMaxTextLimit(limit)](#module_RTKChat--module.exports+setMaxTextLimit) + - [.sendMessageInternal(message, [participantIds])](#module_RTKChat--module.exports+sendMessageInternal) + - [.sendTextMessageInternal(message, [peerIds])](#module_RTKChat--module.exports+sendTextMessageInternal) + - [.sendImageMessageInternal(image, [peerIds])](#module_RTKChat--module.exports+sendImageMessageInternal) + - [.sendFileMessageInternal(file, [peerIds])](#module_RTKChat--module.exports+sendFileMessageInternal) + - [.updateRateLimits(num, period)](#module_RTKChat--module.exports+updateRateLimits) + - [.sendTextMessage(message, [peerIds])](#module_RTKChat--module.exports+sendTextMessage) + - [.sendCustomMessage(message, [peerIds])](#module_RTKChat--module.exports+sendCustomMessage) + - [.sendImageMessage(image, [peerIds])](#module_RTKChat--module.exports+sendImageMessage) + - [.sendFileMessage(file, [peerIds])](#module_RTKChat--module.exports+sendFileMessage) + - [.sendMessage(message, [participantIds])](#module_RTKChat--module.exports+sendMessage) + - [.editTextMessage(messageId, message)](#module_RTKChat--module.exports+editTextMessage) + - [.editImageMessage(messageId, image)](#module_RTKChat--module.exports+editImageMessage) + - [.editFileMessage(messageId, file)](#module_RTKChat--module.exports+editFileMessage) + - [.editMessage(messageId, message)](#module_RTKChat--module.exports+editMessage) + - [.deleteMessage(messageId)](#module_RTKChat--module.exports+deleteMessage) + - ~~[.getMessagesByUser(userId)](#module_RTKChat--module.exports+getMessagesByUser)~~ + - ~~[.getMessagesByType(type)](#module_RTKChat--module.exports+getMessagesByType)~~ + - [.pin(id)](#module_RTKChat--module.exports+pin) + - [.unpin(id)](#module_RTKChat--module.exports+unpin) + - [.fetchPublicMessages(options)](#module_RTKChat--module.exports+fetchPublicMessages) + - [.fetchPrivateMessages(options)](#module_RTKChat--module.exports+fetchPrivateMessages) + - [.fetchPinnedMessages(options)](#module_RTKChat--module.exports+fetchPinnedMessages) + - ~~[.getMessages(timeStamp, size, reversed, [offset])](#module_RTKChat--module.exports+getMessages)~~ + - ~~[.searchMessages(query, [filters])](#module_RTKChat--module.exports+searchMessages)~~ ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, chatSocketHandler, self, participants) -| Param | Type | -| --- | --- | -| context | Context | -| chatSocketHandler | RTKChatSocketHandler | -| self | Self | -| participants | Participants | +| Param | Type | +| ----------------- | --------------------------------- | +| context | Context | +| chatSocketHandler | RTKChatSocketHandler | +| self | Self | +| participants | Participants | #### ~~module.exports.messages~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKChat--module.exports) #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKChat--module.exports) #### module.exports.pinned + **Kind**: instance property of [module.exports](#exp_module_RTKChat--module.exports) **Deprecated.**: This property is deprecated. Please use `fetchPinnedMessages()` instead. Returns an array of pinned messages. #### module.exports.setMaxTextLimit(limit) + Set the max character limit of a text message -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ----- | ------------------- | --------------------------------------- | | limit | number | Max character limit for a text message. | #### module.exports.sendMessageInternal(message, [participantIds]) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| message | MessagePayload | Message payload to send. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| ---------------- | --------------------------------- | --------------------------------------- | +| message | MessagePayload | Message payload to send. | | [participantIds] | Array.<string> | Participant ids to send the message to. | #### module.exports.sendTextMessageInternal(message, [peerIds]) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| message | string | Text message to send. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | --------------------------------- | -------------------------------- | +| message | string | Text message to send. | | [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendImageMessageInternal(image, [peerIds]) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| image | File \| ReactNativeFile | Image file to send. | -| [peerIds] | Array.<string> | Peer ids to send the message to. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------------- | +| image | File \| ReactNativeFile | Image file to send. | +| [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendFileMessageInternal(file, [peerIds]) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| file | File \| ReactNativeFile | File to send. | -| [peerIds] | Array.<string> | Peer ids to send the message to. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------------- | +| file | File \| ReactNativeFile | File to send. | +| [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.updateRateLimits(num, period) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | -| --- | --- | -| num | number | -| period | number | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | +| ------ | ------------------- | +| num | number | +| period | number | #### module.exports.sendTextMessage(message, [peerIds]) + Sends a chat text message to the room. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| message | string | The message that must be sent to the room. | -| [peerIds] | Array.<string> | Peer ids to send the message to. | +| Param | Type | Description | +| --------- | --------------------------------- | ------------------------------------------ | +| message | string | The message that must be sent to the room. | +| [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendCustomMessage(message, [peerIds]) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| message | CustomMessagePayload | Custom message payload. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | --------------------------------- | -------------------------------- | +| message | CustomMessagePayload | Custom message payload. | | [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendImageMessage(image, [peerIds]) + Sends an image message to the meeting. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| image | File \| ReactNativeFile | The image that is to be sent. | -| [peerIds] | Array.<string> | Peer ids to send the message to. | +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------------- | +| image | File \| ReactNativeFile | The image that is to be sent. | +| [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendFileMessage(file, [peerIds]) + Sends a file to the meeting. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| file | File \| ReactNativeFile | A File object. | -| [peerIds] | Array.<string> | Peer ids to send the message to. | +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------------- | +| file | File \| ReactNativeFile | A File object. | +| [peerIds] | Array.<string> | Peer ids to send the message to. | #### module.exports.sendMessage(message, [participantIds]) + Sends a message to the meeting. This method can be used to send text, image, or file messages. The message type is determined by the key 'type' in `message` object. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| message | MessagePayload | An object including the type and content of the message. | -| [participantIds] | Array.<string> | An array including the userIds of the participants. | +| Param | Type | Description | +| ---------------- | --------------------------------- | -------------------------------------------------------- | +| message | MessagePayload | An object including the type and content of the message. | +| [participantIds] | Array.<string> | An array including the userIds of the participants. | #### module.exports.editTextMessage(messageId, message) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------- | -------------------------- | | messageId | string | Id of the message to edit. | -| message | string | Updated text message. | +| message | string | Updated text message. | #### module.exports.editImageMessage(messageId, image) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| messageId | string | Id of the message to edit. | -| image | File \| ReactNativeFile | Updated image file. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------- | +| messageId | string | Id of the message to edit. | +| image | File \| ReactNativeFile | Updated image file. | #### module.exports.editFileMessage(messageId, file) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| messageId | string | Id of the message to edit. | -| file | File \| ReactNativeFile | Updated file. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------------------------------------- | -------------------------- | +| messageId | string | Id of the message to edit. | +| file | File \| ReactNativeFile | Updated file. | #### module.exports.editMessage(messageId, message) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| messageId | string | Id of the message to edit. | -| message | MessagePayload | Updated message payload. | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | --------------------------- | -------------------------- | +| messageId | string | Id of the message to edit. | +| message | MessagePayload | Updated message payload. | #### module.exports.deleteMessage(messageId) -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) + +| Param | Type | Description | +| --------- | ------------------- | ---------------------------- | | messageId | string | Id of the message to delete. | #### ~~module.exports.getMessagesByUser(userId)~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------ | ------------------- | ---------------------------------------------- | | userId | string | The user id of the user that sent the message. | #### ~~module.exports.getMessagesByType(type)~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| type | 'text' \| 'image' \| 'file' \| 'custom' \| 'poll' | 'text', 'image', 'file', 'custom', or 'poll'. | +| Param | Type | Description | +| ----- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | +| type | 'text' \| 'image' \| 'file' \| 'custom' \| 'poll' | 'text', 'image', 'file', 'custom', or 'poll'. | #### module.exports.pin(id) + Pins a chat message -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| id | string | ID of the message to be pinned | +| Param | Type | Description | +| ----- | ------------------- | ------------------------------ | +| id | string | ID of the message to be pinned | #### module.exports.unpin(id) + Unpins a chat message -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| id | string | ID of the message to be unpinned | +| Param | Type | Description | +| ----- | ------------------- | -------------------------------- | +| id | string | ID of the message to be unpinned | #### module.exports.fetchPublicMessages(options) + Fetches messages from the chat with pagination. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------- | -------------------------------- | ------------------------------------------------------------------------------------------------------ | | options | FetchMessageOptions | Configuration options for fetching messages, including timestamp, limit, and direction for pagination. | #### module.exports.fetchPrivateMessages(options) + Fetches private messages between the current user and another participant with pagination. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | options | FetchPrivateMessagesOptions | Configuration options for fetching private messages, including private RTKChat ID (User ID of the participant) and pagination settings. | #### module.exports.fetchPinnedMessages(options) + Fetches pinned messages with pagination. -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------- | -------------------------------- | ---------------------------------------------------------------------------------------------- | | options | FetchMessageOptions | Configuration options for fetching pinned messages, including timestamp, limit, and direction. | #### ~~module.exports.getMessages(timeStamp, size, reversed, [offset])~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| timeStamp | number | | -| size | number | | -| reversed | boolean | | -| [offset] | number | 0 | +| Param | Type | Default | +| --------- | -------------------- | -------------- | +| timeStamp | number | | +| size | number | | +| reversed | boolean | | +| [offset] | number | 0 | #### ~~module.exports.searchMessages(query, [filters])~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +**_Deprecated_** -| Param | Type | -| --- | --- | -| query | string | -| [filters] | SearchFilters | +**Kind**: instance method of [module.exports](#exp_module_RTKChat--module.exports) +| Param | Type | +| --------- | -------------------------- | +| query | string | +| [filters] | SearchFilters | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKConnectedMeetings.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKConnectedMeetings.md index 4f7519ff80810fe..05ce7315d3a789b 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKConnectedMeetings.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKConnectedMeetings.md @@ -10,91 +10,96 @@ web_core_version: 1.2.4 This consists of the methods to facilitate connected meetings - -* [RTKConnectedMeetings](#module_RTKConnectedMeetings) - * [module.exports](#exp_module_RTKConnectedMeetings--module.exports) ⏏ - * [new module.exports(context)](#new_module_RTKConnectedMeetings--module.exports_new) - * [.getRTKConnectedMeetings()](#module_RTKConnectedMeetings--module.exports+getRTKConnectedMeetings) - * [.createMeetings(request)](#module_RTKConnectedMeetings--module.exports+createMeetings) - * [.updateMeetings(request)](#module_RTKConnectedMeetings--module.exports+updateMeetings) - * [.deleteMeetings(meetingIds)](#module_RTKConnectedMeetings--module.exports+deleteMeetings) - * [.moveParticipants(sourceMeetingId, destinationMeetingId, participantIds)](#module_RTKConnectedMeetings--module.exports+moveParticipants) - * [.moveParticipantsWithCustomPreset(sourceMeetingId, destinationMeetingId, participants)](#module_RTKConnectedMeetings--module.exports+moveParticipantsWithCustomPreset) +- [RTKConnectedMeetings](#module_RTKConnectedMeetings) + - [module.exports](#exp_module_RTKConnectedMeetings--module.exports) ⏏ + - [new module.exports(context)](#new_module_RTKConnectedMeetings--module.exports_new) + - [.getRTKConnectedMeetings()](#module_RTKConnectedMeetings--module.exports+getRTKConnectedMeetings) + - [.createMeetings(request)](#module_RTKConnectedMeetings--module.exports+createMeetings) + - [.updateMeetings(request)](#module_RTKConnectedMeetings--module.exports+updateMeetings) + - [.deleteMeetings(meetingIds)](#module_RTKConnectedMeetings--module.exports+deleteMeetings) + - [.moveParticipants(sourceMeetingId, destinationMeetingId, participantIds)](#module_RTKConnectedMeetings--module.exports+moveParticipants) + - [.moveParticipantsWithCustomPreset(sourceMeetingId, destinationMeetingId, participants)](#module_RTKConnectedMeetings--module.exports+moveParticipantsWithCustomPreset) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context) -| Param | Type | -| --- | --- | -| context | Context | +| Param | Type | +| ------- | -------------------- | +| context | Context | #### module.exports.getRTKConnectedMeetings() + get connected meeting state **Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) #### module.exports.createMeetings(request) + create connected meetings -**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) -| Param | Type | -| --- | --- | -| request | Array.<{title: string}> | +| Param | Type | +| ------- | ------------------------------------------ | +| request | Array.<{title: string}> | #### module.exports.updateMeetings(request) + update meeting title -**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) -| Param | Type | -| --- | --- | -| request | Array.<{id: string, title: string}> | +| Param | Type | +| ------- | ------------------------------------------------------ | +| request | Array.<{id: string, title: string}> | #### module.exports.deleteMeetings(meetingIds) + delete connected meetings -**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) -| Param | Type | -| --- | --- | -| meetingIds | Array.<string> | +| Param | Type | +| ---------- | --------------------------------- | +| meetingIds | Array.<string> | #### module.exports.moveParticipants(sourceMeetingId, destinationMeetingId, participantIds) + Trigger event to move participants -**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| sourceMeetingId | string | id of source meeting | -| destinationMeetingId | string | id of destination meeting | -| participantIds | Array.<string> | list of id of the participants | +| Param | Type | Description | +| -------------------- | --------------------------------- | ------------------------------ | +| sourceMeetingId | string | id of source meeting | +| destinationMeetingId | string | id of destination meeting | +| participantIds | Array.<string> | list of id of the participants | #### module.exports.moveParticipantsWithCustomPreset(sourceMeetingId, destinationMeetingId, participants) -Trigger event to move participants with custom preset -**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +Trigger event to move participants with custom preset -| Param | Type | Description | -| --- | --- | --- | -| sourceMeetingId | string | id of source meeting | -| destinationMeetingId | string | id of destination meeting | -| participants | Array.<{id: string, presetId: string}> | | +**Kind**: instance method of [module.exports](#exp_module_RTKConnectedMeetings--module.exports) +| Param | Type | Description | +| -------------------- | --------------------------------------------------------- | ------------------------- | +| sourceMeetingId | string | id of source meeting | +| destinationMeetingId | string | id of destination meeting | +| participants | Array.<{id: string, presetId: string}> | | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKLivestream.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKLivestream.md index 4d2d4d56bab5c91..2706403d75acd35 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKLivestream.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKLivestream.md @@ -11,55 +11,59 @@ web_core_version: 1.2.4 The RTKLivestream module represents the state of the current livestream, and allows to start/stop live streams. - -* [RTKLivestream](#module_RTKLivestream) - * [module.exports](#exp_module_RTKLivestream--module.exports) ⏏ - * [new module.exports(context, self)](#new_module_RTKLivestream--module.exports_new) - * [.telemetry](#module_RTKLivestream--module.exports+telemetry) - * [.setRTKLivestreamState(livestreamState)](#module_RTKLivestream--module.exports+setRTKLivestreamState) - * [.start([livestreamConfig])](#module_RTKLivestream--module.exports+start) - * [.stop()](#module_RTKLivestream--module.exports+stop) +- [RTKLivestream](#module_RTKLivestream) + - [module.exports](#exp_module_RTKLivestream--module.exports) ⏏ + - [new module.exports(context, self)](#new_module_RTKLivestream--module.exports_new) + - [.telemetry](#module_RTKLivestream--module.exports+telemetry) + - [.setRTKLivestreamState(livestreamState)](#module_RTKLivestream--module.exports+setRTKLivestreamState) + - [.start([livestreamConfig])](#module_RTKLivestream--module.exports+start) + - [.stop()](#module_RTKLivestream--module.exports+stop) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, self) -| Param | Type | -| --- | --- | -| context | Context | -| self | Self | +| Param | Type | +| ------- | -------------------- | +| context | Context | +| self | Self | #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKLivestream--module.exports) #### module.exports.setRTKLivestreamState(livestreamState) -**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) -| Param | Type | -| --- | --- | -| livestreamState | RTKLivestreamState | +**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) + +| Param | Type | +| --------------- | ------------------------------- | +| livestreamState | RTKLivestreamState | #### module.exports.start([livestreamConfig]) + Starts livestreaming the meeting. -**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) -| Param | Type | -| --- | --- | -| [livestreamConfig] | StartRTKLivestreamConfig | +| Param | Type | +| ------------------ | ------------------------------------- | +| [livestreamConfig] | StartRTKLivestreamConfig | #### module.exports.stop() + Stops livestreaming the meeting. -**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKLivestream--module.exports) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKMeta.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKMeta.md index 8a3447521dfd9b2..9752ca8616beba0 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKMeta.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKMeta.md @@ -10,51 +10,54 @@ web_core_version: 1.2.4 This consists of the metadata of the meeting, such as the room name and the title. - -* [RTKMeta](#module_RTKMeta) - * [module.exports](#exp_module_RTKMeta--module.exports) ⏏ - * [new module.exports(context, self, viewType, roomSocketHandler, meetingTitle)](#new_module_RTKMeta--module.exports_new) - * [.selfActiveTab](#module_RTKMeta--module.exports+selfActiveTab) - * [.broadcastTabChanges](#module_RTKMeta--module.exports+broadcastTabChanges) - * [.viewType](#module_RTKMeta--module.exports+viewType) - * [.meetingStartedTimestamp](#module_RTKMeta--module.exports+meetingStartedTimestamp) - * [.meetingTitle](#module_RTKMeta--module.exports+meetingTitle) - * [.sessionId](#module_RTKMeta--module.exports+sessionId) - * [.meetingId](#module_RTKMeta--module.exports+meetingId) - * [.setBroadcastTabChanges(broadcastTabChanges)](#module_RTKMeta--module.exports+setBroadcastTabChanges) - * [.setSelfActiveTab(spotlightTab, tabChangeSource)](#module_RTKMeta--module.exports+setSelfActiveTab) +- [RTKMeta](#module_RTKMeta) + - [module.exports](#exp_module_RTKMeta--module.exports) ⏏ + - [new module.exports(context, self, viewType, roomSocketHandler, meetingTitle)](#new_module_RTKMeta--module.exports_new) + - [.selfActiveTab](#module_RTKMeta--module.exports+selfActiveTab) + - [.broadcastTabChanges](#module_RTKMeta--module.exports+broadcastTabChanges) + - [.viewType](#module_RTKMeta--module.exports+viewType) + - [.meetingStartedTimestamp](#module_RTKMeta--module.exports+meetingStartedTimestamp) + - [.meetingTitle](#module_RTKMeta--module.exports+meetingTitle) + - [.sessionId](#module_RTKMeta--module.exports+sessionId) + - [.meetingId](#module_RTKMeta--module.exports+meetingId) + - [.setBroadcastTabChanges(broadcastTabChanges)](#module_RTKMeta--module.exports+setBroadcastTabChanges) + - [.setSelfActiveTab(spotlightTab, tabChangeSource)](#module_RTKMeta--module.exports+setSelfActiveTab) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, self, viewType, roomSocketHandler, meetingTitle) -| Param | Type | -| --- | --- | -| context | Context | -| self | Self | -| viewType | string | -| roomSocketHandler | RoomSocketHandler | -| meetingTitle | string | +| Param | Type | +| ----------------- | ------------------------------ | +| context | Context | +| self | Self | +| viewType | string | +| roomSocketHandler | RoomSocketHandler | +| meetingTitle | string | #### module.exports.selfActiveTab + Represents the current active tab **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.broadcastTabChanges + Represents whether current user is spotlighted **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.viewType + The `viewType` tells the type of the meeting possible values are: GROUP_CALL| LIVESTREAM | CHAT | AUDIO_ROOM @@ -62,47 +65,52 @@ possible values are: GROUP_CALL| LIVESTREAM | CHAT | AUDIO_ROOM #### module.exports.meetingStartedTimestamp + The timestamp of the time when the meeting started. **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.meetingTitle + The title of the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.sessionId + (Experimental) The sessionId this meeting object is part of. **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.meetingId + The room name of the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKMeta--module.exports) #### module.exports.setBroadcastTabChanges(broadcastTabChanges) + Sets current user as broadcasting tab changes -**Kind**: instance method of [module.exports](#exp_module_RTKMeta--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKMeta--module.exports) -| Param | Type | -| --- | --- | -| broadcastTabChanges | boolean | +| Param | Type | +| ------------------- | -------------------- | +| broadcastTabChanges | boolean | #### module.exports.setSelfActiveTab(spotlightTab, tabChangeSource) -Sets current active tab for user -**Kind**: instance method of [module.exports](#exp_module_RTKMeta--module.exports) +Sets current active tab for user -| Param | Type | -| --- | --- | -| spotlightTab | ActiveTab | -| tabChangeSource | TabChangeSource | +**Kind**: instance method of [module.exports](#exp_module_RTKMeta--module.exports) +| Param | Type | +| --------------- | ---------------------------- | +| spotlightTab | ActiveTab | +| tabChangeSource | TabChangeSource | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipant.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipant.md index 5ab88c872e965cd..12a5b874df4f649 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipant.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipant.md @@ -11,68 +11,72 @@ web_core_version: 1.2.4 This module represents a single participant in the meeting. The participant object can be accessed from one of the participant lists present in the `meeting.participants` object. For example, + ```ts const participant1 = meeting.participants.active.get(participantId); const participant2 = meeting.participants.joined.get(participantId); const participant3 = meeting.participants.active.toArray()[0]; -const participant4 = meeting.participants.active.toArray().filter((p) => p.name === 'John'); +const participant4 = meeting.participants.active + .toArray() + .filter((p) => p.name === "John"); ``` - -* [RTKParticipant](#module_RTKParticipant) - * [module.exports](#exp_module_RTKParticipant--module.exports) ⏏ - * [new module.exports(context, participant, self, roomSocket)](#new_module_RTKParticipant--module.exports_new) - * [.id](#module_RTKParticipant--module.exports+id) - * [.userId](#module_RTKParticipant--module.exports+userId) - * [.name](#module_RTKParticipant--module.exports+name) - * [.picture](#module_RTKParticipant--module.exports+picture) - * [.customRTKParticipantId](#module_RTKParticipant--module.exports+customRTKParticipantId) - * ~~[.clientSpecificId](#module_RTKParticipant--module.exports+clientSpecificId)~~ - * [.device](#module_RTKParticipant--module.exports+device) - * [.videoTrack](#module_RTKParticipant--module.exports+videoTrack) - * [.audioTrack](#module_RTKParticipant--module.exports+audioTrack) - * [.screenShareTracks](#module_RTKParticipant--module.exports+screenShareTracks) - * [.videoEnabled](#module_RTKParticipant--module.exports+videoEnabled) - * [.audioEnabled](#module_RTKParticipant--module.exports+audioEnabled) - * [.screenShareEnabled](#module_RTKParticipant--module.exports+screenShareEnabled) - * [.producers](#module_RTKParticipant--module.exports+producers) - * [.manualProducerConfig](#module_RTKParticipant--module.exports+manualProducerConfig) - * [.supportsRemoteControl](#module_RTKParticipant--module.exports+supportsRemoteControl) - * [.presetName](#module_RTKParticipant--module.exports+presetName) - * [.stageStatus](#module_RTKParticipant--module.exports+stageStatus) - * [.telemetry](#module_RTKParticipant--module.exports+telemetry) - * [.isPinned](#module_RTKParticipant--module.exports+isPinned) - * [.setVideoEnabled(videoEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setVideoEnabled) - * [.setAudioEnabled(audioEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setAudioEnabled) - * [.setScreenShareEnabled(screenShareEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setScreenShareEnabled) - * [.pin()](#module_RTKParticipant--module.exports+pin) - * [.unpin()](#module_RTKParticipant--module.exports+unpin) - * [.setIsPinned(isPinned, [emitEvent])](#module_RTKParticipant--module.exports+setIsPinned) - * [.disableAudio()](#module_RTKParticipant--module.exports+disableAudio) - * [.kick()](#module_RTKParticipant--module.exports+kick) - * [.disableVideo()](#module_RTKParticipant--module.exports+disableVideo) - * [.registerVideoElement(videoElem)](#module_RTKParticipant--module.exports+registerVideoElement) - * [.deregisterVideoElement([videoElem])](#module_RTKParticipant--module.exports+deregisterVideoElement) - * [.updateVideo(e)](#module_RTKParticipant--module.exports+updateVideo) +- [RTKParticipant](#module_RTKParticipant) + - [module.exports](#exp_module_RTKParticipant--module.exports) ⏏ + - [new module.exports(context, participant, self, roomSocket)](#new_module_RTKParticipant--module.exports_new) + - [.id](#module_RTKParticipant--module.exports+id) + - [.userId](#module_RTKParticipant--module.exports+userId) + - [.name](#module_RTKParticipant--module.exports+name) + - [.picture](#module_RTKParticipant--module.exports+picture) + - [.customRTKParticipantId](#module_RTKParticipant--module.exports+customRTKParticipantId) + - ~~[.clientSpecificId](#module_RTKParticipant--module.exports+clientSpecificId)~~ + - [.device](#module_RTKParticipant--module.exports+device) + - [.videoTrack](#module_RTKParticipant--module.exports+videoTrack) + - [.audioTrack](#module_RTKParticipant--module.exports+audioTrack) + - [.screenShareTracks](#module_RTKParticipant--module.exports+screenShareTracks) + - [.videoEnabled](#module_RTKParticipant--module.exports+videoEnabled) + - [.audioEnabled](#module_RTKParticipant--module.exports+audioEnabled) + - [.screenShareEnabled](#module_RTKParticipant--module.exports+screenShareEnabled) + - [.producers](#module_RTKParticipant--module.exports+producers) + - [.manualProducerConfig](#module_RTKParticipant--module.exports+manualProducerConfig) + - [.supportsRemoteControl](#module_RTKParticipant--module.exports+supportsRemoteControl) + - [.presetName](#module_RTKParticipant--module.exports+presetName) + - [.stageStatus](#module_RTKParticipant--module.exports+stageStatus) + - [.telemetry](#module_RTKParticipant--module.exports+telemetry) + - [.isPinned](#module_RTKParticipant--module.exports+isPinned) + - [.setVideoEnabled(videoEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setVideoEnabled) + - [.setAudioEnabled(audioEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setAudioEnabled) + - [.setScreenShareEnabled(screenShareEnabled, [emitEvent])](#module_RTKParticipant--module.exports+setScreenShareEnabled) + - [.pin()](#module_RTKParticipant--module.exports+pin) + - [.unpin()](#module_RTKParticipant--module.exports+unpin) + - [.setIsPinned(isPinned, [emitEvent])](#module_RTKParticipant--module.exports+setIsPinned) + - [.disableAudio()](#module_RTKParticipant--module.exports+disableAudio) + - [.kick()](#module_RTKParticipant--module.exports+kick) + - [.disableVideo()](#module_RTKParticipant--module.exports+disableVideo) + - [.registerVideoElement(videoElem)](#module_RTKParticipant--module.exports+registerVideoElement) + - [.deregisterVideoElement([videoElem])](#module_RTKParticipant--module.exports+deregisterVideoElement) + - [.updateVideo(e)](#module_RTKParticipant--module.exports+updateVideo) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, participant, self, roomSocket) -| Param | Type | -| --- | --- | -| context | Context | -| participant | IRTKParticipant | -| self | Self | -| roomSocket | RoomSocketHandler | +| Param | Type | +| ----------- | ------------------------------ | +| context | Context | +| participant | IRTKParticipant | +| self | Self | +| roomSocket | RoomSocketHandler | #### module.exports.id + The peer ID of the participant. The participants are indexed by this ID in the participant map. @@ -80,148 +84,171 @@ The participants are indexed by this ID in the participant map. #### module.exports.userId + The user ID of the participant. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.name + The name of the participant. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.picture + The picture of the participant. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.customRTKParticipantId + The custom id of the participant set during Add RTKParticipant REST API **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### ~~module.exports.clientSpecificId~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.device + The device configuration of the participant. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.videoTrack + The participant's video track. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.audioTrack + The participant's audio track. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.screenShareTracks + The participant's screenshare video and audio track. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.videoEnabled + This is true if the participant's video is enabled. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.audioEnabled + This is true if the participant's audio is enabled. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.screenShareEnabled + This is true if the participant is screensharing. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.producers + producers created by participant **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.manualProducerConfig + producer config passed during manual subscription **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.supportsRemoteControl + This is true if the participant supports remote control. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.presetName + The preset of the participant. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.stageStatus + Denotes the participants's current stage status. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.isPinned + Returns true if the participant is pinned. **Kind**: instance property of [module.exports](#exp_module_RTKParticipant--module.exports) #### module.exports.setVideoEnabled(videoEnabled, [emitEvent]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| videoEnabled | boolean | | -| [emitEvent] | boolean | true | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | Default | +| ------------ | -------------------- | ----------------- | +| videoEnabled | boolean | | +| [emitEvent] | boolean | true | #### module.exports.setAudioEnabled(audioEnabled, [emitEvent]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| audioEnabled | boolean | | -| [emitEvent] | boolean | true | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | Default | +| ------------ | -------------------- | ----------------- | +| audioEnabled | boolean | | +| [emitEvent] | boolean | true | #### module.exports.setScreenShareEnabled(screenShareEnabled, [emitEvent]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| screenShareEnabled | boolean | | -| [emitEvent] | boolean | true | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | Default | +| ------------------ | -------------------- | ----------------- | +| screenShareEnabled | boolean | | +| [emitEvent] | boolean | true | #### module.exports.pin() + Returns `participant.id` if user has permission to pin participants. @@ -229,6 +256,7 @@ to pin participants. #### module.exports.unpin() + Returns `participant.id` if user has permission to unpin participants. @@ -236,16 +264,18 @@ to unpin participants. #### module.exports.setIsPinned(isPinned, [emitEvent]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| isPinned | boolean | | -| [emitEvent] | boolean | true | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | Default | +| ----------- | -------------------- | ----------------- | +| isPinned | boolean | | +| [emitEvent] | boolean | true | #### module.exports.disableAudio() + Disables audio for this participant. Requires the permission to disable participant audio. @@ -253,6 +283,7 @@ Requires the permission to disable participant audio. #### module.exports.kick() + Kicks this participant from the meeting. Requires the permission to kick a participant. @@ -260,6 +291,7 @@ Requires the permission to kick a participant. #### module.exports.disableVideo() + Disables video for this participant. Requires the permission to disable video for a participant. @@ -267,29 +299,31 @@ Requires the permission to disable video for a participant. #### module.exports.registerVideoElement(videoElem) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | -| --- | --- | -| videoElem | HTMLVideoElement | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | +| --------- | ----------------------------- | +| videoElem | HTMLVideoElement | #### module.exports.deregisterVideoElement([videoElem]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) -| Param | Type | -| --- | --- | -| [videoElem] | HTMLVideoElement | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) + +| Param | Type | +| ----------- | ----------------------------- | +| [videoElem] | HTMLVideoElement | #### module.exports.updateVideo(e) -Internal method, do not use -**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) +Internal method, do not use -| Param | Type | -| --- | --- | -| e | HTMLVideoElement | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipant--module.exports) +| Param | Type | +| ----- | ----------------------------- | +| e | HTMLVideoElement | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipantMap.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipantMap.md index f10720836d026ca..c894fa0a1e8958c 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipantMap.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipantMap.md @@ -14,55 +14,57 @@ For example, when a participant is added to this map, a `participantJoined` even emitted from the map. When a participant object emits an event `videoUpdate`, the map re-emits that event (provided the participant is present in the map). - -* [RTKParticipantMap](#module_RTKParticipantMap) - * [module.exports](#exp_module_RTKParticipantMap--module.exports) ⏏ - * [new module.exports(logger, [options])](#new_module_RTKParticipantMap--module.exports_new) - * [.add(participant, [emitEvent])](#module_RTKParticipantMap--module.exports+add) - * [.clear([emitEvent], [removeListeners])](#module_RTKParticipantMap--module.exports+clear) - * [.delete(participantId, [emitEvent], [removeListeners])](#module_RTKParticipantMap--module.exports+delete) +- [RTKParticipantMap](#module_RTKParticipantMap) + - [module.exports](#exp_module_RTKParticipantMap--module.exports) ⏏ + - [new module.exports(logger, [options])](#new_module_RTKParticipantMap--module.exports_new) + - [.add(participant, [emitEvent])](#module_RTKParticipantMap--module.exports+add) + - [.clear([emitEvent], [removeListeners])](#module_RTKParticipantMap--module.exports+clear) + - [.delete(participantId, [emitEvent], [removeListeners])](#module_RTKParticipantMap--module.exports+delete) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(logger, [options]) -| Param | Type | -| --- | --- | -| logger | Logger | -| [options] | MapEvents | +| Param | Type | +| --------- | ---------------------- | +| logger | Logger | +| [options] | MapEvents | #### module.exports.add(participant, [emitEvent]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| participant | T | | -| [emitEvent] | boolean | true | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) + +| Param | Type | Default | +| ----------- | -------------------- | ----------------- | +| participant | T | | +| [emitEvent] | boolean | true | #### module.exports.clear([emitEvent], [removeListeners]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| [emitEvent] | boolean | true | -| [removeListeners] | boolean | false | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) + +| Param | Type | Default | +| ----------------- | -------------------- | ------------------ | +| [emitEvent] | boolean | true | +| [removeListeners] | boolean | false | #### module.exports.delete(participantId, [emitEvent], [removeListeners]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| participantId | string | | -| [emitEvent] | boolean | true | -| [removeListeners] | boolean | false | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipantMap--module.exports) +| Param | Type | Default | +| ----------------- | -------------------- | ------------------ | +| participantId | string | | +| [emitEvent] | boolean | true | +| [removeListeners] | boolean | false | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipants.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipants.md index 6cc9cfa343f6be8..85f7c46ef94b31e 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipants.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKParticipants.md @@ -10,106 +10,114 @@ web_core_version: 1.2.4 This module represents all the participants in the meeting (except the local user). It consists of 4 maps: + - `joined`: A map of all participants that have joined the meeting. - `waitlisted`: A map of all participants that have been added to the waitlist. - `active`: A map of active participants who should be displayed in the meeting grid. - `pinned`: A map of pinned participants. - * [RTKParticipants](#module_RTKParticipants) - * [module.exports](#exp_module_RTKParticipants--module.exports) ⏏ - * [new module.exports(context, self, roomSocketHandler)](#new_module_RTKParticipants--module.exports_new) - * [.waitlisted](#module_RTKParticipants--module.exports+waitlisted) - * [.joined](#module_RTKParticipants--module.exports+joined) - * ~~[.active](#module_RTKParticipants--module.exports+active)~~ - * [.videoSubscribed](#module_RTKParticipants--module.exports+videoSubscribed) - * [.audioSubscribed](#module_RTKParticipants--module.exports+audioSubscribed) - * [.pinned](#module_RTKParticipants--module.exports+pinned) - * [.all](#module_RTKParticipants--module.exports+all) - * [.pip](#module_RTKParticipants--module.exports+pip) - * [.telemetry](#module_RTKParticipants--module.exports+telemetry) - * [.viewMode](#module_RTKParticipants--module.exports+viewMode) - * [.currentPage](#module_RTKParticipants--module.exports+currentPage) - * [.lastActiveSpeaker](#module_RTKParticipants--module.exports+lastActiveSpeaker) - * [.selectedPeers](#module_RTKParticipants--module.exports+selectedPeers) - * [.count](#module_RTKParticipants--module.exports+count) - * [.maxActiveRTKParticipantsCount](#module_RTKParticipants--module.exports+maxActiveRTKParticipantsCount) - * [.pageCount](#module_RTKParticipants--module.exports+pageCount) - * [.setMaxActiveRTKParticipantsCount(limit)](#module_RTKParticipants--module.exports+setMaxActiveRTKParticipantsCount) - * [.acceptWaitingRoomRequest(id)](#module_RTKParticipants--module.exports+acceptWaitingRoomRequest) - * [.acceptAllWaitingRoomRequest(userIds)](#module_RTKParticipants--module.exports+acceptAllWaitingRoomRequest) - * [.rejectWaitingRoomRequest(id)](#module_RTKParticipants--module.exports+rejectWaitingRoomRequest) - * [.setViewMode(viewMode)](#module_RTKParticipants--module.exports+setViewMode) - * [.subscribe(peerIds, [kinds])](#module_RTKParticipants--module.exports+subscribe) - * [.unsubscribe(peerIds, [kinds])](#module_RTKParticipants--module.exports+unsubscribe) - * [.setPage(page)](#module_RTKParticipants--module.exports+setPage) - * [.disableAllAudio(allowUnmute)](#module_RTKParticipants--module.exports+disableAllAudio) - * [.disableAllVideo()](#module_RTKParticipants--module.exports+disableAllVideo) - * ~~[.disableAudio(participantId)](#module_RTKParticipants--module.exports+disableAudio)~~ - * ~~[.disableVideo(participantId)](#module_RTKParticipants--module.exports+disableVideo)~~ - * ~~[.kick(participantId)](#module_RTKParticipants--module.exports+kick)~~ - * [.kickAll()](#module_RTKParticipants--module.exports+kickAll) - * [.broadcastMessage(type, payload, target)](#module_RTKParticipants--module.exports+broadcastMessage) - * [.getAllJoinedPeers(searchQuery, limit, offset)](#module_RTKParticipants--module.exports+getAllJoinedPeers) - * [.getRTKParticipantsInMeetingPreJoin()](#module_RTKParticipants--module.exports+getRTKParticipantsInMeetingPreJoin) + - [module.exports](#exp_module_RTKParticipants--module.exports) ⏏ + - [new module.exports(context, self, roomSocketHandler)](#new_module_RTKParticipants--module.exports_new) + - [.waitlisted](#module_RTKParticipants--module.exports+waitlisted) + - [.joined](#module_RTKParticipants--module.exports+joined) + - ~~[.active](#module_RTKParticipants--module.exports+active)~~ + - [.videoSubscribed](#module_RTKParticipants--module.exports+videoSubscribed) + - [.audioSubscribed](#module_RTKParticipants--module.exports+audioSubscribed) + - [.pinned](#module_RTKParticipants--module.exports+pinned) + - [.all](#module_RTKParticipants--module.exports+all) + - [.pip](#module_RTKParticipants--module.exports+pip) + - [.telemetry](#module_RTKParticipants--module.exports+telemetry) + - [.viewMode](#module_RTKParticipants--module.exports+viewMode) + - [.currentPage](#module_RTKParticipants--module.exports+currentPage) + - [.lastActiveSpeaker](#module_RTKParticipants--module.exports+lastActiveSpeaker) + - [.selectedPeers](#module_RTKParticipants--module.exports+selectedPeers) + - [.count](#module_RTKParticipants--module.exports+count) + - [.maxActiveRTKParticipantsCount](#module_RTKParticipants--module.exports+maxActiveRTKParticipantsCount) + - [.pageCount](#module_RTKParticipants--module.exports+pageCount) + - [.setMaxActiveRTKParticipantsCount(limit)](#module_RTKParticipants--module.exports+setMaxActiveRTKParticipantsCount) + - [.acceptWaitingRoomRequest(id)](#module_RTKParticipants--module.exports+acceptWaitingRoomRequest) + - [.acceptAllWaitingRoomRequest(userIds)](#module_RTKParticipants--module.exports+acceptAllWaitingRoomRequest) + - [.rejectWaitingRoomRequest(id)](#module_RTKParticipants--module.exports+rejectWaitingRoomRequest) + - [.setViewMode(viewMode)](#module_RTKParticipants--module.exports+setViewMode) + - [.subscribe(peerIds, [kinds])](#module_RTKParticipants--module.exports+subscribe) + - [.unsubscribe(peerIds, [kinds])](#module_RTKParticipants--module.exports+unsubscribe) + - [.setPage(page)](#module_RTKParticipants--module.exports+setPage) + - [.disableAllAudio(allowUnmute)](#module_RTKParticipants--module.exports+disableAllAudio) + - [.disableAllVideo()](#module_RTKParticipants--module.exports+disableAllVideo) + - ~~[.disableAudio(participantId)](#module_RTKParticipants--module.exports+disableAudio)~~ + - ~~[.disableVideo(participantId)](#module_RTKParticipants--module.exports+disableVideo)~~ + - ~~[.kick(participantId)](#module_RTKParticipants--module.exports+kick)~~ + - [.kickAll()](#module_RTKParticipants--module.exports+kickAll) + - [.broadcastMessage(type, payload, target)](#module_RTKParticipants--module.exports+broadcastMessage) + - [.getAllJoinedPeers(searchQuery, limit, offset)](#module_RTKParticipants--module.exports+getAllJoinedPeers) + - [.getRTKParticipantsInMeetingPreJoin()](#module_RTKParticipants--module.exports+getRTKParticipantsInMeetingPreJoin) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, self, roomSocketHandler) + This constructs a new Participant object and maintains the maps of active/joined/waitlisted/pinned/selectedPeers maps. self : Self - -| Param | Type | -| --- | --- | -| context | Context | -| self | Self | -| roomSocketHandler | RoomSocketHandler | +| Param | Type | +| ----------------- | ------------------------------ | +| context | Context | +| self | Self | +| roomSocketHandler | RoomSocketHandler | #### module.exports.waitlisted + Returns a list of participants waiting to join the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.joined + Returns a list of all participants in the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### ~~module.exports.active~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.videoSubscribed + Returns a list of participants whose video streams are currently consumed. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.audioSubscribed + Returns a list of participants whose audio streams are currently consumed. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.pinned + Returns a list of participants who have been pinned. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.all + Returns all added participants irrespective of whether they are currently in the meeting or not @@ -117,16 +125,19 @@ in the meeting or not #### module.exports.pip + Return the controls for Picture-in-Picture **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.viewMode + Indicates whether the meeting is in 'ACTIVE_GRID' mode or 'PAGINATED' mode. In 'ACTIVE_GRID' mode, participants are populated in the participants.active map @@ -141,6 +152,7 @@ changed by the user using setPage(page). #### module.exports.currentPage + This indicates the current page that has been set by the user in PAGINATED mode. If the meeting is in ACTIVE_GRID mode, this value will be 0. @@ -148,24 +160,28 @@ If the meeting is in ACTIVE_GRID mode, this value will be 0. #### module.exports.lastActiveSpeaker + This stores the `participantId` of the last participant who spoke in the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.selectedPeers + Keeps a list of all participants who have been present in the selected peers list. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.count + Returns the number of participants who are joined in the meeting. **Kind**: instance property of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.maxActiveRTKParticipantsCount + Returns the maximum number of participants that can be present in the active map. @@ -173,6 +189,7 @@ the active map. #### module.exports.pageCount + Returns the number of pages that are available in the meeting in PAGINATED mode. If the meeting is in ACTIVE_GRID mode, this value will be 0. @@ -180,187 +197,204 @@ If the meeting is in ACTIVE_GRID mode, this value will be 0. #### module.exports.setMaxActiveRTKParticipantsCount(limit) + Updates the maximum number of participants that are populated in the active map. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ----- | ------------------- | ----------------- | | limit | number | Updated max limit | #### module.exports.acceptWaitingRoomRequest(id) + Accepts requests from waitlisted participants if user has appropriate permissions. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| id | string | peerId or userId of the waitlisted participant. | +| Param | Type | Description | +| ----- | ------------------- | ----------------------------------------------- | +| id | string | peerId or userId of the waitlisted participant. | #### module.exports.acceptAllWaitingRoomRequest(userIds) + We need a new event for socket service events since if we send them all together, sequence of events can be unreliable -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | -| --- | --- | -| userIds | Array.<string> | +| Param | Type | +| ------- | --------------------------------- | +| userIds | Array.<string> | #### module.exports.rejectWaitingRoomRequest(id) + Rejects requests from waitlisted participants if user has appropriate permissions. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| id | string | participantId of the waitlisted participant. | +| Param | Type | Description | +| ----- | ------------------- | -------------------------------------------- | +| id | string | participantId of the waitlisted participant. | #### module.exports.setViewMode(viewMode) + Sets the view mode of the meeting to either ACTIVE_GRID or PAGINATED. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| -------- | --------------------- | ---------------------------------------------------- | | viewMode | ViewMode | The mode in which the active map should be populated | #### module.exports.subscribe(peerIds, [kinds]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | -| --- | --- | -| peerIds | Array.<string> | -| [kinds] | Array.<('audio'\|'video'\|'screenshareAudio'\|'screenshareVideo')> | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) + +| Param | Type | +| ------- | ----------------------------------------------------------------------------------------------------------------------------- | +| peerIds | Array.<string> | +| [kinds] | Array.<('audio'\|'video'\|'screenshareAudio'\|'screenshareVideo')> | #### module.exports.unsubscribe(peerIds, [kinds]) -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | -| --- | --- | -| peerIds | Array.<string> | -| [kinds] | Array.<('audio'\|'video'\|'screenshareAudio'\|'screenshareVideo')> | +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) + +| Param | Type | +| ------- | ----------------------------------------------------------------------------------------------------------------------------- | +| peerIds | Array.<string> | +| [kinds] | Array.<('audio'\|'video'\|'screenshareAudio'\|'screenshareVideo')> | #### module.exports.setPage(page) + Populates the active map with participants present in the page number indicated by the parameter `page` in PAGINATED mode. Does not do anything in ACTIVE_GRID mode. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| page | number | The page number to be set. | +| Param | Type | Description | +| ----- | ------------------- | -------------------------- | +| page | number | The page number to be set. | #### module.exports.disableAllAudio(allowUnmute) + Disables audio for all participants in the meeting. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ----------- | -------------------- | -------------------------------------------------- | | allowUnmute | boolean | Allow participants to unmute after they are muted. | #### module.exports.disableAllVideo() + Disables video for all participants in the meeting. **Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) #### ~~module.exports.disableAudio(participantId)~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------------- | ------------------- | ------------------------------ | | participantId | string | ID of participant to be muted. | #### ~~module.exports.disableVideo(participantId)~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------------- | ------------------- | ------------------------------ | | participantId | string | ID of participant to be muted. | #### ~~module.exports.kick(participantId)~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------------- | ------------------- | ------------------------------- | | participantId | string | ID of participant to be kicked. | #### module.exports.kickAll() + Kicks all participants from the meeting. **Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) #### module.exports.broadcastMessage(type, payload, target) + Broadcasts the message to participants If no `target` is specified it is sent to all participants including `self`. -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| type | string | | -| payload | BroadcastMessagePayload | | -| target | BroadcastMessageTarget | object containing a list of `participantIds` or object containing `presetName` - every user with that preset will be sent the message | +| Param | Type | Description | +| ------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | +| type | string | | +| payload | BroadcastMessagePayload | | +| target | BroadcastMessageTarget | object containing a list of `participantIds` or object containing `presetName` - every user with that preset will be sent the message | #### module.exports.getAllJoinedPeers(searchQuery, limit, offset) + Returns all peers currently present in the room If you are in a group call, use `meeting.participants.joined` instead -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) -| Param | Type | -| --- | --- | -| searchQuery | string | -| limit | number | -| offset | number | +| Param | Type | +| ----------- | ------------------- | +| searchQuery | string | +| limit | number | +| offset | number | #### module.exports.getRTKParticipantsInMeetingPreJoin() + Returns all peers currently in the room, is a non paginated call and should only be used if you are in a non room joined state, if in a joined group call, use `meeting.participants.joined` -**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKParticipants--module.exports) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPermissionsPreset.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPermissionsPreset.md index e8da972e0b7c931..ac3f6c4b61d2b82 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPermissionsPreset.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPermissionsPreset.md @@ -10,52 +10,52 @@ web_core_version: 1.2.4 The PermissionPreset class represents the meeting permissions for the current participant - -* [PermissionPreset](#module_PermissionPreset) - * _instance_ - * [.stageEnabled](#module_PermissionPreset+stageEnabled) - * [.stageAccess](#module_PermissionPreset+stageAccess) - * [.acceptWaitingRequests](#module_PermissionPreset+acceptWaitingRequests) - * [.requestProduceVideo](#module_PermissionPreset+requestProduceVideo) - * [.requestProduceAudio](#module_PermissionPreset+requestProduceAudio) - * [.requestProduceScreenshare](#module_PermissionPreset+requestProduceScreenshare) - * [.canAllowParticipantAudio](#module_PermissionPreset+canAllowParticipantAudio) - * [.canAllowParticipantScreensharing](#module_PermissionPreset+canAllowParticipantScreensharing) - * [.canAllowParticipantVideo](#module_PermissionPreset+canAllowParticipantVideo) - * [.canDisableParticipantAudio](#module_PermissionPreset+canDisableParticipantAudio) - * [.canDisableParticipantVideo](#module_PermissionPreset+canDisableParticipantVideo) - * [.kickParticipant](#module_PermissionPreset+kickParticipant) - * [.pinParticipant](#module_PermissionPreset+pinParticipant) - * [.canRecord](#module_PermissionPreset+canRecord) - * ~~[.waitingRoomType](#module_PermissionPreset+waitingRoomType)~~ - * [.waitingRoomBehaviour](#module_PermissionPreset+waitingRoomBehaviour) - * [.plugins](#module_PermissionPreset+plugins) - * [.polls](#module_PermissionPreset+polls) - * ~~[.produceVideo](#module_PermissionPreset+produceVideo)~~ - * ~~[.requestProduce](#module_PermissionPreset+requestProduce)~~ - * [.canProduceVideo](#module_PermissionPreset+canProduceVideo) - * ~~[.produceScreenshare](#module_PermissionPreset+produceScreenshare)~~ - * [.canProduceScreenshare](#module_PermissionPreset+canProduceScreenshare) - * ~~[.produceAudio](#module_PermissionPreset+produceAudio)~~ - * [.canProduceAudio](#module_PermissionPreset+canProduceAudio) - * [.chatPublic](#module_PermissionPreset+chatPublic) - * [.chatPrivate](#module_PermissionPreset+chatPrivate) - * [.hiddenParticipant](#module_PermissionPreset+hiddenParticipant) - * [.showParticipantList](#module_PermissionPreset+showParticipantList) - * ~~[.canChangeParticipantRole](#module_PermissionPreset+canChangeParticipantRole)~~ - * [.canChangeParticipantPermissions](#module_PermissionPreset+canChangeParticipantPermissions) - * ~~[.canChangeTheme](#module_PermissionPreset+canChangeTheme)~~ - * ~~[.canPresent](#module_PermissionPreset+canPresent)~~ - * ~~[.acceptPresentRequests](#module_PermissionPreset+acceptPresentRequests)~~ - * ~~[.maxScreenShareCount](#module_PermissionPreset+maxScreenShareCount)~~ - * [.canLivestream](#module_PermissionPreset+canLivestream) - * _static_ - * [.fromResponse()](#module_PermissionPreset.fromResponse) - * [.default()](#module_PermissionPreset.default) +- [PermissionPreset](#module_PermissionPreset) + - _instance_ + - [.stageEnabled](#module_PermissionPreset+stageEnabled) + - [.stageAccess](#module_PermissionPreset+stageAccess) + - [.acceptWaitingRequests](#module_PermissionPreset+acceptWaitingRequests) + - [.requestProduceVideo](#module_PermissionPreset+requestProduceVideo) + - [.requestProduceAudio](#module_PermissionPreset+requestProduceAudio) + - [.requestProduceScreenshare](#module_PermissionPreset+requestProduceScreenshare) + - [.canAllowParticipantAudio](#module_PermissionPreset+canAllowParticipantAudio) + - [.canAllowParticipantScreensharing](#module_PermissionPreset+canAllowParticipantScreensharing) + - [.canAllowParticipantVideo](#module_PermissionPreset+canAllowParticipantVideo) + - [.canDisableParticipantAudio](#module_PermissionPreset+canDisableParticipantAudio) + - [.canDisableParticipantVideo](#module_PermissionPreset+canDisableParticipantVideo) + - [.kickParticipant](#module_PermissionPreset+kickParticipant) + - [.pinParticipant](#module_PermissionPreset+pinParticipant) + - [.canRecord](#module_PermissionPreset+canRecord) + - ~~[.waitingRoomType](#module_PermissionPreset+waitingRoomType)~~ + - [.waitingRoomBehaviour](#module_PermissionPreset+waitingRoomBehaviour) + - [.plugins](#module_PermissionPreset+plugins) + - [.polls](#module_PermissionPreset+polls) + - ~~[.produceVideo](#module_PermissionPreset+produceVideo)~~ + - ~~[.requestProduce](#module_PermissionPreset+requestProduce)~~ + - [.canProduceVideo](#module_PermissionPreset+canProduceVideo) + - ~~[.produceScreenshare](#module_PermissionPreset+produceScreenshare)~~ + - [.canProduceScreenshare](#module_PermissionPreset+canProduceScreenshare) + - ~~[.produceAudio](#module_PermissionPreset+produceAudio)~~ + - [.canProduceAudio](#module_PermissionPreset+canProduceAudio) + - [.chatPublic](#module_PermissionPreset+chatPublic) + - [.chatPrivate](#module_PermissionPreset+chatPrivate) + - [.hiddenParticipant](#module_PermissionPreset+hiddenParticipant) + - [.showParticipantList](#module_PermissionPreset+showParticipantList) + - ~~[.canChangeParticipantRole](#module_PermissionPreset+canChangeParticipantRole)~~ + - [.canChangeParticipantPermissions](#module_PermissionPreset+canChangeParticipantPermissions) + - ~~[.canChangeTheme](#module_PermissionPreset+canChangeTheme)~~ + - ~~[.canPresent](#module_PermissionPreset+canPresent)~~ + - ~~[.acceptPresentRequests](#module_PermissionPreset+acceptPresentRequests)~~ + - ~~[.maxScreenShareCount](#module_PermissionPreset+maxScreenShareCount)~~ + - [.canLivestream](#module_PermissionPreset+canLivestream) + - _static_ + - [.fromResponse()](#module_PermissionPreset.fromResponse) + - [.default()](#module_PermissionPreset.default) ### meeting.self.permissions.stageEnabled + The `stageEnabled` property returns a boolean value. If `true`, stage management is available for the participant. @@ -63,6 +63,7 @@ If `true`, stage management is available for the participant. ### meeting.self.permissions.stageAccess + The `stageAccess` property dictates how a user interacts with the stage. There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST`; @@ -70,6 +71,7 @@ There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST`; ### meeting.self.permissions.acceptWaitingRequests + The `acceptWaitingRequests` returns boolean value. If `true`, participant can accept the request of waiting participant. @@ -77,6 +79,7 @@ If `true`, participant can accept the request of waiting participant. ### meeting.self.permissions.requestProduceVideo + The `requestProduceVideo` returns boolean value. If `true`, participant can send request to participants about producing video. @@ -85,6 +88,7 @@ about producing video. ### meeting.self.permissions.requestProduceAudio + The `requestProduceAudio` returns boolean value. If `true`, participant can send request to participants about producing audio. @@ -93,6 +97,7 @@ about producing audio. ### meeting.self.permissions.requestProduceScreenshare + The `requestProduceScreenshare` returns boolean value. If `true`, participant can send request to participants about sharing screen. @@ -101,6 +106,7 @@ about sharing screen. ### meeting.self.permissions.canAllowParticipantAudio + The `canAllowParticipantAudio` returns boolean value. If `true`, participant can enable other participants` audio. @@ -108,6 +114,7 @@ If `true`, participant can enable other participants` audio. ### meeting.self.permissions.canAllowParticipantScreensharing + The `canAllowParticipantScreensharing` returns boolean value. If `true`, participant can enable other participants` screen share. @@ -115,6 +122,7 @@ If `true`, participant can enable other participants` screen share. ### meeting.self.permissions.canAllowParticipantVideo + The `canAllowParticipantVideo` returns boolean value. If `true`, participant can enable other participants` video. @@ -122,18 +130,21 @@ If `true`, participant can enable other participants` video. ### meeting.self.permissions.canDisableParticipantAudio + If `true`, a participant can disable other participants` audio. **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canDisableParticipantVideo + If `true`, a participant can disable other participants` video. **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.kickParticipant + The `kickParticipant` returns boolean value. If `true`, participant can remove other participants from the meeting. @@ -141,6 +152,7 @@ If `true`, participant can remove other participants from the meeting. ### meeting.self.permissions.pinParticipant + The `pinParticipant` returns boolean value. If `true`, participant can pin a participant in the meeting. @@ -148,6 +160,7 @@ If `true`, participant can pin a participant in the meeting. ### meeting.self.permissions.canRecord + The `canRecord` returns boolean value. If `true`, participant can record the meeting. @@ -155,12 +168,14 @@ If `true`, participant can record the meeting. ### ~~meeting.self.permissions.waitingRoomType~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.waitingRoomBehaviour + The `waitingRoomType` returns string value. type of waiting room behavior possible values are `SKIP`, `ON_PRIVILEGED_USER_ENTRY`, `SKIP_ON_ACCEPT` @@ -169,6 +184,7 @@ possible values are `SKIP`, `ON_PRIVILEGED_USER_ENTRY`, `SKIP_ON_ACCEPT` ### meeting.self.permissions.plugins + The `plugins` tells if the participant can act on plugins there are 2 permissions with boolean values, `canStart` and `canClose`. @@ -176,6 +192,7 @@ there are 2 permissions with boolean values, `canStart` and `canClose`. ### meeting.self.permissions.polls + The `polls` tells if the participant can use polls. There are 3 permissions with boolean values, `canCreate`, `canVote`, `canViewResults` @@ -183,18 +200,21 @@ There are 3 permissions with boolean values, `canCreate`, `canVote`, `canViewRes ### ~~meeting.self.permissions.produceVideo~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### ~~meeting.self.permissions.requestProduce~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canProduceVideo + The `canProduceVideo` shows permissions for enabling video. There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` @@ -202,12 +222,14 @@ There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` ### ~~meeting.self.permissions.produceScreenshare~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canProduceScreenshare + The `canProduceScreenshare` shows permissions for sharing screen. There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` @@ -215,12 +237,14 @@ There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` ### ~~meeting.self.permissions.produceAudio~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canProduceAudio + The `canProduceAudio` shows permissions for enabling audio. There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` @@ -228,6 +252,7 @@ There possible values are `ALLOWED`, `NOT_ALLOWED`, `CAN_REQUEST` ### meeting.self.permissions.chatPublic + The `chatPublic` shows permissions for public chat there are 4 permissions `canSend` - if true, the participant can send chat @@ -238,6 +263,7 @@ there are 4 permissions ### meeting.self.permissions.chatPrivate + The `chatPrivate` shows permissions for public chat there are 4 permissions `canSend` - if true, the participant can send private chat @@ -249,6 +275,7 @@ there are 4 permissions ### meeting.self.permissions.hiddenParticipant + The `hiddenParticipant` returns boolean value. If `true`, participant is hidden. @@ -256,6 +283,7 @@ If `true`, participant is hidden. ### meeting.self.permissions.showParticipantList + The `showParticipantList` returns boolean value. If `true`, participant list can be shown to the participant. @@ -263,12 +291,14 @@ If `true`, participant list can be shown to the participant. ### ~~meeting.self.permissions.canChangeParticipantRole~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canChangeParticipantPermissions + The `canChangeParticipantPermissions` returns boolean value. If `true`, allow changing the participants' permissions. @@ -276,40 +306,47 @@ If `true`, allow changing the participants' permissions. ### ~~meeting.self.permissions.canChangeTheme~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### ~~meeting.self.permissions.canPresent~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### ~~meeting.self.permissions.acceptPresentRequests~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### ~~meeting.self.permissions.maxScreenShareCount~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.canLivestream + Livestream **Kind**: instance property of [PermissionPreset](#module_PermissionPreset) ### meeting.self.permissions.fromResponse() + **Kind**: static method of [PermissionPreset](#module_PermissionPreset) **Deprecated.**: Use init() ### meeting.self.permissions.default() + **Kind**: static method of [PermissionPreset](#module_PermissionPreset) -**Deprecated.**: Use init() +**Deprecated.**: Use init() diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPip.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPip.md index 72747a12f6bdcac..6cb2dd696a9ff5f 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPip.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPip.md @@ -46,76 +46,76 @@ Code from ui-kit. Same method used in the avatar component **Kind**: global function -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| context | Context | -| self | Self | +| Param | Type | +| ------- | -------------------- | +| context | Context | +| self | Self | Initialize PiP and prepare sources -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| [options] | Object | -| [options.height] | number | -| [options.width] | number | +| Param | Type | +| ---------------- | ------------------- | +| [options] | Object | +| [options.height] | number | +| [options.width] | number | -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| source | string | +| Param | Type | +| ------ | ------------------- | +| source | string | Add a video source from the participant grid -**Kind**: global function +**Kind**: global function -| Param | Type | Description | -| --- | --- | --- | -| id | string | id for the source (ex. participant id) | -| element | HTMLVideoElement | HTMLVideoElement for the video source | -| enabled | boolean | if source is enabled | -| [displayText] | string | two character display text | +| Param | Type | Description | +| ------------- | ----------------------------- | -------------------------------------- | +| id | string | id for the source (ex. participant id) | +| element | HTMLVideoElement | HTMLVideoElement for the video source | +| enabled | boolean | if source is enabled | +| [displayText] | string | two character display text | Update a video source -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| id | string | -| source | any | +| Param | Type | +| ------ | ------------------- | +| id | string | +| source | any | Remove the video source for the participant -**Kind**: global function +**Kind**: global function -| Param | Description | -| --- | --- | -| id | id for the source (ex. participant id) | +| Param | Description | +| ----- | -------------------------------------- | +| id | id for the source (ex. participant id) | Remove the pinned source -**Kind**: global function +**Kind**: global function -| Param | Description | -| --- | --- | -| id | id for the source (ex. participant id) | +| Param | Description | +| ----- | -------------------------------------- | +| id | id for the source (ex. participant id) | @@ -126,4 +126,4 @@ Remove all sources Enable PiP -**Kind**: global function +**Kind**: global function diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugin.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugin.md index 68d9b48f76fb51b..1dc5407b42362d4 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugin.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugin.md @@ -11,145 +11,159 @@ web_core_version: 1.2.4 The RTKPlugin module represents a single plugin in the meeting. A plugin can be obtained from one of the plugin arrays in `meeting.plugins`. For example, + ```ts const plugin1 = meeting.plugins.active.get(pluginId); const plugin2 = meeting.plugins.all.get(pluginId); ``` - -* [RTKPlugin](#module_RTKPlugin) - * [module.exports](#exp_module_RTKPlugin--module.exports) ⏏ - * [new module.exports(context, plugin, pluginSocketHandler, self, participants, chat, meetingTitle)](#new_module_RTKPlugin--module.exports_new) - * [.telemetry](#module_RTKPlugin--module.exports+telemetry) - * [.sendIframeEvent(message)](#module_RTKPlugin--module.exports+sendIframeEvent) - * [.handleIframeMessage(iframeMessage)](#module_RTKPlugin--module.exports+handleIframeMessage) - * [.sendData(payload)](#module_RTKPlugin--module.exports+sendData) - * [.removeRTKPluginView(viewId)](#module_RTKPlugin--module.exports+removeRTKPluginView) - * [.addRTKPluginView(iframe, viewId)](#module_RTKPlugin--module.exports+addRTKPluginView) - * [.setActive(active)](#module_RTKPlugin--module.exports+setActive) - * [.activateForSelf()](#module_RTKPlugin--module.exports+activateForSelf) - * [.deactivateForSelf()](#module_RTKPlugin--module.exports+deactivateForSelf) - * ~~[.enable()](#module_RTKPlugin--module.exports+enable)~~ - * ~~[.disable()](#module_RTKPlugin--module.exports+disable)~~ - * [.activate()](#module_RTKPlugin--module.exports+activate) - * [.deactivate()](#module_RTKPlugin--module.exports+deactivate) +- [RTKPlugin](#module_RTKPlugin) + - [module.exports](#exp_module_RTKPlugin--module.exports) ⏏ + - [new module.exports(context, plugin, pluginSocketHandler, self, participants, chat, meetingTitle)](#new_module_RTKPlugin--module.exports_new) + - [.telemetry](#module_RTKPlugin--module.exports+telemetry) + - [.sendIframeEvent(message)](#module_RTKPlugin--module.exports+sendIframeEvent) + - [.handleIframeMessage(iframeMessage)](#module_RTKPlugin--module.exports+handleIframeMessage) + - [.sendData(payload)](#module_RTKPlugin--module.exports+sendData) + - [.removeRTKPluginView(viewId)](#module_RTKPlugin--module.exports+removeRTKPluginView) + - [.addRTKPluginView(iframe, viewId)](#module_RTKPlugin--module.exports+addRTKPluginView) + - [.setActive(active)](#module_RTKPlugin--module.exports+setActive) + - [.activateForSelf()](#module_RTKPlugin--module.exports+activateForSelf) + - [.deactivateForSelf()](#module_RTKPlugin--module.exports+deactivateForSelf) + - ~~[.enable()](#module_RTKPlugin--module.exports+enable)~~ + - ~~[.disable()](#module_RTKPlugin--module.exports+disable)~~ + - [.activate()](#module_RTKPlugin--module.exports+activate) + - [.deactivate()](#module_RTKPlugin--module.exports+deactivate) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, plugin, pluginSocketHandler, self, participants, chat, meetingTitle) -| Param | Type | -| --- | --- | -| context | Context | -| plugin | RTKPluginResponse | -| pluginSocketHandler | RTKPluginSocketHandler | -| self | Self | -| participants | Participants | -| chat | Chat | -| meetingTitle | string | +| Param | Type | +| ------------------- | ----------------------------------- | +| context | Context | +| plugin | RTKPluginResponse | +| pluginSocketHandler | RTKPluginSocketHandler | +| self | Self | +| participants | Participants | +| chat | Chat | +| meetingTitle | string | #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKPlugin--module.exports) #### module.exports.sendIframeEvent(message) -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | Description | -| --- | --- | --- | +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) + +| Param | Type | Description | +| ------- | ----------------------------------- | ---------------------------------------- | | message | RTKPluginIframeMessage | Socket message forwarded to this plugin. | #### module.exports.handleIframeMessage(iframeMessage) -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | -| --- | --- | -| iframeMessage | RTKPluginIframeMessage | +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) + +| Param | Type | +| ------------- | ----------------------------------- | +| iframeMessage | RTKPluginIframeMessage | #### module.exports.sendData(payload) + This method is used to send arbitrary data to the plugin. -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | Description | -| --- | --- | --- | -| payload | SendDataOptions | The payload that you want to send inside the plugin. | -| payload.eventName | string | Name of the event. This is used to listen for the event in plugin SDK. | -| payload.data | any | Data you wish to emit. It can assume any data type. | +| Param | Type | Description | +| ----------------- | ---------------------------- | ---------------------------------------------------------------------- | +| payload | SendDataOptions | The payload that you want to send inside the plugin. | +| payload.eventName | string | Name of the event. This is used to listen for the event in plugin SDK. | +| payload.data | any | Data you wish to emit. It can assume any data type. | #### module.exports.removeRTKPluginView(viewId) + This method is used for cleaning up event listeners attached to an iframe. It must be used before the iframe is removed from the DOM. -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | Default | Description | -| --- | --- | --- | --- | +| Param | Type | Default | Description | +| ------ | ------------------- | -------------------------------- | ------------------------------------------------------------------ | | viewId | string | "default" | ID of the view corresponding to this iframe. Default is 'default'. | #### module.exports.addRTKPluginView(iframe, viewId) + This method adds the communication layer between the plugin inside the iframe and the core application (meeting object) in the main window. -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| iframe | HTMLIFrameElement \| ReactNativeWebView | | Iframe element to display this plugin. | -| viewId | string | "default" | ID of the view corresponding to this iframe. Default is 'default'. | +| Param | Type | Default | Description | +| ------ | ----------------------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------ | +| iframe | HTMLIFrameElement \| ReactNativeWebView | | Iframe element to display this plugin. | +| viewId | string | "default" | ID of the view corresponding to this iframe. Default is 'default'. | #### module.exports.setActive(active) -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) -| Param | Type | -| --- | --- | -| active | boolean | +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) + +| Param | Type | +| ------ | -------------------- | +| active | boolean | #### module.exports.activateForSelf() + **Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) #### module.exports.deactivateForSelf() + **Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) #### ~~module.exports.enable()~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) #### ~~module.exports.disable()~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) #### module.exports.activate() + Activate this plugin for all participants. **Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) #### module.exports.deactivate() + Deactivate this plugin for all participants. -**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) +**Kind**: instance method of [module.exports](#exp_module_RTKPlugin--module.exports) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugins.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugins.md index 8ea2b9486986701..ff22e5a74589e76 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugins.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPlugins.md @@ -9,37 +9,40 @@ web_core_version: 1.2.4 The RTKPlugins module consists of all the plugins in the meeting. It has 2 maps: + - `all`: Consists of all the plugins in the meeting. - `active`: Consists of the plugins that are currently in use. - * [RTKPlugins](#module_RTKPlugins) - * [module.exports](#exp_module_RTKPlugins--module.exports) ⏏ - * [new module.exports(logger)](#new_module_RTKPlugins--module.exports_new) - * [.all](#module_RTKPlugins--module.exports+all) - * [.active](#module_RTKPlugins--module.exports+active) + - [module.exports](#exp_module_RTKPlugins--module.exports) ⏏ + - [new module.exports(logger)](#new_module_RTKPlugins--module.exports_new) + - [.all](#module_RTKPlugins--module.exports+all) + - [.active](#module_RTKPlugins--module.exports+active) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(logger) -| Param | Type | -| --- | --- | -| logger | Logger | +| Param | Type | +| ------ | ------------------- | +| logger | Logger | #### module.exports.all + All plugins accessible by the current user. **Kind**: instance property of [module.exports](#exp_module_RTKPlugins--module.exports) #### module.exports.active + All plugins that are currently enabled in the room. -**Kind**: instance property of [module.exports](#exp_module_RTKPlugins--module.exports) +**Kind**: instance property of [module.exports](#exp_module_RTKPlugins--module.exports) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPolls.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPolls.md index 95f20dbb49fe688..25d6abf2a17b0fe 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKPolls.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKPolls.md @@ -10,41 +10,42 @@ web_core_version: 1.2.4 The RTKPolls module consists of the polls that have been created in the meeting. - -* [RTKPolls](#module_RTKPolls) - * [.items](#module_RTKPolls+items) - * [.create(question, options, anonymous, hideVotes)](#module_RTKPolls+create) - * [.vote(pollId, index)](#module_RTKPolls+vote) +- [RTKPolls](#module_RTKPolls) + - [.items](#module_RTKPolls+items) + - [.create(question, options, anonymous, hideVotes)](#module_RTKPolls+create) + - [.vote(pollId, index)](#module_RTKPolls+vote) ### meeting.polls.items + An array of poll items. **Kind**: instance property of [RTKPolls](#module_RTKPolls) ### meeting.polls.create(question, options, anonymous, hideVotes) + Creates a poll in the meeting. -**Kind**: instance method of [RTKPolls](#module_RTKPolls) +**Kind**: instance method of [RTKPolls](#module_RTKPolls) -| Param | Default | Description | -| --- | --- | --- | -| question | | The question that is to be voted for. | -| options | | The options of the poll. | -| anonymous | false | If true, the poll votes are anonymous. | +| Param | Default | Description | +| --------- | ------------------ | ------------------------------------------ | +| question | | The question that is to be voted for. | +| options | | The options of the poll. | +| anonymous | false | If true, the poll votes are anonymous. | | hideVotes | false | If true, the votes on the poll are hidden. | ### meeting.polls.vote(pollId, index) + Casts a vote on an existing poll. -**Kind**: instance method of [RTKPolls](#module_RTKPolls) +**Kind**: instance method of [RTKPolls](#module_RTKPolls) -| Param | Description | -| --- | --- | +| Param | Description | +| ------ | ------------------------------------------ | | pollId | The ID of the poll that is to be voted on. | -| index | The index of the option. | - +| index | The index of the option. | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKRecording.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKRecording.md index 4b2dd3b6116b3dd..e63b1525fae136c 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKRecording.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKRecording.md @@ -11,39 +11,43 @@ web_core_version: 1.2.4 The RTKRecording module represents the state of the current recording, and allows to start/stop recordings and check if there's a recording in progress. - -* [RTKRecording](#module_RTKRecording) - * [.telemetry](#module_RTKRecording+telemetry) - * [.start()](#module_RTKRecording+start) - * [.stop()](#module_RTKRecording+stop) - * [.pause()](#module_RTKRecording+pause) - * [.resume()](#module_RTKRecording+resume) +- [RTKRecording](#module_RTKRecording) + - [.telemetry](#module_RTKRecording+telemetry) + - [.start()](#module_RTKRecording+start) + - [.stop()](#module_RTKRecording+stop) + - [.pause()](#module_RTKRecording+pause) + - [.resume()](#module_RTKRecording+resume) ### meeting.recording.telemetry + **Kind**: instance property of [RTKRecording](#module_RTKRecording) ### meeting.recording.start() + Starts recording the meeting. **Kind**: instance method of [RTKRecording](#module_RTKRecording) ### meeting.recording.stop() + Stops all recording currently in 'RECORDING' state **Kind**: instance method of [RTKRecording](#module_RTKRecording) ### meeting.recording.pause() + Pauses all recording currently in 'RECORDING' state **Kind**: instance method of [RTKRecording](#module_RTKRecording) ### meeting.recording.resume() + Resumes all recording currently in 'PAUSED' state -**Kind**: instance method of [RTKRecording](#module_RTKRecording) +**Kind**: instance method of [RTKRecording](#module_RTKRecording) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelf.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelf.md index aa4a71840eac6b8..1ad8cd81f058059 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelf.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelf.md @@ -12,42 +12,43 @@ The RTKSelf module represents the current user, and allows to modify the state of the user in the meeting. The audio and video streams of the user can be retrieved from this module. - -* [RTKSelf](#module_RTKSelf) - * [.telemetry](#module_RTKSelf+telemetry) - * [.peerId](#module_RTKSelf+peerId) - * [.roomState](#module_RTKSelf+roomState) - * [.permissions](#module_RTKSelf+permissions) - * [.config](#module_RTKSelf+config) - * [.roomJoined](#module_RTKSelf+roomJoined) - * [.isPinned](#module_RTKSelf+isPinned) - * [.cleanupEvents()](#module_RTKSelf+cleanupEvents) - * [.setName(name)](#module_RTKSelf+setName) - * [.setupTracks(options)](#module_RTKSelf+setupTracks) - * [.enableAudio()](#module_RTKSelf+enableAudio) - * [.enableVideo()](#module_RTKSelf+enableVideo) - * [.updateVideoConstraints()](#module_RTKSelf+updateVideoConstraints) - * [.enableScreenShare()](#module_RTKSelf+enableScreenShare) - * [.updateScreenshareConstraints()](#module_RTKSelf+updateScreenshareConstraints) - * [.disableAudio()](#module_RTKSelf+disableAudio) - * [.disableVideo()](#module_RTKSelf+disableVideo) - * [.disableScreenShare()](#module_RTKSelf+disableScreenShare) - * [.getAllDevices()](#module_RTKSelf+getAllDevices) - * [.setIsPinned()](#module_RTKSelf+setIsPinned) - * [.pin()](#module_RTKSelf+pin) - * [.unpin()](#module_RTKSelf+unpin) - * [.hide()](#module_RTKSelf+hide) - * [.show()](#module_RTKSelf+show) - * [.setDevice(device)](#module_RTKSelf+setDevice) - * [.updateVideo()](#module_RTKSelf+updateVideo) +- [RTKSelf](#module_RTKSelf) + - [.telemetry](#module_RTKSelf+telemetry) + - [.peerId](#module_RTKSelf+peerId) + - [.roomState](#module_RTKSelf+roomState) + - [.permissions](#module_RTKSelf+permissions) + - [.config](#module_RTKSelf+config) + - [.roomJoined](#module_RTKSelf+roomJoined) + - [.isPinned](#module_RTKSelf+isPinned) + - [.cleanupEvents()](#module_RTKSelf+cleanupEvents) + - [.setName(name)](#module_RTKSelf+setName) + - [.setupTracks(options)](#module_RTKSelf+setupTracks) + - [.enableAudio()](#module_RTKSelf+enableAudio) + - [.enableVideo()](#module_RTKSelf+enableVideo) + - [.updateVideoConstraints()](#module_RTKSelf+updateVideoConstraints) + - [.enableScreenShare()](#module_RTKSelf+enableScreenShare) + - [.updateScreenshareConstraints()](#module_RTKSelf+updateScreenshareConstraints) + - [.disableAudio()](#module_RTKSelf+disableAudio) + - [.disableVideo()](#module_RTKSelf+disableVideo) + - [.disableScreenShare()](#module_RTKSelf+disableScreenShare) + - [.getAllDevices()](#module_RTKSelf+getAllDevices) + - [.setIsPinned()](#module_RTKSelf+setIsPinned) + - [.pin()](#module_RTKSelf+pin) + - [.unpin()](#module_RTKSelf+unpin) + - [.hide()](#module_RTKSelf+hide) + - [.show()](#module_RTKSelf+show) + - [.setDevice(device)](#module_RTKSelf+setDevice) + - [.updateVideo()](#module_RTKSelf+updateVideo) ### meeting.self.telemetry + **Kind**: instance property of [RTKSelf](#module_RTKSelf) ### meeting.self.peerId + NOTE(ishita1805): Discussed with Ravindra, added a duplicate for consistency when using identifiers in Locker. We might want to look at deprecating the `id` sometime later. @@ -56,6 +57,7 @@ We might want to look at deprecating the `id` sometime later. ### meeting.self.roomState + Returns the current state of room init - Initial State joined - User is in the meeting @@ -69,67 +71,76 @@ ended - The meeting was ended ### meeting.self.permissions + Returns the current permission given to the user for the meeting. **Kind**: instance property of [RTKSelf](#module_RTKSelf) ### meeting.self.config + Returns configuration for the meeting. **Kind**: instance property of [RTKSelf](#module_RTKSelf) ### meeting.self.roomJoined + Returns true if the local participant has joined the meeting. **Kind**: instance property of [RTKSelf](#module_RTKSelf) ### meeting.self.isPinned + Returns true if the current user is pinned. **Kind**: instance property of [RTKSelf](#module_RTKSelf) ### meeting.self.cleanupEvents() + **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.setName(name) + The name of the user can be set by calling this method. This will get reflected to other participants ONLY if this method is called before the room is joined. -**Kind**: instance method of [RTKSelf](#module_RTKSelf) +**Kind**: instance method of [RTKSelf](#module_RTKSelf) -| Param | Type | Description | -| --- | --- | --- | -| name | string | Name of the user. | +| Param | Type | Description | +| ----- | ------------------- | ----------------- | +| name | string | Name of the user. | ### meeting.self.setupTracks(options) + Sets up the local media tracks. -**Kind**: instance method of [RTKSelf](#module_RTKSelf) +**Kind**: instance method of [RTKSelf](#module_RTKSelf) -| Param | Type | Description | -| --- | --- | --- | -| options | Object | The audio and video options. | -| [options.video] | boolean | If true, the video stream is fetched. | -| [options.audio] | boolean | If true, the audio stream is fetched. | +| Param | Type | Description | +| -------------------- | -------------------- | ------------------------------------------------- | +| options | Object | The audio and video options. | +| [options.video] | boolean | If true, the video stream is fetched. | +| [options.audio] | boolean | If true, the audio stream is fetched. | | [options.forceReset] | boolean | If true, force resets tracks before re-acquiring. | ### meeting.self.enableAudio() + This method is used to unmute the local participant's audio. **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.enableVideo() + This method is used to start streaming the local participant's video to the meeting. @@ -137,6 +148,7 @@ to the meeting. ### meeting.self.updateVideoConstraints() + This method is used to apply constraints to the current video stream. @@ -144,6 +156,7 @@ stream. ### meeting.self.enableScreenShare() + This method is used to start sharing the local participant's screen to the meeting. @@ -151,6 +164,7 @@ to the meeting. ### meeting.self.updateScreenshareConstraints() + This method is used to apply constraints to the current screenshare stream. @@ -158,34 +172,40 @@ stream. ### meeting.self.disableAudio() + This method is used to mute the local participant's audio. **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.disableVideo() + This participant is used to disable the local participant's video. **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.disableScreenShare() + This method is used to stop sharing the local participant's screen. **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.getAllDevices() + Returns all media devices accessible by the local participant. **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.setIsPinned() + **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.pin() + Returns `self.id` if user has permission to pin participants. @@ -193,6 +213,7 @@ to pin participants. ### meeting.self.unpin() + Returns `self.id` if user has permission to unpin participants. @@ -200,29 +221,33 @@ to unpin participants. ### meeting.self.hide() + Hide's user's tile in the UI (locally) **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.show() + Show's user's tile in the UI if hidden (locally) **Kind**: instance method of [RTKSelf](#module_RTKSelf) ### meeting.self.setDevice(device) + Change the current media device that is being used by the local participant. -**Kind**: instance method of [RTKSelf](#module_RTKSelf) +**Kind**: instance method of [RTKSelf](#module_RTKSelf) -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------ | ---------------------------- | ------------------------------------------------------------------------------------------------ | | device | MediaDeviceInfo | The device that is to be used. A device of the same `kind` will be replaced. the primary stream. | ### meeting.self.updateVideo() + Internal method, do not use -**Kind**: instance method of [RTKSelf](#module_RTKSelf) +**Kind**: instance method of [RTKSelf](#module_RTKSelf) diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelfMedia.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelfMedia.md index 9e2d6335663b878..be8f537561e76eb 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelfMedia.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKSelfMedia.md @@ -147,16 +147,16 @@ Returns true if screen share is enabled. **Kind**: global variable -**Kind**: global function +**Kind**: global function -| Param | Type | Default | -| --- | --- | --- | -| options | Object | | -| [options.video] | boolean | | -| [options.audio] | boolean | | -| [options.constraints] | MediaConstraints | | -| [skipAwaits] | boolean | false | -| [context] | Context | | +| Param | Type | Default | +| --------------------- | ----------------------------- | ------------------ | +| options | Object | | +| [options.video] | boolean | | +| [options.audio] | boolean | | +| [options.constraints] | MediaConstraints | | +| [skipAwaits] | boolean | false | +| [context] | Context | | @@ -165,21 +165,21 @@ If there are more than 1 audio middlewares, they will be executed in the sequence they were added in. If you want the sequence to be altered, please remove all previous middlewares and re-add. -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| audioMiddleware | AudioMiddleware | +| Param | Type | +| --------------- | ---------------------------- | +| audioMiddleware | AudioMiddleware | Removes the audio middleware, if it is there. -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| audioMiddleware | AudioMiddleware | +| Param | Type | +| --------------- | ---------------------------- | +| audioMiddleware | AudioMiddleware | @@ -193,32 +193,32 @@ If there are more than 1 video middlewares, they will be executed in the sequence they were added in. If you want the sequence to be altered, please remove all previous middlewares and re-add. -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| videoMiddleware | VideoMiddleware | +| Param | Type | +| --------------- | ---------------------------- | +| videoMiddleware | VideoMiddleware | Sets global config to be used by video middlewares. -**Kind**: global function +**Kind**: global function -| Param | Type | Description | -| --- | --- | --- | -| config | VideoMiddlewareGlobalConfig | config | -| config.disablePerFrameCanvasRendering | boolean | If set to true, Instead of calling Middleware for every frame, Middleware will only be called once that too with empty canvas, it is the responsibility of the middleware author to keep updating this canvas. `meeting.self.rawVideoTrack` can be used to retrieve video track for the periodic updates. | +| Param | Type | Description | +| ------------------------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| config | VideoMiddlewareGlobalConfig | config | +| config.disablePerFrameCanvasRendering | boolean | If set to true, Instead of calling Middleware for every frame, Middleware will only be called once that too with empty canvas, it is the responsibility of the middleware author to keep updating this canvas. `meeting.self.rawVideoTrack` can be used to retrieve video track for the periodic updates. | Removes the video middleware, if it is there. -**Kind**: global function +**Kind**: global function -| Param | Type | -| --- | --- | -| videoMiddleware | VideoMiddleware | +| Param | Type | +| --------------- | ---------------------------- | +| videoMiddleware | VideoMiddleware | @@ -249,20 +249,19 @@ Returns the local participant's speaker devices. Returns the local participant's device, indexed by ID and kind. -**Kind**: global function +**Kind**: global function -| Param | Type | Description | -| --- | --- | --- | -| deviceId | string | The ID of the device. | -| kind | 'audio' \| 'video' \| 'speaker' | The kind of the device: audio, video, or speaker. | +| Param | Type | Description | +| -------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------- | +| deviceId | string | The ID of the device. | +| kind | 'audio' \| 'video' \| 'speaker' | The kind of the device: audio, video, or speaker. | Change the current media device that is being used by the local participant. -**Kind**: global function +**Kind**: global function -| Param | Type | Description | -| --- | --- | --- | +| Param | Type | Description | +| ------ | ---------------------------- | ------------------------------------------------------------------------------------------------ | | device | MediaDeviceInfo | The device that is to be used. A device of the same `kind` will be replaced. the primary stream. | - diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKStage.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKStage.md index 787b7778e4ea72e..35bd0dcc153011f 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKStage.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKStage.md @@ -13,70 +13,76 @@ RTKStage refers to a virtual area, where participants stream are visible to othe When a participant is off stage, they are not producing media but only consuming media from participants who are on RTKStage - -* [RTKStage](#module_RTKStage) - * [module.exports](#exp_module_RTKStage--module.exports) ⏏ - * [new module.exports(context, self, participants, stageSocketHandler, roomSocketHandler)](#new_module_RTKStage--module.exports_new) - * [.telemetry](#module_RTKStage--module.exports+telemetry) - * [.peerId](#module_RTKStage--module.exports+peerId) - * [.getAccessRequests()](#module_RTKStage--module.exports+getAccessRequests) - * [.requestAccess()](#module_RTKStage--module.exports+requestAccess) - * [.cancelRequestAccess()](#module_RTKStage--module.exports+cancelRequestAccess) - * [.grantAccess()](#module_RTKStage--module.exports+grantAccess) - * [.denyAccess()](#module_RTKStage--module.exports+denyAccess) - * [.join()](#module_RTKStage--module.exports+join) - * [.leave()](#module_RTKStage--module.exports+leave) - * [.kick(userIds)](#module_RTKStage--module.exports+kick) +- [RTKStage](#module_RTKStage) + - [module.exports](#exp_module_RTKStage--module.exports) ⏏ + - [new module.exports(context, self, participants, stageSocketHandler, roomSocketHandler)](#new_module_RTKStage--module.exports_new) + - [.telemetry](#module_RTKStage--module.exports+telemetry) + - [.peerId](#module_RTKStage--module.exports+peerId) + - [.getAccessRequests()](#module_RTKStage--module.exports+getAccessRequests) + - [.requestAccess()](#module_RTKStage--module.exports+requestAccess) + - [.cancelRequestAccess()](#module_RTKStage--module.exports+cancelRequestAccess) + - [.grantAccess()](#module_RTKStage--module.exports+grantAccess) + - [.denyAccess()](#module_RTKStage--module.exports+denyAccess) + - [.join()](#module_RTKStage--module.exports+join) + - [.leave()](#module_RTKStage--module.exports+leave) + - [.kick(userIds)](#module_RTKStage--module.exports+kick) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, self, participants, stageSocketHandler, roomSocketHandler) -| Param | Type | -| --- | --- | -| context | Context | -| self | Self | -| participants | Participants | -| stageSocketHandler | RTKStageSocketHandler | -| roomSocketHandler | RoomSocketHandler | +| Param | Type | +| ------------------ | ---------------------------------- | +| context | Context | +| self | Self | +| participants | Participants | +| stageSocketHandler | RTKStageSocketHandler | +| roomSocketHandler | RoomSocketHandler | #### module.exports.telemetry + **Kind**: instance property of [module.exports](#exp_module_RTKStage--module.exports) #### module.exports.peerId + Returns the peerId of the current user **Kind**: instance property of [module.exports](#exp_module_RTKStage--module.exports) #### module.exports.getAccessRequests() + Method to fetch all RTKStage access requests from viewers **Kind**: instance method of [module.exports](#exp_module_RTKStage--module.exports) #### module.exports.requestAccess() + Method to send a request to privileged users to join the stage **Kind**: instance method of [module.exports](#exp_module_RTKStage--module.exports) #### module.exports.cancelRequestAccess() + Method to cancel a previous RTKStage join request **Kind**: instance method of [module.exports](#exp_module_RTKStage--module.exports) #### module.exports.grantAccess() + Method to grant access to RTKStage. - This can be in response to a RTKStage Join request but it can be called on other users as well +This can be in response to a RTKStage Join request but it can be called on other users as well `permissions.acceptRTKStageRequests` privilege required @@ -84,6 +90,7 @@ Method to grant access to RTKStage. #### module.exports.denyAccess() + Method to deny access to RTKStage. This should be called in response to a RTKStage Join request @@ -91,6 +98,7 @@ This should be called in response to a RTKStage Join request #### module.exports.join() + Method to join the stage Users either need to have the permission in the preset or must be accepted by a privileged user to call this method @@ -99,6 +107,7 @@ user to call this method #### module.exports.leave() + Method to leave the stage Users must either be on the stage already or be accepted to join the stage to call this method @@ -107,13 +116,13 @@ to call this method #### module.exports.kick(userIds) + Method to kick a user off the stage `permissions.acceptRTKStageRequests` privilege required -**Kind**: instance method of [module.exports](#exp_module_RTKStage--module.exports) - -| Param | Type | -| --- | --- | -| userIds | Array.<string> | +**Kind**: instance method of [module.exports](#exp_module_RTKStage--module.exports) +| Param | Type | +| ------- | --------------------------------- | +| userIds | Array.<string> | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKStore.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKStore.md index c27dd5a9443bf19..51d98a4f1ebc2ea 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKStore.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKStore.md @@ -12,127 +12,136 @@ This module represents a single global store. The store can be accessed from the `meeting.stores` module. **Returns**: An instance of RTKStore. -**Example** +**Example** + ```js -const handRaiseRTKStore = meeting.stores.stores.get('handRaise'); +const handRaiseRTKStore = meeting.stores.stores.get("handRaise"); ``` -* [RTKStore](#module_RTKStore) ⇒ - * [module.exports](#exp_module_RTKStore--module.exports) ⏏ - * [new module.exports(args)](#new_module_RTKStore--module.exports_new) - * [.set(key, value, [sync], [emit])](#module_RTKStore--module.exports+set) ⇒ Promise.<void> - * [.bulkSet(data)](#module_RTKStore--module.exports+bulkSet) ⇒ Promise.<void> - * [.update(key, value, [sync])](#module_RTKStore--module.exports+update) ⇒ Promise.<void> - * [.delete(key, [sync], [emit])](#module_RTKStore--module.exports+delete) ⇒ Promise.<void> - * [.bulkDelete(data)](#module_RTKStore--module.exports+bulkDelete) ⇒ Promise.<void> - * [.get(key)](#module_RTKStore--module.exports+get) ⇒ any - * [.getAll()](#module_RTKStore--module.exports+getAll) ⇒ RTKStoreData - * [.updateRateLimits(num, period)](#module_RTKStore--module.exports+updateRateLimits) - * [.updateBulkRateLimits(num, period)](#module_RTKStore--module.exports+updateBulkRateLimits) - * [.subscribe(key, cb)](#module_RTKStore--module.exports+subscribe) ⇒ void - * [.unsubscribe(key, [cb])](#module_RTKStore--module.exports+unsubscribe) ⇒ void - * [.populate(data)](#module_RTKStore--module.exports+populate) +- [RTKStore](#module_RTKStore) ⇒ + - [module.exports](#exp_module_RTKStore--module.exports) ⏏ + - [new module.exports(args)](#new_module_RTKStore--module.exports_new) + - [.set(key, value, [sync], [emit])](#module_RTKStore--module.exports+set) ⇒ Promise.<void> + - [.bulkSet(data)](#module_RTKStore--module.exports+bulkSet) ⇒ Promise.<void> + - [.update(key, value, [sync])](#module_RTKStore--module.exports+update) ⇒ Promise.<void> + - [.delete(key, [sync], [emit])](#module_RTKStore--module.exports+delete) ⇒ Promise.<void> + - [.bulkDelete(data)](#module_RTKStore--module.exports+bulkDelete) ⇒ Promise.<void> + - [.get(key)](#module_RTKStore--module.exports+get) ⇒ any + - [.getAll()](#module_RTKStore--module.exports+getAll) ⇒ RTKStoreData + - [.updateRateLimits(num, period)](#module_RTKStore--module.exports+updateRateLimits) + - [.updateBulkRateLimits(num, period)](#module_RTKStore--module.exports+updateBulkRateLimits) + - [.subscribe(key, cb)](#module_RTKStore--module.exports+subscribe) ⇒ void + - [.unsubscribe(key, [cb])](#module_RTKStore--module.exports+unsubscribe) ⇒ void + - [.populate(data)](#module_RTKStore--module.exports+populate) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(args) -| Param | Type | -| --- | --- | -| args | Object | -| args.name | string | -| args.socketHandler | PluginSocketHandler | -| args.meetingId | string | +| Param | Type | +| ------------------ | -------------------------------- | +| args | Object | +| args.name | string | +| args.socketHandler | PluginSocketHandler | +| args.meetingId | string | #### module.exports.set(key, value, [sync], [emit]) ⇒ Promise.<void> + Sets a value in the store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: Promise.<void> - A promise. +**Returns**: Promise.<void> - A promise. -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| key | string | | Unique identifier used to store value. | -| value | any | | Data to be set. | -| [sync] | boolean | true | Whether to sync change to remote store. | -| [emit] | boolean | false | Whether to emit to local subscribers. | +| Param | Type | Default | Description | +| ------ | -------------------- | ------------------ | --------------------------------------- | +| key | string | | Unique identifier used to store value. | +| value | any | | Data to be set. | +| [sync] | boolean | true | Whether to sync change to remote store. | +| [emit] | boolean | false | Whether to emit to local subscribers. | #### module.exports.bulkSet(data) ⇒ Promise.<void> + Sets multiple values in the store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: Promise.<void> - A promise. +**Returns**: Promise.<void> - A promise. -| Param | Type | -| --- | --- | -| data | Array.<{key: string, payload: any}> | +| Param | Type | +| ----- | ------------------------------------------------------ | +| data | Array.<{key: string, payload: any}> | #### module.exports.update(key, value, [sync]) ⇒ Promise.<void> + Updates an already existing value in the store. If the value stored is `['a', 'b']`, the operation `store.update(key, ['c'])` will modify the value to `['a','b','c']`. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: Promise.<void> - A promise. +**Returns**: Promise.<void> - A promise. -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| key | string | | Unique identifier used to store value. | -| value | any | | Data to be updated. | +| Param | Type | Default | Description | +| ------ | -------------------- | ----------------- | --------------------------------------- | +| key | string | | Unique identifier used to store value. | +| value | any | | Data to be updated. | | [sync] | boolean | true | Whether to sync change to remote store. | #### module.exports.delete(key, [sync], [emit]) ⇒ Promise.<void> + Deletes a key value pair form the store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: Promise.<void> - A promise. +**Returns**: Promise.<void> - A promise. -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| key | string | | Unique identifier used to store value. | -| [sync] | boolean | true | Whether to sync change to remote store. | -| [emit] | boolean | false | Whether to emit to local subscribers. | +| Param | Type | Default | Description | +| ------ | -------------------- | ------------------ | --------------------------------------- | +| key | string | | Unique identifier used to store value. | +| [sync] | boolean | true | Whether to sync change to remote store. | +| [emit] | boolean | false | Whether to emit to local subscribers. | #### module.exports.bulkDelete(data) ⇒ Promise.<void> + Deletes multiple values from the store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: Promise.<void> - A promise. +**Returns**: Promise.<void> - A promise. -| Param | Type | -| --- | --- | -| data | Array.<{key: string}> | +| Param | Type | +| ----- | ---------------------------------------- | +| data | Array.<{key: string}> | #### module.exports.get(key) ⇒ any + Returns value for the given key. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: any - Value for the given key. +**Returns**: any - Value for the given key. -| Param | Type | Description | -| --- | --- | --- | -| key | string | Unique identifier used to store value. | +| Param | Type | Description | +| ----- | ------------------- | -------------------------------------- | +| key | string | Unique identifier used to store value. | #### module.exports.getAll() ⇒ RTKStoreData + Returns the entire store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) @@ -140,55 +149,59 @@ Returns the entire store. #### module.exports.updateRateLimits(num, period) -**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -| Param | Type | -| --- | --- | -| num | number | -| period | number | +**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) + +| Param | Type | +| ------ | ------------------- | +| num | number | +| period | number | #### module.exports.updateBulkRateLimits(num, period) -**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -| Param | Type | -| --- | --- | -| num | number | -| period | number | +**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) + +| Param | Type | +| ------ | ------------------- | +| num | number | +| period | number | #### module.exports.subscribe(key, cb) ⇒ void + Listens for data change on a store key. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: void - void +**Returns**: void - void -| Param | Type | Description | -| --- | --- | --- | -| key | string | Unique identifier used to store value. | -| cb | function | The callback function that gets executed when data is modified. | +| Param | Type | Description | +| ----- | --------------------- | --------------------------------------------------------------- | +| key | string | Unique identifier used to store value. | +| cb | function | The callback function that gets executed when data is modified. | #### module.exports.unsubscribe(key, [cb]) ⇒ void + Removes all listeners for a key on the store. **Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -**Returns**: void - void +**Returns**: void - void -| Param | Type | Description | -| --- | --- | --- | -| key | string | Unique identifier used to store value. | -| [cb] | function | Callback to be removed. | +| Param | Type | Description | +| ----- | --------------------- | -------------------------------------- | +| key | string | Unique identifier used to store value. | +| [cb] | function | Callback to be removed. | #### module.exports.populate(data) -**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) -| Param | Type | -| --- | --- | -| data | RTKStoreData | +**Kind**: instance method of [module.exports](#exp_module_RTKStore--module.exports) +| Param | Type | +| ----- | ------------------------- | +| data | RTKStoreData | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RTKThemePreset.md b/src/content/docs/realtime/realtimekit/core/api-reference/RTKThemePreset.md index 88539296c8905b0..e5a1e74b8e69bcf 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RTKThemePreset.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RTKThemePreset.md @@ -10,72 +10,78 @@ web_core_version: 1.2.4 The RTKThemePreset class represents the meeting theme for the current participant - -* [RTKThemePreset](#module_RTKThemePreset) - * [module.exports](#exp_module_RTKThemePreset--module.exports) ⏏ - * [new module.exports(preset)](#new_module_RTKThemePreset--module.exports_new) - * _instance_ - * ~~[.setupScreen](#module_RTKThemePreset--module.exports+setupScreen)~~ - * ~~[.waitingRoom](#module_RTKThemePreset--module.exports+waitingRoom)~~ - * ~~[.controlBar](#module_RTKThemePreset--module.exports+controlBar)~~ - * ~~[.header](#module_RTKThemePreset--module.exports+header)~~ - * ~~[.pipMode](#module_RTKThemePreset--module.exports+pipMode)~~ - * [.viewType](#module_RTKThemePreset--module.exports+viewType) - * [.livestreamViewerQualities](#module_RTKThemePreset--module.exports+livestreamViewerQualities) - * [.maxVideoStreams](#module_RTKThemePreset--module.exports+maxVideoStreams) - * [.maxScreenShareCount](#module_RTKThemePreset--module.exports+maxScreenShareCount) - * ~~[.plugins](#module_RTKThemePreset--module.exports+plugins)~~ - * [.disabledPlugins](#module_RTKThemePreset--module.exports+disabledPlugins) - * _static_ - * [.fromResponse(preset)](#module_RTKThemePreset--module.exports.fromResponse) - * [.default()](#module_RTKThemePreset--module.exports.default) - * [.init([preset], [useDefault])](#module_RTKThemePreset--module.exports.init) +- [RTKThemePreset](#module_RTKThemePreset) + - [module.exports](#exp_module_RTKThemePreset--module.exports) ⏏ + - [new module.exports(preset)](#new_module_RTKThemePreset--module.exports_new) + - _instance_ + - ~~[.setupScreen](#module_RTKThemePreset--module.exports+setupScreen)~~ + - ~~[.waitingRoom](#module_RTKThemePreset--module.exports+waitingRoom)~~ + - ~~[.controlBar](#module_RTKThemePreset--module.exports+controlBar)~~ + - ~~[.header](#module_RTKThemePreset--module.exports+header)~~ + - ~~[.pipMode](#module_RTKThemePreset--module.exports+pipMode)~~ + - [.viewType](#module_RTKThemePreset--module.exports+viewType) + - [.livestreamViewerQualities](#module_RTKThemePreset--module.exports+livestreamViewerQualities) + - [.maxVideoStreams](#module_RTKThemePreset--module.exports+maxVideoStreams) + - [.maxScreenShareCount](#module_RTKThemePreset--module.exports+maxScreenShareCount) + - ~~[.plugins](#module_RTKThemePreset--module.exports+plugins)~~ + - [.disabledPlugins](#module_RTKThemePreset--module.exports+disabledPlugins) + - _static_ + - [.fromResponse(preset)](#module_RTKThemePreset--module.exports.fromResponse) + - [.default()](#module_RTKThemePreset--module.exports.default) + - [.init([preset], [useDefault])](#module_RTKThemePreset--module.exports.init) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(preset) -| Param | Type | -| --- | --- | -| preset | PresetV2CamelCased | +| Param | Type | +| ------ | ------------------------------- | +| preset | PresetV2CamelCased | #### ~~module.exports.setupScreen~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### ~~module.exports.waitingRoom~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### ~~module.exports.controlBar~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### ~~module.exports.header~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### ~~module.exports.pipMode~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### module.exports.viewType + The `viewType` tells the type of the meeting possible values are: GROUP_CALL| LIVESTREAM | CHAT | AUDIO_ROOM @@ -83,6 +89,7 @@ possible values are: GROUP_CALL| LIVESTREAM | CHAT | AUDIO_ROOM #### module.exports.livestreamViewerQualities + The `livestreamViewerQualities` specifies the allowed qualities of a stream, that can be viewed by a livestream viewer @@ -90,6 +97,7 @@ that can be viewed by a livestream viewer #### module.exports.maxVideoStreams + The `maxVideoStreams` contains the maximum video streams for mobile and desktop @@ -97,6 +105,7 @@ streams for mobile and desktop #### module.exports.maxScreenShareCount + The `maxScreenShareCount` contains the maximum possible concurrent screen shares @@ -104,37 +113,41 @@ possible concurrent screen shares #### ~~module.exports.plugins~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### module.exports.disabledPlugins + The `disabledPlugins` property returns id of all disabled plugins **Kind**: instance property of [module.exports](#exp_module_RTKThemePreset--module.exports) #### module.exports.fromResponse(preset) + **Kind**: static method of [module.exports](#exp_module_RTKThemePreset--module.exports) -**Deprecated.**: Use init() +**Deprecated.**: Use init() -| Param | Type | -| --- | --- | -| preset | PresetV2CamelCased | +| Param | Type | +| ------ | ------------------------------- | +| preset | PresetV2CamelCased | #### module.exports.default() + **Kind**: static method of [module.exports](#exp_module_RTKThemePreset--module.exports) **Deprecated.**: Use init() #### module.exports.init([preset], [useDefault]) -**Kind**: static method of [module.exports](#exp_module_RTKThemePreset--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| [preset] | PresetV2CamelCased | | -| [useDefault] | boolean | true | +**Kind**: static method of [module.exports](#exp_module_RTKThemePreset--module.exports) +| Param | Type | Default | +| ------------ | ------------------------------- | ----------------- | +| [preset] | PresetV2CamelCased | | +| [useDefault] | boolean | true | diff --git a/src/content/docs/realtime/realtimekit/core/api-reference/RealtimeKitClient.md b/src/content/docs/realtime/realtimekit/core/api-reference/RealtimeKitClient.md index 1afafcb4fd4b751..31f2a68764c9ee9 100644 --- a/src/content/docs/realtime/realtimekit/core/api-reference/RealtimeKitClient.md +++ b/src/content/docs/realtime/realtimekit/core/api-reference/RealtimeKitClient.md @@ -13,45 +13,46 @@ An object of the RealtimeKitClient class can be created using `await RealtimeKitClient.init({ ... })`. Typically, an object of `RealtimeKitClient` is named `meeting`. - -* [RealtimeKitClient](#module_RealtimeKitClient) - * [module.exports](#exp_module_RealtimeKitClient--module.exports) ⏏ - * [new module.exports(context, controller)](#new_module_RealtimeKitClient--module.exports_new) - * _instance_ - * [.participants](#module_RealtimeKitClient--module.exports+participants) - * [.self](#module_RealtimeKitClient--module.exports+self) - * [.meta](#module_RealtimeKitClient--module.exports+meta) - * [.ai](#module_RealtimeKitClient--module.exports+ai) - * [.plugins](#module_RealtimeKitClient--module.exports+plugins) - * [.chat](#module_RealtimeKitClient--module.exports+chat) - * [.polls](#module_RealtimeKitClient--module.exports+polls) - * [.connectedMeetings](#module_RealtimeKitClient--module.exports+connectedMeetings) - * [.__internals__](#module_RealtimeKitClient--module.exports+__internals__) - * [.join()](#module_RealtimeKitClient--module.exports+join) - * [.leave()](#module_RealtimeKitClient--module.exports+leave) - * ~~[.joinRoom()](#module_RealtimeKitClient--module.exports+joinRoom)~~ - * ~~[.leaveRoom([state])](#module_RealtimeKitClient--module.exports+leaveRoom)~~ - * _static_ - * [.initMedia([options], [skipAwaits], [cachedUserDetails])](#module_RealtimeKitClient--module.exports.initMedia) - * [.init(options)](#module_RealtimeKitClient--module.exports.init) - * [.setupContext(peerId, options, meetingId, args)](#module_RealtimeKitClient--module.exports.setupContext) +- [RealtimeKitClient](#module_RealtimeKitClient) + - [module.exports](#exp_module_RealtimeKitClient--module.exports) ⏏ + - [new module.exports(context, controller)](#new_module_RealtimeKitClient--module.exports_new) + - _instance_ + - [.participants](#module_RealtimeKitClient--module.exports+participants) + - [.self](#module_RealtimeKitClient--module.exports+self) + - [.meta](#module_RealtimeKitClient--module.exports+meta) + - [.ai](#module_RealtimeKitClient--module.exports+ai) + - [.plugins](#module_RealtimeKitClient--module.exports+plugins) + - [.chat](#module_RealtimeKitClient--module.exports+chat) + - [.polls](#module_RealtimeKitClient--module.exports+polls) + - [.connectedMeetings](#module_RealtimeKitClient--module.exports+connectedMeetings) + - [.**internals**](#module_RealtimeKitClient--module.exports+__internals__) + - [.join()](#module_RealtimeKitClient--module.exports+join) + - [.leave()](#module_RealtimeKitClient--module.exports+leave) + - ~~[.joinRoom()](#module_RealtimeKitClient--module.exports+joinRoom)~~ + - ~~[.leaveRoom([state])](#module_RealtimeKitClient--module.exports+leaveRoom)~~ + - _static_ + - [.initMedia([options], [skipAwaits], [cachedUserDetails])](#module_RealtimeKitClient--module.exports.initMedia) + - [.init(options)](#module_RealtimeKitClient--module.exports.init) + - [.setupContext(peerId, options, meetingId, args)](#module_RealtimeKitClient--module.exports.setupContext) ### module.exports ⏏ + **Kind**: Exported class #### new module.exports(context, controller) -| Param | Type | -| --- | --- | -| context | IContext | -| controller | Controller | +| Param | Type | +| ---------- | ----------------------- | +| context | IContext | +| controller | Controller | #### module.exports.participants + The `participants` object consists of 4 maps of participants, `waitlisted`, `joined`, `active`, `pinned`. The maps are indexed by `peerId`s, and the values are the corresponding participant objects. @@ -60,6 +61,7 @@ The `participants` object consists of 4 maps of participants, #### module.exports.self + The `self` object can be used to manipulate audio and video settings, and other configurations for the local participant. This exposes methods to enable and disable media tracks, share the user's screen, etc. @@ -68,6 +70,7 @@ to enable and disable media tracks, share the user's screen, etc. #### module.exports.meta + The `room` object stores information about the current meeting, such as chat messages, polls, room name, etc. @@ -75,6 +78,7 @@ as chat messages, polls, room name, etc. #### module.exports.ai + The `ai` object is used to interface with AI features. You can obtain the live meeting transcript and use other meeting AI features such as summary, and agenda using this object. @@ -83,6 +87,7 @@ features such as summary, and agenda using this object. #### module.exports.plugins + The `plugins` object stores information about the plugins available in the current meeting. It exposes methods to activate and deactivate them. @@ -90,6 +95,7 @@ the current meeting. It exposes methods to activate and deactivate them. #### module.exports.chat + The chat object stores the chat messages that were sent in the meeting. This includes text messages, images, and files. @@ -97,6 +103,7 @@ This includes text messages, images, and files. #### module.exports.polls + The polls object stores the polls that were initiated in the meeting. It exposes methods to create and vote on polls. @@ -104,6 +111,7 @@ It exposes methods to create and vote on polls. #### module.exports.connectedMeetings + The connectedMeetings object stores the connected meetings states. It exposes methods to create/read/update/delete methods for connected meetings. @@ -111,15 +119,17 @@ It exposes methods to create/read/update/delete methods for connected meetings. #### module.exports.\_\_internals\_\_ -The __internals__ object exposes the internal tools & utilities such as features and logger + +The **internals** object exposes the internal tools & utilities such as features and logger so that client can utilise the same to build their own feature based UI. -Logger (__internals__.logger) can be used to send logs to servers - to inform of issues, if any, proactively. +Logger (**internals**.logger) can be used to send logs to servers +to inform of issues, if any, proactively. **Kind**: instance property of [module.exports](#exp_module_RealtimeKitClient--module.exports) #### module.exports.join() + The `join()` method can be used to join the meeting. A `roomJoined` event is emitted on `self` when the room is joined successfully. @@ -128,65 +138,70 @@ is joined successfully. #### module.exports.leave() + The `leave()` method can be used to leave a meeting. **Kind**: instance method of [module.exports](#exp_module_RealtimeKitClient--module.exports) #### ~~module.exports.joinRoom()~~ -***Deprecated*** + +**_Deprecated_** **Kind**: instance method of [module.exports](#exp_module_RealtimeKitClient--module.exports) #### ~~module.exports.leaveRoom([state])~~ -***Deprecated*** -**Kind**: instance method of [module.exports](#exp_module_RealtimeKitClient--module.exports) +**_Deprecated_** + +**Kind**: instance method of [module.exports](#exp_module_RealtimeKitClient--module.exports) -| Param | Type | -| --- | --- | -| [state] | LeaveRoomState | +| Param | Type | +| ------- | --------------------------- | +| [state] | LeaveRoomState | #### module.exports.initMedia([options], [skipAwaits], [cachedUserDetails]) -**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) -| Param | Type | Default | -| --- | --- | --- | -| [options] | Object | | -| [options.video] | boolean | | -| [options.audio] | boolean | | -| [options.constraints] | MediaConstraints | | -| [skipAwaits] | boolean | false | -| [cachedUserDetails] | CachedUserDetails | | +**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) + +| Param | Type | Default | +| --------------------- | ------------------------------ | ------------------ | +| [options] | Object | | +| [options.video] | boolean | | +| [options.audio] | boolean | | +| [options.constraints] | MediaConstraints | | +| [skipAwaits] | boolean | false | +| [cachedUserDetails] | CachedUserDetails | | #### module.exports.init(options) + The `init` method can be used to instantiate the RealtimeKitClient class. This returns an instance of RealtimeKitClient, which can be used to perform actions on the meeting. -**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) +**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) -| Param | Description | -| --- | --- | -| options | The options object. | +| Param | Description | +| ----------------- | ----------------------------------------------- | +| options | The options object. | | options.authToken | The authorization token received using the API. | -| options.baseURI | The base URL of the API. | -| options.defaults | The default audio and video settings. | +| options.baseURI | The base URL of the API. | +| options.defaults | The default audio and video settings. | #### module.exports.setupContext(peerId, options, meetingId, args) -**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) -| Param | Type | -| --- | --- | -| peerId | string | -| options | RealtimeKitClientOptions | -| meetingId | string | -| args | any | +**Kind**: static method of [module.exports](#exp_module_RealtimeKitClient--module.exports) +| Param | Type | +| --------- | ------------------------------------- | +| peerId | string | +| options | RealtimeKitClientOptions | +| meetingId | string | +| args | any | diff --git a/src/content/docs/realtime/realtimekit/legal/3rdparty.mdx b/src/content/docs/realtime/realtimekit/legal/3rdparty.mdx index b94947abd5d3245..d9e3105165b252d 100644 --- a/src/content/docs/realtime/realtimekit/legal/3rdparty.mdx +++ b/src/content/docs/realtime/realtimekit/legal/3rdparty.mdx @@ -23,6 +23,7 @@ The following SDKs are collectively referred to as Web SDKs: - [`@cloudflare/realtimekit-virtual-background`](https://www.npmjs.com/package/@cloudflare/realtimekit-virtual-background) Overview of licenses: + - Apache-2.0 (3) - ISC (1) - MIT (16) @@ -813,10 +814,12 @@ Apache License ## RealtimeKit Android SDKs The following SDKs are collectively referred to as Android SDKs: + - [`com.cloudflare.realtimekit:core-android`](https://central.sonatype.com/artifact/com.cloudflare.realtimekit/core-android) - [`com.cloudflare.realtimekit:ui-android`](https://central.sonatype.com/artifact/com.cloudflare.realtimekit/ui-android) Overview of licenses: + - Apache-2.0 (24) ### Apache-2.0 (15 packages) @@ -1932,11 +1935,13 @@ Apache License ## RealtimeKit iOS SDKs The following SDKs are collectively referred to as iOS SDKs: + - [`RealtimeKit`](https://github.com/dyte-in/RealtimeKitCoreiOS) - [`RealtimeKitUI`](https://github.com/dyte-in/RealtimeKitUI) - [`RealtimeKit KMM Core`](https://central.sonatype.com/artifact/com.cloudflare.realtimekit/core-iosarm64) Overview of licenses: + - Apache-2.0 (8) ### Apache-2.0 (4 packages) @@ -2812,10 +2817,12 @@ Apache License ## RealtimeKit Flutter SDKs The following SDKs are collectively referred to as Flutter SDKs: + - [`realtimekit_core`](https://pub.dev/packages/realtimekit_core) - [`realtimekit_ui`](https://pub.dev/packages/realtimekit_ui) Overview of licenses: + - Apache-2.0 (1) - BSD-3-Clause (55) - MIT (10) @@ -2848,7 +2855,7 @@ Used by: [watcher](https://github.com/dart-lang/tools) ``` -Copyright 2014, the Dart project authors. +Copyright 2014, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -2892,7 +2899,7 @@ Used by: [typed_data](https://github.com/dart-lang/core) ``` -Copyright 2015, the Dart project authors. +Copyright 2015, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3167,7 +3174,7 @@ Used by: [term_glyph](https://github.com/dart-lang/tools) ``` -Copyright 2017, the Dart project authors. +Copyright 2017, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3205,7 +3212,7 @@ Used by: [package_config](https://github.com/dart-lang/tools) ``` -Copyright 2019, the Dart project authors. +Copyright 2019, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3243,7 +3250,7 @@ Used by: [logging](https://github.com/dart-lang/core) ``` -Copyright 2013, the Dart project authors. +Copyright 2013, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3281,7 +3288,7 @@ Used by: [test_core](https://github.com/dart-lang/test) ``` -Copyright 2018, the Dart project authors. +Copyright 2018, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3751,11 +3758,11 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ``` -### BSD-3-Clause (_fe_analyzer_shared) +### BSD-3-Clause (\_fe_analyzer_shared) Used by: -[_fe_analyzer_shared](https://github.com/dart-lang/sdk) +[\_fe_analyzer_shared](https://github.com/dart-lang/sdk) ``` Copyright 2019, the Dart project authors. @@ -3923,7 +3930,7 @@ Used by: [web_socket_channel](https://github.com/dart-lang/http) ``` -Copyright 2016, the Dart project authors. +Copyright 2016, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -3994,7 +4001,7 @@ Used by: [web_socket](https://github.com/dart-lang/http) ``` -Copyright 2024, the Dart project authors. +Copyright 2024, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -4030,7 +4037,7 @@ Used by: [frontend_server_client](https://github.com/dart-lang/webdev) ``` -Copyright 2020, the Dart project authors. +Copyright 2020, the Dart project authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -4610,10 +4617,12 @@ THE SOFTWARE. ## RealtimeKit React Native SDKs The following SDKs are collectively referred to as React Native SDKs: + - [`@cloudflare/realtimekit-react-native`](https://www.npmjs.com/package/@cloudflare/realtimekit-react-native) - [`@cloudflare/realtimekit-react-native-ui`](https://www.npmjs.com/package/@cloudflare/realtimekit-react-native-ui) Overview of licenses: + - Apache-2.0 (3) - BSD-2-Clause (10) - BSD-3-Clause (3) @@ -6696,25 +6705,25 @@ The MIT License Copyright (c) 2013 Dominic Tarr -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` @@ -7691,25 +7700,25 @@ The MIT License Copyright (c) 2015 John Hiesey -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software and +associated documentation files (the "Software"), to +deal in the Software without restriction, including +without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom +the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR +ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` @@ -8668,7 +8677,7 @@ Used by: ``` The MIT License (MIT) -Copyright (c) 2015 +Copyright (c) 2015 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -9197,7 +9206,7 @@ Used by: [convert-source-map](https://github.com/thlorenz/convert-source-map) ``` -Copyright 2013 Thorsten Lorenz. +Copyright 2013 Thorsten Lorenz. All rights reserved. Permission is hereby granted, free of charge, to any person @@ -9547,7 +9556,7 @@ exhaustive, and do not form part of our licenses. such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More_considerations - for the public: + for the public: wiki.creativecommons.org/Considerations_for_licensees ======================================================================= @@ -10881,4 +10890,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -``` \ No newline at end of file +``` diff --git a/src/content/docs/realtime/realtimekit/recording-guide/add-watermark.mdx b/src/content/docs/realtime/realtimekit/recording-guide/add-watermark.mdx index 3a3cdb4f8122af5..837b0108533d03f 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/add-watermark.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/add-watermark.mdx @@ -18,15 +18,15 @@ RealtimeKit's watermark feature enables you to include an image as a watermark i ```json { - "video_config": { - "watermark": { - "url": "https://test.io/images/client-logos-6.webp", - "position": "left top", - "size": { - "height": 20, - "width": 100 - } - } - } + "video_config": { + "watermark": { + "url": "https://test.io/images/client-logos-6.webp", + "position": "left top", + "size": { + "height": 20, + "width": 100 + } + } + } } ``` diff --git a/src/content/docs/realtime/realtimekit/recording-guide/configure-codecs.mdx b/src/content/docs/realtime/realtimekit/recording-guide/configure-codecs.mdx index e79a05b4153957e..f6ff1aa7a6b2ed3 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/configure-codecs.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/configure-codecs.mdx @@ -26,9 +26,9 @@ example: ```json { - "video_config": { - "codec": "H264" - } + "video_config": { + "codec": "H264" + } } ``` diff --git a/src/content/docs/realtime/realtimekit/recording-guide/monitor-status.mdx b/src/content/docs/realtime/realtimekit/recording-guide/monitor-status.mdx index 67da5cc041affca..81744c2746450cb 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/monitor-status.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/monitor-status.mdx @@ -12,13 +12,13 @@ products: The recording of a meeting can have the following states: -| Name | Description | -| --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| INVOKED | Our backend servers have received the recording request, and the master is looking for a ready worker to assign the recording job. | -| RECORDING | The meeting is currently being recorded by a worker; note that this will also hold true if the meeting is being live streamed. | +| Name | Description | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| INVOKED | Our backend servers have received the recording request, and the master is looking for a ready worker to assign the recording job. | +| RECORDING | The meeting is currently being recorded by a worker; note that this will also hold true if the meeting is being live streamed. | | UPLOADING | The recording has been stopped and the file is being uploaded to the cloud storage. If you have not specified storage details, then the files will be uploaded only to RealtimeKit's server. Any RTMP and livestreaming link will also stop at this stage. | -| UPLOADED | The recording file upload is complete and the status webhook is also triggered. | -| ERRORED | There was an irrecoverable error while recording the meeting and the file will not be available. | +| UPLOADED | The recording file upload is complete and the status webhook is also triggered. | +| ERRORED | There was an irrecoverable error while recording the meeting and the file will not be available. | ## Fetching the state diff --git a/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx index 50d601987d14693..aa28566cf639ab0 100644 --- a/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx +++ b/src/content/docs/realtime/realtimekit/recording-guide/track-recording.mdx @@ -8,9 +8,16 @@ products: - realtime --- -Track recording records each participant's audio as a separate WebM file in RealtimeKit's Cloudflare R2 bucket. Use track recording when you need isolated speaker tracks for post-processing, transcription, compliance workflows, or audio analysis. +Track recording lets you record participant audio as separate WebM files instead of one composite meeting recording. Use it when you need speaker-level control over what you store, process, or review. -Composite recording creates one mixed meeting recording. Track recording creates one file per recorded participant peer. +With track recording, you can record specific participant tracks by passing `user_ids`, which is useful for content-sensitive or regulated workflows where recording every participant is unnecessary. If you do not provide `user_ids`, RealtimeKit will record all participant audio tracks as separate WebM files by default. + +To pass `user_ids` for specific participant track recording, use the following minimum SDK versions: + +- Web Core: `@cloudflare/realtimekit` version `1.4.0` or later +- Web UI Kit: `@cloudflare/realtimekit-ui`, `@cloudflare/realtimekit-react-ui`, or `@cloudflare/realtimekit-angular-ui` version `1.1.2` or later +- Android Core or iOS Core: version `2.0.0` or later +- Android UI Kit or iOS UI Kit: version `1.1.0` or later :::note @@ -22,19 +29,36 @@ Track recording currently supports audio tracks only. Video track recording is i Track recording has the following requirements and limits: -| Limit | Description | -| --------------------- | ----------------------------------------------------- | -| Active meeting | The meeting must have an active live session. | -| Media kind | Only `audio` layers are recorded. | -| Participant selection | Pass up to `100` values in `user_ids`. | -| Storage | Files are uploaded to the RealtimeKit bucket. | -| File retention | RealtimeKit bucket download URLs expire after seven days. | +| Limit | Description | +| --------------------- | ---------------------------------------------------------------------------- | +| Active meeting | The meeting must have an active live session. | +| Media kind | Only `audio` layers are recorded. | +| Participant selection | Pass up to 100 values in `user_ids`. | +| Storage | Files are uploaded to RealtimeKit's managed R2 bucket with zero-egress fees. | +| File retention | RealtimeKit bucket download URLs expire after seven days. | ## Start track recording -To start track recording, call `POST /recordings/track` with the meeting ID. +### Record specific participants + +To record separate audio tracks for specific participants, call `POST /recordings/track` with the meeting ID and the participant `user_ids`. + +```bash +curl --request POST \ + --url https://api.cloudflare.com/client/v4/accounts//realtime/kit//recordings/track \ + --header 'Authorization: Bearer ' \ + --header 'Content-Type: application/json' \ + --data '{ + "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a", + "user_ids": ["user-123", "user-456"] +}' +``` + +RealtimeKit records current and future participant peers whose `user_id` matches the allowlist. Participants whose `user_id` is not listed are not recorded. -If you omit `layers`, RealtimeKit records all participant audio. You can pass an audio layer to set a file name prefix for generated files. +### Record all participants as separate tracks + +Omit `user_ids` to record separate audio tracks for all participants in the live meeting. RealtimeKit creates one WebM file for each recorded participant peer. ```bash curl --request POST \ @@ -63,26 +87,9 @@ The response includes a recording ID. Use this ID to stop or fetch the recording } ``` -## Record selected participants - -Pass `user_ids` to record only specific participants. RealtimeKit records current and future participant peers whose `user_id` matches the allowlist. - -:::caution - -To use selective track recording with `user_ids`, contact your Cloudflare account team or RealtimeKit support. - -::: - -```json -{ - "meeting_id": "97440c6a-140b-40a9-9499-b23fd7a3868a", - "user_ids": ["user-123", "user-456"] -} -``` - -## Set file name prefix +## Customize file names with prefixes -Use `file_name_prefix` to prefix every generated track recording file. +Use `layers.default.file_name_prefix` to prefix every generated track recording file. ```json { @@ -120,7 +127,7 @@ After track recording stops, RealtimeKit uploads the per-participant WebM files Track recording uses the same recording status lifecycle as composite recording. To monitor status, refer to [Monitor Recording Status](/realtime/realtimekit/recording-guide/monitor-status/). -When the recording reaches `UPLOADED`, fetch the recording details or listen for the `recording.statusUpdate` webhook. The `download_url` field contains the recorded WebM files for participant peers. +When the recording reaches `UPLOADED`, fetch the recording details or listen for the `recording.statusUpdate` webhook. For track recordings, `download_url` contains per-participant WebM file URLs grouped by layer. ```json { diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/index.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/index.mdx index a530264178e2cd7..740b8984d91accc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/index.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/index.mdx @@ -7,4 +7,4 @@ sidebar: hideIndex: true products: - realtime ---- \ No newline at end of file +--- diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-toggle.mdx index 9022f7eef15914a..be354415f804c68 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-toggle.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-ai-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -29,10 +30,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-transcriptions.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-transcriptions.mdx index 36207327073578c..05bb2a1ea2666d2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-transcriptions.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai-transcriptions.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-ai-transcriptions component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------- | -------- | --------------- | ---------------------- | +| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,9 +27,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai.mdx index 936d95be25b08c0..8d64f23b0df3f0b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ai.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-ai component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `AIView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `AIView` | ✅ | - | View type | ## Usage Examples @@ -30,10 +31,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-grid.mdx index 690fb5c0632fc17..74fb58b92b23308 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-grid.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-audio-grid component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,9 @@ products: ```html + [config]="defaultUiConfig" + [hideSelf]="true" + [meeting]="meeting" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-tile.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-tile.mdx index dbb17aafd24724b..9fa0eff7807d9be 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-tile.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-tile.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-audio-tile component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ----------- | -------- | ----------------- | ------------------ | +| `config` | `UIConfig` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,9 @@ products: ```html + [config]="defaultUiConfig" + [meeting]="meeting" + [participant]="participant" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-visualizer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-visualizer.mdx index 1622d030b9255cf..cc99527e230b702 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-visualizer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-audio-visualizer.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-audio-visualizer component (Angular Library) products: - realtime --- + An audio visualizer component which visualizes a participants audio. - Commonly used inside `rtk-name-tag`. +Commonly used inside `rtk-name-tag`. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------------ | -------- | ----------------- | --------------------------------------------------------------------------------------------- | +| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | ## Usage Examples @@ -34,9 +35,9 @@ An audio visualizer component which visualizes a participants audio. ```html + [hideMuted]="true" + [isScreenShare]="true" + [participant]="participant" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-avatar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-avatar.mdx index ff5a9ab19b357c0..6bd382f5ba1c7b1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-avatar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-avatar.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-avatar component (Angular Library) products: - realtime --- + Avatar component which renders a participant's image or their initials. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AvatarVariant` | ✅ | - | Avatar type | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------------------------------------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AvatarVariant` | ✅ | - | Avatar type | ## Usage Examples @@ -30,10 +31,5 @@ Avatar component which renders a participant's image or their initials. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-manager.mdx index b310482b33cdfe8..942b66a929beefc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-manager.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-breakout-room-manager component (Angular Libr products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `allowDelete` | `boolean` | ✅ | - | allow room delete | -| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | -| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isDragMode` | `boolean` | ✅ | - | Drag mode | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | -| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------------- | -------- | ----------------- | -------------------------------- | +| `allowDelete` | `boolean` | ✅ | - | allow room delete | +| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | +| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isDragMode` | `boolean` | ✅ | - | Drag mode | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | +| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,9 +35,9 @@ products: ```html + [allowDelete]="true" + [assigningParticipants]="true" + [defaultExpanded]="true" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-participants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-participants.mdx index 2d1f1e58d56e53f..8d2a38f304f03fd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-participants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-room-participants.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-breakout-room-participants component (Angular products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participantIds` | `string[]` | ✅ | - | Participant ids | -| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------ | ---------- | -------- | ----------------- | --------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participantIds` | `string[]` | ✅ | - | Participant ids | +| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,9 +33,9 @@ A component which lists all participants, with ability to ```html + [meeting]="meeting" + participantIds="example" + selectedParticipantIds="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-manager.mdx index bbe7a129471cfef..6b60a42d4f64b07 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-manager.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-breakout-rooms-manager component (Angular Lib products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,8 +28,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-toggle.mdx index dab4a3a9ced6758..e769d064ce27906 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-breakout-rooms-toggle.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-breakout-rooms-toggle component (Angular Libr products: - realtime --- + A button which toggles visibility of breakout rooms. - You need to pass the `meeting` object to it. +You need to pass the `meeting` object to it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ✅ | - | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ✅ | - | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ------- | -------------- | +| `iconPack` | `IconPack` | ✅ | - | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ✅ | - | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -33,9 +34,9 @@ A button which toggles visibility of breakout rooms. ```html + [iconPack]="defaultIconPack" + [meeting]="meeting" + size="md" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-broadcast-message-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-broadcast-message-modal.mdx index 706f133335069c4..a9399e40c4b7a2c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-broadcast-message-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-broadcast-message-modal.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-broadcast-message-modal component (Angular Li products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,8 +28,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-button.mdx index ed08f480b320ab1..49d3ca7ffe6a357 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-button.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-button component (Angular Library) products: - realtime --- + A button that follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | -| `kind` | `ButtonKind` | ✅ | - | Button type | -| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | -| `size` | `Size` | ✅ | - | Size | -| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | -| `variant` | `ButtonVariant` | ✅ | - | Button variant | +| Property | Type | Required | Default | Description | +| ---------- | --------------------------- | -------- | ------- | ------------------------------------ | +| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | +| `kind` | `ButtonKind` | ✅ | - | Button type | +| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | +| `size` | `Size` | ✅ | - | Size | +| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | +| `variant` | `ButtonVariant` | ✅ | - | Button variant | ## Usage Examples @@ -31,10 +32,6 @@ A button that follows RTK Design System. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-selector.mdx index 755404225238040..92270e3c97fe0e1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-selector.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-camera-selector component (Angular Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -39,9 +41,9 @@ A component which lets to manage your audio devices and audio preferences. ```html + [meeting]="meeting" + size="md" + [variant]="'full' | 'inline'" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-toggle.mdx index 00b9d2b1e4bdd06..db38dc91c0aac70 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-camera-toggle.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-camera-toggle component (Angular Library) products: - realtime --- + A button which toggles your camera. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -30,10 +31,6 @@ A button which toggles your camera. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-caption-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-caption-toggle.mdx index 66da419d1dea460..5dc17611c79b114 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-caption-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-caption-toggle.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-caption-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -30,10 +31,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-ui.mdx index ee2887a10f7e46a..b6ff46e4d62c8d9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-ui.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-chat-composer-ui component (Angular Library) products: - realtime --- + @deprecated . This component is deprecated, please use rtk-chat-composer-view instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------- | -------- | ----------------- | ----------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,9 +33,9 @@ products: ```html + [canSendFiles]="true" + [canSendTextMessage]="true" + size="md" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-view.mdx index 407b10b43a4197f..3b98703d1ac78cb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-composer-view.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-chat-composer-view component (Angular Library products: - realtime --- + A component which renders a chat composer ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | -| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | -| `maxLength` | `number` | ✅ | - | Max length for text input | -| `message` | `string` | ✅ | - | Message to be pre-populated | -| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | -| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | -| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------------------------------- | -------- | ----------------- | --------------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | +| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | +| `maxLength` | `number` | ✅ | - | Max length for text input | +| `message` | `string` | ✅ | - | Message to be pre-populated | +| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | +| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | +| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -37,9 +38,9 @@ A component which renders a chat composer ```html + [canSendFiles]="true" + [canSendTextMessage]="true" + inputTextPlaceholder="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-header.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-header.mdx index 400bbe3d46a8aaa..18489ada36fdf99 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-header.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-header.mdx @@ -5,9 +5,10 @@ description: API reference for rtk-chat-header component (Angular Library) products: - realtime --- + ## Properties -*No properties available.* +_No properties available._ ## Usage Examples @@ -17,4 +18,3 @@ products: ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-message.mdx index de48d16b7b4d731..98cb5beca666769 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-message.mdx @@ -5,29 +5,30 @@ description: API reference for rtk-chat-message component (Angular Library) products: - realtime --- + @deprecated `rtk-chat-message` is deprecated and will be removed soon. Use `rtk-message-view` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `alignRight` | `boolean` | ✅ | - | aligns message to right | -| `canDelete` | `boolean` | ✅ | - | can delete message | -| `canEdit` | `boolean` | ✅ | - | can edit message | -| `canPin` | `boolean` | ✅ | - | can pin this message | -| `canReply` | `boolean` | ✅ | - | can quote reply this message | -| `child` | `HTMLElement` | ✅ | - | Child | -| `disableControls` | `boolean` | ✅ | - | disables controls | -| `hideAvatar` | `boolean` | ✅ | - | hides avatar | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | is continued | -| `isSelf` | `boolean` | ✅ | - | if sender is self | -| `isUnread` | `boolean` | ✅ | - | is unread | -| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | -| `message` | `Message` | ✅ | - | message item | -| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ----------------- | -------------------------------------- | +| `alignRight` | `boolean` | ✅ | - | aligns message to right | +| `canDelete` | `boolean` | ✅ | - | can delete message | +| `canEdit` | `boolean` | ✅ | - | can edit message | +| `canPin` | `boolean` | ✅ | - | can pin this message | +| `canReply` | `boolean` | ✅ | - | can quote reply this message | +| `child` | `HTMLElement` | ✅ | - | Child | +| `disableControls` | `boolean` | ✅ | - | disables controls | +| `hideAvatar` | `boolean` | ✅ | - | hides avatar | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | is continued | +| `isSelf` | `boolean` | ✅ | - | if sender is self | +| `isUnread` | `boolean` | ✅ | - | is unread | +| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | +| `message` | `Message` | ✅ | - | message item | +| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -42,10 +43,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui-paginated.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui-paginated.mdx index ce18aa44fb427c7..b42f6dc5f8f79eb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui-paginated.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui-paginated.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-chat-messages-ui-paginated component (Angular products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------- | -------- | ----------------- | ------------------------------------------------------------------------------------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,9 @@ products: ```html + [meeting]="meeting" + [privateChatRecipient]="participant | null" + size="md" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui.mdx index 30863c471104539..5241b26b67f1ef7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-messages-ui.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-chat-messages-ui component (Angular Library) products: - realtime --- + @deprecated Use `rtk-chat-messages-ui-paginated` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `messages` | `Chat[]` | ✅ | - | Chat Messages | -| `selectedGroup` | `string` | ✅ | - | Selected group key | -| `selfUserId` | `string` | ✅ | - | User ID of self user | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ----------- | -------- | ----------------- | ----------------------------------- | +| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `messages` | `Chat[]` | ✅ | - | Chat Messages | +| `selectedGroup` | `string` | ✅ | - | Selected group key | +| `selfUserId` | `string` | ✅ | - | User ID of self user | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -33,9 +34,9 @@ products: ```html + [canPinMessages]="true" + [messages]="[]" + selectedGroup="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-search-results.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-search-results.mdx index c523cd074c0f8b5..674604a158dad2c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-search-results.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-search-results.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-chat-search-results component (Angular Librar products: - realtime --- + @deprecated `rtk-chat-search-results` is deprecated and will be removed soon. Use `rtk-chat-messages-ui-paginated` instead. - ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `channelId` | `string` | ✅ | - | Channel id | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `query` | `string` | ✅ | - | Search query | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | -------------- | +| `channelId` | `string` | ✅ | - | Channel id | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `query` | `string` | ✅ | - | Search query | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,9 @@ products: ```html + channelId="example" + [meeting]="meeting" + query="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector-ui.mdx index 0ab9edbe1fcae7c..784cf425f1ad9a0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector-ui.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-chat-selector-ui component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `groups` | `ChatGroup[]` | ✅ | - | Participants | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `selectedGroupId` | `string` | ✅ | - | Selected participant | -| `selfUserId` | `string` | ✅ | - | Self User ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `unreadCounts` | `Record` | ✅ | - | Unread counts | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------ | -------- | ----------------- | -------------------- | +| `groups` | `ChatGroup[]` | ✅ | - | Participants | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `selectedGroupId` | `string` | ✅ | - | Selected participant | +| `selfUserId` | `string` | ✅ | - | Self User ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `unreadCounts` | `Record` | ✅ | - | Unread counts | ## Usage Examples @@ -30,9 +31,9 @@ products: ```html + [groups]="[]" + selectedGroupId="example" + selfUserId="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector.mdx index e7e5178d7c5072b..ef6a41c79405f4a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-selector.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-chat-selector component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ------------ | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,9 +31,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-toggle.mdx index 1973396bb8401c2..942cba2a0f25e3c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat-toggle.mdx @@ -5,23 +5,28 @@ description: API reference for rtk-chat-toggle component (Angular Library) products: - realtime --- + A button which toggles visibility of chat. - You need to pass the `meeting` object to it to see the unread messages count badge. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'chat' } - ``` +You need to pass the `meeting` object to it to see the unread messages count badge. +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "chat"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -36,10 +41,6 @@ A button which toggles visibility of chat. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat.mdx index 12504ff17633de3..b968cfe975421fa 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-chat.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-chat component (Angular Library) products: - realtime --- + Fully featured chat component with image & file upload, emoji picker and auto-scroll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,5 @@ Fully featured chat component with image & file upload, emoji picker and auto-sc ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-clock.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-clock.mdx index fe930adaf1f7baf..eea055224c112f4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-clock.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-clock.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-clock component (Angular Library) products: - realtime --- + Shows the time elapsed in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | ## Usage Examples @@ -28,9 +29,5 @@ Shows the time elapsed in a meeting. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-confirmation-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-confirmation-modal.mdx index 9af1775bf822f6f..cd3a2dc87b17a9f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-confirmation-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-confirmation-modal.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-confirmation-modal component (Angular Library products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,8 +30,5 @@ A confirmation modal. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar-button.mdx index 52a23c6c3a7c14b..85344ab73bbbe9e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar-button.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-controlbar-button component (Angular Library) products: - realtime --- + A skeleton component used for composing custom controlbar buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | -| `disabled` | `boolean` | ✅ | - | Whether button is disabled | -| `icon` | `string` | ✅ | - | Icon | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | -| `label` | `string` | ✅ | - | Label of button | -| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `ControlBarVariant1` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ------------- | -------------------- | -------- | ----------------- | -------------------------------------------------------------- | +| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | +| `disabled` | `boolean` | ✅ | - | Whether button is disabled | +| `icon` | `string` | ✅ | - | Icon | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | +| `label` | `string` | ✅ | - | Label of button | +| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `ControlBarVariant1` | ✅ | - | Variant | ## Usage Examples @@ -34,10 +35,6 @@ A skeleton component used for composing custom controlbar buttons. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar.mdx index e7d739a49130cb7..f06437464f138a2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-controlbar.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-controlbar component (Angular Library) products: - realtime --- + Controlbar component provides you with various designs as variants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples @@ -33,10 +34,6 @@ Controlbar component provides you with various designs as variants. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-counter.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-counter.mdx index 1dcbd9f1997daff..61d79e5a7230d1b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-counter.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-counter.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-counter component (Angular Library) products: - realtime --- + A number picker with increment and decrement buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `minValue` | `number` | ✅ | - | Minimum value | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `value` | `number` | ✅ | - | Initial value | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `minValue` | `number` | ✅ | - | Minimum value | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `value` | `number` | ✅ | - | Initial value | ## Usage Examples @@ -30,10 +31,5 @@ A number picker with increment and decrement buttons. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-audio.mdx index 958771b9756d2be..b878475ad72fa65 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-audio.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-audio component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,9 +29,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-screenshare.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-screenshare.mdx index d6002b9a6aecd84..c78c0ff33fa40dd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-screenshare.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-screenshare.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-screenshare component (Angular Libra products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,9 +29,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-system.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-system.mdx index 60e7d5bb6289f9b..ea1d6d90d2b938e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-system.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-system.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-system component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,9 +29,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-toggle.mdx index 6c7e30bd9fcf7f5..3e69cb73fef0b73 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-toggle.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-debugger-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -29,10 +30,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-video.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-video.mdx index d5210d91dc9db4d..2a84fafef9eb27b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-video.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger-video.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-video component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,9 +29,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger.mdx index 40b74b2e1ab8c69..f73efac1fa88dbf 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-debugger.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-debugger component (Angular Library) products: - realtime --- + A troubleshooting component to identify and fix any issues in the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,9 +31,5 @@ A troubleshooting component to identify and fix any issues in the meeting. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog-manager.mdx index c1de127979df06a..db0a49fdc7627bc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog-manager.mdx @@ -5,24 +5,26 @@ description: API reference for rtk-dialog-manager component (Angular Library) products: - realtime --- + A component which handles all dialog elements in a component such as: - - rtk-settings - - rtk-leave-meeting - - rtk-permissions-message - - rtk-image-viewer - - rtk-breakout-rooms-manager - This components depends on the values from `states` object. + +- rtk-settings +- rtk-leave-meeting +- rtk-permissions-message +- rtk-image-viewer +- rtk-breakout-rooms-manager + This components depends on the values from `states` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -37,9 +39,5 @@ A component which handles all dialog elements in a component such as: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog.mdx index 9635ed56702713b..76e69151c16a283 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-dialog.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-dialog component (Angular Library) products: - realtime --- + A dialog component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | -| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------ | ---------- | -------- | ----------------------- | -------------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | +| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -35,9 +36,9 @@ A dialog component. ```html + [disableEscapeKey]="true" + [hideCloseButton]="true" + [meeting]="meeting" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker-button.mdx index a8934fc38c1e469..41ba93a5da182cd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker-button.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-emoji-picker-button component (Angular Librar products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isActive` | `boolean` | ✅ | - | Active state indicator | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isActive` | `boolean` | ✅ | - | Active state indicator | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,8 +27,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker.mdx index 4247ddbd5c1ce10..01b94d697105b34 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-emoji-picker.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-emoji-picker component (Angular Library) products: - realtime --- + A very simple emoji picker component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------- | ---------- | -------- | ----------------- | ----------------------------------------- | +| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,8 +29,5 @@ A very simple emoji picker component. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ended-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ended-screen.mdx index b354fa28a6845bf..b2ad7d8f8e7eea2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ended-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ended-screen.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-ended-screen component (Angular Library) products: - realtime --- + A screen which shows a meeting has ended. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Global states | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | Global states | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Global states | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | Global states | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,5 @@ A screen which shows a meeting has ended. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-dropzone.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-dropzone.mdx index 8344ce746896053..57ffa8f9039d89a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-dropzone.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-dropzone.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-file-dropzone component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ------------- | -------- | ----------------- | ------------------------------------------- | +| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,8 +27,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message-view.mdx index 48e4cca9eee6790..858399c5abccaed 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message-view.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-file-message-view component (Angular Library) products: - realtime --- + A component which renders a file message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `name` | `string` | ✅ | - | Name of the file | -| `size` | `number` | ✅ | - | Size of the file | -| `url` | `string` | ✅ | - | Url of the file | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `name` | `string` | ✅ | - | Name of the file | +| `size` | `number` | ✅ | - | Size of the file | +| `url` | `string` | ✅ | - | Url of the file | ## Usage Examples @@ -29,10 +30,6 @@ A component which renders a file message. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message.mdx index a19ab17f5b413c7..d32dd9edc995033 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-file-message component (Angular Library) products: - realtime --- + @deprecated `rtk-file-message` is deprecated and will be removed soon. Use `rtk-file-message-view` instead. - A component which renders a file message from chat. +A component which renders a file message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `FileMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `FileMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,10 +33,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-picker-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-picker-button.mdx index 4bda6955ac1042e..2470555e83eff13 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-picker-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-file-picker-button.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-file-picker-button component (Angular Library products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `filter` | `string` | ✅ | - | File type filter to open file picker with | -| `icon` | `keyof IconPack1` | ✅ | - | Icon | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `label` | `string` | ✅ | - | Label for tooltip | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------------- | -------- | ----------------- | ----------------------------------------- | +| `filter` | `string` | ✅ | - | File type filter to open file picker with | +| `icon` | `keyof IconPack1` | ✅ | - | Icon | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `label` | `string` | ✅ | - | Label for tooltip | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,9 @@ products: ```html + filter="example" + [icon]="defaultIconPack" + label="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-fullscreen-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-fullscreen-toggle.mdx index f1d002421e860d8..04544ab3ecc21c2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-fullscreen-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-fullscreen-toggle.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-fullscreen-toggle component (Angular Library) products: - realtime --- + A button which toggles full screen mode for any - existing `rtk-meeting` component in the DOM. +existing `rtk-meeting` component in the DOM. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `targetElement` | `HTMLElement` | ✅ | - | Target Element to fullscreen | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------- | -------- | ----------------- | ---------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `targetElement` | `HTMLElement` | ✅ | - | Target Element to fullscreen | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -32,10 +33,6 @@ A button which toggles full screen mode for any ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid-pagination.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid-pagination.mdx index 535638be929e69a..04a546d6b3f89a5 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid-pagination.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid-pagination.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-grid-pagination component (Angular Library) products: - realtime --- + A component which allows you to change current page and view mode - of active participants list. This is reflected in the `rtk-grid` component. +of active participants list. This is reflected in the `rtk-grid` component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size Prop | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `GridPaginationVariants` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------------ | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size Prop | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `GridPaginationVariants` | ✅ | - | Variant | ## Usage Examples @@ -33,9 +34,9 @@ A component which allows you to change current page and view mode ```html + [meeting]="meeting" + size="md" + [variant]="gridpaginationvariants" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid.mdx index bd36da17a99fc2e..0c97b4b23ee5ea2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-grid.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-grid component (Angular Library) products: - realtime --- + The main grid component which abstracts all the grid handling logic and renders it for you. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `gap` | `number` | ✅ | - | Gap between participants | -| `gridSize` | `GridSize` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `layout` | `GridLayout` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `any` | ✅ | - | @deprecated | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------ | -------- | ----------------------- | ------------------------------------ | +| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `gap` | `number` | ✅ | - | Gap between participants | +| `gridSize` | `GridSize` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `layout` | `GridLayout` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `any` | ✅ | - | @deprecated | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -36,10 +37,5 @@ The main grid component which abstracts all the grid handling logic and renders ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-header.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-header.mdx index 6308160dae44850..c09018ff727582b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-header.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-header.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-header component (Angular Library) products: - realtime --- + A component that houses all the header components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples @@ -33,10 +34,5 @@ A component that houses all the header components. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-icon.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-icon.mdx index b78675a57bf3f47..fdb32d3739e666a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-icon.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-icon.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-icon component (Angular Library) products: - realtime --- + An icon component which accepts an svg string and renders it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `icon` | `string` | ✅ | - | Icon | -| `size` | `Size1` | ✅ | - | Size | -| `variant` | `IconVariant` | ✅ | - | Icon variant | +| Property | Type | Required | Default | Description | +| --------- | ------------- | -------- | ------- | ------------ | +| `icon` | `string` | ✅ | - | Icon | +| `size` | `Size1` | ✅ | - | Size | +| `variant` | `IconVariant` | ✅ | - | Icon variant | ## Usage Examples @@ -28,10 +29,5 @@ An icon component which accepts an svg string and renders it. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-idle-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-idle-screen.mdx index 98bd3fd010f365a..a5a0b562a10c71e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-idle-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-idle-screen.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-idle-screen component (Angular Library) products: - realtime --- + A screen that handles the idle state, - i.e; when you are waiting for data about the meeting, specifically the `meeting` object. +i.e; when you are waiting for data about the meeting, specifically the `meeting` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,8 +31,5 @@ A screen that handles the idle state, ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message-view.mdx index ae4305bd0b859b1..b6624557f5b530d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message-view.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-image-message-view component (Angular Library products: - realtime --- + A component which renders an image message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `url` | `string` | ✅ | - | Url of the image | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `url` | `string` | ✅ | - | Url of the image | ## Usage Examples @@ -28,8 +29,5 @@ A component which renders an image message. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message.mdx index e61a9e43a995966..57f711994dc6ea4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-image-message component (Angular Library) products: - realtime --- + @deprecated `rtk-image-message` is deprecated and will be removed soon. Use `rtk-image-message-view` instead. - A component which renders an image message from chat. +A component which renders an image message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `ImageMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `ImageMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,10 +33,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-viewer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-viewer.mdx index ce55f03e3a1012b..a5c26ec0490046f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-viewer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-image-viewer.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-image-viewer component (Angular Library) products: - realtime --- + A component which shows an image sent via chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `image` | `ImageMessage` | ✅ | - | Image message | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | -------------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `image` | `ImageMessage` | ✅ | - | Image message | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,5 @@ A component which shows an image sent via chat. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-information-tooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-information-tooltip.mdx index 87a5a453715b10c..4a0ff811c795716 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-information-tooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-information-tooltip.mdx @@ -5,11 +5,12 @@ description: API reference for rtk-information-tooltip component (Angular Librar products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | ## Usage Examples @@ -24,8 +25,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-join-stage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-join-stage.mdx index 877a7a5fef233c5..54215fd0fe361ad 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-join-stage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-join-stage.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-join-stage component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------ | ----------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,10 +31,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-button.mdx index 28820eb49fe7d0e..57d4746414928cd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-button.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-leave-button component (Angular Library) products: - realtime --- + A button which toggles visilibility of the leave confirmation dialog. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -29,9 +30,5 @@ A button which toggles visilibility of the leave confirmation dialog. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-meeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-meeting.mdx index 46d14fe211c640f..97cb75f991a2535 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-meeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-leave-meeting.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-leave-meeting component (Angular Library) products: - realtime --- + A component which allows you to leave a meeting or - end meeting for all, if you have the permission. +end meeting for all, if you have the permission. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,8 +31,5 @@ A component which allows you to leave a meeting or ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-indicator.mdx index 04858c6a723e9f5..5822982df0f5a65 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-indicator.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-livestream-indicator component (Angular Libra products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,9 +28,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-player.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-player.mdx index 35b411555cd3561..4aedae8a958db06 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-player.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-player.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-livestream-player component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,9 +28,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-toggle.mdx index b965a5d73aa5a9c..43e52a53ecca76d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-livestream-toggle.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-livestream-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -28,10 +29,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-logo.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-logo.mdx index c7422b474f26bde..8a910a96dda8544 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-logo.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-logo.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-logo component (Angular Library) products: - realtime --- + A component which loads the logo from your config, or via the `logo-url` attribute. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `logoUrl` | `string` | ✅ | - | Logo URL | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `logoUrl` | `string` | ✅ | - | Logo URL | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,5 @@ A component which loads the logo from your config, or via the `logo-url` attribu ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-markdown-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-markdown-view.mdx index a7f872c4122307b..b5b816456292b1a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-markdown-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-markdown-view.mdx @@ -5,12 +5,13 @@ description: API reference for rtk-markdown-view component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | -| `text` | `string` | ✅ | - | raw text to render as markdown | +| Property | Type | Required | Default | Description | +| ----------- | -------- | -------- | ------- | ---------------------------------------- | +| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | +| `text` | `string` | ✅ | - | raw text to render as markdown | ## Usage Examples @@ -25,9 +26,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting-title.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting-title.mdx index 31cbdb86d3736f2..6adbeb63b44a99a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting-title.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting-title.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-meeting-title component (Angular Library) products: - realtime --- + Displays the title of the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,8 +29,5 @@ Displays the title of the meeting. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting.mdx index f1727781860d6f0..fb1306311adea67 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-meeting.mdx @@ -5,27 +5,28 @@ description: API reference for rtk-meeting component (Angular Library) products: - realtime --- + A single component which renders an entire meeting UI. - It loads your preset and renders the UI based on it. - With this component, you don't have to handle all the states, - dialogs and other smaller bits of managing the application. +It loads your preset and renders the UI based on it. +With this component, you don't have to handle all the states, +dialogs and other smaller bits of managing the application. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | -| `config` | `UIConfig` | ✅ | - | UI Config | -| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | -| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `MeetingMode` | ✅ | - | Fill type | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ------------------ | ------------------------------------------------------------------- | +| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | +| `config` | `UIConfig` | ✅ | - | UI Config | +| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | +| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `MeetingMode` | ✅ | - | Fill type | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -41,9 +42,9 @@ A single component which renders an entire meeting UI. ```html + [applyDesignSystem]="true" + [config]="defaultUiConfig" + [gridLayout]="gridlayout1" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-item.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-item.mdx index b640c6b002c812a..ec230b806744c2e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-item.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-item.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-menu-item component (Angular Library) products: - realtime --- + A menu item component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,6 @@ A menu item component. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-list.mdx index 7637b0961658634..cc93e411c5ade5a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu-list.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-menu-list component (Angular Library) products: - realtime --- + A menu list component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,8 +29,5 @@ A menu list component. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu.mdx index 166ba3bed89a7cc..75bea868f269ae2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-menu.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-menu component (Angular Library) products: - realtime --- + A menu component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `offset` | `number` | ✅ | - | Offset in px | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | ----------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `offset` | `number` | ✅ | - | Offset in px | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,10 +31,5 @@ A menu component. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-list-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-list-view.mdx index 3a2c6f64fdbcb64..c6e6a410829ecf7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-list-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-list-view.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-message-list-view component (Angular Library) products: - realtime --- + A component which renders list of messages. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `estimateItemSize` | `number` | ✅ | - | Estimated height of an item | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `loadMore` | `(lastMessage: Message)` | ✅ | - | Function to load more messages. Messages returned from this will be prepended | -| `messages` | `Message[]` | ✅ | - | Messages to render | -| `renderer` | `(message: Message, index: number)` | ✅ | - | Render function of the message | -| `visibleItemsCount` | `number` | ✅ | - | Maximum visible messages | +| Property | Type | Required | Default | Description | +| ------------------- | ----------------------------------- | -------- | ----------------- | ----------------------------------------------------------------------------- | +| `estimateItemSize` | `number` | ✅ | - | Estimated height of an item | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `loadMore` | `(lastMessage: Message)` | ✅ | - | Function to load more messages. Messages returned from this will be prepended | +| `messages` | `Message[]` | ✅ | - | Messages to render | +| `renderer` | `(message: Message, index: number)` | ✅ | - | Render function of the message | +| `visibleItemsCount` | `number` | ✅ | - | Maximum visible messages | ## Usage Examples @@ -32,9 +33,9 @@ A component which renders list of messages. ```html + estimateItemSize="42" + [loadMore]="(lastmessage: message)" + [messages]="[]" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-view.mdx index b9ab493f273c95c..cf2cd2949c924ba 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-message-view.mdx @@ -5,24 +5,25 @@ description: API reference for rtk-message-view component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | -| `authorName` | `string` | ✅ | - | Author display label | -| `avatarUrl` | `string` | ✅ | - | Avatar image url | -| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | -| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | -| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isEdited` | `boolean` | ✅ | - | Has the message been edited | -| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | -| `messageType` | `Message['type']` | ✅ | - | Type of message | -| `pinned` | `boolean` | ✅ | - | Is message pinned | -| `time` | `Date` | ✅ | - | Time when message was sent | -| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | -| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | +| Property | Type | Required | Default | Description | +| ---------------- | -------------------------- | -------- | ----------------- | --------------------------------------- | +| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | +| `authorName` | `string` | ✅ | - | Author display label | +| `avatarUrl` | `string` | ✅ | - | Avatar image url | +| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | +| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | +| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isEdited` | `boolean` | ✅ | - | Has the message been edited | +| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | +| `messageType` | `Message['type']` | ✅ | - | Type of message | +| `pinned` | `boolean` | ✅ | - | Is message pinned | +| `time` | `Date` | ✅ | - | Time when message was sent | +| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | +| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | ## Usage Examples @@ -37,10 +38,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mic-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mic-toggle.mdx index a99b4422c32892b..2f9fa6aaf5f2e0e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mic-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mic-toggle.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-mic-toggle component (Angular Library) products: - realtime --- + A button which toggles your microphone. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -30,10 +31,6 @@ A button which toggles your microphone. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-microphone-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-microphone-selector.mdx index e387ad7b10c0480..1cd58cb2ab66302 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-microphone-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-microphone-selector.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-microphone-selector component (Angular Librar products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -39,9 +41,9 @@ A component which lets to manage your audio devices and audio preferences. ```html + [meeting]="meeting" + size="md" + [variant]="'full' | 'inline'" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mixed-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mixed-grid.mdx index fce5f3ee1150759..bc1d583c35d077b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mixed-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mixed-grid.mdx @@ -5,26 +5,27 @@ description: API reference for rtk-mixed-grid component (Angular Library) products: - realtime --- + A grid component which handles screenshares, plugins and participants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | -| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | +| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -39,10 +40,5 @@ A grid component which handles screenshares, plugins and participants. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-more-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-more-toggle.mdx index da82abf95847f76..b6d4f9cd6a2fb91 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-more-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-more-toggle.mdx @@ -5,20 +5,24 @@ description: API reference for rtk-more-toggle component (Angular Library) products: - realtime --- + A button which toggles visibility of a more menu. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeMoreMenu: boolean; } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeMoreMenu: boolean; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -33,8 +37,5 @@ A button which toggles visibility of a more menu. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-button.mdx index 267acdbbab6197c..e1a63a750b62c5d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-button.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-mute-all-button component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -28,10 +29,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-confirmation.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-confirmation.mdx index fd686e57c8f8e71..406a2e94c9b8462 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-confirmation.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-mute-all-confirmation.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-mute-all-confirmation component (Angular Libr products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,8 +28,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-name-tag.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-name-tag.mdx index ab2fdfe0ef135b8..4f21452d80b34f9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-name-tag.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-name-tag.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-name-tag component (Angular Library) products: - realtime --- + A component which shows a participant's name. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------- | -------- | ----------------- | ----------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | ## Usage Examples @@ -33,9 +34,9 @@ A component which shows a participant's name. ```html + [isScreenShare]="true" + [meeting]="meeting" + [participant]="participant" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-network-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-network-indicator.mdx index 7a1feeae085082d..2776b79be409e22 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-network-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-network-indicator.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-network-indicator component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant or Self | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------------- | ----------- | -------- | ----------------- | ------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant or Self | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,9 @@ products: ```html + [isScreenShare]="true" + [meeting]="meeting" + [participant]="participant" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notification.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notification.mdx index 4bb7b34755028e3..3125a0458248d60 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notification.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notification.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-notification component (Angular Library) products: - realtime --- + A component which shows a notification. - You need to remove the element after you receive the - `rtkNotificationDismiss` event. +You need to remove the element after you receive the +`rtkNotificationDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `notification` | `Notification` | ✅ | - | Message | -| `paused` | `boolean` | ✅ | - | Stops timeout when true | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | -------------- | -------- | ----------------- | ----------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `notification` | `Notification` | ✅ | - | Message | +| `paused` | `boolean` | ✅ | - | Stops timeout when true | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,10 +33,6 @@ A component which shows a notification. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notifications.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notifications.mdx index 7d3957e28575b5d..29874314310420f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notifications.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-notifications.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-notifications component (Angular Library) products: - realtime --- + A component which handles notifications. - You can configure which notifications you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which notifications you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -33,9 +34,5 @@ A component which handles notifications. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-overlay-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-overlay-modal.mdx index da6b60ff9959d29..f7b0a744c973685 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-overlay-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-overlay-modal.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-overlay-modal component (Angular Library) products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,8 +30,5 @@ A confirmation modal. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-paginated-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-paginated-list.mdx index a37ab406bfe13c8..3a22d1b7e3c7e6a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-paginated-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-paginated-list.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-paginated-list component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | -| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | -| `emptyListLabel` | `string` | ✅ | - | label to show when empty | -| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `pageSize` | `number` | ✅ | - | Page Size | -| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | -| `rerenderList` | `()` | ✅ | - | Rerender paginated list | -| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ------------------------------------------------------ | -------- | ----------------- | ---------------------------------------------- | +| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | +| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | +| `emptyListLabel` | `string` | ✅ | - | label to show when empty | +| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `pageSize` | `number` | ✅ | - | Page Size | +| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | +| `rerenderList` | `()` | ✅ | - | Rerender paginated list | +| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,9 +35,9 @@ products: ```html + [autoScroll]="true" + [createNodes]="[]" + emptyListLabel="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-count.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-count.mdx index a77302d526005b6..dc709547d180829 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-count.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-count.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participant-count component (Angular Library) products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,5 @@ A component which shows count of total joined participants in a meeting. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-setup.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-setup.mdx index fbdb48390bc0073..354d7029075e454 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-setup.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-setup.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-participant-setup component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -33,14 +34,14 @@ products: ```html + [participant]="participant" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-tile.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-tile.mdx index a87d31044667f2c..e4417402b7a4053 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-tile.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant-tile.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-participant-tile component (Angular Library) products: - realtime --- + A component which plays a participants video and allows for placement - of components like `rtk-name-tag`, `rtk-audio-visualizer` or any other component. +of components like `rtk-name-tag`, `rtk-audio-visualizer` or any other component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -37,14 +38,14 @@ A component which plays a participants video and allows for placement ```html + | 'top-center'" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant.mdx index 1dda330a33b1b70..2cb75bb1541d4dc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participant.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-participant component (Angular Library) products: - realtime --- + A participant entry component used inside `rtk-participants` which shows data like: - name, picture and media device status. - You can perform privileged actions on the participant too. +name, picture and media device status. +You can perform privileged actions on the participant too. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | +| Property | Type | Required | Default | Description | +| ------------- | --------------------- | -------- | ----------------------- | ------------------------ | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | ## Usage Examples @@ -35,9 +36,9 @@ A participant entry component used inside `rtk-participants` which shows data li ```html + [meeting]="meeting" + [participant]="participant" + [view]="participantviewmode" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-audio.mdx index 8d1dd8043548405..f35effb4020a5a4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-audio.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-audio component (Angular Library products: - realtime --- + A component which plays all the audio from participants and screenshares. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------ | -------- | ----------------- | --------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,8 +31,8 @@ A component which plays all the audio from participants and screenshares. ```html + [meeting]="meeting" + [preloadedAudioElem]="htmlaudioelement" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-list.mdx index 805eb1630f5565d..a0ad0b85a8677ae 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-list.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-participants-stage-list component (Angular Li products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------------ | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -36,9 +37,9 @@ A component which lists all participants, with ability to ```html + [hideHeader]="true" + [meeting]="meeting" + search="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-queue.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-queue.mdx index 0963dbb1699ef78..883999ff9c3ed7f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-queue.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-stage-queue.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-stage-queue component (Angular L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -30,9 +31,9 @@ products: ```html + [meeting]="meeting" + size="md" + [view]="participantsviewmode" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-toggle.mdx index dea0f244da4a0d5..bb5751a926de3b4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-toggle.mdx @@ -5,22 +5,27 @@ description: API reference for rtk-participants-toggle component (Angular Librar products: - realtime --- + A button which toggles visibility of participants. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'participants' } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "participants"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -35,10 +40,6 @@ A button which toggles visibility of participants. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-viewer-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-viewer-list.mdx index 4ae0ae15cc28d5d..db2b020c8b88ab8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-viewer-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-viewer-list.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-participants-viewer-list component (Angular L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -32,9 +33,9 @@ products: ```html + [hideHeader]="true" + [meeting]="meeting" + search="example" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-waiting-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-waiting-list.mdx index 073a3e467d62514..f31d8a204b73fd3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-waiting-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants-waiting-list.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-waiting-list component (Angular products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -30,9 +31,9 @@ products: ```html + [meeting]="meeting" + size="md" + [view]="participantsviewmode" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants.mdx index f1984d1798d8879..b771206de02ce49 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-participants.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-participants component (Angular Library) products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------------- | ------------------- | -------- | ----------------------- | --------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,9 +35,9 @@ A component which lists all participants, with ability to ```html + [defaultParticipantsTabId]="participantstabid" + [meeting]="meeting" + size="md" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-permissions-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-permissions-message.mdx index dec4a8e63bdaed2..683752123d4ac43 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-permissions-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-permissions-message.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-permissions-message component (Angular Librar products: - realtime --- + A component which shows permission related troubleshooting - information. +information. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,8 +31,5 @@ A component which shows permission related troubleshooting ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pinned-message-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pinned-message-selector.mdx index 94aad79b50a76a9..930b8fea7a6f96a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pinned-message-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pinned-message-selector.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-pinned-message-selector component (Angular Li products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,8 +27,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pip-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pip-toggle.mdx index ff56f4f7c8fc58c..3b85d1e48dc9a96 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pip-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-pip-toggle.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-pip-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -30,10 +31,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugin-main.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugin-main.mdx index 2adc29e0fe4d37f..8bc1fdc55db3407 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugin-main.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugin-main.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-plugin-main component (Angular Library) products: - realtime --- + A component which loads a plugin. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `plugin` | `RTKPlugin` | ✅ | - | Plugin | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `plugin` | `RTKPlugin` | ✅ | - | Plugin | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,9 +30,5 @@ A component which loads a plugin. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins-toggle.mdx index 1e55dfd168ff802..78da2d41fbb440d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins-toggle.mdx @@ -5,22 +5,27 @@ description: API reference for rtk-plugins-toggle component (Angular Library) products: - realtime --- + A button which toggles visibility of plugins. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'plugins' } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "plugins"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -35,10 +40,6 @@ A button which toggles visibility of plugins. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins.mdx index ef10daccef93a00..916242388b0671a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-plugins.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-plugins component (Angular Library) products: - realtime --- + A component which lists all available plugins from their preset, - and ability to enable or disable plugins. +and ability to enable or disable plugins. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,5 @@ A component which lists all available plugins from their preset, ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll-form.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll-form.mdx index ed3e4b10df95868..92e52060d4aa885 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll-form.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll-form.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-poll-form component (Angular Library) products: - realtime --- + A component that lets you create a poll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,9 +28,5 @@ A component that lets you create a poll. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll.mdx index 9c50bc3106f4e74..ef928546a835336 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-poll.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-poll component (Angular Library) products: - realtime --- + A poll component. - Shows a poll where a user can vote. +Shows a poll where a user can vote. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | -| `poll` | `Poll` | ✅ | - | Poll | -| `self` | `string` | ✅ | - | Self ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ---------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | +| `poll` | `Poll` | ✅ | - | Poll | +| `self` | `string` | ✅ | - | Self ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,10 +32,6 @@ A poll component. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls-toggle.mdx index 8ee05f66d6d0c1e..4bc3fdff2d81dca 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls-toggle.mdx @@ -5,23 +5,28 @@ description: API reference for rtk-polls-toggle component (Angular Library) products: - realtime --- + A button which toggles visibility of polls. - You need to pass the `meeting` object to it to see the unread polls count badge. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'polls' } - ``` +You need to pass the `meeting` object to it to see the unread polls count badge. +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "polls"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -36,10 +41,6 @@ A button which toggles visibility of polls. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls.mdx index 0ccd3069c42b635..32b89fad2be1ffb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-polls.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-polls component (Angular Library) products: - realtime --- + A component which lists all available plugins a user can access with - the ability to enable or disable them as per their permissions. +the ability to enable or disable them as per their permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,5 @@ A component which lists all available plugins a user can access with ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-indicator.mdx index ad5090fddeb9402..51f3ba8000a0d15 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-indicator.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-recording-indicator component (Angular Librar products: - realtime --- + A component which indicates the recording status of a meeting. - It will not render anything if no recording is taking place. +It will not render anything if no recording is taking place. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,9 +31,6 @@ A component which indicates the recording status of a meeting. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-toggle.mdx index 5bc2e14496eecf7..47452de08e7ec1c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-recording-toggle.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-recording-toggle component (Angular Library) products: - realtime --- + A button which toggles recording state of a meeting. - Only a privileged user can perform this action, - thus the button will not be visible for participants - who don't have the permission to record a meeting. +Only a privileged user can perform this action, +thus the button will not be visible for participants +who don't have the permission to record a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Disable the button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ------------------ | +| `disabled` | `boolean` | ✅ | - | Disable the button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -34,10 +35,6 @@ A button which toggles recording state of a meeting. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screen-share-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screen-share-toggle.mdx index dec1ea51ccfddcc..00b6c6adc2aabc0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screen-share-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screen-share-toggle.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-screen-share-toggle component (Angular Librar products: - realtime --- + A button which toggles your screenshare. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -31,10 +32,6 @@ A button which toggles your screenshare. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screenshare-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screenshare-view.mdx index f678a4456bcdc0a..ab7da66afebf434 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screenshare-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-screenshare-view.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-screenshare-view component (Angular Library) products: - realtime --- + A component which plays a participant's screenshared video. - It also allows for placement of other components similar to `rtk-participant-tile`. - This component will not render anything if the participant hasn't start screensharing. +It also allows for placement of other components similar to `rtk-participant-tile`. +This component will not render anything if the participant hasn't start screensharing. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hideFullScreenButton` | `boolean` | ✅ | - | Hide full screen button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------- | ----------------------- | +| `hideFullScreenButton` | `boolean` | ✅ | - | Hide full screen button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -36,14 +37,14 @@ A component which plays a participant's screenshared video. ```html + | 'top-center'" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-audio.mdx index 5818d8214fc8651..066d024c27fab77 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-audio.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-settings-audio component (Angular Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -38,9 +40,5 @@ A component which lets to manage your audio devices and audio preferences. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-toggle.mdx index 56af8d465416a8d..d003ef750b8f9f1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-toggle.mdx @@ -5,21 +5,25 @@ description: API reference for rtk-settings-toggle component (Angular Library) products: - realtime --- + A button which toggles visibility of settings module. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSettings: boolean; } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSettings: boolean; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -34,9 +38,5 @@ A button which toggles visibility of settings module. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-video.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-video.mdx index 19b1a2ff5f132a7..381c51a0e2cf855 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-video.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings-video.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-settings-video component (Angular Library) products: - realtime --- + A component which lets to manage your camera devices and your video preferences. - Emits `rtkStateUpdate` event with data for toggling mirroring of self video: - ```ts - { - prefs: { - mirrorVideo: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for toggling mirroring of self video: + +```ts +{ + prefs: { + mirrorVideo: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -38,9 +40,5 @@ A component which lets to manage your camera devices and your video preferences. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings.mdx index 339be6009cf2424..9789b422d1f2837 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-settings.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-settings component (Angular Library) products: - realtime --- + A settings component to see and change your audio/video devices - as well as see your connection quality. +as well as see your connection quality. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,9 +32,5 @@ A settings component to see and change your audio/video devices ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-setup-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-setup-screen.mdx index d142bf62459ec14..1406ce5ff38d369 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-setup-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-setup-screen.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-setup-screen component (Angular Library) products: - realtime --- + A screen shown before joining the meeting, where you can edit your display name, - and media settings. +and media settings. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,9 +33,5 @@ A screen shown before joining the meeting, where you can edit your display name, ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar-ui.mdx index 8126edad79c871c..94db2e01d33f007 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar-ui.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-sidebar-ui component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `currentTab` | `string` | ✅ | - | Default tab to open | -| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | -| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | -| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | -| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | -| `view` | `RtkSidebarView1` | ✅ | - | View | +| Property | Type | Required | Default | Description | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --------------- | ---------------------------------------- | +| `currentTab` | `string` | ✅ | - | Default tab to open | +| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | +| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | +| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | +| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | +| `view` | `RtkSidebarView1` | ✅ | - | View | ## Usage Examples @@ -32,9 +33,9 @@ products: ```html + currentTab="example" + [focusCloseButton]="true" + [hideCloseAction]="true" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar.mdx index bfd8e5e11b5177c..71e210674395a9d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-sidebar.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-sidebar component (Angular Library) products: - realtime --- + A component which handles the sidebar and - you can customize which sections you want, and which section you want as the default. +you can customize which sections you want, and which section you want as the default. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | -| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `RtkSidebarView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------- | -------- | ----------------------- | --------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | +| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `RtkSidebarView` | ✅ | - | View type | ## Usage Examples @@ -36,9 +37,9 @@ A component which handles the sidebar and ```html + [defaultSection]="rtksidebarsection" + [enabledSections]="[]" + [meeting]="meeting" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-simple-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-simple-grid.mdx index ea88ffe55f9f48e..bf202dd85e47787 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-simple-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-simple-grid.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-simple-grid component (Angular Library) products: - realtime --- + A grid component which renders only the participants in a simple grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | ---------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,10 +35,6 @@ A grid component which renders only the participants in a simple grid. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-speaker-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-speaker-selector.mdx index c19b21a731b3bcd..16628f891f7fa01 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-speaker-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-speaker-selector.mdx @@ -5,26 +5,28 @@ description: API reference for rtk-speaker-selector component (Angular Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -40,9 +42,9 @@ A component which lets to manage your audio devices and audio preferences. ```html + [meeting]="meeting" + size="md" + [variant]="'full' | 'inline'" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spinner.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spinner.mdx index 915451bf50a7527..47ea91cffa10d78 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spinner.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spinner.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-spinner component (Angular Library) products: - realtime --- + A component which shows an animating spinner. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size1` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size1` | ✅ | - | Size | ## Usage Examples @@ -27,8 +28,5 @@ A component which shows an animating spinner. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-grid.mdx index f88cc7f531eac2c..c3e3916f6cc12bb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-grid.mdx @@ -5,27 +5,29 @@ description: API reference for rtk-spotlight-grid component (Angular Library) products: - realtime --- + A grid component that renders two lists of participants: `pinnedParticipants` and `participants`. - You can customize the layout to a `column` view, by default is is `row`. - - Participants from `pinnedParticipants[]` are rendered inside a larger grid. - - Participants from `participants[]` array are rendered in a smaller grid. +You can customize the layout to a `column` view, by default is is `row`. + +- Participants from `pinnedParticipants[]` are rendered inside a larger grid. +- Participants from `participants[]` array are rendered in a smaller grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -40,10 +42,6 @@ A grid component that renders two lists of participants: `pinnedParticipants` an ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-indicator.mdx index 60b6debe69e9082..ddb740d3af6b233 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-spotlight-indicator.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-spotlight-indicator component (Angular Librar products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,9 +28,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage-toggle.mdx index 8e92fdc9598d17a..27bcf1579495dbe 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage-toggle.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-stage-toggle component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -29,10 +30,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage.mdx index ccffa6559353763..0b94a4fd1566c92 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-stage.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-stage component (Angular Library) products: - realtime --- + A component used as a stage that commonly houses - the `grid` and `sidebar` components. +the `grid` and `sidebar` components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,9 +29,5 @@ A component used as a stage that commonly houses ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-switch.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-switch.mdx index f8993d18641c090..75c781fb19e4ce2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-switch.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-switch.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-switch component (Angular Library) products: - realtime --- + A switch component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | -| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------------------------------- | +| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | +| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,10 +31,5 @@ A switch component which follows RTK Design System. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tab-bar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tab-bar.mdx index 1c8cf7cad9f42ff..339bfe235fceedb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tab-bar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tab-bar.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-tab-bar component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `activeTab` | `Tab` | ✅ | - | Active tab | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `tabs` | `Tab[]` | ✅ | - | Tabs | +| Property | Type | Required | Default | Description | +| ----------- | ------------- | -------- | ----------------------- | -------------- | +| `activeTab` | `Tab` | ✅ | - | Active tab | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `tabs` | `Tab[]` | ✅ | - | Tabs | ## Usage Examples @@ -32,10 +33,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-composer-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-composer-view.mdx index cba219399b00342..b2a412cd7210059 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-composer-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-composer-view.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-text-composer-view component (Angular Library products: - realtime --- + A component which renders a text composer ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Disable the text input (default = false) | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `keyDownHandler` | `(e: KeyboardEvent)` | ✅ | - | Keydown event handler function | -| `maxLength` | `number` | ✅ | - | Max length for text input | -| `placeholder` | `string` | ✅ | - | Placeholder text | -| `rateLimitBreached` | `boolean` | ✅ | - | Boolean to indicate if rate limit is breached | -| `setText` | `(text: string, focus?: boolean)` | ❌ | - | Sets value of the text input | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `value` | `string` | ✅ | - | Default value for text input | +| Property | Type | Required | Default | Description | +| ------------------- | --------------------------------- | -------- | ----------------- | --------------------------------------------- | +| `disabled` | `boolean` | ✅ | - | Disable the text input (default = false) | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `keyDownHandler` | `(e: KeyboardEvent)` | ✅ | - | Keydown event handler function | +| `maxLength` | `number` | ✅ | - | Max length for text input | +| `placeholder` | `string` | ✅ | - | Placeholder text | +| `rateLimitBreached` | `boolean` | ✅ | - | Boolean to indicate if rate limit is breached | +| `setText` | `(text: string, focus?: boolean)` | ❌ | - | Sets value of the text input | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `value` | `string` | ✅ | - | Default value for text input | ## Usage Examples @@ -35,9 +36,9 @@ A component which renders a text composer ```html + [disabled]="true" + [keyDownHandler]="(e: keyboardevent)" + maxLength="42" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message-view.mdx index 1ccf18977b7aa7d..45ba2ef88c72b20 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message-view.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-text-message-view component (Angular Library) products: - realtime --- + A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | -| `text` | `string` | ✅ | - | Text message | +| Property | Type | Required | Default | Description | +| ------------ | --------- | -------- | ------- | ----------------------------------------- | +| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | +| `text` | `string` | ✅ | - | Text message | ## Usage Examples @@ -27,9 +28,6 @@ A component which renders a text message from chat. ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message.mdx index 5060b6599375a57..230e3211e03b994 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-text-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-text-message component (Angular Library) products: - realtime --- + @deprecated `rtk-text-message` is deprecated and will be removed soon. Use `rtk-text-message-view` instead. - A component which renders a text message from chat. +A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `TextMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `TextMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,10 +33,6 @@ products: ```html - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tooltip.mdx index 4e6f62691aef692..371a6eec0e5bcf2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-tooltip.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-tooltip component (Angular Library) products: - realtime --- + Tooltip component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `delay` | `number` | ✅ | - | Delay before showing the tooltip | -| `disabled` | `boolean` | ✅ | - | Disabled | -| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | -| `label` | `string` | ✅ | - | Tooltip label | -| `open` | `boolean` | ✅ | - | Open | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | +| Property | Type | Required | Default | Description | +| ----------- | ---------------- | -------- | ------- | -------------------------------- | +| `delay` | `number` | ✅ | - | Delay before showing the tooltip | +| `disabled` | `boolean` | ✅ | - | Disabled | +| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | +| `label` | `string` | ✅ | - | Tooltip label | +| `open` | `boolean` | ✅ | - | Open | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | ## Usage Examples @@ -33,10 +34,5 @@ Tooltip component which follows RTK Design System. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcript.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcript.mdx index 4f6fe2ff039b589..570133cd5d8d464 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcript.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcript.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-transcript component (Angular Library) products: - realtime --- + A component which shows a transcript. - You need to remove the element after you receive the - `rtkTranscriptDismiss` event. +You need to remove the element after you receive the +`rtkTranscriptDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | +| Property | Type | Required | Default | Description | +| ------------ | -------------------------------------- | -------- | --------------- | ----------- | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | ## Usage Examples @@ -29,9 +30,5 @@ A component which shows a transcript. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcripts.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcripts.mdx index 4e6c1192fcba044..578013baff0705a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcripts.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-transcripts.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-transcripts component (Angular Library) products: - realtime --- + A component which handles transcripts. - You can configure which transcripts you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which transcripts you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,8 +32,5 @@ A component which handles transcripts. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ui-provider.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ui-provider.mdx index 0bfe8c1b9050c14..8602181f2eb682c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ui-provider.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-ui-provider.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-ui-provider component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | -| `mode` | `MeetingMode1` | ✅ | - | Fill type | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | +| Property | Type | Required | Default | Description | +| ----------------- | ----------------- | -------- | ------------------ | ----------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | +| `mode` | `MeetingMode1` | ✅ | - | Fill type | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | ## Usage Examples @@ -31,9 +32,9 @@ products: ```html + [config]="defaultUiConfig" + [mode]="meeting" + [showSetupScreen]="true" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-viewer-count.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-viewer-count.mdx index bb61879c99d4f26..f64a1ff20e41f82 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-viewer-count.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-viewer-count.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-viewer-count component (Angular Library) products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | ## Usage Examples @@ -29,9 +30,5 @@ A component which shows count of total joined participants in a meeting. ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-virtualized-participant-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-virtualized-participant-list.mdx index 63be1a12b781fd2..040843c9c08f95e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-virtualized-participant-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-virtualized-participant-list.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-virtualized-participant-list component (Angul products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | -| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | -| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | -| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | -| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------- | +| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | +| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | +| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | +| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | +| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | ## Usage Examples @@ -29,9 +30,9 @@ products: ```html + bufferedItemsCount="42" + [emptyListElement]="htmlelement" + itemHeight="42" +> ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-waiting-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-waiting-screen.mdx index 46061d522a85431..ed0bda90edc56eb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-waiting-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/angular/rtk-waiting-screen.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-waiting-screen component (Angular Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,8 +28,5 @@ products: ```html - - + ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/index.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/index.mdx index 7f6ea96d5eaefa0..8ef6d5dcdfadf48 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/index.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/index.mdx @@ -7,4 +7,4 @@ sidebar: hideIndex: true products: - realtime ---- \ No newline at end of file +--- diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai-transcriptions.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai-transcriptions.mdx index e270c77642b2c4a..4a58db7ec3bb580 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai-transcriptions.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai-transcriptions.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-ai-transcriptions component (Web Components ( products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------- | -------- | --------------- | ---------------------- | +| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -24,16 +25,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai.mdx index 970e391d75c32bc..a55ac07cacbbec6 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ai.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-ai component (Web Components (HTML) Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `AIView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `AIView` | ✅ | - | View type | ## Usage Examples @@ -28,16 +29,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-grid.mdx index 2d9130e9d8e4121..ac1e4eef81b052e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-grid.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-audio-grid component (Web Components (HTML) L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,17 +29,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-tile.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-tile.mdx index 8959b0dde236c5c..6b7d96a935dd7f4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-tile.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-tile.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-audio-tile component (Web Components (HTML) L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ----------- | -------- | ----------------- | ------------------ | +| `config` | `UIConfig` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,17 +29,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-visualizer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-visualizer.mdx index 813eab6b421006a..8ff29c76cd061be 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-visualizer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-audio-visualizer.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-audio-visualizer component (Web Components (H products: - realtime --- + An audio visualizer component which visualizes a participants audio. - Commonly used inside `rtk-name-tag`. +Commonly used inside `rtk-name-tag`. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------------ | -------- | ----------------- | --------------------------------------------------------------------------------------------- | +| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | ## Usage Examples @@ -31,17 +32,15 @@ An audio visualizer component which visualizes a participants audio. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-avatar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-avatar.mdx index 7f8b81f1043b96d..d3d2acf95812bd9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-avatar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-avatar.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-avatar component (Web Components (HTML) Libra products: - realtime --- + Avatar component which renders a participant's image or their initials. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AvatarVariant` | ✅ | - | Avatar type | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------------------------------------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AvatarVariant` | ✅ | - | Avatar type | ## Usage Examples @@ -28,18 +29,13 @@ Avatar component which renders a participant's image or their initials. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-manager.mdx index 0ffde64de310896..08565892ad5d286 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-manager.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-breakout-room-manager component (Web Componen products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `allowDelete` | `boolean` | ✅ | - | allow room delete | -| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | -| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isDragMode` | `boolean` | ✅ | - | Drag mode | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | -| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------------- | -------- | ----------------- | -------------------------------- | +| `allowDelete` | `boolean` | ✅ | - | allow room delete | +| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | +| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isDragMode` | `boolean` | ✅ | - | Drag mode | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | +| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,17 +32,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-participants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-participants.mdx index a27e85c3f7202e5..90bf0a7a6599970 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-participants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-room-participants.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-breakout-room-participants component (Web Com products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participantIds` | `string[]` | ✅ | - | Participant ids | -| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------ | ---------- | -------- | ----------------- | --------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participantIds` | `string[]` | ✅ | - | Participant ids | +| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,18 +31,18 @@ A component which lists all participants, with ability to ```html + participantIds="example" + selectedParticipantIds="example" +> ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-manager.mdx index 4d3fe5430be46fe..8186a41e5b921c7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-manager.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-breakout-rooms-manager component (Web Compone products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,15 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-toggle.mdx index 12e8adafccffa1d..330651ce2800cee 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-breakout-rooms-toggle.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-breakout-rooms-toggle component (Web Componen products: - realtime --- + A button which toggles visibility of breakout rooms. - You need to pass the `meeting` object to it. +You need to pass the `meeting` object to it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ✅ | - | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ✅ | - | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ------- | -------------- | +| `iconPack` | `IconPack` | ✅ | - | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ✅ | - | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -30,17 +31,14 @@ A button which toggles visibility of breakout rooms. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-broadcast-message-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-broadcast-message-modal.mdx index c701b24f24c37b6..90a5bf9760e290c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-broadcast-message-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-broadcast-message-modal.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-broadcast-message-modal component (Web Compon products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,15 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-button.mdx index 190ce0bd634cebf..2257bd8dc185484 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-button.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-button component (Web Components (HTML) Libra products: - realtime --- + A button that follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | -| `kind` | `ButtonKind` | ✅ | - | Button type | -| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | -| `size` | `Size` | ✅ | - | Size | -| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | -| `variant` | `ButtonVariant` | ✅ | - | Button variant | +| Property | Type | Required | Default | Description | +| ---------- | --------------------------- | -------- | ------- | ------------------------------------ | +| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | +| `kind` | `ButtonKind` | ✅ | - | Button type | +| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | +| `size` | `Size` | ✅ | - | Size | +| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | +| `variant` | `ButtonVariant` | ✅ | - | Button variant | ## Usage Examples @@ -29,16 +30,14 @@ A button that follows RTK Design System. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-camera-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-camera-selector.mdx index 839aea969dea5f1..31e3f2482ecb54c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-camera-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-camera-selector.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-camera-selector component (Web Components (HT products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -36,16 +38,13 @@ A component which lets to manage your audio devices and audio preferences. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-ui.mdx index 6062945d8cda350..7726ca148fdf888 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-ui.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-chat-composer-ui component (Web Components (H products: - realtime --- + @deprecated . This component is deprecated, please use rtk-chat-composer-view instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------- | -------- | ----------------- | ----------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,17 +30,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-view.mdx index 4f0b587d7e57cda..6f24d73d4050be8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-composer-view.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-chat-composer-view component (Web Components products: - realtime --- + A component which renders a chat composer ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | -| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | -| `maxLength` | `number` | ✅ | - | Max length for text input | -| `message` | `string` | ✅ | - | Message to be pre-populated | -| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | -| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | -| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------------------------------- | -------- | ----------------- | --------------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | +| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | +| `maxLength` | `number` | ✅ | - | Max length for text input | +| `message` | `string` | ✅ | - | Message to be pre-populated | +| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | +| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | +| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,17 +35,15 @@ A component which renders a chat composer ### With Properties ```html - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-header.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-header.mdx index 00331fb11033be4..d53fa58a0768116 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-header.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-header.mdx @@ -5,9 +5,10 @@ description: API reference for rtk-chat-header component (Web Components (HTML) products: - realtime --- + ## Properties -*No properties available.* +_No properties available._ ## Usage Examples @@ -16,4 +17,3 @@ products: ```html ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-message.mdx index b49edd649f06ee1..67158b1da131121 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-message.mdx @@ -5,29 +5,30 @@ description: API reference for rtk-chat-message component (Web Components (HTML) products: - realtime --- + @deprecated `rtk-chat-message` is deprecated and will be removed soon. Use `rtk-message-view` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `alignRight` | `boolean` | ✅ | - | aligns message to right | -| `canDelete` | `boolean` | ✅ | - | can delete message | -| `canEdit` | `boolean` | ✅ | - | can edit message | -| `canPin` | `boolean` | ✅ | - | can pin this message | -| `canReply` | `boolean` | ✅ | - | can quote reply this message | -| `child` | `HTMLElement` | ✅ | - | Child | -| `disableControls` | `boolean` | ✅ | - | disables controls | -| `hideAvatar` | `boolean` | ✅ | - | hides avatar | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | is continued | -| `isSelf` | `boolean` | ✅ | - | if sender is self | -| `isUnread` | `boolean` | ✅ | - | is unread | -| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | -| `message` | `Message` | ✅ | - | message item | -| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ----------------- | -------------------------------------- | +| `alignRight` | `boolean` | ✅ | - | aligns message to right | +| `canDelete` | `boolean` | ✅ | - | can delete message | +| `canEdit` | `boolean` | ✅ | - | can edit message | +| `canPin` | `boolean` | ✅ | - | can pin this message | +| `canReply` | `boolean` | ✅ | - | can quote reply this message | +| `child` | `HTMLElement` | ✅ | - | Child | +| `disableControls` | `boolean` | ✅ | - | disables controls | +| `hideAvatar` | `boolean` | ✅ | - | hides avatar | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | is continued | +| `isSelf` | `boolean` | ✅ | - | if sender is self | +| `isUnread` | `boolean` | ✅ | - | is unread | +| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | +| `message` | `Message` | ✅ | - | message item | +| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -40,17 +41,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui-paginated.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui-paginated.mdx index 1a1f8d1bb2a313f..9b334cb50256afd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui-paginated.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui-paginated.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-chat-messages-ui-paginated component (Web Com products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------- | -------- | ----------------- | ------------------------------------------------------------------------------------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,16 +27,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui.mdx index 4315ce89d3ea880..91b79ea94878ffb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-messages-ui.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-chat-messages-ui component (Web Components (H products: - realtime --- + @deprecated Use `rtk-chat-messages-ui-paginated` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `messages` | `Chat[]` | ✅ | - | Chat Messages | -| `selectedGroup` | `string` | ✅ | - | Selected group key | -| `selfUserId` | `string` | ✅ | - | User ID of self user | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ----------- | -------- | ----------------- | ----------------------------------- | +| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `messages` | `Chat[]` | ✅ | - | Chat Messages | +| `selectedGroup` | `string` | ✅ | - | Selected group key | +| `selfUserId` | `string` | ✅ | - | User ID of self user | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,17 +31,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-search-results.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-search-results.mdx index 12510bac6bda05a..fd7ba927fca8daa 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-search-results.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-search-results.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-chat-search-results component (Web Components products: - realtime --- + @deprecated `rtk-chat-search-results` is deprecated and will be removed soon. Use `rtk-chat-messages-ui-paginated` instead. - ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `channelId` | `string` | ✅ | - | Channel id | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `query` | `string` | ✅ | - | Search query | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | -------------- | +| `channelId` | `string` | ✅ | - | Channel id | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `query` | `string` | ✅ | - | Search query | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,17 +29,14 @@ products: ### With Properties ```html - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector-ui.mdx index 88fd33ff9a1e098..713fb73bd989f34 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector-ui.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-chat-selector-ui component (Web Components (H products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `groups` | `ChatGroup[]` | ✅ | - | Participants | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `selectedGroupId` | `string` | ✅ | - | Selected participant | -| `selfUserId` | `string` | ✅ | - | Self User ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `unreadCounts` | `Record` | ✅ | - | Unread counts | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------ | -------- | ----------------- | -------------------- | +| `groups` | `ChatGroup[]` | ✅ | - | Participants | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `selectedGroupId` | `string` | ✅ | - | Selected participant | +| `selfUserId` | `string` | ✅ | - | Self User ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `unreadCounts` | `Record` | ✅ | - | Unread counts | ## Usage Examples @@ -27,17 +28,14 @@ products: ### With Properties ```html - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector.mdx index 35043d7c0f2796e..f41ed748ffb2bcf 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat-selector.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-chat-selector component (Web Components (HTML products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ------------ | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,16 +29,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat.mdx index f1f46fa4254dfc0..d296e1f85861da7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-chat.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-chat component (Web Components (HTML) Library products: - realtime --- + Fully featured chat component with image & file upload, emoji picker and auto-scroll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,16 +30,13 @@ Fully featured chat component with image & file upload, emoji picker and auto-sc ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-clock.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-clock.mdx index f4befa6dbda7af6..f29acbd05520f7c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-clock.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-clock.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-clock component (Web Components (HTML) Librar products: - realtime --- + Shows the time elapsed in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | ## Usage Examples @@ -26,16 +27,13 @@ Shows the time elapsed in a meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-confirmation-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-confirmation-modal.mdx index 59a36b5e16679da..54bd7f2399df487 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-confirmation-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-confirmation-modal.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-confirmation-modal component (Web Components products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,13 @@ A confirmation modal. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar-button.mdx index 59c9be5f52f7987..b63c726196d6d84 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar-button.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-controlbar-button component (Web Components ( products: - realtime --- + A skeleton component used for composing custom controlbar buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | -| `disabled` | `boolean` | ✅ | - | Whether button is disabled | -| `icon` | `string` | ✅ | - | Icon | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | -| `label` | `string` | ✅ | - | Label of button | -| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `ControlBarVariant1` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ------------- | -------------------- | -------- | ----------------- | -------------------------------------------------------------- | +| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | +| `disabled` | `boolean` | ✅ | - | Whether button is disabled | +| `icon` | `string` | ✅ | - | Icon | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | +| `label` | `string` | ✅ | - | Label of button | +| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `ControlBarVariant1` | ✅ | - | Variant | ## Usage Examples @@ -32,17 +33,14 @@ A skeleton component used for composing custom controlbar buttons. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar.mdx index c303a5102cb22ac..326a72bac0165d4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-controlbar.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-controlbar component (Web Components (HTML) L products: - realtime --- + Controlbar component provides you with various designs as variants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples @@ -31,17 +32,14 @@ Controlbar component provides you with various designs as variants. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-counter.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-counter.mdx index 59bbbbf35837964..762c4d9d8d1cfc9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-counter.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-counter.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-counter component (Web Components (HTML) Libr products: - realtime --- + A number picker with increment and decrement buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `minValue` | `number` | ✅ | - | Minimum value | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `value` | `number` | ✅ | - | Initial value | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `minValue` | `number` | ✅ | - | Minimum value | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `value` | `number` | ✅ | - | Initial value | ## Usage Examples @@ -28,17 +29,14 @@ A number picker with increment and decrement buttons. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-audio.mdx index 8733f92d520e775..22f1b026cd01b82 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-audio.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-audio component (Web Components (HTM products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,16 +27,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-screenshare.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-screenshare.mdx index f7f80fd287b5ef1..9435b3bec0238c6 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-screenshare.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-screenshare.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-screenshare component (Web Component products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,16 +27,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-system.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-system.mdx index a7cc1725cc28364..a80a0f3c3252295 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-system.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-system.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-system component (Web Components (HT products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,16 +27,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-video.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-video.mdx index 84a90649d07675a..9deac224fdf1a02 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-video.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger-video.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-debugger-video component (Web Components (HTM products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,16 +27,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger.mdx index a8141d499177b06..7d345ee443ecde8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-debugger.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-debugger component (Web Components (HTML) Lib products: - realtime --- + A troubleshooting component to identify and fix any issues in the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,16 +29,13 @@ A troubleshooting component to identify and fix any issues in the meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog-manager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog-manager.mdx index ba7f8b4cd15bf85..3709d9d501cd38e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog-manager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog-manager.mdx @@ -5,24 +5,26 @@ description: API reference for rtk-dialog-manager component (Web Components (HTM products: - realtime --- + A component which handles all dialog elements in a component such as: - - rtk-settings - - rtk-leave-meeting - - rtk-permissions-message - - rtk-image-viewer - - rtk-breakout-rooms-manager - This components depends on the values from `states` object. + +- rtk-settings +- rtk-leave-meeting +- rtk-permissions-message +- rtk-image-viewer +- rtk-breakout-rooms-manager + This components depends on the values from `states` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -35,16 +37,13 @@ A component which handles all dialog elements in a component such as: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog.mdx index 170ade6492a1274..d361f6b14ccdb8b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-dialog.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-dialog component (Web Components (HTML) Libra products: - realtime --- + A dialog component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | -| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------ | ---------- | -------- | ----------------------- | -------------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | +| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,17 +33,15 @@ A dialog component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-draft-attachment-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-draft-attachment-view.mdx index f21db9738750267..7060d45d649d00a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-draft-attachment-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-draft-attachment-view.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-draft-attachment-view component (Web Componen products: - realtime --- + A component which renders the draft attachment to send ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `attachment` | `{ type: 'image' \| 'file'; file: File; }` | ✅ | - | Attachment to display | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------------------------------------- | -------- | ----------------- | --------------------- | +| `attachment` | `{ type: 'image' \| 'file'; file: File; }` | ✅ | - | Attachment to display | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,15 +27,13 @@ A component which renders the draft attachment to send ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker-button.mdx index f67d8a0f096c864..be00c3a6e33ad46 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker-button.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-emoji-picker-button component (Web Components products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isActive` | `boolean` | ✅ | - | Active state indicator | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isActive` | `boolean` | ✅ | - | Active state indicator | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -24,15 +25,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker.mdx index a0876babb985962..69aabd63c26f21f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-emoji-picker.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-emoji-picker component (Web Components (HTML) products: - realtime --- + A very simple emoji picker component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------- | ---------- | -------- | ----------------- | ----------------------------------------- | +| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,15 +27,13 @@ A very simple emoji picker component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ended-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ended-screen.mdx index 6aa6297284ea709..e5388b1585fd982 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ended-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ended-screen.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-ended-screen component (Web Components (HTML) products: - realtime --- + A screen which shows a meeting has ended. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Global states | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | Global states | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Global states | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | Global states | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,16 +30,13 @@ A screen which shows a meeting has ended. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-dropzone.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-dropzone.mdx index a9528f31a65a0cc..fdf7e9e77e382ba 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-dropzone.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-dropzone.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-file-dropzone component (Web Components (HTML products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ------------- | -------- | ----------------- | ------------------------------------------- | +| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -24,14 +25,11 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message-view.mdx index 1764939b1ca0276..083396274de8c83 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message-view.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-file-message-view component (Web Components ( products: - realtime --- + A component which renders a file message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `name` | `string` | ✅ | - | Name of the file | -| `size` | `number` | ✅ | - | Size of the file | -| `url` | `string` | ✅ | - | Url of the file | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `name` | `string` | ✅ | - | Name of the file | +| `size` | `number` | ✅ | - | Size of the file | +| `url` | `string` | ✅ | - | Url of the file | ## Usage Examples @@ -27,17 +28,13 @@ A component which renders a file message. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message.mdx index 811a6cce1a3b65e..936feef21b37fa9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-file-message component (Web Components (HTML) products: - realtime --- + @deprecated `rtk-file-message` is deprecated and will be removed soon. Use `rtk-file-message-view` instead. - A component which renders a file message from chat. +A component which renders a file message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `FileMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `FileMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,15 +31,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-picker-button.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-picker-button.mdx index 54b3d5dd21d7da8..851138e1627613b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-picker-button.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-file-picker-button.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-file-picker-button component (Web Components products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `filter` | `string` | ✅ | - | File type filter to open file picker with | -| `icon` | `keyof IconPack1` | ✅ | - | Icon | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `label` | `string` | ✅ | - | Label for tooltip | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------------- | -------- | ----------------- | ----------------------------------------- | +| `filter` | `string` | ✅ | - | File type filter to open file picker with | +| `icon` | `keyof IconPack1` | ✅ | - | Icon | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `label` | `string` | ✅ | - | Label for tooltip | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,17 +27,14 @@ products: ### With Properties ```html - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid-pagination.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid-pagination.mdx index f3865d72720b943..d663d791207416c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid-pagination.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid-pagination.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-grid-pagination component (Web Components (HT products: - realtime --- + A component which allows you to change current page and view mode - of active participants list. This is reflected in the `rtk-grid` component. +of active participants list. This is reflected in the `rtk-grid` component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size Prop | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `GridPaginationVariants` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------------ | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size Prop | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `GridPaginationVariants` | ✅ | - | Variant | ## Usage Examples @@ -30,16 +31,13 @@ A component which allows you to change current page and view mode ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid.mdx index cf79955eff09681..31eef43afae392f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-grid.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-grid component (Web Components (HTML) Library products: - realtime --- + The main grid component which abstracts all the grid handling logic and renders it for you. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `gap` | `number` | ✅ | - | Gap between participants | -| `gridSize` | `GridSize` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `layout` | `GridLayout` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `any` | ✅ | - | @deprecated | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------ | -------- | ----------------------- | ------------------------------------ | +| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `gap` | `number` | ✅ | - | Gap between participants | +| `gridSize` | `GridSize` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `layout` | `GridLayout` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `any` | ✅ | - | @deprecated | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -34,17 +35,13 @@ The main grid component which abstracts all the grid handling logic and renders ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-header.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-header.mdx index 1fb6ec7f5c5a1b6..a89c57e5b374cc4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-header.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-header.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-header component (Web Components (HTML) Libra products: - realtime --- + A component that houses all the header components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples @@ -31,17 +32,14 @@ A component that houses all the header components. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-icon.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-icon.mdx index 581f5e42555059a..225e4d075df1fad 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-icon.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-icon.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-icon component (Web Components (HTML) Library products: - realtime --- + An icon component which accepts an svg string and renders it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `icon` | `string` | ✅ | - | Icon | -| `size` | `Size1` | ✅ | - | Size | -| `variant` | `IconVariant` | ✅ | - | Icon variant | +| Property | Type | Required | Default | Description | +| --------- | ------------- | -------- | ------- | ------------ | +| `icon` | `string` | ✅ | - | Icon | +| `size` | `Size1` | ✅ | - | Size | +| `variant` | `IconVariant` | ✅ | - | Icon variant | ## Usage Examples @@ -26,17 +27,11 @@ An icon component which accepts an svg string and renders it. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-idle-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-idle-screen.mdx index a2e6c178b6c1e82..54a72fdf6f17b5b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-idle-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-idle-screen.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-idle-screen component (Web Components (HTML) products: - realtime --- + A screen that handles the idle state, - i.e; when you are waiting for data about the meeting, specifically the `meeting` object. +i.e; when you are waiting for data about the meeting, specifically the `meeting` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,15 +29,13 @@ A screen that handles the idle state, ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message-view.mdx index 707341e71c859f2..4faebe0ab376143 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message-view.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-image-message-view component (Web Components products: - realtime --- + A component which renders an image message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `url` | `string` | ✅ | - | Url of the image | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `url` | `string` | ✅ | - | Url of the image | ## Usage Examples @@ -26,15 +27,11 @@ A component which renders an image message. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message.mdx index 76c23bbf2dfca99..cb324944fd49d2c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-image-message component (Web Components (HTML products: - realtime --- + @deprecated `rtk-image-message` is deprecated and will be removed soon. Use `rtk-image-message-view` instead. - A component which renders an image message from chat. +A component which renders an image message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `ImageMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `ImageMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,15 +31,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-viewer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-viewer.mdx index da7064e9253ab13..b7e74691417c0f1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-viewer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-image-viewer.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-image-viewer component (Web Components (HTML) products: - realtime --- + A component which shows an image sent via chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `image` | `ImageMessage` | ✅ | - | Image message | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | -------------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `image` | `ImageMessage` | ✅ | - | Image message | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,11 @@ A component which shows an image sent via chat. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-information-tooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-information-tooltip.mdx index 7950fc7f2bc101a..f638b70c50e83d4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-information-tooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-information-tooltip.mdx @@ -5,11 +5,12 @@ description: API reference for rtk-information-tooltip component (Web Components products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | ## Usage Examples @@ -22,15 +23,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-join-stage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-join-stage.mdx index 36d7fcfd41612fa..7cbac34216b6b9a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-join-stage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-join-stage.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-join-stage component (Web Components (HTML) L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------ | ----------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,16 +29,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-leave-meeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-leave-meeting.mdx index 60d83d6896b419b..7953645ed11d440 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-leave-meeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-leave-meeting.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-leave-meeting component (Web Components (HTML products: - realtime --- + A component which allows you to leave a meeting or - end meeting for all, if you have the permission. +end meeting for all, if you have the permission. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,15 +29,13 @@ A component which allows you to leave a meeting or ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-indicator.mdx index 67707911b550145..7089f2c65e4c3b4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-indicator.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-livestream-indicator component (Web Component products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,16 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-player.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-player.mdx index 5e6da815b9a6c32..4d35b373ccbafc2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-player.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-livestream-player.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-livestream-player component (Web Components ( products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,16 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-logo.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-logo.mdx index f6713bd26d22ab2..cb8ff8473cd8a3e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-logo.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-logo.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-logo component (Web Components (HTML) Library products: - realtime --- + A component which loads the logo from your config, or via the `logo-url` attribute. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `logoUrl` | `string` | ✅ | - | Logo URL | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `logoUrl` | `string` | ✅ | - | Logo URL | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,16 +28,13 @@ A component which loads the logo from your config, or via the `logo-url` attribu ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-markdown-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-markdown-view.mdx index d1381ac73ca5828..811851e7e12e984 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-markdown-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-markdown-view.mdx @@ -5,12 +5,13 @@ description: API reference for rtk-markdown-view component (Web Components (HTML products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | -| `text` | `string` | ✅ | - | raw text to render as markdown | +| Property | Type | Required | Default | Description | +| ----------- | -------- | -------- | ------- | ---------------------------------------- | +| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | +| `text` | `string` | ✅ | - | raw text to render as markdown | ## Usage Examples @@ -23,16 +24,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting-title.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting-title.mdx index ba9885092147cbb..55697cb504158d1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting-title.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting-title.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-meeting-title component (Web Components (HTML products: - realtime --- + Displays the title of the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,15 +27,13 @@ Displays the title of the meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting.mdx index 0a6abda1bfb826a..753af9e783bf586 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-meeting.mdx @@ -5,27 +5,28 @@ description: API reference for rtk-meeting component (Web Components (HTML) Libr products: - realtime --- + A single component which renders an entire meeting UI. - It loads your preset and renders the UI based on it. - With this component, you don't have to handle all the states, - dialogs and other smaller bits of managing the application. +It loads your preset and renders the UI based on it. +With this component, you don't have to handle all the states, +dialogs and other smaller bits of managing the application. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | -| `config` | `UIConfig` | ✅ | - | UI Config | -| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | -| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `MeetingMode` | ✅ | - | Fill type | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ------------------ | ------------------------------------------------------------------- | +| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | +| `config` | `UIConfig` | ✅ | - | UI Config | +| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | +| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `MeetingMode` | ✅ | - | Fill type | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -38,16 +39,14 @@ A single component which renders an entire meeting UI. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-item.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-item.mdx index 169675ff5a4498c..c9fd4b7ff50b042 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-item.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-item.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-menu-item component (Web Components (HTML) Li products: - realtime --- + A menu item component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,11 @@ A menu item component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-list.mdx index 88b9d8538638163..6735e67c1b647e8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu-list.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-menu-list component (Web Components (HTML) Li products: - realtime --- + A menu list component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,14 +27,11 @@ A menu list component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu.mdx index 12ad508b8b32180..bb093d6585896ca 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-menu.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-menu component (Web Components (HTML) Library products: - realtime --- + A menu component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `offset` | `number` | ✅ | - | Offset in px | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | ----------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `offset` | `number` | ✅ | - | Offset in px | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,16 +29,13 @@ A menu component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-list-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-list-view.mdx index cdb30bac0e60ed4..f409f90de250597 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-list-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-list-view.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-message-list-view component (Web Components ( products: - realtime --- + A component which renders list of messages. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `estimateItemSize` | `number` | ✅ | - | Estimated height of an item | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `loadMore` | `(lastMessage: Message)` | ✅ | - | Function to load more messages. Messages returned from this will be prepended | -| `messages` | `Message[]` | ✅ | - | Messages to render | -| `renderer` | `(message: Message, index: number)` | ✅ | - | Render function of the message | -| `visibleItemsCount` | `number` | ✅ | - | Maximum visible messages | +| Property | Type | Required | Default | Description | +| ------------------- | ----------------------------------- | -------- | ----------------- | ----------------------------------------------------------------------------- | +| `estimateItemSize` | `number` | ✅ | - | Estimated height of an item | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `loadMore` | `(lastMessage: Message)` | ✅ | - | Function to load more messages. Messages returned from this will be prepended | +| `messages` | `Message[]` | ✅ | - | Messages to render | +| `renderer` | `(message: Message, index: number)` | ✅ | - | Render function of the message | +| `visibleItemsCount` | `number` | ✅ | - | Maximum visible messages | ## Usage Examples @@ -29,16 +30,14 @@ A component which renders list of messages. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-view.mdx index 728e84fc9321401..09def76b8fce5db 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-message-view.mdx @@ -5,24 +5,25 @@ description: API reference for rtk-message-view component (Web Components (HTML) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | -| `authorName` | `string` | ✅ | - | Author display label | -| `avatarUrl` | `string` | ✅ | - | Avatar image url | -| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | -| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | -| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isEdited` | `boolean` | ✅ | - | Has the message been edited | -| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | -| `messageType` | `Message['type']` | ✅ | - | Type of message | -| `pinned` | `boolean` | ✅ | - | Is message pinned | -| `time` | `Date` | ✅ | - | Time when message was sent | -| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | -| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | +| Property | Type | Required | Default | Description | +| ---------------- | -------------------------- | -------- | ----------------- | --------------------------------------- | +| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | +| `authorName` | `string` | ✅ | - | Author display label | +| `avatarUrl` | `string` | ✅ | - | Avatar image url | +| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | +| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | +| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isEdited` | `boolean` | ✅ | - | Has the message been edited | +| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | +| `messageType` | `Message['type']` | ✅ | - | Type of message | +| `pinned` | `boolean` | ✅ | - | Is message pinned | +| `time` | `Date` | ✅ | - | Time when message was sent | +| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | +| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | ## Usage Examples @@ -35,17 +36,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-microphone-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-microphone-selector.mdx index 1565dc06501cfad..0e2adb948d754a3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-microphone-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-microphone-selector.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-microphone-selector component (Web Components products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -36,16 +38,13 @@ A component which lets to manage your audio devices and audio preferences. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mixed-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mixed-grid.mdx index d399d66944cd6fc..79ad17a23ebacab 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mixed-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mixed-grid.mdx @@ -5,26 +5,27 @@ description: API reference for rtk-mixed-grid component (Web Components (HTML) L products: - realtime --- + A grid component which handles screenshares, plugins and participants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | -| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | +| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -37,17 +38,13 @@ A grid component which handles screenshares, plugins and participants. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-more-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-more-toggle.mdx index 43e569451c44e9b..83ee618b019e4c1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-more-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-more-toggle.mdx @@ -5,20 +5,24 @@ description: API reference for rtk-more-toggle component (Web Components (HTML) products: - realtime --- + A button which toggles visibility of a more menu. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeMoreMenu: boolean; } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeMoreMenu: boolean; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,15 +35,11 @@ A button which toggles visibility of a more menu. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mute-all-confirmation.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mute-all-confirmation.mdx index 8100fe45db00611..6bb1b8bdce29e58 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mute-all-confirmation.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-mute-all-confirmation.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-mute-all-confirmation component (Web Componen products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,15 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-name-tag.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-name-tag.mdx index f6cee72609ed898..14082b5393b2820 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-name-tag.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-name-tag.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-name-tag component (Web Components (HTML) Lib products: - realtime --- + A component which shows a participant's name. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------- | -------- | ----------------- | ----------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | ## Usage Examples @@ -30,17 +31,15 @@ A component which shows a participant's name. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-network-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-network-indicator.mdx index a87b7aea196b1a0..b5241b2075c51f8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-network-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-network-indicator.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-network-indicator component (Web Components ( products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant or Self | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------------- | ----------- | -------- | ----------------- | ------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant or Self | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,17 +27,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notification.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notification.mdx index e175a377ba80f6e..4573caf03b498f0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notification.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notification.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-notification component (Web Components (HTML) products: - realtime --- + A component which shows a notification. - You need to remove the element after you receive the - `rtkNotificationDismiss` event. +You need to remove the element after you receive the +`rtkNotificationDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `notification` | `Notification` | ✅ | - | Message | -| `paused` | `boolean` | ✅ | - | Stops timeout when true | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | -------------- | -------- | ----------------- | ----------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `notification` | `Notification` | ✅ | - | Message | +| `paused` | `boolean` | ✅ | - | Stops timeout when true | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,16 +31,13 @@ A component which shows a notification. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notifications.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notifications.mdx index 1854740c5dd7087..c914a13e3c8be1a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notifications.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-notifications.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-notifications component (Web Components (HTML products: - realtime --- + A component which handles notifications. - You can configure which notifications you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which notifications you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,16 +32,13 @@ A component which handles notifications. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-overlay-modal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-overlay-modal.mdx index 0cb6286a078603e..9364cd4626d354c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-overlay-modal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-overlay-modal.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-overlay-modal component (Web Components (HTML products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,13 @@ A confirmation modal. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-paginated-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-paginated-list.mdx index ef79cf0de81f3f7..4cde117f427306e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-paginated-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-paginated-list.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-paginated-list component (Web Components (HTM products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | -| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | -| `emptyListLabel` | `string` | ✅ | - | label to show when empty | -| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `pageSize` | `number` | ✅ | - | Page Size | -| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | -| `rerenderList` | `()` | ✅ | - | Rerender paginated list | -| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ------------------------------------------------------ | -------- | ----------------- | ---------------------------------------------- | +| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | +| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | +| `emptyListLabel` | `string` | ✅ | - | label to show when empty | +| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `pageSize` | `number` | ✅ | - | Page Size | +| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | +| `rerenderList` | `()` | ✅ | - | Rerender paginated list | +| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,17 +32,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-count.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-count.mdx index d62e21d5129aa82..7719882d3fb4be7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-count.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-count.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participant-count component (Web Components ( products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,16 +28,13 @@ A component which shows count of total joined participants in a meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-setup.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-setup.mdx index caf9dc47c1b7c3f..f6bd84e42574673 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-setup.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-setup.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-participant-setup component (Web Components ( products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -30,16 +31,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-tile.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-tile.mdx index 4cab2f0eb1eca60..9a88d9c0a727ee0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-tile.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant-tile.mdx @@ -5,23 +5,24 @@ description: API reference for rtk-participant-tile component (Web Components (H products: - realtime --- + A component which plays a participants video and allows for placement - of components like `rtk-name-tag`, `rtk-audio-visualizer` or any other component. +of components like `rtk-name-tag`, `rtk-audio-visualizer` or any other component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isPreview` | `boolean` | ✅ | - | Whether tile is used for preview | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -34,16 +35,14 @@ A component which plays a participants video and allows for placement ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant.mdx index bb8ac1dd6367703..b353795e7b1d39f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participant.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-participant component (Web Components (HTML) products: - realtime --- + A participant entry component used inside `rtk-participants` which shows data like: - name, picture and media device status. - You can perform privileged actions on the participant too. +name, picture and media device status. +You can perform privileged actions on the participant too. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | +| Property | Type | Required | Default | Description | +| ------------- | --------------------- | -------- | ----------------------- | ------------------------ | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | ## Usage Examples @@ -32,16 +33,14 @@ A participant entry component used inside `rtk-participants` which shows data li ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-audio.mdx index 1f8797c35adb77e..60421301e0a2c48 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-audio.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-audio component (Web Components products: - realtime --- + A component which plays all the audio from participants and screenshares. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------ | -------- | ----------------- | --------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,13 @@ A component which plays all the audio from participants and screenshares. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-list.mdx index 01d0f27f271ce7e..fd655a61d22ef33 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-list.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-participants-stage-list component (Web Compon products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------------ | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -33,17 +34,14 @@ A component which lists all participants, with ability to ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-queue.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-queue.mdx index 963520bc7e53b54..7032a7bf6eae0d8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-queue.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-stage-queue.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-stage-queue component (Web Compo products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -27,16 +28,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-viewer-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-viewer-list.mdx index bb79d669d9e7c10..a9ac8f17b8c789a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-viewer-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-viewer-list.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-participants-viewer-list component (Web Compo products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -29,17 +30,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-waiting-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-waiting-list.mdx index bb42583235f5ab8..f2090258605a509 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-waiting-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants-waiting-list.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-participants-waiting-list component (Web Comp products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples @@ -27,16 +28,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants.mdx index 1ba0901c553c486..746ec51d0d8660b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-participants.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-participants component (Web Components (HTML) products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------------- | ------------------- | -------- | ----------------------- | --------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -31,16 +32,13 @@ A component which lists all participants, with ability to ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-permissions-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-permissions-message.mdx index 57a566accadd160..150b3a750c1b030 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-permissions-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-permissions-message.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-permissions-message component (Web Components products: - realtime --- + A component which shows permission related troubleshooting - information. +information. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,15 +29,13 @@ A component which shows permission related troubleshooting ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-pinned-message-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-pinned-message-selector.mdx index a125dffe72ae892..5d603b6e59daf8b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-pinned-message-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-pinned-message-selector.mdx @@ -5,13 +5,14 @@ description: API reference for rtk-pinned-message-selector component (Web Compon products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -24,15 +25,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugin-main.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugin-main.mdx index 35331c64a8d6e7d..2d619085455442a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugin-main.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugin-main.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-plugin-main component (Web Components (HTML) products: - realtime --- + A component which loads a plugin. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `plugin` | `RTKPlugin` | ✅ | - | Plugin | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `plugin` | `RTKPlugin` | ✅ | - | Plugin | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -27,15 +28,13 @@ A component which loads a plugin. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugins.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugins.mdx index 162f337bb6592f1..6461be9451e19f9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugins.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-plugins.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-plugins component (Web Components (HTML) Libr products: - realtime --- + A component which lists all available plugins from their preset, - and ability to enable or disable plugins. +and ability to enable or disable plugins. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,16 +30,13 @@ A component which lists all available plugins from their preset, ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll-form.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll-form.mdx index 0272f65d9b3b48e..3e1e182ae6b3e03 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll-form.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll-form.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-poll-form component (Web Components (HTML) Li products: - realtime --- + A component that lets you create a poll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,15 +26,13 @@ A component that lets you create a poll. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll.mdx index c7c9985644e098f..74d94c512226da3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-poll.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-poll component (Web Components (HTML) Library products: - realtime --- + A poll component. - Shows a poll where a user can vote. +Shows a poll where a user can vote. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | -| `poll` | `Poll` | ✅ | - | Poll | -| `self` | `string` | ✅ | - | Self ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ---------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | +| `poll` | `Poll` | ✅ | - | Poll | +| `self` | `string` | ✅ | - | Self ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,15 +30,11 @@ A poll component. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-polls.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-polls.mdx index bef8f30b7725c38..98f0ca7892e6576 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-polls.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-polls.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-polls component (Web Components (HTML) Librar products: - realtime --- + A component which lists all available plugins a user can access with - the ability to enable or disable them as per their permissions. +the ability to enable or disable them as per their permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,16 +30,13 @@ A component which lists all available plugins a user can access with ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-indicator.mdx index d30318ecc55e3a5..4d369e04d632069 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-indicator.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-recording-indicator component (Web Components products: - realtime --- + A component which indicates the recording status of a meeting. - It will not render anything if no recording is taking place. +It will not render anything if no recording is taking place. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,16 +29,13 @@ A component which indicates the recording status of a meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-toggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-toggle.mdx index ec59e9f219e9f7f..a98b211032c1cbb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-toggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-recording-toggle.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-recording-toggle component (Web Components (H products: - realtime --- + A button which toggles recording state of a meeting. - Only a privileged user can perform this action, - thus the button will not be visible for participants - who don't have the permission to record a meeting. +Only a privileged user can perform this action, +thus the button will not be visible for participants +who don't have the permission to record a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Disable the button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ------------------ | +| `disabled` | `boolean` | ✅ | - | Disable the button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples @@ -32,17 +33,14 @@ A button which toggles recording state of a meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-screenshare-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-screenshare-view.mdx index a90c136dff9c22a..1f9320fd4015e72 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-screenshare-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-screenshare-view.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-screenshare-view component (Web Components (H products: - realtime --- + A component which plays a participant's screenshared video. - It also allows for placement of other components similar to `rtk-participant-tile`. - This component will not render anything if the participant hasn't start screensharing. +It also allows for placement of other components similar to `rtk-participant-tile`. +This component will not render anything if the participant hasn't start screensharing. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hideFullScreenButton` | `boolean` | ✅ | - | Hide full screen button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------------------------------------------------------------------------------------------------------------------ | -------- | ----------------- | ----------------------- | +| `hideFullScreenButton` | `boolean` | ✅ | - | Hide full screen button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `nameTagPosition` | `\| 'bottom-left' \| 'bottom-right' \| 'bottom-center' \| 'top-left' \| 'top-right' \| 'top-center'` | ✅ | - | Position of name tag | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'gradient'` | ✅ | - | Variant | ## Usage Examples @@ -33,16 +34,14 @@ A component which plays a participant's screenshared video. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-audio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-audio.mdx index be7787328820925..eb030d8fd7c3939 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-audio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-audio.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-settings-audio component (Web Components (HTM products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -36,16 +38,13 @@ A component which lets to manage your audio devices and audio preferences. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-video.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-video.mdx index 523484ecbd3ff73..90b1ddf72d04d58 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-video.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings-video.mdx @@ -5,25 +5,27 @@ description: API reference for rtk-settings-video component (Web Components (HTM products: - realtime --- + A component which lets to manage your camera devices and your video preferences. - Emits `rtkStateUpdate` event with data for toggling mirroring of self video: - ```ts - { - prefs: { - mirrorVideo: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for toggling mirroring of self video: + +```ts +{ + prefs: { + mirrorVideo: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -36,16 +38,13 @@ A component which lets to manage your camera devices and your video preferences. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings.mdx index 4dd3286895b7a97..5dd39a1a89173b9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-settings.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-settings component (Web Components (HTML) Lib products: - realtime --- + A settings component to see and change your audio/video devices - as well as see your connection quality. +as well as see your connection quality. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,16 +30,13 @@ A settings component to see and change your audio/video devices ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-setup-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-setup-screen.mdx index 622524c4fd4f8c8..2f276604dd912f8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-setup-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-setup-screen.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-setup-screen component (Web Components (HTML) products: - realtime --- + A screen shown before joining the meeting, where you can edit your display name, - and media settings. +and media settings. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,16 +31,13 @@ A screen shown before joining the meeting, where you can edit your display name, ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar-ui.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar-ui.mdx index f7ebcc96c331885..8902143e96624a4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar-ui.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar-ui.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-sidebar-ui component (Web Components (HTML) L products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `currentTab` | `string` | ✅ | - | Default tab to open | -| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | -| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | -| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | -| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | -| `view` | `RtkSidebarView1` | ✅ | - | View | +| Property | Type | Required | Default | Description | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --------------- | ---------------------------------------- | +| `currentTab` | `string` | ✅ | - | Default tab to open | +| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | +| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | +| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | +| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | +| `view` | `RtkSidebarView1` | ✅ | - | View | ## Usage Examples @@ -29,17 +30,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar.mdx index d03131c5d572243..a22797273800cff 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-sidebar.mdx @@ -5,22 +5,23 @@ description: API reference for rtk-sidebar component (Web Components (HTML) Libr products: - realtime --- + A component which handles the sidebar and - you can customize which sections you want, and which section you want as the default. +you can customize which sections you want, and which section you want as the default. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | -| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `RtkSidebarView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------- | -------- | ----------------------- | --------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | +| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `RtkSidebarView` | ✅ | - | View type | ## Usage Examples @@ -33,16 +34,14 @@ A component which handles the sidebar and ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-simple-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-simple-grid.mdx index 222b8ffafe1e97e..1614ba1605368b3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-simple-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-simple-grid.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-simple-grid component (Web Components (HTML) products: - realtime --- + A grid component which renders only the participants in a simple grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | ---------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -32,17 +33,14 @@ A grid component which renders only the participants in a simple grid. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-speaker-selector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-speaker-selector.mdx index 1c3c4ff1ad54559..ee3244f04afe45c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-speaker-selector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-speaker-selector.mdx @@ -5,26 +5,28 @@ description: API reference for rtk-speaker-selector component (Web Components (H products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples @@ -37,16 +39,13 @@ A component which lets to manage your audio devices and audio preferences. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spinner.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spinner.mdx index 1b2a10a9aa431a4..729aa072d8e8358 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spinner.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spinner.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-spinner component (Web Components (HTML) Libr products: - realtime --- + A component which shows an animating spinner. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size1` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size1` | ✅ | - | Size | ## Usage Examples @@ -25,15 +26,11 @@ A component which shows an animating spinner. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-grid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-grid.mdx index feaee337d8349f1..0aba1ad132414cc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-grid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-grid.mdx @@ -5,27 +5,29 @@ description: API reference for rtk-spotlight-grid component (Web Components (HTM products: - realtime --- + A grid component that renders two lists of participants: `pinnedParticipants` and `participants`. - You can customize the layout to a `column` view, by default is is `row`. - - Participants from `pinnedParticipants[]` are rendered inside a larger grid. - - Participants from `participants[]` array are rendered in a smaller grid. +You can customize the layout to a `column` view, by default is is `row`. + +- Participants from `pinnedParticipants[]` are rendered inside a larger grid. +- Participants from `participants[]` array are rendered in a smaller grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -38,17 +40,13 @@ A grid component that renders two lists of participants: `pinnedParticipants` an ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-indicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-indicator.mdx index fb0fcf76dbe0835..db3971dcecc6fba 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-indicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-spotlight-indicator.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-spotlight-indicator component (Web Components products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,16 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-stage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-stage.mdx index 0f37d1d696ab3f4..99bc88ba74ef425 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-stage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-stage.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-stage component (Web Components (HTML) Librar products: - realtime --- + A component used as a stage that commonly houses - the `grid` and `sidebar` components. +the `grid` and `sidebar` components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -26,15 +27,13 @@ A component used as a stage that commonly houses ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-switch.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-switch.mdx index 899e19c8037f8c5..cd5071fb1a445d1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-switch.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-switch.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-switch component (Web Components (HTML) Libra products: - realtime --- + A switch component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | -| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------------------------------- | +| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | +| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -28,17 +29,15 @@ A switch component which follows RTK Design System. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tab-bar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tab-bar.mdx index 37b7c05e987b351..0eb2929868dce57 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tab-bar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tab-bar.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-tab-bar component (Web Components (HTML) Libr products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `activeTab` | `Tab` | ✅ | - | Active tab | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `tabs` | `Tab[]` | ✅ | - | Tabs | +| Property | Type | Required | Default | Description | +| ----------- | ------------- | -------- | ----------------------- | -------------- | +| `activeTab` | `Tab` | ✅ | - | Active tab | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `tabs` | `Tab[]` | ✅ | - | Tabs | ## Usage Examples @@ -30,15 +31,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-composer-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-composer-view.mdx index 47adf5034bc93ca..22603bbe1ca64f7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-composer-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-composer-view.mdx @@ -5,21 +5,22 @@ description: API reference for rtk-text-composer-view component (Web Components products: - realtime --- + A component which renders a text composer ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Disable the text input (default = false) | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `keyDownHandler` | `(e: KeyboardEvent)` | ✅ | - | Keydown event handler function | -| `maxLength` | `number` | ✅ | - | Max length for text input | -| `placeholder` | `string` | ✅ | - | Placeholder text | -| `rateLimitBreached` | `boolean` | ✅ | - | Boolean to indicate if rate limit is breached | -| `setText` | `(text: string, focus?: boolean)` | ❌ | - | Sets value of the text input | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `value` | `string` | ✅ | - | Default value for text input | +| Property | Type | Required | Default | Description | +| ------------------- | --------------------------------- | -------- | ----------------- | --------------------------------------------- | +| `disabled` | `boolean` | ✅ | - | Disable the text input (default = false) | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `keyDownHandler` | `(e: KeyboardEvent)` | ✅ | - | Keydown event handler function | +| `maxLength` | `number` | ✅ | - | Max length for text input | +| `placeholder` | `string` | ✅ | - | Placeholder text | +| `rateLimitBreached` | `boolean` | ✅ | - | Boolean to indicate if rate limit is breached | +| `setText` | `(text: string, focus?: boolean)` | ❌ | - | Sets value of the text input | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `value` | `string` | ✅ | - | Default value for text input | ## Usage Examples @@ -32,16 +33,14 @@ A component which renders a text composer ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message-view.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message-view.mdx index 4e15cd5f1fcdb7f..c7802ea87ac4cbc 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message-view.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message-view.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-text-message-view component (Web Components ( products: - realtime --- + A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | -| `text` | `string` | ✅ | - | Text message | +| Property | Type | Required | Default | Description | +| ------------ | --------- | -------- | ------- | ----------------------------------------- | +| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | +| `text` | `string` | ✅ | - | Text message | ## Usage Examples @@ -25,16 +26,13 @@ A component which renders a text message from chat. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message.mdx index 6163072c5b51c71..db080a025087bed 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-text-message.mdx @@ -5,19 +5,20 @@ description: API reference for rtk-text-message component (Web Components (HTML) products: - realtime --- + @deprecated `rtk-text-message` is deprecated and will be removed soon. Use `rtk-text-message-view` instead. - A component which renders a text message from chat. +A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `TextMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `TextMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -30,15 +31,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tooltip.mdx index 6e38e8bb3887731..ff346f3104717b1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-tooltip.mdx @@ -5,20 +5,21 @@ description: API reference for rtk-tooltip component (Web Components (HTML) Libr products: - realtime --- + Tooltip component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `delay` | `number` | ✅ | - | Delay before showing the tooltip | -| `disabled` | `boolean` | ✅ | - | Disabled | -| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | -| `label` | `string` | ✅ | - | Tooltip label | -| `open` | `boolean` | ✅ | - | Open | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | +| Property | Type | Required | Default | Description | +| ----------- | ---------------- | -------- | ------- | -------------------------------- | +| `delay` | `number` | ✅ | - | Delay before showing the tooltip | +| `disabled` | `boolean` | ✅ | - | Disabled | +| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | +| `label` | `string` | ✅ | - | Tooltip label | +| `open` | `boolean` | ✅ | - | Open | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | ## Usage Examples @@ -31,16 +32,14 @@ Tooltip component which follows RTK Design System. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcript.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcript.mdx index f0631ca86b905bd..5ed0883121e7db1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcript.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcript.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-transcript component (Web Components (HTML) L products: - realtime --- + A component which shows a transcript. - You need to remove the element after you receive the - `rtkTranscriptDismiss` event. +You need to remove the element after you receive the +`rtkTranscriptDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | +| Property | Type | Required | Default | Description | +| ------------ | -------------------------------------- | -------- | --------------- | ----------- | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | ## Usage Examples @@ -27,16 +28,13 @@ A component which shows a transcript. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcripts.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcripts.mdx index f75a986f1cfd9de..c734652bd0fbcd1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcripts.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-transcripts.mdx @@ -5,18 +5,19 @@ description: API reference for rtk-transcripts component (Web Components (HTML) products: - realtime --- + A component which handles transcripts. - You can configure which transcripts you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which transcripts you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -29,15 +30,13 @@ A component which handles transcripts. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ui-provider.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ui-provider.mdx index 041148907fcb623..3387ed120b39d4e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ui-provider.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-ui-provider.mdx @@ -5,17 +5,18 @@ description: API reference for rtk-ui-provider component (Web Components (HTML) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | -| `mode` | `MeetingMode1` | ✅ | - | Fill type | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | +| Property | Type | Required | Default | Description | +| ----------------- | ----------------- | -------- | ------------------ | ----------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | +| `mode` | `MeetingMode1` | ✅ | - | Fill type | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | ## Usage Examples @@ -28,17 +29,15 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-viewer-count.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-viewer-count.mdx index 4d041852272b5c6..42c4225721997e0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-viewer-count.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-viewer-count.mdx @@ -5,16 +5,17 @@ description: API reference for rtk-viewer-count component (Web Components (HTML) products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | ## Usage Examples @@ -27,16 +28,13 @@ A component which shows count of total joined participants in a meeting. ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-virtualized-participant-list.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-virtualized-participant-list.mdx index 9856cd393b4f8d3..d551b47a44c6b52 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-virtualized-participant-list.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-virtualized-participant-list.mdx @@ -5,15 +5,16 @@ description: API reference for rtk-virtualized-participant-list component (Web C products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | -| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | -| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | -| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | -| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------- | +| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | +| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | +| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | +| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | +| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | ## Usage Examples @@ -26,16 +27,14 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-waiting-screen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-waiting-screen.mdx index 5486f52a36737c7..f65c231d33c3ab5 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-waiting-screen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/core/rtk-waiting-screen.mdx @@ -5,14 +5,15 @@ description: API reference for rtk-waiting-screen component (Web Components (HTM products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples @@ -25,15 +26,13 @@ products: ### With Properties ```html - - + ``` - ```html ``` diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react-native/RtkMenuItem.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react-native/RtkMenuItem.mdx index 301d8b7d3bff009..248a49136afe991 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react-native/RtkMenuItem.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react-native/RtkMenuItem.mdx @@ -10,11 +10,11 @@ A pressable menu item within a menu. ## Properties -| Property | Type | Required | Default | Description | -| ---------- | ------------------------------------- | -------- | ------- | ---------------------- | -| `children` | `ReactNode` | ✅ | - | Menu item content | -| `onClick` | `(ev) => {}` | ❌ | - | Press handler callback | -| `size` | `'lg' \| 'md' \| 'sm' \| 'xl'` | ❌ | - | Size variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------------------ | -------- | ------- | ---------------------- | +| `children` | `ReactNode` | ✅ | - | Menu item content | +| `onClick` | `(ev) => {}` | ❌ | - | Press handler callback | +| `size` | `'lg' \| 'md' \| 'sm' \| 'xl'` | ❌ | - | Size variant | ## Usage Examples diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAi.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAi.mdx index 0ec727fad6c4379..422840190bc663c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAi.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAi.mdx @@ -5,43 +5,37 @@ description: API reference for RtkAi component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `AIView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `AIView` | ✅ | - | View type | ## Usage Examples ### Basic Usage ```tsx -import { RtkAi } from '@cloudflare/realtimekit-react-ui'; +import { RtkAi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAi } from '@cloudflare/realtimekit-react-ui'; +import { RtkAi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiToggle.mdx index 8545071a098a60f..396561410fcfa72 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiToggle.mdx @@ -5,42 +5,36 @@ description: API reference for RtkAiToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkAiToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkAiToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAiToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkAiToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiTranscriptions.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiTranscriptions.mdx index ef4f69f64146916..676a14f2675ae81 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiTranscriptions.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAiTranscriptions.mdx @@ -5,38 +5,33 @@ description: API reference for RtkAiTranscriptions component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------- | -------- | --------------- | ---------------------- | +| `initialTranscriptions` | `Transcript[]` | ✅ | - | Initial transcriptions | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkAiTranscriptions } from '@cloudflare/realtimekit-react-ui'; +import { RtkAiTranscriptions } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAiTranscriptions } from '@cloudflare/realtimekit-react-ui'; +import { RtkAiTranscriptions } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioGrid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioGrid.mdx index 5a8f8fedf34406a..75ece5db8d70097 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioGrid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioGrid.mdx @@ -5,43 +5,39 @@ description: API reference for RtkAudioGrid component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `hideSelf` | `boolean` | ✅ | - | Whether to hide self in the grid | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkAudioGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAudioGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioTile.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioTile.mdx index 71a65e966b788a4..5c8a03c08f715b6 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioTile.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioTile.mdx @@ -5,43 +5,43 @@ description: API reference for RtkAudioTile component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ----------- | -------- | ----------------- | ------------------ | +| `config` | `UIConfig` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkAudioTile } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioTile } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAudioTile } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioTile } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioVisualizer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioVisualizer.mdx index 9f5b3941640b98a..33a40cf994b8247 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioVisualizer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAudioVisualizer.mdx @@ -5,46 +5,46 @@ description: API reference for RtkAudioVisualizer component (React Library) products: - realtime --- + An audio visualizer component which visualizes a participants audio. - Commonly used inside `rtk-name-tag`. +Commonly used inside `rtk-name-tag`. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------------ | -------- | ----------------- | --------------------------------------------------------------------------------------------- | +| `hideMuted` | `boolean` | ✅ | - | Hide the visualizer if audio is muted | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Audio visualizer for screensharing, it will use screenShareTracks.audio instead of audioTrack | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AudioVisualizerVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkAudioVisualizer } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioVisualizer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAudioVisualizer } from '@cloudflare/realtimekit-react-ui'; +import { RtkAudioVisualizer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAvatar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAvatar.mdx index 0e6ffdb430de443..b48ab891f56912c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAvatar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkAvatar.mdx @@ -5,43 +5,37 @@ description: API reference for RtkAvatar component (React Library) products: - realtime --- + Avatar component which renders a participant's image or their initials. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `AvatarVariant` | ✅ | - | Avatar type | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------------------------------------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `participant` | `Peer \| WaitlistedParticipant \| { name: string; picture: string }` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `AvatarVariant` | ✅ | - | Avatar type | ## Usage Examples ### Basic Usage ```tsx -import { RtkAvatar } from '@cloudflare/realtimekit-react-ui'; +import { RtkAvatar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkAvatar } from '@cloudflare/realtimekit-react-ui'; +import { RtkAvatar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomManager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomManager.mdx index 487dc6287788cc7..a8884efc78197e3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomManager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomManager.mdx @@ -5,46 +5,46 @@ description: API reference for RtkBreakoutRoomManager component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `allowDelete` | `boolean` | ✅ | - | allow room delete | -| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | -| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isDragMode` | `boolean` | ✅ | - | Drag mode | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | -| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------------- | -------------------- | -------- | ----------------- | -------------------------------- | +| `allowDelete` | `boolean` | ✅ | - | allow room delete | +| `assigningParticipants` | `boolean` | ✅ | - | Enable updating participants | +| `defaultExpanded` | `boolean` | ✅ | - | display expanded card by default | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isDragMode` | `boolean` | ✅ | - | Drag mode | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `'edit' \| 'create'` | ✅ | - | Mode in which selector is used | +| `room` | `DraftMeeting` | ✅ | - | Connected Room Config Object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkBreakoutRoomManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkBreakoutRoomManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomParticipants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomParticipants.mdx index fb2341581602302..2004a147afe14a6 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomParticipants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomParticipants.mdx @@ -5,44 +5,44 @@ description: API reference for RtkBreakoutRoomParticipants component (React Libr products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participantIds` | `string[]` | ✅ | - | Participant ids | -| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------ | ---------- | -------- | ----------------- | --------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participantIds` | `string[]` | ✅ | - | Participant ids | +| `selectedParticipantIds` | `string[]` | ✅ | - | selected participants | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkBreakoutRoomParticipants } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomParticipants } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkBreakoutRoomParticipants } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomParticipants } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsManager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsManager.mdx index 50f3260dcf7a651..dcbcea2d4770056 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsManager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsManager.mdx @@ -5,38 +5,34 @@ description: API reference for RtkBreakoutRoomsManager component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkBreakoutRoomsManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomsManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkBreakoutRoomsManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomsManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsToggle.mdx index 380c96f9f1541ef..437ddd1710ebf57 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBreakoutRoomsToggle.mdx @@ -5,45 +5,45 @@ description: API reference for RtkBreakoutRoomsToggle component (React Library) products: - realtime --- + A button which toggles visibility of breakout rooms. - You need to pass the `meeting` object to it. +You need to pass the `meeting` object to it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ✅ | - | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ✅ | - | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ------- | -------------- | +| `iconPack` | `IconPack` | ✅ | - | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ✅ | - | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkBreakoutRoomsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkBreakoutRoomsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkBreakoutRoomsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBroadcastMessageModal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBroadcastMessageModal.mdx index 856b11cff1b3d13..2117f12536528dd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBroadcastMessageModal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkBroadcastMessageModal.mdx @@ -5,38 +5,34 @@ description: API reference for RtkBroadcastMessageModal component (React Library products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkBroadcastMessageModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkBroadcastMessageModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkBroadcastMessageModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkBroadcastMessageModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkButton.mdx index 5be7a8515fbc268..4662a4cb4703613 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkButton.mdx @@ -5,44 +5,38 @@ description: API reference for RtkButton component (React Library) products: - realtime --- + A button that follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | -| `kind` | `ButtonKind` | ✅ | - | Button type | -| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | -| `size` | `Size` | ✅ | - | Size | -| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | -| `variant` | `ButtonVariant` | ✅ | - | Button variant | +| Property | Type | Required | Default | Description | +| ---------- | --------------------------- | -------- | ------- | ------------------------------------ | +| `disabled` | `boolean` | ✅ | - | Where the button is disabled or not | +| `kind` | `ButtonKind` | ✅ | - | Button type | +| `reverse` | `boolean` | ✅ | - | Whether to reverse order of children | +| `size` | `Size` | ✅ | - | Size | +| `type` | `HTMLButtonElement['type']` | ✅ | - | Button type | +| `variant` | `ButtonVariant` | ✅ | - | Button variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraSelector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraSelector.mdx index 5964ca5795dff5d..5bd7f5725ed45f5 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraSelector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraSelector.mdx @@ -5,51 +5,52 @@ description: API reference for RtkCameraSelector component (React Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkCameraSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkCameraSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkCameraSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkCameraSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraToggle.mdx index f32d538b0d242cb..ef0f7be9cbd784b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCameraToggle.mdx @@ -5,43 +5,37 @@ description: API reference for RtkCameraToggle component (React Library) products: - realtime --- + A button which toggles your camera. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkCameraToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkCameraToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkCameraToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkCameraToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCaptionToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCaptionToggle.mdx index 4e5a7b0e9ae81e2..ccb44bea4849232 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCaptionToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCaptionToggle.mdx @@ -5,43 +5,37 @@ description: API reference for RtkCaptionToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkCaptionToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkCaptionToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkCaptionToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkCaptionToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChat.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChat.mdx index 08109cd1a6900d2..88044716a737a05 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChat.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChat.mdx @@ -5,43 +5,38 @@ description: API reference for RtkChat component (React Library) products: - realtime --- + Fully featured chat component with image & file upload, emoji picker and auto-scroll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChat } from '@cloudflare/realtimekit-react-ui'; +import { RtkChat } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChat } from '@cloudflare/realtimekit-react-ui'; +import { RtkChat } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerUi.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerUi.mdx index 3c8a6961bebc260..f71eb84400228a3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerUi.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerUi.mdx @@ -5,44 +5,44 @@ description: API reference for RtkChatComposerUi component (React Library) products: - realtime --- + @deprecated . This component is deprecated, please use rtk-chat-composer-view instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------------------------------------------------------------------------------- | -------- | ----------------- | ----------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `prefill` | `{ suggestedReplies?: string[]; editMessage?: TextMessage; replyMessage?: TextMessage; }` | ❌ | - | prefill the composer | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatComposerUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatComposerUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatComposerUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatComposerUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerView.mdx index 2ebfa2b0d2a24e3..3f5eabaf3bbce7c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatComposerView.mdx @@ -5,49 +5,49 @@ description: API reference for RtkChatComposerView component (React Library) products: - realtime --- + A component which renders a chat composer ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | -| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | -| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | -| `maxLength` | `number` | ✅ | - | Max length for text input | -| `message` | `string` | ✅ | - | Message to be pre-populated | -| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | -| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | -| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------------------------------- | -------- | ----------------- | --------------------------------------- | +| `canSendFiles` | `boolean` | ✅ | - | Whether user can send file messages | +| `canSendTextMessage` | `boolean` | ✅ | - | Whether user can send text messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `inputTextPlaceholder` | `string` | ✅ | - | Placeholder for text input | +| `isEditing` | `boolean` | ✅ | - | Sets composer to edit mode | +| `maxLength` | `number` | ✅ | - | Max length for text input | +| `message` | `string` | ✅ | - | Message to be pre-populated | +| `quotedMessage` | `string` | ✅ | - | Quote message to be displayed | +| `rateLimits` | `{ period: number; maxInvocations: number; }` | ✅ | - | Rate limits | +| `storageKey` | `string` | ✅ | - | Key for storing message in localStorage | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatComposerView } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatComposerView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatComposerView } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatComposerView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatHeader.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatHeader.mdx index b8d221aa00d5d75..172ac6463eae729 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatHeader.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatHeader.mdx @@ -5,19 +5,19 @@ description: API reference for RtkChatHeader component (React Library) products: - realtime --- + ## Properties -*No properties available.* +_No properties available._ ## Usage Examples ### Basic Usage ```tsx -import { RtkChatHeader } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatHeader } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessage.mdx index 62095db66fa56ee..06b7622778baee0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessage.mdx @@ -5,55 +5,49 @@ description: API reference for RtkChatMessage component (React Library) products: - realtime --- + @deprecated `rtk-chat-message` is deprecated and will be removed soon. Use `rtk-message-view` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `alignRight` | `boolean` | ✅ | - | aligns message to right | -| `canDelete` | `boolean` | ✅ | - | can delete message | -| `canEdit` | `boolean` | ✅ | - | can edit message | -| `canPin` | `boolean` | ✅ | - | can pin this message | -| `canReply` | `boolean` | ✅ | - | can quote reply this message | -| `child` | `HTMLElement` | ✅ | - | Child | -| `disableControls` | `boolean` | ✅ | - | disables controls | -| `hideAvatar` | `boolean` | ✅ | - | hides avatar | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | is continued | -| `isSelf` | `boolean` | ✅ | - | if sender is self | -| `isUnread` | `boolean` | ✅ | - | is unread | -| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | -| `message` | `Message` | ✅ | - | message item | -| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ----------------- | -------------------------------------- | +| `alignRight` | `boolean` | ✅ | - | aligns message to right | +| `canDelete` | `boolean` | ✅ | - | can delete message | +| `canEdit` | `boolean` | ✅ | - | can edit message | +| `canPin` | `boolean` | ✅ | - | can pin this message | +| `canReply` | `boolean` | ✅ | - | can quote reply this message | +| `child` | `HTMLElement` | ✅ | - | Child | +| `disableControls` | `boolean` | ✅ | - | disables controls | +| `hideAvatar` | `boolean` | ✅ | - | hides avatar | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | is continued | +| `isSelf` | `boolean` | ✅ | - | if sender is self | +| `isUnread` | `boolean` | ✅ | - | is unread | +| `leftAlign` | `boolean` | ✅ | - | Whether to left align the chat bubbles | +| `message` | `Message` | ✅ | - | message item | +| `senderDisplayPicture` | `string` | ✅ | - | sender display picture url | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUi.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUi.mdx index 39be829497f47dc..24dfa75d1e264c5 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUi.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUi.mdx @@ -5,45 +5,45 @@ description: API reference for RtkChatMessagesUi component (React Library) products: - realtime --- + @deprecated Use `rtk-chat-messages-ui-paginated` instead. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `messages` | `Chat[]` | ✅ | - | Chat Messages | -| `selectedGroup` | `string` | ✅ | - | Selected group key | -| `selfUserId` | `string` | ✅ | - | User ID of self user | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ----------- | -------- | ----------------- | ----------------------------------- | +| `canPinMessages` | `boolean` | ✅ | - | Can current user pin/unpin messages | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `messages` | `Chat[]` | ✅ | - | Chat Messages | +| `selectedGroup` | `string` | ✅ | - | Selected group key | +| `selfUserId` | `string` | ✅ | - | User ID of self user | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatMessagesUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessagesUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatMessagesUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessagesUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUiPaginated.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUiPaginated.mdx index 2050ab5a26bc247..5891af64b276945 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUiPaginated.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatMessagesUiPaginated.mdx @@ -5,41 +5,41 @@ description: API reference for RtkChatMessagesUiPaginated component (React Libra products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | --------------------- | -------- | ----------------- | ------------------------------------------------------------------------------------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `privateChatRecipient` | `Participant \| null` | ✅ | - | Selected recipient for private chat; when unset, messages are loaded for public chat (Everyone). | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatMessagesUiPaginated } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessagesUiPaginated } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatMessagesUiPaginated } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatMessagesUiPaginated } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSearchResults.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSearchResults.mdx index 8218e3a1de98dcc..7b498cd1db28fe1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSearchResults.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSearchResults.mdx @@ -5,43 +5,43 @@ description: API reference for RtkChatSearchResults component (React Library) products: - realtime --- + @deprecated `rtk-chat-search-results` is deprecated and will be removed soon. Use `rtk-chat-messages-ui-paginated` instead. - ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `channelId` | `string` | ✅ | - | Channel id | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `query` | `string` | ✅ | - | Search query | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | -------------- | +| `channelId` | `string` | ✅ | - | Channel id | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `query` | `string` | ✅ | - | Search query | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatSearchResults } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSearchResults } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatSearchResults } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSearchResults } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelector.mdx index d57247e25b7d5f0..377f279bef2cd5e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelector.mdx @@ -5,42 +5,37 @@ description: API reference for RtkChatSelector component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ------------ | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Overrides | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelectorUi.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelectorUi.mdx index 780c0f8d5ddc863..883fee41a51d0de 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelectorUi.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatSelectorUi.mdx @@ -5,42 +5,42 @@ description: API reference for RtkChatSelectorUi component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `groups` | `ChatGroup[]` | ✅ | - | Participants | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `selectedGroupId` | `string` | ✅ | - | Selected participant | -| `selfUserId` | `string` | ✅ | - | Self User ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `unreadCounts` | `Record` | ✅ | - | Unread counts | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------------ | -------- | ----------------- | -------------------- | +| `groups` | `ChatGroup[]` | ✅ | - | Participants | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `selectedGroupId` | `string` | ✅ | - | Selected participant | +| `selfUserId` | `string` | ✅ | - | Self User ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `unreadCounts` | `Record` | ✅ | - | Unread counts | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatSelectorUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSelectorUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatSelectorUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatSelectorUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatToggle.mdx index 93bb6e482beaa63..23fa8dea93d070a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkChatToggle.mdx @@ -5,49 +5,47 @@ description: API reference for RtkChatToggle component (React Library) products: - realtime --- + A button which toggles visibility of chat. - You need to pass the `meeting` object to it to see the unread messages count badge. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'chat' } - ``` +You need to pass the `meeting` object to it to see the unread messages count badge. +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "chat"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkChatToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkChatToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkChatToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkClock.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkClock.mdx index 5b51f5833c33a3f..6671c8edffa9090 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkClock.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkClock.mdx @@ -5,40 +5,35 @@ description: API reference for RtkClock component (React Library) products: - realtime --- + Shows the time elapsed in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | ## Usage Examples ### Basic Usage ```tsx -import { RtkClock } from '@cloudflare/realtimekit-react-ui'; +import { RtkClock } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkClock } from '@cloudflare/realtimekit-react-ui'; +import { RtkClock } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkConfirmationModal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkConfirmationModal.mdx index 03354726cb31f89..31eb8135db4c518 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkConfirmationModal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkConfirmationModal.mdx @@ -5,40 +5,36 @@ description: API reference for RtkConfirmationModal component (React Library) products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkConfirmationModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkConfirmationModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkConfirmationModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkConfirmationModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbar.mdx index 23812e3db206ab2..70878abe0db3e5a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbar.mdx @@ -5,46 +5,40 @@ description: API reference for RtkControlbar component (React Library) products: - realtime --- + Controlbar component provides you with various designs as variants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkControlbar } from '@cloudflare/realtimekit-react-ui'; +import { RtkControlbar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkControlbar } from '@cloudflare/realtimekit-react-ui'; +import { RtkControlbar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbarButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbarButton.mdx index d0e6e508caf9480..d9027e6aa0875b4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbarButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkControlbarButton.mdx @@ -5,47 +5,43 @@ description: API reference for RtkControlbarButton component (React Library) products: - realtime --- + A skeleton component used for composing custom controlbar buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | -| `disabled` | `boolean` | ✅ | - | Whether button is disabled | -| `icon` | `string` | ✅ | - | Icon | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | -| `label` | `string` | ✅ | - | Label of button | -| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `ControlBarVariant1` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ------------- | -------------------- | -------- | ----------------- | -------------------------------------------------------------- | +| `brandIcon` | `boolean` | ✅ | - | Whether icon requires brand color | +| `disabled` | `boolean` | ✅ | - | Whether button is disabled | +| `icon` | `string` | ✅ | - | Icon | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isLoading` | `boolean` | ✅ | - | Loading state Ignores current icon and shows a spinner if true | +| `label` | `string` | ✅ | - | Label of button | +| `showWarning` | `boolean` | ✅ | - | Whether to show warning icon | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `ControlBarVariant1` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkControlbarButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkControlbarButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkControlbarButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkControlbarButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCounter.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCounter.mdx index 7b619a1539d261f..2f691f8771858ee 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCounter.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkCounter.mdx @@ -5,43 +5,37 @@ description: API reference for RtkCounter component (React Library) products: - realtime --- + A number picker with increment and decrement buttons. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `minValue` | `number` | ✅ | - | Minimum value | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `value` | `number` | ✅ | - | Initial value | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `minValue` | `number` | ✅ | - | Minimum value | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `value` | `number` | ✅ | - | Initial value | ## Usage Examples ### Basic Usage ```tsx -import { RtkCounter } from '@cloudflare/realtimekit-react-ui'; +import { RtkCounter } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkCounter } from '@cloudflare/realtimekit-react-ui'; +import { RtkCounter } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebugger.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebugger.mdx index f053eb720bed15d..e50a8ecb11348d8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebugger.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebugger.mdx @@ -5,42 +5,37 @@ description: API reference for RtkDebugger component (React Library) products: - realtime --- + A troubleshooting component to identify and fix any issues in the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebugger } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebugger } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebugger } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebugger } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerAudio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerAudio.mdx index 7dc5d08497e8bd7..e3b258be377ed38 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerAudio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerAudio.mdx @@ -5,40 +5,35 @@ description: API reference for RtkDebuggerAudio component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebuggerAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebuggerAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerScreenshare.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerScreenshare.mdx index 84e96a1f71fb63a..62053832f219996 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerScreenshare.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerScreenshare.mdx @@ -5,40 +5,35 @@ description: API reference for RtkDebuggerScreenshare component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebuggerScreenshare } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerScreenshare } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebuggerScreenshare } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerScreenshare } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerSystem.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerSystem.mdx index 351882399cc12df..fa2fc78d58a6309 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerSystem.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerSystem.mdx @@ -5,40 +5,35 @@ description: API reference for RtkDebuggerSystem component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebuggerSystem } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerSystem } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebuggerSystem } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerSystem } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerToggle.mdx index a31dd78c42d4145..5e693f7e36fb65e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerToggle.mdx @@ -5,42 +5,36 @@ description: API reference for RtkDebuggerToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebuggerToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebuggerToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerVideo.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerVideo.mdx index c74f2cb9062572f..f5819d9caac23ff 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerVideo.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDebuggerVideo.mdx @@ -5,40 +5,35 @@ description: API reference for RtkDebuggerVideo component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDebuggerVideo } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerVideo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDebuggerVideo } from '@cloudflare/realtimekit-react-ui'; +import { RtkDebuggerVideo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialog.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialog.mdx index fe104ba37211c2a..46fbf93818f24f8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialog.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialog.mdx @@ -5,47 +5,47 @@ description: API reference for RtkDialog component (React Library) products: - realtime --- + A dialog component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | -| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------ | ---------- | -------- | ----------------------- | -------------------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `disableEscapeKey` | `boolean` | ✅ | - | Whether Escape key can close the modal | +| `hideCloseButton` | `boolean` | ✅ | - | Whether to show the close button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `open` | `boolean` | ✅ | - | Whether a dialog is open or not | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDialog } from '@cloudflare/realtimekit-react-ui'; +import { RtkDialog } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDialog } from '@cloudflare/realtimekit-react-ui'; +import { RtkDialog } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialogManager.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialogManager.mdx index 61ee80cd7643468..736b239555dd6c7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialogManager.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDialogManager.mdx @@ -5,49 +5,45 @@ description: API reference for RtkDialogManager component (React Library) products: - realtime --- + A component which handles all dialog elements in a component such as: - - rtk-settings - - rtk-leave-meeting - - rtk-permissions-message - - rtk-image-viewer - - rtk-breakout-rooms-manager - This components depends on the values from `states` object. + +- rtk-settings +- rtk-leave-meeting +- rtk-permissions-message +- rtk-image-viewer +- rtk-breakout-rooms-manager + This components depends on the values from `states` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDialogManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkDialogManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDialogManager } from '@cloudflare/realtimekit-react-ui'; +import { RtkDialogManager } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDraftAttachmentView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDraftAttachmentView.mdx index a5285022bbe30c4..90c0d95b4208a0a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDraftAttachmentView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkDraftAttachmentView.mdx @@ -5,39 +5,35 @@ description: API reference for RtkDraftAttachmentView component (React Library) products: - realtime --- + A component which renders the draft attachment to send ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `attachment` | `{ type: 'image' \| 'file'; file: File; }` | ✅ | - | Attachment to display | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------------------------------------- | -------- | ----------------- | --------------------- | +| `attachment` | `{ type: 'image' \| 'file'; file: File; }` | ✅ | - | Attachment to display | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkDraftAttachmentView } from '@cloudflare/realtimekit-react-ui'; +import { RtkDraftAttachmentView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkDraftAttachmentView } from '@cloudflare/realtimekit-react-ui'; +import { RtkDraftAttachmentView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPicker.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPicker.mdx index c43046ea84826be..8a0e1b654ee40a0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPicker.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPicker.mdx @@ -5,39 +5,35 @@ description: API reference for RtkEmojiPicker component (React Library) products: - realtime --- + A very simple emoji picker component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------------- | ---------- | -------- | ----------------- | ----------------------------------------- | +| `focusWhenOpened` | `boolean` | ✅ | - | Controls whether or not to focus on mount | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkEmojiPicker } from '@cloudflare/realtimekit-react-ui'; +import { RtkEmojiPicker } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkEmojiPicker } from '@cloudflare/realtimekit-react-ui'; +import { RtkEmojiPicker } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPickerButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPickerButton.mdx index fb41c2305bae5b8..dd15556f86ad2a2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPickerButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEmojiPickerButton.mdx @@ -5,37 +5,33 @@ description: API reference for RtkEmojiPickerButton component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isActive` | `boolean` | ✅ | - | Active state indicator | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isActive` | `boolean` | ✅ | - | Active state indicator | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkEmojiPickerButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkEmojiPickerButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkEmojiPickerButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkEmojiPickerButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEndedScreen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEndedScreen.mdx index f5d34bcb49b8d47..9e06d6de13b10ac 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEndedScreen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkEndedScreen.mdx @@ -5,43 +5,38 @@ description: API reference for RtkEndedScreen component (React Library) products: - realtime --- + A screen which shows a meeting has ended. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Global states | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | Global states | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Global states | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | Global states | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkEndedScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkEndedScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkEndedScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkEndedScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileDropzone.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileDropzone.mdx index 249558fdf892cff..d000f71a09a18c4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileDropzone.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileDropzone.mdx @@ -5,37 +5,33 @@ description: API reference for RtkFileDropzone component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ------------- | -------- | ----------------- | ------------------------------------------- | +| `hostEl` | `HTMLElement` | ✅ | - | Host element on which drop events to attach | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkFileDropzone } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileDropzone } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkFileDropzone } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileDropzone } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessage.mdx index 160e6d45a1c3e0d..0d763747bc4f21b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessage.mdx @@ -5,45 +5,39 @@ description: API reference for RtkFileMessage component (React Library) products: - realtime --- + @deprecated `rtk-file-message` is deprecated and will be removed soon. Use `rtk-file-message-view` instead. - A component which renders a file message from chat. +A component which renders a file message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `FileMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `FileMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkFileMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkFileMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessageView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessageView.mdx index baf330586b09a46..64098e714003e5e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessageView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFileMessageView.mdx @@ -5,42 +5,36 @@ description: API reference for RtkFileMessageView component (React Library) products: - realtime --- + A component which renders a file message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `name` | `string` | ✅ | - | Name of the file | -| `size` | `number` | ✅ | - | Size of the file | -| `url` | `string` | ✅ | - | Url of the file | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `name` | `string` | ✅ | - | Name of the file | +| `size` | `number` | ✅ | - | Size of the file | +| `url` | `string` | ✅ | - | Url of the file | ## Usage Examples ### Basic Usage ```tsx -import { RtkFileMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkFileMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkFileMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFilePickerButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFilePickerButton.mdx index 7695557d4ce9b2e..f495c13464a820e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFilePickerButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFilePickerButton.mdx @@ -5,41 +5,41 @@ description: API reference for RtkFilePickerButton component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `filter` | `string` | ✅ | - | File type filter to open file picker with | -| `icon` | `keyof IconPack1` | ✅ | - | Icon | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `label` | `string` | ✅ | - | Label for tooltip | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------------- | -------- | ----------------- | ----------------------------------------- | +| `filter` | `string` | ✅ | - | File type filter to open file picker with | +| `icon` | `keyof IconPack1` | ✅ | - | Icon | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `label` | `string` | ✅ | - | Label for tooltip | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkFilePickerButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkFilePickerButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkFilePickerButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkFilePickerButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFullscreenToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFullscreenToggle.mdx index 4dfd50432f2e792..0abc92d640e427b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFullscreenToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkFullscreenToggle.mdx @@ -5,45 +5,45 @@ description: API reference for RtkFullscreenToggle component (React Library) products: - realtime --- + A button which toggles full screen mode for any - existing `rtk-meeting` component in the DOM. +existing `rtk-meeting` component in the DOM. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `targetElement` | `HTMLElement` | ✅ | - | Target Element to fullscreen | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------- | -------- | ----------------- | ---------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `targetElement` | `HTMLElement` | ✅ | - | Target Element to fullscreen | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkFullscreenToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkFullscreenToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkFullscreenToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkFullscreenToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGrid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGrid.mdx index ba09d23bb59421f..f927f0f83579df1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGrid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGrid.mdx @@ -5,49 +5,43 @@ description: API reference for RtkGrid component (React Library) products: - realtime --- + The main grid component which abstracts all the grid handling logic and renders it for you. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `gap` | `number` | ✅ | - | Gap between participants | -| `gridSize` | `GridSize` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `layout` | `GridLayout` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `overrides` | `any` | ✅ | - | @deprecated | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------ | -------- | ----------------------- | ------------------------------------ | +| `aspectRatio` | `string` | ✅ | - | The aspect ratio of each participant | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `gap` | `number` | ✅ | - | Gap between participants | +| `gridSize` | `GridSize` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `layout` | `GridLayout` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `overrides` | `any` | ✅ | - | @deprecated | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGridPagination.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGridPagination.mdx index 5f237bf642f2544..2ec869ec68a635d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGridPagination.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkGridPagination.mdx @@ -5,45 +5,45 @@ description: API reference for RtkGridPagination component (React Library) products: - realtime --- + A component which allows you to change current page and view mode - of active participants list. This is reflected in the `rtk-grid` component. +of active participants list. This is reflected in the `rtk-grid` component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size Prop | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `GridPaginationVariants` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------------ | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size Prop | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `GridPaginationVariants` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkGridPagination } from '@cloudflare/realtimekit-react-ui'; +import { RtkGridPagination } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkGridPagination } from '@cloudflare/realtimekit-react-ui'; +import { RtkGridPagination } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkHeader.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkHeader.mdx index 10ccda38fa97f7e..ae22b18378bd4c7 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkHeader.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkHeader.mdx @@ -5,46 +5,40 @@ description: API reference for RtkHeader component (React Library) products: - realtime --- + A component that houses all the header components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| --------------- | -------------------- | -------- | ----------------------- | -------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `disableRender` | `boolean` | ✅ | - | Whether to render the default UI | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'solid' \| 'boxed'` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkHeader } from '@cloudflare/realtimekit-react-ui'; +import { RtkHeader } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkHeader } from '@cloudflare/realtimekit-react-ui'; +import { RtkHeader } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIcon.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIcon.mdx index f7283d6288d99a4..16a092f54b2dbce 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIcon.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIcon.mdx @@ -5,41 +5,35 @@ description: API reference for RtkIcon component (React Library) products: - realtime --- + An icon component which accepts an svg string and renders it. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `icon` | `string` | ✅ | - | Icon | -| `size` | `Size1` | ✅ | - | Size | -| `variant` | `IconVariant` | ✅ | - | Icon variant | +| Property | Type | Required | Default | Description | +| --------- | ------------- | -------- | ------- | ------------ | +| `icon` | `string` | ✅ | - | Icon | +| `size` | `Size1` | ✅ | - | Size | +| `variant` | `IconVariant` | ✅ | - | Icon variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkIcon } from '@cloudflare/realtimekit-react-ui'; +import { RtkIcon } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkIcon } from '@cloudflare/realtimekit-react-ui'; +import { RtkIcon } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIdleScreen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIdleScreen.mdx index 673fc18b193b110..c1bb80f2c5f6df1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIdleScreen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkIdleScreen.mdx @@ -5,41 +5,37 @@ description: API reference for RtkIdleScreen component (React Library) products: - realtime --- + A screen that handles the idle state, - i.e; when you are waiting for data about the meeting, specifically the `meeting` object. +i.e; when you are waiting for data about the meeting, specifically the `meeting` object. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | ------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkIdleScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkIdleScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkIdleScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkIdleScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessage.mdx index 8c0288f2c73bdea..55513c0267caef0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessage.mdx @@ -5,45 +5,41 @@ description: API reference for RtkImageMessage component (React Library) products: - realtime --- + @deprecated `rtk-image-message` is deprecated and will be removed soon. Use `rtk-image-message-view` instead. - A component which renders an image message from chat. +A component which renders an image message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `ImageMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `ImageMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkImageMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkImageMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessageView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessageView.mdx index c780f5404911db6..7bbc3cd4d39a23a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessageView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageMessageView.mdx @@ -5,39 +5,35 @@ description: API reference for RtkImageMessageView component (React Library) products: - realtime --- + A component which renders an image message. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `url` | `string` | ✅ | - | Url of the image | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ---------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `url` | `string` | ✅ | - | Url of the image | ## Usage Examples ### Basic Usage ```tsx -import { RtkImageMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkImageMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageViewer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageViewer.mdx index 91083a36a5cc7cd..9df4c2bb772122b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageViewer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkImageViewer.mdx @@ -5,41 +5,36 @@ description: API reference for RtkImageViewer component (React Library) products: - realtime --- + A component which shows an image sent via chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `image` | `ImageMessage` | ✅ | - | Image message | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | -------------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `image` | `ImageMessage` | ✅ | - | Image message | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkImageViewer } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageViewer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkImageViewer } from '@cloudflare/realtimekit-react-ui'; +import { RtkImageViewer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkInformationTooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkInformationTooltip.mdx index 0fbe8b295b4e90a..59bb5a4a42279d0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkInformationTooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkInformationTooltip.mdx @@ -5,35 +5,31 @@ description: API reference for RtkInformationTooltip component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | ## Usage Examples ### Basic Usage ```tsx -import { RtkInformationTooltip } from '@cloudflare/realtimekit-react-ui'; +import { RtkInformationTooltip } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkInformationTooltip } from '@cloudflare/realtimekit-react-ui'; +import { RtkInformationTooltip } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkJoinStage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkJoinStage.mdx index 980d877c6c2be1c..cb2514eb8f698d8 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkJoinStage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkJoinStage.mdx @@ -5,43 +5,39 @@ description: API reference for RtkJoinStage component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------ | ----------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `dataConfig` | `ModalDataConfig` | ✅ | - | Content Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkJoinStage } from '@cloudflare/realtimekit-react-ui'; +import { RtkJoinStage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkJoinStage } from '@cloudflare/realtimekit-react-ui'; +import { RtkJoinStage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveButton.mdx index cbadd40c668ffb5..bd0118ecce5e460 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveButton.mdx @@ -5,41 +5,36 @@ description: API reference for RtkLeaveButton component (React Library) products: - realtime --- + A button which toggles visilibility of the leave confirmation dialog. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkLeaveButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkLeaveButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLeaveButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkLeaveButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveMeeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveMeeting.mdx index 381df4d5a32d9a8..caaa57aa9b7489a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveMeeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLeaveMeeting.mdx @@ -5,41 +5,37 @@ description: API reference for RtkLeaveMeeting component (React Library) products: - realtime --- + A component which allows you to leave a meeting or - end meeting for all, if you have the permission. +end meeting for all, if you have the permission. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkLeaveMeeting } from '@cloudflare/realtimekit-react-ui'; +import { RtkLeaveMeeting } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLeaveMeeting } from '@cloudflare/realtimekit-react-ui'; +import { RtkLeaveMeeting } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamIndicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamIndicator.mdx index c460afe367c3aba..f32e008ce30ba45 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamIndicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamIndicator.mdx @@ -5,39 +5,34 @@ description: API reference for RtkLivestreamIndicator component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkLivestreamIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLivestreamIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamPlayer.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamPlayer.mdx index f2825122178db2e..76bcbcc4f131e9b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamPlayer.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamPlayer.mdx @@ -5,39 +5,34 @@ description: API reference for RtkLivestreamPlayer component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkLivestreamPlayer } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamPlayer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLivestreamPlayer } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamPlayer } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamToggle.mdx index 5a02a6110c65ab6..bbc41afc7185d64 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLivestreamToggle.mdx @@ -5,41 +5,35 @@ description: API reference for RtkLivestreamToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkLivestreamToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLivestreamToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkLivestreamToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLogo.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLogo.mdx index eb4e53ce7220d26..9477a16d30710b5 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLogo.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkLogo.mdx @@ -5,41 +5,36 @@ description: API reference for RtkLogo component (React Library) products: - realtime --- + A component which loads the logo from your config, or via the `logo-url` attribute. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `logoUrl` | `string` | ✅ | - | Logo URL | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `logoUrl` | `string` | ✅ | - | Logo URL | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkLogo } from '@cloudflare/realtimekit-react-ui'; +import { RtkLogo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkLogo } from '@cloudflare/realtimekit-react-ui'; +import { RtkLogo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMarkdownView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMarkdownView.mdx index b4a60b36bb5affb..55fbf4dd7de4c88 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMarkdownView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMarkdownView.mdx @@ -5,37 +5,32 @@ description: API reference for RtkMarkdownView component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | -| `text` | `string` | ✅ | - | raw text to render as markdown | +| Property | Type | Required | Default | Description | +| ----------- | -------- | -------- | ------- | ---------------------------------------- | +| `maxLength` | `number` | ✅ | - | max length of text to render as markdown | +| `text` | `string` | ✅ | - | raw text to render as markdown | ## Usage Examples ### Basic Usage ```tsx -import { RtkMarkdownView } from '@cloudflare/realtimekit-react-ui'; +import { RtkMarkdownView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMarkdownView } from '@cloudflare/realtimekit-react-ui'; +import { RtkMarkdownView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeeting.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeeting.mdx index 46f187b5651c348..fc2ab8e84fcd5de 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeeting.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeeting.mdx @@ -5,53 +5,53 @@ description: API reference for RtkMeeting component (React Library) products: - realtime --- + A single component which renders an entire meeting UI. - It loads your preset and renders the UI based on it. - With this component, you don't have to handle all the states, - dialogs and other smaller bits of managing the application. +It loads your preset and renders the UI based on it. +With this component, you don't have to handle all the states, +dialogs and other smaller bits of managing the application. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | -| `config` | `UIConfig` | ✅ | - | UI Config | -| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | -| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `mode` | `MeetingMode` | ✅ | - | Fill type | -| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------------- | ------------- | -------- | ------------------ | ------------------------------------------------------------------- | +| `applyDesignSystem` | `boolean` | ✅ | - | Whether to apply the design system on the document root from config | +| `config` | `UIConfig` | ✅ | - | UI Config | +| `gridLayout` | `GridLayout1` | ✅ | - | Grid layout | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `leaveOnUnmount` | `boolean` | ✅ | - | Whether participant should leave when this component gets unmounted | +| `loadConfigFromPreset` | `boolean` | ✅ | - | Whether to load config from preset | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `mode` | `MeetingMode` | ✅ | - | Fill type | +| `overrides` | `Overrides` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMeeting } from '@cloudflare/realtimekit-react-ui'; +import { RtkMeeting } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMeeting } from '@cloudflare/realtimekit-react-ui'; +import { RtkMeeting } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeetingTitle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeetingTitle.mdx index 390e091d34851d8..8e26823a9775b15 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeetingTitle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMeetingTitle.mdx @@ -5,39 +5,35 @@ description: API reference for RtkMeetingTitle component (React Library) products: - realtime --- + Displays the title of the meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMeetingTitle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMeetingTitle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMeetingTitle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMeetingTitle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenu.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenu.mdx index 5f5db9ac9f51c5d..9ee83f7cee4ea0a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenu.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenu.mdx @@ -5,43 +5,37 @@ description: API reference for RtkMenu component (React Library) products: - realtime --- + A menu component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `offset` | `number` | ✅ | - | Offset in px | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ----------- | ----------- | -------- | ----------------- | ----------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `offset` | `number` | ✅ | - | Offset in px | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMenu } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenu } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMenu } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenu } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuItem.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuItem.mdx index 07d2090f6869fa5..e3ed88af47b32ff 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuItem.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuItem.mdx @@ -5,41 +5,36 @@ description: API reference for RtkMenuItem component (React Library) products: - realtime --- + A menu item component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMenuItem } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenuItem } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMenuItem } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenuItem } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuList.mdx index 3abcdf3681cf82c..c8535a1fd33ef85 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMenuList.mdx @@ -5,39 +5,35 @@ description: API reference for RtkMenuList component (React Library) products: - realtime --- + A menu list component. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | -------------------------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `menuVariant` | `'primary' \| 'secondary'` | ✅ | - | Variant | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMenuList } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenuList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMenuList } from '@cloudflare/realtimekit-react-ui'; +import { RtkMenuList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMessageView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMessageView.mdx index a821d60dd934f37..80a9a91264a8c83 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMessageView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMessageView.mdx @@ -5,50 +5,46 @@ description: API reference for RtkMessageView component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | -| `authorName` | `string` | ✅ | - | Author display label | -| `avatarUrl` | `string` | ✅ | - | Avatar image url | -| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | -| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | -| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isEdited` | `boolean` | ✅ | - | Has the message been edited | -| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | -| `messageType` | `Message['type']` | ✅ | - | Type of message | -| `pinned` | `boolean` | ✅ | - | Is message pinned | -| `time` | `Date` | ✅ | - | Time when message was sent | -| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | -| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | +| Property | Type | Required | Default | Description | +| ---------------- | -------------------------- | -------- | ----------------- | --------------------------------------- | +| `actions` | `MessageAction[]` | ✅ | - | List of actions to show in menu | +| `authorName` | `string` | ✅ | - | Author display label | +| `avatarUrl` | `string` | ✅ | - | Avatar image url | +| `hideAuthorName` | `boolean` | ✅ | - | Hides author display label | +| `hideAvatar` | `boolean` | ✅ | - | Hides avatar | +| `hideMetadata` | `boolean` | ✅ | - | Hides metadata (time) | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isEdited` | `boolean` | ✅ | - | Has the message been edited | +| `isSelf` | `boolean` | ✅ | - | Is the message sent by the current user | +| `messageType` | `Message['type']` | ✅ | - | Type of message | +| `pinned` | `boolean` | ✅ | - | Is message pinned | +| `time` | `Date` | ✅ | - | Time when message was sent | +| `variant` | `'plain' \| 'bubble'` | ✅ | - | Appearance | +| `viewType` | `'incoming' \| 'outgoing'` | ✅ | - | Render | ## Usage Examples ### Basic Usage ```tsx -import { RtkMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicToggle.mdx index 8a828fa1df70a57..cc03a1979681184 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicToggle.mdx @@ -5,43 +5,37 @@ description: API reference for RtkMicToggle component (React Library) products: - realtime --- + A button which toggles your microphone. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkMicToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMicToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMicToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMicToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicrophoneSelector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicrophoneSelector.mdx index 7635bf3bc850417..bddd6410870b69d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicrophoneSelector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMicrophoneSelector.mdx @@ -5,51 +5,52 @@ description: API reference for RtkMicrophoneSelector component (React Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkMicrophoneSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkMicrophoneSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMicrophoneSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkMicrophoneSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMixedGrid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMixedGrid.mdx index 9797cef0997f626..2a84e600445f8a4 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMixedGrid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMixedGrid.mdx @@ -5,52 +5,46 @@ description: API reference for RtkMixedGrid component (React Library) products: - realtime --- + A grid component which handles screenshares, plugins and participants. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | -| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `plugins` | `RTKPlugin[]` | ✅ | - | Active Plugins | +| `screenShareParticipants` | `Peer[]` | ✅ | - | Screenshare Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMixedGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkMixedGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMixedGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkMixedGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMoreToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMoreToggle.mdx index 2c8f9d6008454df..ec75917e7d6794f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMoreToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMoreToggle.mdx @@ -5,44 +5,43 @@ description: API reference for RtkMoreToggle component (React Library) products: - realtime --- + A button which toggles visibility of a more menu. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeMoreMenu: boolean; } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeMoreMenu: boolean; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMoreToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMoreToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMoreToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkMoreToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllButton.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllButton.mdx index 0a61a27b14d57cb..9ff1d6062e97f3a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllButton.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllButton.mdx @@ -5,41 +5,35 @@ description: API reference for RtkMuteAllButton component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkMuteAllButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkMuteAllButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMuteAllButton } from '@cloudflare/realtimekit-react-ui'; +import { RtkMuteAllButton } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllConfirmation.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllConfirmation.mdx index 6964b04a06fce07..de60763a8da782a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllConfirmation.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkMuteAllConfirmation.mdx @@ -5,38 +5,34 @@ description: API reference for RtkMuteAllConfirmation component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkMuteAllConfirmation } from '@cloudflare/realtimekit-react-ui'; +import { RtkMuteAllConfirmation } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkMuteAllConfirmation } from '@cloudflare/realtimekit-react-ui'; +import { RtkMuteAllConfirmation } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNameTag.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNameTag.mdx index 653d3e71c13c219..b24255b2688e80e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNameTag.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNameTag.mdx @@ -5,45 +5,45 @@ description: API reference for RtkNameTag component (React Library) products: - realtime --- + A component which shows a participant's name. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | +| Property | Type | Required | Default | Description | +| --------------- | ------------------- | -------- | ----------------- | ----------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Whether it is used in a screen share view | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `RtkNameTagVariant` | ✅ | - | Name tag variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkNameTag } from '@cloudflare/realtimekit-react-ui'; +import { RtkNameTag } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkNameTag } from '@cloudflare/realtimekit-react-ui'; +import { RtkNameTag } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNetworkIndicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNetworkIndicator.mdx index cdc9b9d26f6014c..badca357da7d298 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNetworkIndicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNetworkIndicator.mdx @@ -5,41 +5,41 @@ description: API reference for RtkNetworkIndicator component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `participant` | `Peer` | ✅ | - | Participant or Self | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------------- | ----------- | -------- | ----------------- | ------------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `isScreenShare` | `boolean` | ✅ | - | Is for screenshare | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `participant` | `Peer` | ✅ | - | Participant or Self | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkNetworkIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkNetworkIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkNetworkIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkNetworkIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotification.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotification.mdx index 011b505c0f96d15..5aecde35407d99b 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotification.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotification.mdx @@ -5,45 +5,41 @@ description: API reference for RtkNotification component (React Library) products: - realtime --- + A component which shows a notification. - You need to remove the element after you receive the - `rtkNotificationDismiss` event. +You need to remove the element after you receive the +`rtkNotificationDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `notification` | `Notification` | ✅ | - | Message | -| `paused` | `boolean` | ✅ | - | Stops timeout when true | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | -------------- | -------- | ----------------- | ----------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `notification` | `Notification` | ✅ | - | Message | +| `paused` | `boolean` | ✅ | - | Stops timeout when true | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkNotification } from '@cloudflare/realtimekit-react-ui'; +import { RtkNotification } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkNotification } from '@cloudflare/realtimekit-react-ui'; +import { RtkNotification } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotifications.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotifications.mdx index a6479a63c2b3dc3..b4cf3563bdaf55e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotifications.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkNotifications.mdx @@ -5,45 +5,40 @@ description: API reference for RtkNotifications component (React Library) products: - realtime --- + A component which handles notifications. - You can configure which notifications you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which notifications you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkNotifications } from '@cloudflare/realtimekit-react-ui'; +import { RtkNotifications } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkNotifications } from '@cloudflare/realtimekit-react-ui'; +import { RtkNotifications } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkOverlayModal.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkOverlayModal.mdx index 075d2ad41e4e7f1..f4a1c236a9e1ff3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkOverlayModal.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkOverlayModal.mdx @@ -5,40 +5,36 @@ description: API reference for RtkOverlayModal component (React Library) products: - realtime --- + A confirmation modal. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkOverlayModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkOverlayModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkOverlayModal } from '@cloudflare/realtimekit-react-ui'; +import { RtkOverlayModal } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPaginatedList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPaginatedList.mdx index 9c2aa7dd5fa68fa..4efdfe198d33ae2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPaginatedList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPaginatedList.mdx @@ -5,46 +5,46 @@ description: API reference for RtkPaginatedList component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | -| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | -| `emptyListLabel` | `string` | ✅ | - | label to show when empty | -| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `pageSize` | `number` | ✅ | - | Page Size | -| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | -| `rerenderList` | `()` | ✅ | - | Rerender paginated list | -| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------------- | ------------------------------------------------------ | -------- | ----------------- | ---------------------------------------------- | +| `autoScroll` | `boolean` | ✅ | - | auto scroll list to bottom | +| `createNodes` | `(data: unknown[])` | ✅ | - | Create nodes | +| `emptyListLabel` | `string` | ✅ | - | label to show when empty | +| `fetchData` | `(timestamp: number, size: number, reversed: boolean)` | ✅ | - | Fetch the data | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `pageSize` | `number` | ✅ | - | Page Size | +| `pagesAllowed` | `number` | ✅ | - | Number of pages allowed to be shown | +| `rerenderList` | `()` | ✅ | - | Rerender paginated list | +| `reset` | `(timestamp?: number)` | ❌ | - | Resets the paginated list to a given timestamp | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPaginatedList } from '@cloudflare/realtimekit-react-ui'; +import { RtkPaginatedList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPaginatedList } from '@cloudflare/realtimekit-react-ui'; +import { RtkPaginatedList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipant.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipant.mdx index ccc8cb4e191bc51..516579dd9a334b1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipant.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipant.mdx @@ -5,47 +5,47 @@ description: API reference for RtkParticipant component (React Library) products: - realtime --- + A participant entry component used inside `rtk-participants` which shows data like: - name, picture and media device status. - You can perform privileged actions on the participant too. +name, picture and media device status. +You can perform privileged actions on the participant too. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participant` | `Peer` | ✅ | - | Participant object | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | +| Property | Type | Required | Default | Description | +| ------------- | --------------------- | -------- | ----------------------- | ------------------------ | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participant` | `Peer` | ✅ | - | Participant object | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantViewMode` | ✅ | - | Show participant summary | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipant } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipant } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipant } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipant } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantCount.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantCount.mdx index e8cd175555dcd38..328f0c14986aba0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantCount.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantCount.mdx @@ -5,41 +5,36 @@ description: API reference for RtkParticipantCount component (React Library) products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantCount } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantCount } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantCount } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantCount } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipants.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipants.mdx index 7606fca272f529b..91ef45fb563d602 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipants.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipants.mdx @@ -5,46 +5,46 @@ description: API reference for RtkParticipants component (React Library) products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------------- | ------------------- | -------- | ----------------------- | --------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultParticipantsTabId` | `ParticipantsTabId` | ✅ | - | Default section | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipants } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipants } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipants } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipants } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsAudio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsAudio.mdx index 8ef488005d52a27..b758d16591fc32d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsAudio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsAudio.mdx @@ -5,41 +5,41 @@ description: API reference for RtkParticipantsAudio component (React Library) products: - realtime --- + A component which plays all the audio from participants and screenshares. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------ | -------- | ----------------- | --------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `preloadedAudioElem` | `HTMLAudioElement` | ✅ | - | Pass existing audio element | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageList.mdx index b00d785b2acf701..135d60ff19db841 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageList.mdx @@ -5,48 +5,48 @@ description: API reference for RtkParticipantsStageList component (React Library products: - realtime --- + A component which lists all participants, with ability to - run privileged actions on each participant according to your permissions. +run privileged actions on each participant according to your permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------------ | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Stage Participants Count Header | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsStageList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsStageList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsStageList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsStageList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageQueue.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageQueue.mdx index 4e41381ce80f30a..8528f80bb052dd6 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageQueue.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsStageQueue.mdx @@ -5,42 +5,42 @@ description: API reference for RtkParticipantsStageQueue component (React Librar products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsStageQueue } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsStageQueue } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsStageQueue } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsStageQueue } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsToggle.mdx index 9c8fdaf5ece9fe4..0301d934942ee7a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsToggle.mdx @@ -5,48 +5,46 @@ description: API reference for RtkParticipantsToggle component (React Library) products: - realtime --- + A button which toggles visibility of participants. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'participants' } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "participants"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsViewerList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsViewerList.mdx index 2122d23e95a3666..a8153f7ffc87a99 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsViewerList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsViewerList.mdx @@ -5,44 +5,44 @@ description: API reference for RtkParticipantsViewerList component (React Librar products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `search` | `string` | ✅ | - | Search | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ------------ | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `hideHeader` | `boolean` | ✅ | - | Hide Viewer Count Header | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `search` | `string` | ✅ | - | Search | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsViewerList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsViewerList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsViewerList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsViewerList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsWaitingList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsWaitingList.mdx index 3a889887010026a..4649b0bfc0e82fd 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsWaitingList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkParticipantsWaitingList.mdx @@ -5,42 +5,42 @@ description: API reference for RtkParticipantsWaitingList component (React Libra products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | +| Property | Type | Required | Default | Description | +| ---------- | ---------------------- | -------- | ----------------------- | ------------------------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `view` | `ParticipantsViewMode` | ✅ | - | View mode for participants list | ## Usage Examples ### Basic Usage ```tsx -import { RtkParticipantsWaitingList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsWaitingList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkParticipantsWaitingList } from '@cloudflare/realtimekit-react-ui'; +import { RtkParticipantsWaitingList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPermissionsMessage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPermissionsMessage.mdx index 3772370f932a5c4..d775d0fe83a22f1 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPermissionsMessage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPermissionsMessage.mdx @@ -5,41 +5,37 @@ description: API reference for RtkPermissionsMessage component (React Library) products: - realtime --- + A component which shows permission related troubleshooting - information. +information. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPermissionsMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkPermissionsMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPermissionsMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkPermissionsMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPinnedMessageSelector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPinnedMessageSelector.mdx index 6ec7ca9cc8718b2..3204dca64827f0c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPinnedMessageSelector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPinnedMessageSelector.mdx @@ -5,37 +5,33 @@ description: API reference for RtkPinnedMessageSelector component (React Library products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPinnedMessageSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkPinnedMessageSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPinnedMessageSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkPinnedMessageSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPipToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPipToggle.mdx index 2c97be980f7bfe7..7fa13266f256c40 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPipToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPipToggle.mdx @@ -5,43 +5,37 @@ description: API reference for RtkPipToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig1` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkPipToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPipToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPipToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPipToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginMain.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginMain.mdx index 558894132225b7a..c3e69d48c2363ad 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginMain.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginMain.mdx @@ -5,41 +5,36 @@ description: API reference for RtkPluginMain component (React Library) products: - realtime --- + A component which loads a plugin. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting | -| `plugin` | `RTKPlugin` | ✅ | - | Plugin | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ----------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting | +| `plugin` | `RTKPlugin` | ✅ | - | Plugin | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPluginMain } from '@cloudflare/realtimekit-react-ui'; +import { RtkPluginMain } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPluginMain } from '@cloudflare/realtimekit-react-ui'; +import { RtkPluginMain } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPlugins.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPlugins.mdx index 6deb86e4607c003..d965a8cd11d84f3 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPlugins.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPlugins.mdx @@ -5,43 +5,38 @@ description: API reference for RtkPlugins component (React Library) products: - realtime --- + A component which lists all available plugins from their preset, - and ability to enable or disable plugins. +and ability to enable or disable plugins. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPlugins } from '@cloudflare/realtimekit-react-ui'; +import { RtkPlugins } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPlugins } from '@cloudflare/realtimekit-react-ui'; +import { RtkPlugins } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginsToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginsToggle.mdx index 68b70c406caf1cc..ea36e607b88f055 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginsToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPluginsToggle.mdx @@ -5,48 +5,46 @@ description: API reference for RtkPluginsToggle component (React Library) products: - realtime --- + A button which toggles visibility of plugins. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'plugins' } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "plugins"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkPluginsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPluginsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPluginsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPluginsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPoll.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPoll.mdx index aa4fe6fd115a016..3005624ec80b0f9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPoll.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPoll.mdx @@ -5,44 +5,40 @@ description: API reference for RtkPoll component (React Library) products: - realtime --- + A poll component. - Shows a poll where a user can vote. +Shows a poll where a user can vote. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | -| `poll` | `Poll` | ✅ | - | Poll | -| `self` | `string` | ✅ | - | Self ID | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ---------------------- | -------- | ----------------- | ------------------ | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `permissions` | `RTKPermissionsPreset` | ✅ | - | Permissions Object | +| `poll` | `Poll` | ✅ | - | Poll | +| `self` | `string` | ✅ | - | Self ID | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPoll } from '@cloudflare/realtimekit-react-ui'; +import { RtkPoll } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPoll } from '@cloudflare/realtimekit-react-ui'; +import { RtkPoll } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollForm.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollForm.mdx index 83cc1ae5190f3c2..e875461eed40218 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollForm.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollForm.mdx @@ -5,39 +5,34 @@ description: API reference for RtkPollForm component (React Library) products: - realtime --- + A component that lets you create a poll. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPollForm } from '@cloudflare/realtimekit-react-ui'; +import { RtkPollForm } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPollForm } from '@cloudflare/realtimekit-react-ui'; +import { RtkPollForm } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPolls.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPolls.mdx index 4277a2b47bfdace..d6c56afb6b26cca 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPolls.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPolls.mdx @@ -5,43 +5,38 @@ description: API reference for RtkPolls component (React Library) products: - realtime --- + A component which lists all available plugins a user can access with - the ability to enable or disable them as per their permissions. +the ability to enable or disable them as per their permissions. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkPolls } from '@cloudflare/realtimekit-react-ui'; +import { RtkPolls } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPolls } from '@cloudflare/realtimekit-react-ui'; +import { RtkPolls } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollsToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollsToggle.mdx index f50a1cdaceb586b..ce797b91301661d 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollsToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkPollsToggle.mdx @@ -5,49 +5,47 @@ description: API reference for RtkPollsToggle component (React Library) products: - realtime --- + A button which toggles visibility of polls. - You need to pass the `meeting` object to it to see the unread polls count badge. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSidebar: boolean; sidebar: 'polls' } - ``` +You need to pass the `meeting` object to it to see the unread polls count badge. +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSidebar: boolean; + sidebar: "polls"; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkPollsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPollsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkPollsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkPollsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingIndicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingIndicator.mdx index 5c2762db23494d2..80fd74b508c85d2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingIndicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingIndicator.mdx @@ -5,42 +5,37 @@ description: API reference for RtkRecordingIndicator component (React Library) products: - realtime --- + A component which indicates the recording status of a meeting. - It will not render anything if no recording is taking place. +It will not render anything if no recording is taking place. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkRecordingIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkRecordingIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkRecordingIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkRecordingIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingToggle.mdx index 0f80e38da1040bc..37ff40da4c4e3e2 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkRecordingToggle.mdx @@ -5,47 +5,41 @@ description: API reference for RtkRecordingToggle component (React Library) products: - realtime --- + A button which toggles recording state of a meeting. - Only a privileged user can perform this action, - thus the button will not be visible for participants - who don't have the permission to record a meeting. +Only a privileged user can perform this action, +thus the button will not be visible for participants +who don't have the permission to record a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `disabled` | `boolean` | ✅ | - | Disable the button | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ------------------ | +| `disabled` | `boolean` | ✅ | - | Disable the button | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkRecordingToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkRecordingToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkRecordingToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkRecordingToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkScreenShareToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkScreenShareToggle.mdx index 52908befd7de5b5..f2af8f3196dc19e 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkScreenShareToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkScreenShareToggle.mdx @@ -5,44 +5,38 @@ description: API reference for RtkScreenShareToggle component (React Library) products: - realtime --- + A button which toggles your screenshare. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkScreenShareToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkScreenShareToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkScreenShareToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkScreenShareToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettings.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettings.mdx index 2b52d0ae178ce6d..71105173b22229f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettings.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettings.mdx @@ -5,43 +5,38 @@ description: API reference for RtkSettings component (React Library) products: - realtime --- + A settings component to see and change your audio/video devices - as well as see your connection quality. +as well as see your connection quality. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSettings } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettings } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSettings } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettings } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsAudio.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsAudio.mdx index 81dfd8b2b09dd43..3519e84e54fc498 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsAudio.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsAudio.mdx @@ -5,50 +5,46 @@ description: API reference for RtkSettingsAudio component (React Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSettingsAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSettingsAudio } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsAudio } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsToggle.mdx index be09e3aaa6d7c96..d3a027941137787 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsToggle.mdx @@ -5,46 +5,44 @@ description: API reference for RtkSettingsToggle component (React Library) products: - realtime --- + A button which toggles visibility of settings module. - When clicked it emits a `rtkStateUpdate` event with the data: - ```ts - { activeSettings: boolean; } - ``` +When clicked it emits a `rtkStateUpdate` event with the data: + +```ts +{ + activeSettings: boolean; +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | ------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkSettingsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSettingsToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsVideo.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsVideo.mdx index e8ecedcb858f5f0..004752677fc71bb 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsVideo.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSettingsVideo.mdx @@ -5,50 +5,46 @@ description: API reference for RtkSettingsVideo component (React Library) products: - realtime --- + A component which lets to manage your camera devices and your video preferences. - Emits `rtkStateUpdate` event with data for toggling mirroring of self video: - ```ts - { - prefs: { - mirrorVideo: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for toggling mirroring of self video: + +```ts +{ + prefs: { + mirrorVideo: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSettingsVideo } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsVideo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSettingsVideo } from '@cloudflare/realtimekit-react-ui'; +import { RtkSettingsVideo } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSetupScreen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSetupScreen.mdx index b7d2b949edf7209..9425271184560e0 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSetupScreen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSetupScreen.mdx @@ -5,44 +5,39 @@ description: API reference for RtkSetupScreen component (React Library) products: - realtime --- + A screen shown before joining the meeting, where you can edit your display name, - and media settings. +and media settings. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSetupScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkSetupScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSetupScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkSetupScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebar.mdx index 1304726dd69f9a7..a911ce5c3815222 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebar.mdx @@ -5,48 +5,48 @@ description: API reference for RtkSidebar component (React Library) products: - realtime --- + A component which handles the sidebar and - you can customize which sections you want, and which section you want as the default. +you can customize which sections you want, and which section you want as the default. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | -| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `view` | `RtkSidebarView` | ✅ | - | View type | +| Property | Type | Required | Default | Description | +| ----------------- | ------------------- | -------- | ----------------------- | --------------------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `defaultSection` | `RtkSidebarSection` | ✅ | - | Default section | +| `enabledSections` | `RtkSidebarTab[]` | ✅ | - | Enabled sections in sidebar | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `view` | `RtkSidebarView` | ✅ | - | View type | ## Usage Examples ### Basic Usage ```tsx -import { RtkSidebar } from '@cloudflare/realtimekit-react-ui'; +import { RtkSidebar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSidebar } from '@cloudflare/realtimekit-react-ui'; +import { RtkSidebar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebarUi.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebarUi.mdx index 01b17c6dd9ffc5a..476c5b291b984ca 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebarUi.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSidebarUi.mdx @@ -5,44 +5,44 @@ description: API reference for RtkSidebarUi component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `currentTab` | `string` | ✅ | - | Default tab to open | -| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | -| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | -| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | -| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | -| `view` | `RtkSidebarView1` | ✅ | - | View | +| Property | Type | Required | Default | Description | +| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------- | --------------- | ---------------------------------------- | +| `currentTab` | `string` | ✅ | - | Default tab to open | +| `focusCloseButton` | `boolean` | ✅ | - | Option to focus close button when opened | +| `hideCloseAction` | `boolean` | ✅ | - | Hide Close Action | +| `hideHeader` | `boolean` | ✅ | - | Hide Main Header | +| `iconPack` | `{ people: string; people_checked: string; chat: string; poll: string; participants: string; rocket: string; call_end: string; share: string; mic_on: string; mic_off: string; video_on: string; video_off: string; share_screen_start: string; share_screen_stop: string; share_screen_person: string; clock: string; dismiss: string; send: string; search: string; more_vertical: string; chevron_down: string; chevron_up: string; chevron_left: string; chevron_right: string; settings: string; wifi: string; speaker: string; speaker_off: string; download: string; full_screen_maximize: string; full_screen_minimize: string; copy: string; attach: string; image: string; emoji_multiple: string; image_off: string; disconnected: string; wand: string; recording: string; subtract: string; stop_recording: string; warning: string; pin: string; pin_off: string; spinner: string; breakout_rooms: string; add: string; shuffle: string; edit: string; delete: string; back: string; save: string; web: string; checkmark: string; spotlight: string; join_stage: string; leave_stage: string; pip_off: string; pip_on: string; signal_1: string; signal_2: string; signal_3: string; signal_4: string; signal_5: string; start_livestream: string; stop_livestream: string; viewers: string; debug: string; info: string; devices: string; horizontal_dots: string; ai_sparkle: string; meeting_ai: string; captionsOn: string; captionsOff: string; play: string; pause: string; fastForward: string; minimize: string; maximize: string; }` | ✅ | - | Icon Pack | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `tabs` | `RtkSidebarTab1[]` | ✅ | - | Tabs | +| `view` | `RtkSidebarView1` | ✅ | - | View | ## Usage Examples ### Basic Usage ```tsx -import { RtkSidebarUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkSidebarUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSidebarUi } from '@cloudflare/realtimekit-react-ui'; +import { RtkSidebarUi } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSimpleGrid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSimpleGrid.mdx index 1a39406c2ae6fc3..000057d63bf902c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSimpleGrid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSimpleGrid.mdx @@ -5,47 +5,41 @@ description: API reference for RtkSimpleGrid component (React Library) products: - realtime --- + A grid component which renders only the participants in a simple grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------- | ---------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSimpleGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkSimpleGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSimpleGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkSimpleGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpeakerSelector.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpeakerSelector.mdx index ef6967aefdd7575..04e2e6cc9985238 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpeakerSelector.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpeakerSelector.mdx @@ -5,52 +5,53 @@ description: API reference for RtkSpeakerSelector component (React Library) products: - realtime --- + A component which lets to manage your audio devices and audio preferences. - Emits `rtkStateUpdate` event with data for muting notification sounds: - ```ts - { - prefs: { - muteNotificationSounds: boolean - } - } - ``` +Emits `rtkStateUpdate` event with data for muting notification sounds: + +```ts +{ + prefs: { + muteNotificationSounds: boolean; + } +} +``` ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `'full' \| 'inline'` | ✅ | - | variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `'full' \| 'inline'` | ✅ | - | variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkSpeakerSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpeakerSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSpeakerSelector } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpeakerSelector } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpinner.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpinner.mdx index f465d60658ede2a..28454314a99f114 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpinner.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpinner.mdx @@ -5,38 +5,34 @@ description: API reference for RtkSpinner component (React Library) products: - realtime --- + A component which shows an animating spinner. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `size` | `Size1` | ✅ | - | Size | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `size` | `Size1` | ✅ | - | Size | ## Usage Examples ### Basic Usage ```tsx -import { RtkSpinner } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpinner } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSpinner } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpinner } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightGrid.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightGrid.mdx index 0bf9ca54bc892c6..78418e203326306 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightGrid.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightGrid.mdx @@ -5,53 +5,48 @@ description: API reference for RtkSpotlightGrid component (React Library) products: - realtime --- + A grid component that renders two lists of participants: `pinnedParticipants` and `participants`. - You can customize the layout to a `column` view, by default is is `row`. - - Participants from `pinnedParticipants[]` are rendered inside a larger grid. - - Participants from `participants[]` array are rendered in a smaller grid. +You can customize the layout to a `column` view, by default is is `row`. + +- Participants from `pinnedParticipants[]` are rendered inside a larger grid. +- Participants from `participants[]` array are rendered in a smaller grid. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `gap` | `number` | ✅ | - | Gap between participant tiles | -| `gridSize` | `GridSize1` | ✅ | - | Grid size | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `participants` | `Peer[]` | ✅ | - | Participants | -| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| -------------------- | ------------- | -------- | ----------------------- | ------------------------------------------------------- | +| `aspectRatio` | `string` | ✅ | - | Aspect Ratio of participant tile Format: `width:height` | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `gap` | `number` | ✅ | - | Gap between participant tiles | +| `gridSize` | `GridSize1` | ✅ | - | Grid size | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `participants` | `Peer[]` | ✅ | - | Participants | +| `pinnedParticipants` | `Peer[]` | ✅ | - | Pinned Participants | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSpotlightGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpotlightGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSpotlightGrid } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpotlightGrid } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightIndicator.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightIndicator.mdx index 6b3cf9e708c5b27..4777d387761bd9c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightIndicator.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSpotlightIndicator.mdx @@ -5,39 +5,34 @@ description: API reference for RtkSpotlightIndicator component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSpotlightIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpotlightIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSpotlightIndicator } from '@cloudflare/realtimekit-react-ui'; +import { RtkSpotlightIndicator } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStage.mdx index 2d45d987a733a92..317f51dde0bca13 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStage.mdx @@ -5,40 +5,35 @@ description: API reference for RtkStage component (React Library) products: - realtime --- + A component used as a stage that commonly houses - the `grid` and `sidebar` components. +the `grid` and `sidebar` components. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ----------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkStage } from '@cloudflare/realtimekit-react-ui'; +import { RtkStage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkStage } from '@cloudflare/realtimekit-react-ui'; +import { RtkStage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStageToggle.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStageToggle.mdx index cb4ca66a237f1fe..348c55faae4ad7a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStageToggle.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkStageToggle.mdx @@ -5,42 +5,36 @@ description: API reference for RtkStageToggle component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size1` | ✅ | - | Size | -| `states` | `States1` | ✅ | - | States | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | -| `variant` | `ControlBarVariant` | ✅ | - | Variant | +| Property | Type | Required | Default | Description | +| ---------- | ------------------- | -------- | ----------------- | -------------- | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size1` | ✅ | - | Size | +| `states` | `States1` | ✅ | - | States | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language | +| `variant` | `ControlBarVariant` | ✅ | - | Variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkStageToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkStageToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkStageToggle } from '@cloudflare/realtimekit-react-ui'; +import { RtkStageToggle } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSwitch.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSwitch.mdx index 45b7bebc4f42df5..d70d8ba438e9132 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSwitch.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkSwitch.mdx @@ -5,43 +5,37 @@ description: API reference for RtkSwitch component (React Library) products: - realtime --- + A switch component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | -| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------- | ------------------------------------- | +| `checked` | `boolean` | ✅ | - | Whether the switch is enabled/checked | +| `disabled` | `boolean` | ✅ | - | Whether switch is readonly | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `readonly` | `boolean` | ✅ | - | Whether switch is readonly | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkSwitch } from '@cloudflare/realtimekit-react-ui'; +import { RtkSwitch } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkSwitch } from '@cloudflare/realtimekit-react-ui'; +import { RtkSwitch } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTabBar.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTabBar.mdx index 4b92e54781696ee..d425e9836824989 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTabBar.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTabBar.mdx @@ -5,45 +5,39 @@ description: API reference for RtkTabBar component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `activeTab` | `Tab` | ✅ | - | Active tab | -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | -| `layout` | `GridLayout1` | ✅ | - | Grid Layout | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `size` | `Size` | ✅ | - | Size | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `tabs` | `Tab[]` | ✅ | - | Tabs | +| Property | Type | Required | Default | Description | +| ----------- | ------------- | -------- | ----------------------- | -------------- | +| `activeTab` | `Tab` | ✅ | - | Active tab | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | UI Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon Pack | +| `layout` | `GridLayout1` | ✅ | - | Grid Layout | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `size` | `Size` | ✅ | - | Size | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `tabs` | `Tab[]` | ✅ | - | Tabs | ## Usage Examples ### Basic Usage ```tsx -import { RtkTabBar } from '@cloudflare/realtimekit-react-ui'; +import { RtkTabBar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTabBar } from '@cloudflare/realtimekit-react-ui'; +import { RtkTabBar } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessage.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessage.mdx index b13d5561c20349b..275064c3a0e30cf 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessage.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessage.mdx @@ -5,45 +5,39 @@ description: API reference for RtkTextMessage component (React Library) products: - realtime --- + @deprecated `rtk-text-message` is deprecated and will be removed soon. Use `rtk-text-message-view` instead. - A component which renders a text message from chat. +A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | -| `message` | `TextMessage` | ✅ | - | Text message object | -| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | -| `showBubble` | `boolean` | ✅ | - | show message in bubble | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ------------- | ------------- | -------- | ----------------- | ------------------------------------------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `isContinued` | `boolean` | ✅ | - | Whether the message is continued by same user | +| `message` | `TextMessage` | ✅ | - | Text message object | +| `now` | `Date` | ✅ | - | Date object of now, to calculate distance between dates | +| `showBubble` | `boolean` | ✅ | - | show message in bubble | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkTextMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkTextMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTextMessage } from '@cloudflare/realtimekit-react-ui'; +import { RtkTextMessage } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessageView.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessageView.mdx index 181ebc339cd53d8..05911d805ffcb0f 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessageView.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTextMessageView.mdx @@ -5,39 +5,34 @@ description: API reference for RtkTextMessageView component (React Library) products: - realtime --- + A component which renders a text message from chat. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | -| `text` | `string` | ✅ | - | Text message | +| Property | Type | Required | Default | Description | +| ------------ | --------- | -------- | ------- | ----------------------------------------- | +| `isMarkdown` | `boolean` | ✅ | - | Renders text as markdown (default = true) | +| `text` | `string` | ✅ | - | Text message | ## Usage Examples ### Basic Usage ```tsx -import { RtkTextMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkTextMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTextMessageView } from '@cloudflare/realtimekit-react-ui'; +import { RtkTextMessageView } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTooltip.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTooltip.mdx index d2bfb5b64eb3958..c1621ec9cec5946 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTooltip.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTooltip.mdx @@ -5,46 +5,40 @@ description: API reference for RtkTooltip component (React Library) products: - realtime --- + Tooltip component which follows RTK Design System. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `delay` | `number` | ✅ | - | Delay before showing the tooltip | -| `disabled` | `boolean` | ✅ | - | Disabled | -| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | -| `label` | `string` | ✅ | - | Tooltip label | -| `open` | `boolean` | ✅ | - | Open | -| `placement` | `Placement` | ✅ | - | Placement of menu | -| `size` | `Size` | ✅ | - | Size | -| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | +| Property | Type | Required | Default | Description | +| ----------- | ---------------- | -------- | ------- | -------------------------------- | +| `delay` | `number` | ✅ | - | Delay before showing the tooltip | +| `disabled` | `boolean` | ✅ | - | Disabled | +| `kind` | `TooltipKind` | ✅ | - | Tooltip kind | +| `label` | `string` | ✅ | - | Tooltip label | +| `open` | `boolean` | ✅ | - | Open | +| `placement` | `Placement` | ✅ | - | Placement of menu | +| `size` | `Size` | ✅ | - | Size | +| `variant` | `TooltipVariant` | ✅ | - | Tooltip variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkTooltip } from '@cloudflare/realtimekit-react-ui'; +import { RtkTooltip } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTooltip } from '@cloudflare/realtimekit-react-ui'; +import { RtkTooltip } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscript.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscript.mdx index de37a7083168217..bbcf034ad560898 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscript.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscript.mdx @@ -5,41 +5,36 @@ description: API reference for RtkTranscript component (React Library) products: - realtime --- + A component which shows a transcript. - You need to remove the element after you receive the - `rtkTranscriptDismiss` event. +You need to remove the element after you receive the +`rtkTranscriptDismiss` event. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | +| Property | Type | Required | Default | Description | +| ------------ | -------------------------------------- | -------- | --------------- | ----------- | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `transcript` | `Transcript & { renderedId?: string }` | ❌ | - | Message | ## Usage Examples ### Basic Usage ```tsx -import { RtkTranscript } from '@cloudflare/realtimekit-react-ui'; +import { RtkTranscript } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTranscript } from '@cloudflare/realtimekit-react-ui'; +import { RtkTranscript } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscripts.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscripts.mdx index f0c0d8559cc445a..42bf35aa1892a1c 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscripts.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkTranscripts.mdx @@ -5,42 +5,38 @@ description: API reference for RtkTranscripts component (React Library) products: - realtime --- + A component which handles transcripts. - You can configure which transcripts you want to see and which ones you want to hear. - There are also certain limits which you can set as well. +You can configure which transcripts you want to see and which ones you want to hear. +There are also certain limits which you can set as well. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `states` | `States` | ✅ | - | States object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| --------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config object | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `states` | `States` | ✅ | - | States object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkTranscripts } from '@cloudflare/realtimekit-react-ui'; +import { RtkTranscripts } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkTranscripts } from '@cloudflare/realtimekit-react-ui'; +import { RtkTranscripts } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkUiProvider.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkUiProvider.mdx index ae022070d0bc868..539123ffabfd8ae 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkUiProvider.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkUiProvider.mdx @@ -5,43 +5,43 @@ description: API reference for RtkUiProvider component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig1` | ✅ | - | Config | -| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | -| `mode` | `MeetingMode1` | ✅ | - | Fill type | -| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | -| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | -| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | +| Property | Type | Required | Default | Description | +| ----------------- | ----------------- | -------- | ------------------ | ----------------------------------- | +| `config` | `UIConfig1` | ✅ | - | Config | +| `iconPack` | `IconPack1` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting \| null` | ❌ | `null` | Meeting | +| `mode` | `MeetingMode1` | ✅ | - | Fill type | +| `overrides` | `Overrides1` | ❌ | `defaultOverrides` | UI Kit Overrides | +| `showSetupScreen` | `boolean` | ✅ | - | Whether to show setup screen or not | +| `t` | `RtkI18n1` | ❌ | `useLanguage()` | Language utility | ## Usage Examples ### Basic Usage ```tsx -import { RtkUiProvider } from '@cloudflare/realtimekit-react-ui'; +import { RtkUiProvider } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkUiProvider } from '@cloudflare/realtimekit-react-ui'; +import { RtkUiProvider } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkViewerCount.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkViewerCount.mdx index 6cd926ddcacf256..1ba972a480e5bf9 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkViewerCount.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkViewerCount.mdx @@ -5,41 +5,36 @@ description: API reference for RtkViewerCount component (React Library) products: - realtime --- + A component which shows count of total joined participants in a meeting. ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | -| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | +| Property | Type | Required | Default | Description | +| ---------- | -------------------- | -------- | ----------------- | -------------------- | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| `variant` | `ViewerCountVariant` | ✅ | - | Viewer count variant | ## Usage Examples ### Basic Usage ```tsx -import { RtkViewerCount } from '@cloudflare/realtimekit-react-ui'; +import { RtkViewerCount } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkViewerCount } from '@cloudflare/realtimekit-react-ui'; +import { RtkViewerCount } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkVirtualizedParticipantList.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkVirtualizedParticipantList.mdx index 5357ad00b4bb2f2..a0e877a59bc623a 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkVirtualizedParticipantList.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkVirtualizedParticipantList.mdx @@ -5,41 +5,41 @@ description: API reference for RtkVirtualizedParticipantList component (React Li products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | -| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | -| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | -| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | -| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | +| Property | Type | Required | Default | Description | +| -------------------- | ------------------------------ | -------- | ------- | -------------------------------------------------------- | +| `bufferedItemsCount` | `number` | ✅ | - | Buffer items to render before and after the visible area | +| `emptyListElement` | `HTMLElement` | ✅ | - | Element to render if list is empty | +| `itemHeight` | `number` | ✅ | - | Height of each item in pixels (assumed fixed) | +| `items` | `Peer1[]` | ✅ | - | Items to be virtualized | +| `renderItem` | `(item: Peer1, index: number)` | ✅ | - | Function to render each item | ## Usage Examples ### Basic Usage ```tsx -import { RtkVirtualizedParticipantList } from '@cloudflare/realtimekit-react-ui'; +import { RtkVirtualizedParticipantList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkVirtualizedParticipantList } from '@cloudflare/realtimekit-react-ui'; +import { RtkVirtualizedParticipantList } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ( + + ); } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkWaitingScreen.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkWaitingScreen.mdx index 7a88d11a1ddcc8e..80ab41447906b03 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkWaitingScreen.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/RtkWaitingScreen.mdx @@ -5,38 +5,34 @@ description: API reference for RtkWaitingScreen component (React Library) products: - realtime --- + ## Properties -| Property | Type | Required | Default | Description | -|----------|------|----------|---------|-------------| -| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | -| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | -| `meeting` | `Meeting` | ✅ | - | Meeting object | -| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | +| Property | Type | Required | Default | Description | +| ---------- | ---------- | -------- | ----------------------- | -------------- | +| `config` | `UIConfig` | ❌ | `createDefaultConfig()` | Config | +| `iconPack` | `IconPack` | ❌ | `defaultIconPack` | Icon pack | +| `meeting` | `Meeting` | ✅ | - | Meeting object | +| `t` | `RtkI18n` | ❌ | `useLanguage()` | Language | ## Usage Examples ### Basic Usage ```tsx -import { RtkWaitingScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkWaitingScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ; + return ; } ``` ### With Properties ```tsx -import { RtkWaitingScreen } from '@cloudflare/realtimekit-react-ui'; +import { RtkWaitingScreen } from "@cloudflare/realtimekit-react-ui"; function MyComponent() { - return ( - - ); + return ; } ``` - diff --git a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/index.mdx b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/index.mdx index e278b3204222b09..484d77e089e0389 100644 --- a/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/index.mdx +++ b/src/content/docs/realtime/realtimekit/ui-kit/api-reference/react/index.mdx @@ -7,4 +7,4 @@ sidebar: hideIndex: true products: - realtime ---- \ No newline at end of file +--- diff --git a/src/content/docs/realtime/sfu/calls-vs-sfus.mdx b/src/content/docs/realtime/sfu/calls-vs-sfus.mdx index 167875d1b34c213..97583e8bcbbb2dc 100644 --- a/src/content/docs/realtime/sfu/calls-vs-sfus.mdx +++ b/src/content/docs/realtime/sfu/calls-vs-sfus.mdx @@ -8,7 +8,7 @@ products: - realtime --- -import { Aside } from "~/components" +import { Aside } from "~/components"; ## Cloudflare Realtime vs. Traditional SFUs @@ -31,7 +31,10 @@ Cloudflare Realtime addresses these limitations by leveraging Cloudflare's globa - **Decentralized Architecture:** There are no dedicated servers for Realtime. Every server within Cloudflare's network contributes to handling Realtime, ensuring scalability and reliability. This approach mirrors the distributed nature of Cloudflare's products such as 1.1.1.1 DNS or Cloudflare's CDN. ## How Cloudflare Realtime Works diff --git a/src/content/docs/realtime/sfu/changelog.mdx b/src/content/docs/realtime/sfu/changelog.mdx index e41f539ea385e1c..1c9d09e442ea9d3 100644 --- a/src/content/docs/realtime/sfu/changelog.mdx +++ b/src/content/docs/realtime/sfu/changelog.mdx @@ -12,4 +12,4 @@ import { ProductReleaseNotes } from "~/components"; {/* */} - \ No newline at end of file + diff --git a/src/content/docs/realtime/sfu/datachannels.mdx b/src/content/docs/realtime/sfu/datachannels.mdx index fb486465f76084c..f60c593ca262bb6 100644 --- a/src/content/docs/realtime/sfu/datachannels.mdx +++ b/src/content/docs/realtime/sfu/datachannels.mdx @@ -22,7 +22,7 @@ DataChannels on Cloudflare Realtime can scale up to many subscribers per publish ### How to use DataChannels -1. Create two Realtime sessions, one for the publisher and one for the subscribers. +1. Create two Realtime sessions, one for the publisher and one for the subscribers. 2. Create a DataChannel by calling /datachannels/new with the location set to "local" and the dataChannelName set to the name of the DataChannel. 3. Create a DataChannel by calling /datachannels/new with the location set to "remote" and the sessionId set to the sessionId of the publisher. 4. Use the DataChannel to send data from the publisher to the subscribers. diff --git a/src/content/docs/realtime/sfu/get-started.mdx b/src/content/docs/realtime/sfu/get-started.mdx index c629ade1a9f321c..43ee74f34fe8975 100644 --- a/src/content/docs/realtime/sfu/get-started.mdx +++ b/src/content/docs/realtime/sfu/get-started.mdx @@ -10,10 +10,8 @@ products: :::note[Before you get started:] - You must first [create a Cloudflare account](/fundamentals/account/create-account/). - ::: ## Create your first app @@ -21,7 +19,7 @@ You must first [create a Cloudflare account](/fundamentals/account/create-accoun Every Realtime App is a separate environment, so you can make one for development, staging and production versions for your product. Either using [Dashboard](https://dash.cloudflare.com/?to=/:account/realtime/sfu), or the [API](/api/resources/calls/subresources/sfu/methods/create/) create a Realtime App. When you create a Realtime App, you will get: -* App ID -* App Secret +- App ID +- App Secret These two combined will allow you to make API Realtime from your backend server to Realtime. diff --git a/src/content/docs/realtime/sfu/limits.mdx b/src/content/docs/realtime/sfu/limits.mdx index b68859142236802..df32c721be0f051 100644 --- a/src/content/docs/realtime/sfu/limits.mdx +++ b/src/content/docs/realtime/sfu/limits.mdx @@ -12,28 +12,28 @@ Understanding the limits and timeouts of Cloudflare Realtime is crucial for opti ## Free -* Each account gets 1,000GB/month of data transfer from Cloudflare to your client for free. -* Data transfer from your client to Cloudflare is always free of charge. +- Each account gets 1,000GB/month of data transfer from Cloudflare to your client for free. +- Data transfer from your client to Cloudflare is always free of charge. ## Limits -* **API Realtime per Session**: You can make up to 50 API calls per second for each session. There is no ratelimit on a App basis, just sessions. +- **API Realtime per Session**: You can make up to 50 API calls per second for each session. There is no ratelimit on a App basis, just sessions. -* **Tracks per API Call**: Up to 64 tracks can be added with a single API call. If you need to add more tracks to a session, you should distribute them across multiple API calls. +- **Tracks per API Call**: Up to 64 tracks can be added with a single API call. If you need to add more tracks to a session, you should distribute them across multiple API calls. -* **Tracks per Session**: There's no upper limit to the number of tracks a session can contain, the practical limit is governed by your connection's bandwidth to and from Cloudflare. +- **Tracks per Session**: There's no upper limit to the number of tracks a session can contain, the practical limit is governed by your connection's bandwidth to and from Cloudflare. ## Inactivity Timeout -* **Track Timeout**: Tracks will automatically timeout and be garbage collected after 30 seconds of inactivity, where inactivity is defined as no media packets being received by Cloudflare. This mechanism ensures efficient use of resources and session cleanliness across all Sessions that use a track. +- **Track Timeout**: Tracks will automatically timeout and be garbage collected after 30 seconds of inactivity, where inactivity is defined as no media packets being received by Cloudflare. This mechanism ensures efficient use of resources and session cleanliness across all Sessions that use a track. ## PeerConnection Requirements -* **Session State**: For any operation on a session (e.g., pulling or pushing tracks), the PeerConnection state must be `connected`. Operations will block for up to 5 seconds awaiting this state before timing out. This ensures that only active and viable sessions are engaged in media transmission. +- **Session State**: For any operation on a session (e.g., pulling or pushing tracks), the PeerConnection state must be `connected`. Operations will block for up to 5 seconds awaiting this state before timing out. This ensures that only active and viable sessions are engaged in media transmission. ## Handling Connectivity Issues -* **Internet Connectivity Considerations**: The potential for internet connectivity loss between the client and Cloudflare is an operational reality that must be addressed. Implementing a detection and reconnection strategy is recommended to maintain session continuity. This could involve periodic 'heartbeat' signals to your backend server to monitor connectivity status. Upon detecting connectivity issues, automatically attempting to reconnect and establish a new session is advised. Sessions and tracks will remain available for reuse for 30 seconds before timing out, providing a brief window for reconnection attempts. +- **Internet Connectivity Considerations**: The potential for internet connectivity loss between the client and Cloudflare is an operational reality that must be addressed. Implementing a detection and reconnection strategy is recommended to maintain session continuity. This could involve periodic 'heartbeat' signals to your backend server to monitor connectivity status. Upon detecting connectivity issues, automatically attempting to reconnect and establish a new session is advised. Sessions and tracks will remain available for reuse for 30 seconds before timing out, providing a brief window for reconnection attempts. Adhering to these limits and understanding the timeout behaviors will help ensure that your applications remain responsive and stable while providing a seamless user experience. @@ -43,19 +43,18 @@ Cloudflare Realtime supports the following codecs: ### Supported video codecs -* **H264** -* **H265** -* **VP8** -* **VP9** -* **AV1** +- **H264** +- **H265** +- **VP8** +- **VP9** +- **AV1** ### Supported audio codecs -* **Opus** -* **G.711 PCM (A-law)** -* **G.711 PCM (µ-law)** +- **Opus** +- **G.711 PCM (A-law)** +- **G.711 PCM (µ-law)** :::note For external 48kHz PCM support refer to the [WebSocket adapter](/realtime/sfu/media-transport-adapters/websocket-adapter/) ::: - diff --git a/src/content/docs/realtime/sfu/media-transport-adapters/index.mdx b/src/content/docs/realtime/sfu/media-transport-adapters/index.mdx index a9a0f3df0ddbf5b..2edd1740c70cb39 100644 --- a/src/content/docs/realtime/sfu/media-transport-adapters/index.mdx +++ b/src/content/docs/realtime/sfu/media-transport-adapters/index.mdx @@ -47,6 +47,7 @@ graph LR **Adapter instance**: Each connection creates a unique instance with an `adapterId` to manage its lifecycle. **Location types**: + - `local` (Ingest): Receives media from external endpoints to create new WebRTC tracks - `remote` (Stream): Sends media from existing WebRTC tracks to external endpoints diff --git a/src/content/docs/realtime/sfu/media-transport-adapters/websocket-adapter.mdx b/src/content/docs/realtime/sfu/media-transport-adapters/websocket-adapter.mdx index ea922e873043cc4..818a1d69f4a3779 100644 --- a/src/content/docs/realtime/sfu/media-transport-adapters/websocket-adapter.mdx +++ b/src/content/docs/realtime/sfu/media-transport-adapters/websocket-adapter.mdx @@ -206,11 +206,11 @@ POST /v1/apps/{appId}/adapters/websocket/close ```json { - "tracks": [ - { - "adapterId": "string" - } - ] + "tracks": [ + { + "adapterId": "string" + } + ] } ``` @@ -242,6 +242,7 @@ message Packet { **Ingest mode (buffer)**: Only the `payload` field is used, containing chunks of audio data. **Stream mode (egress)**: + - For audio frames: - `sequenceNumber`: Incremental packet counter - `timestamp`: Timestamp for synchronization @@ -267,12 +268,14 @@ Connects to your WebSocket endpoint: ### Message format #### Buffer mode (ingest) + - **Binary messages**: PCM audio data in chunks - **Maximum message size**: 32 KB per WebSocket message - **Important**: Account for serialization overhead when chunking audio buffers - Send audio in small, frequent chunks rather than large batches -#### Stream mode (egress) +#### Stream mode (egress) + - **Binary messages**: Individual frames with metadata (audio or video) - Audio frames include: - Timestamp information @@ -330,11 +333,11 @@ Usage counts towards your Cloudflare Realtime free tier of 1,000 GB. ## Error handling -| Error Code | Description | -|------------|-------------| -| `400` | Invalid request parameters | -| `404` | Session or track not found | -| `503` | Adapter not found (for close operations) | +| Error Code | Description | +| ---------- | ---------------------------------------- | +| `400` | Invalid request parameters | +| `404` | Session or track not found | +| `503` | Adapter not found (for close operations) | ## Reference implementations diff --git a/src/content/docs/realtime/sfu/sessions-tracks.mdx b/src/content/docs/realtime/sfu/sessions-tracks.mdx index 0acfcba0d460671..8f88a1a807fd435 100644 --- a/src/content/docs/realtime/sfu/sessions-tracks.mdx +++ b/src/content/docs/realtime/sfu/sessions-tracks.mdx @@ -8,7 +8,7 @@ products: - realtime --- -Cloudflare Realtime offers a simple yet powerful framework for building real-time experiences. At the core of this system are three key concepts: **Applications**, **Sessions** and **Tracks**. Familiarizing yourself with these concepts is crucial for using Realtime. +Cloudflare Realtime offers a simple yet powerful framework for building real-time experiences. At the core of this system are three key concepts: **Applications**, **Sessions** and **Tracks**. Familiarizing yourself with these concepts is crucial for using Realtime. ## Application @@ -18,17 +18,17 @@ A Realtime Application is an environment within different Sessions and Tracks ca A **Session** in Cloudflare Realtime correlates directly to a WebRTC PeerConnection. It represents the establishment of a communication channel between a client and the nearest Cloudflare data center, as determined by Cloudflare's anycast routing. Typically, a client will maintain a single Session, encompassing all communications between the client and Cloudflare. -* **One-to-One Mapping with PeerConnection**: Each Session is a direct representation of a WebRTC PeerConnection, facilitating real-time media data transfer. -* **Anycast Routing**: The client connects to the closest Cloudflare data center, optimizing latency and performance. -* **Unified Communication Channel**: A single Session can handle all types of communication between a client and Cloudflare, ensuring streamlined data flow. +- **One-to-One Mapping with PeerConnection**: Each Session is a direct representation of a WebRTC PeerConnection, facilitating real-time media data transfer. +- **Anycast Routing**: The client connects to the closest Cloudflare data center, optimizing latency and performance. +- **Unified Communication Channel**: A single Session can handle all types of communication between a client and Cloudflare, ensuring streamlined data flow. ## Tracks Within a Session, there can be one or more **Tracks**. -* **Tracks map to MediaStreamTrack**: Tracks align with the MediaStreamTrack concept, facilitating audio, video, or data transmission. -* **Globally Unique Ids**: When you push a track to Cloudflare, it is assigned a unique ID, which can then be used to pull the track into another session elsewhere. -* **Available globally**: The ability to push and pull tracks is central to what makes Realtime a versatile tool for real-time applications. Each track is available globally to be retrieved from any Session within an App. +- **Tracks map to MediaStreamTrack**: Tracks align with the MediaStreamTrack concept, facilitating audio, video, or data transmission. +- **Globally Unique Ids**: When you push a track to Cloudflare, it is assigned a unique ID, which can then be used to pull the track into another session elsewhere. +- **Available globally**: The ability to push and pull tracks is central to what makes Realtime a versatile tool for real-time applications. Each track is available globally to be retrieved from any Session within an App. ## Realtime as a Programmable "Switchboard" @@ -38,9 +38,9 @@ The analogy of a switchboard is apt for understanding Realtime. Historically, sw While many SFUs utilize concepts like "rooms" to manage media streams among users, this approach has scalability and flexibility limitations. Cloudflare Realtime opts for a more granular and flexible model with Sessions and Tracks, enabling a wide range of use cases: -* Large-scale remote events, like 'fireside chats' with thousands of participants. -* Interactive conversations with the ability to bring audience members "on stage." -* Educational applications where an instructor can present to multiple virtual classrooms simultaneously. +- Large-scale remote events, like 'fireside chats' with thousands of participants. +- Interactive conversations with the ability to bring audience members "on stage." +- Educational applications where an instructor can present to multiple virtual classrooms simultaneously. ### Presence Protocol vs. Media Flow diff --git a/src/content/docs/realtime/turn/custom-domains.mdx b/src/content/docs/realtime/turn/custom-domains.mdx index 9103a2e08eaf8a9..16baeeb56029ffa 100644 --- a/src/content/docs/realtime/turn/custom-domains.mdx +++ b/src/content/docs/realtime/turn/custom-domains.mdx @@ -12,9 +12,9 @@ Cloudflare Realtime TURN service supports using custom domains for UDP, and TCP | Protocol | Custom domains | Primary port | Alternate port | | ------------- | -------------- | ------------ | -------------- | -| STUN over UDP | ✅ | 3478/udp | 53/udp | -| TURN over UDP | ✅ | 3478/udp | 53 udp | -| TURN over TCP | ✅ | 3478/tcp | 80/tcp | +| STUN over UDP | ✅ | 3478/udp | 53/udp | +| TURN over UDP | ✅ | 3478/udp | 53 udp | +| TURN over TCP | ✅ | 3478/tcp | 80/tcp | | TURN over TLS | No | 5349/tcp | 443/tcp | ## Setting up a CNAME record @@ -23,20 +23,16 @@ To use custom domains for TURN, you must create a CNAME DNS record pointing to ` :::caution - Do not resolve the address of `turn.cloudflare.com` or `stun.cloudflare.com` or use an IP address as the value you input to your DNS record. Only CNAME records are supported. - ::: Any DNS provider, including Cloudflare DNS can be used to set up a CNAME for custom domains. :::note - If Cloudflare's authoritative DNS service is used, the record must be set to [DNS-only or "grey cloud" mode](/dns/proxy-status/#dns-only-records).\` - ::: There is no additional charge to using a custom hostname with Cloudflare Realtime TURN. diff --git a/src/content/docs/realtime/turn/generate-credentials.mdx b/src/content/docs/realtime/turn/generate-credentials.mdx index bbb75c2c0e043bf..3f1c3bf4bf971ac 100644 --- a/src/content/docs/realtime/turn/generate-credentials.mdx +++ b/src/content/docs/realtime/turn/generate-credentials.mdx @@ -18,8 +18,8 @@ You should keep your TURN key on the server side (don't share it with the browse With a TURN key you can: -* Generate TURN credentials that expire -* Revoke previously issued TURN credentials +- Generate TURN credentials that expire +- Revoke previously issued TURN credentials ## Create credentials @@ -36,12 +36,9 @@ The **201 (Created)** response below can then be passed on to your front-end app ```json { - "iceServers": [ + "iceServers": [ { - "urls": [ - "stun:stun.cloudflare.com:3478", - "stun:stun.cloudflare.com:53" - ] + "urls": ["stun:stun.cloudflare.com:3478", "stun:stun.cloudflare.com:53"] }, { "urls": [ @@ -67,12 +64,9 @@ Use `iceServers` as follows when instantiating the `RTCPeerConnection`: ```js const myPeerConnection = new RTCPeerConnection({ - iceServers: [ - { - urls: [ - "stun:stun.cloudflare.com:3478", - "stun:stun.cloudflare.com:53" - ] + iceServers: [ + { + urls: ["stun:stun.cloudflare.com:3478", "stun:stun.cloudflare.com:53"], }, { urls: [ @@ -81,14 +75,15 @@ const myPeerConnection = new RTCPeerConnection({ "turn:turn.cloudflare.com:3478?transport=tcp", "turn:turn.cloudflare.com:80?transport=tcp", "turns:turn.cloudflare.com:5349?transport=tcp", - "turns:turn.cloudflare.com:443?transport=tcp" - ], - "username": "bc91b63e2b5d759f8eb9f3b58062439e0a0e15893d76317d833265ad08d6631099ce7c7087caabb31ad3e1c386424e3e", - "credential": "ebd71f1d3edbc2b0edae3cd5a6d82284aeb5c3b8fdaa9b8e3bf9cec683e0d45fe9f5b44e5145db3300f06c250a15b4a0" - }, - ], + "turns:turn.cloudflare.com:443?transport=tcp", + ], + username: + "bc91b63e2b5d759f8eb9f3b58062439e0a0e15893d76317d833265ad08d6631099ce7c7087caabb31ad3e1c386424e3e", + credential: + "ebd71f1d3edbc2b0edae3cd5a6d82284aeb5c3b8fdaa9b8e3bf9cec683e0d45fe9f5b44e5145db3300f06c250a15b4a0", + }, + ], }); - ``` The `ttl` value can be adjusted to expire the short lived key in a certain amount of time. This value should be larger than the time you'd expect the users to use the TURN service. For example, if you're using TURN for a video conferencing app, the value should be set to the longest video call you'd expect to happen in the app. diff --git a/src/content/docs/realtime/turn/replacing-existing.mdx b/src/content/docs/realtime/turn/replacing-existing.mdx index 2ed8f3af74ea916..7fdfd0d0da1642f 100644 --- a/src/content/docs/realtime/turn/replacing-existing.mdx +++ b/src/content/docs/realtime/turn/replacing-existing.mdx @@ -14,12 +14,12 @@ If you are a existing TURN provider but would like to switch to providing Cloudf Cloudflare Realtime TURN service can reduce tangible and untangible costs associated with TURN servers: -* Server costs (AWS EC2 etc) -* Bandwidth costs (Egress, load balancing etc) -* Time and effort to set up a TURN process and maintenance of server -* Scaling the servers up and down -* Maintain the TURN server with security and feature updates -* Maintain high availability +- Server costs (AWS EC2 etc) +- Bandwidth costs (Egress, load balancing etc) +- Time and effort to set up a TURN process and maintenance of server +- Scaling the servers up and down +- Maintain the TURN server with security and feature updates +- Maintain high availability ## Recommendations @@ -56,8 +56,8 @@ When billing for TURN usage in your application, it's crucial to understand and The sampling process in TURN analytics works on two levels: -* At data collection: Usage data points may be sampled if they are generated too quickly. -* At query time: Additional sampling may occur if the query is too complex or covers a large time range. +- At data collection: Usage data points may be sampled if they are generated too quickly. +- At query time: Additional sampling may occur if the query is too complex or covers a large time range. To ensure accurate billing, write a single query that sums TURN usage per customer per time period, returning a single value. Avoid using queries that list usage for multiple customers simultaneously. @@ -65,20 +65,16 @@ By following these guidelines and understanding how TURN analytics handles sampl :::note - Cloudflare Realtime only bills for traffic from Cloudflare's servers to your client, called `egressBytes`. - ::: ### Example queries :::caution[Incorrect approach example] - Querying TURN usage for multiple customers in a single query can lead to inaccurate results. This is because the usage pattern of one customer could affect the sampling rate applied to another customer's data, potentially skewing the results. - ::: ``` diff --git a/src/content/docs/realtime/turn/rfc-matrix.mdx b/src/content/docs/realtime/turn/rfc-matrix.mdx index 88bffe6390fe56f..b2a69b56b7450d0 100644 --- a/src/content/docs/realtime/turn/rfc-matrix.mdx +++ b/src/content/docs/realtime/turn/rfc-matrix.mdx @@ -12,23 +12,23 @@ products: | Protocol | Support | Relevant specification | | -------- | ------- | --------------------------------------------------------------------------------------------------------- | -| UDP | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | -| TCP | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | -| TLS | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | +| UDP | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | +| TCP | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | +| TLS | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | | DTLS | No | [draft-petithuguenin-tram-turn-dtls-00](http://tools.ietf.org/html/draft-petithuguenin-tram-turn-dtls-00) | ## TURN client to TURN server protocols -| Protocol | Support | Relevant specification | -| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------- | -| TURN (base RFC) | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | +| Protocol | Support | Relevant specification | +| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| TURN (base RFC) | ✅ | [RFC 5766](https://datatracker.ietf.org/doc/html/rfc5766) | | TURN REST API | ✅ (See [FAQ](/realtime/turn/faq/#does-cloudflare-realtime-turn-support-the-expired-ietf-rfc-draft-draft-uberti-behave-turn-rest-00)) | [draft-uberti-behave-turn-rest-00](http://tools.ietf.org/html/draft-uberti-behave-turn-rest-00) | -| Origin field in TURN (Multi-tenant TURN Server) | ✅ | [draft-ietf-tram-stun-origin-06](https://tools.ietf.org/html/draft-ietf-tram-stun-origin-06) | -| ALPN support for STUN & TURN | ✅ | [RFC 7443](https://datatracker.ietf.org/doc/html/rfc7443) | -| TURN Bandwidth draft specs | No | [draft-thomson-tram-turn-bandwidth-01](http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth-01) | -| TURN-bis (with dual allocation) draft specs | No | [draft-ietf-tram-turnbis-04](http://tools.ietf.org/html/draft-ietf-tram-turnbis-04) | -| TCP relaying TURN extension | No | [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062) | -| IPv6 extension for TURN | No | [RFC 6156](https://datatracker.ietf.org/doc/html/rfc6156) | -| oAuth third-party TURN/STUN authorization | No | [RFC 7635](https://datatracker.ietf.org/doc/html/rfc7635) | -| DTLS support (for TURN) | No | [draft-petithuguenin-tram-stun-dtls-00](https://datatracker.ietf.org/doc/html/draft-petithuguenin-tram-stun-dtls-00) | -| Mobile ICE (MICE) support | No | [draft-wing-tram-turn-mobility-02](http://tools.ietf.org/html/draft-wing-tram-turn-mobility-02) | +| Origin field in TURN (Multi-tenant TURN Server) | ✅ | [draft-ietf-tram-stun-origin-06](https://tools.ietf.org/html/draft-ietf-tram-stun-origin-06) | +| ALPN support for STUN & TURN | ✅ | [RFC 7443](https://datatracker.ietf.org/doc/html/rfc7443) | +| TURN Bandwidth draft specs | No | [draft-thomson-tram-turn-bandwidth-01](http://tools.ietf.org/html/draft-thomson-tram-turn-bandwidth-01) | +| TURN-bis (with dual allocation) draft specs | No | [draft-ietf-tram-turnbis-04](http://tools.ietf.org/html/draft-ietf-tram-turnbis-04) | +| TCP relaying TURN extension | No | [RFC 6062](https://datatracker.ietf.org/doc/html/rfc6062) | +| IPv6 extension for TURN | No | [RFC 6156](https://datatracker.ietf.org/doc/html/rfc6156) | +| oAuth third-party TURN/STUN authorization | No | [RFC 7635](https://datatracker.ietf.org/doc/html/rfc7635) | +| DTLS support (for TURN) | No | [draft-petithuguenin-tram-stun-dtls-00](https://datatracker.ietf.org/doc/html/draft-petithuguenin-tram-stun-dtls-00) | +| Mobile ICE (MICE) support | No | [draft-wing-tram-turn-mobility-02](http://tools.ietf.org/html/draft-wing-tram-turn-mobility-02) | diff --git a/src/content/docs/reference-architecture/architectures/sase.mdx b/src/content/docs/reference-architecture/architectures/sase.mdx index 737fee4c2b7c58b..22b77e10e9ae65d 100644 --- a/src/content/docs/reference-architecture/architectures/sase.mdx +++ b/src/content/docs/reference-architecture/architectures/sase.mdx @@ -318,13 +318,13 @@ Organizations may also connect their network locations directly to the Cloudflar The following table summarizes the different methods of connecting networks to Cloudflare: -| **Use case** | **Recommended** | **Alternative solution** | -| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -| Remote users connecting to applications on private networks in a Zero Trust model (e.g. most VPN replacement scenarios) | **Cloudflare Tunnel (with `cloudflared`)** | **Cloudflare WAN** Alternative option if `cloudflared` not suitable for environment | -| Site-to-site connectivity between branches, headquarters, and data centers | **Cloudflare WAN** | **Cloudflare Mesh** Alternative option if routing changes cannot be made at perimeter | -| Egress traffic from physical sites or cloud environments to cloud security inspection (e.g. most common SWG and branch firewall replacement scenarios) | **Cloudflare WAN** | **N/A** | -| Service-initiated communication with remote users (e.g. AD or SCCM updates, DevOps workflows, VOIP) | **Cloudflare Mesh** | **Cloudflare WAN** Alternative option if inbound source IP fidelity not required | -| Mesh networking and device-to-device connectivity | **Cloudflare Mesh** | **N/A** | +| **Use case** | **Recommended** | **Alternative solution** | +| ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------ | ------------------------------------------------------------------------------------- | +| Remote users connecting to applications on private networks in a Zero Trust model (e.g. most VPN replacement scenarios) | **Cloudflare Tunnel (with `cloudflared`)** | **Cloudflare WAN** Alternative option if `cloudflared` not suitable for environment | +| Site-to-site connectivity between branches, headquarters, and data centers | **Cloudflare WAN** | **Cloudflare Mesh** Alternative option if routing changes cannot be made at perimeter | +| Egress traffic from physical sites or cloud environments to cloud security inspection (e.g. most common SWG and branch firewall replacement scenarios) | **Cloudflare WAN** | **N/A** | +| Service-initiated communication with remote users (e.g. AD or SCCM updates, DevOps workflows, VOIP) | **Cloudflare Mesh** | **Cloudflare WAN** Alternative option if inbound source IP fidelity not required | +| Mesh networking and device-to-device connectivity | **Cloudflare Mesh** | **N/A** | Each of these methods of connecting and routing traffic can be deployed concurrently from any location. The following diagram highlights how different connectivity methods can be used in a single architecture. @@ -343,8 +343,8 @@ Note the following traffic flows: _Note: Labels in this image may reflect a previous product name._ - *Note: All of the endpoints connected via Cloudflare Mesh or device agent - are automatically assigned IP addresses from the 100.96.0.0/12 address range, + *Note: All of the endpoints connected via Cloudflare Mesh or device agent are + automatically assigned IP addresses from the 100.96.0.0/12 address range, while endpoints connected to Cloudflare WAN retain their assigned RFC1918 private IP addresses. `cloudflared` can be deployed in any of the locations by an application owner to provide hostname-based connectivity to the diff --git a/src/content/docs/reference-architecture/architectures/security.mdx b/src/content/docs/reference-architecture/architectures/security.mdx index 3d627ba4e4372c4..f773fce4c276399 100644 --- a/src/content/docs/reference-architecture/architectures/security.mdx +++ b/src/content/docs/reference-architecture/architectures/security.mdx @@ -527,7 +527,7 @@ Existing private infrastructure can be complex. Cloudflare provides a variety of | [Cloudflare WAN](/cloudflare-wan/) | IPsec or GRE tunnel from networking devices to Cloudflare, routing entire network traffic. | Connecting existing network routers to Cloudflare. Allowing all traffic into and out of the network to go through Cloudflare. | | [Cloudflare One Appliance](/cloudflare-wan/configuration/appliance/) | Appliance-based IPsec or GRE tunnel from networking devices to Cloudflare, routing entire network traffic. | Uses the same technology as Cloudflare WAN; however, instead of using existing networking devices, a dedicated appliance or virtual machine is used — the Cloudflare One Appliance. | | [cloudflared](/cloudflare-one/networks/connectors/cloudflare-tunnel/) | Software agent deployed on servers or alongside services like Kubernetes for creating a tunnel for incoming connections to private applications or networks. | IT admins or application owners can easily install this tunnel software to expose their application to the Cloudflare network. | -| [Cloudflare Mesh](/cloudflare-one/networks/connectors/cloudflare-mesh/) | Software agent deployed on servers for creating a tunnel for incoming and outgoing connections to private applications or networks. | Similar to cloudflared, but supports East to West traffic and is often used in place of Cloudflare WAN when there is no ability to create an IPsec tunnel from existing devices. | +| [Cloudflare Mesh](/cloudflare-one/networks/connectors/cloudflare-mesh/) | Software agent deployed on servers for creating a tunnel for incoming and outgoing connections to private applications or networks. | Similar to cloudflared, but supports East to West traffic and is often used in place of Cloudflare WAN when there is no ability to create an IPsec tunnel from existing devices. | | [WARP Desktop Agent](/cloudflare-one/team-and-resources/devices/cloudflare-one-client/) | Software agent deployed on user devices, creating a tunnel for traffic to and from private applications and networks. | Connecting end user devices like phones and laptops to be part of the Cloudflare network. | | [Cloudflare Network Interconnect](https://www.cloudflare.com/network-services/products/network-interconnect/) | Direct connection between your physical networks and Cloudflare. | When your applications live in the same data centers we operate in, we can connect those networks directly to Cloudflare. | diff --git a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx index 7365c6406dda2f5..fb6d969b7413b35 100644 --- a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx +++ b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx @@ -485,15 +485,15 @@ Now, you will learn how to secure RDP access as a private IP application: As mentioned before, private IP applications work because Cloudflare proxies the IP range across its network. The nature of this application necessitates the use of the device client, as unless the user is connected to Cloudflare (and more specifically, unless they can take advantage of the Client-to-Tunnel connectivity), they will not be able to reach non-local RFC 1918 addresses. -| Traffic | | -| :--------------------------------------- | :-------------------------------------------------------------- | -| Destination IP | 169.254.255.254 | -| Destination Port | 3389 | -| **Identity** | | -| User Group Names | Server Admins | -| **Device Posture** | | -| Passed Device Posture Checks | WARP Check (Mac OS) (File) Latest Version of macOS (OS version) | -| **Action** | Allow | +| Traffic | | +| :------------------------------------------------- | :-------------------------------------------------------------- | +| Destination IP | 169.254.255.254 | +| Destination Port | 3389 | +| **Identity** | | +| User Group Names | Server Admins | +| **Device Posture** | | +| Passed Device Posture Checks | WARP Check (Mac OS) (File) Latest Version of macOS (OS version) | +| **Action** | Allow | | **Enforce Cloudflare One Client session duration** | 60m0s | Defining the application here is simple, as Cloudflare automatically fills in the IP range, and you need to limit the detected protocol to RDP. However, the rules for private IP applications are slightly different. You will notice they appear as network policies under the Cloudflare Gateway menu, despite managing them in Access. Certain options, such as checking for MFA and external evaluation, do not appear here. However, these attributes can be verified when the user activates their device client and authenticates to their organization. diff --git a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx index dc60c3bd546f404..6b66d65a74db8d4 100644 --- a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx +++ b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx @@ -33,15 +33,15 @@ This solution supports subdomains under your own zone while also allowing your c Before looking at how Cloudflare can be configured to protect your SaaS application through your custom hostnames, it's worth reviewing the benefits of taking this approach. -| Benefit | Description | -| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Minimized Downtime | Ensure [minimal downtime](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/#minimize-downtime) not only during custom hostname migrations to Cloudflare for SaaS but also throughout the entire lifecycle of the application. | -| Security and Performance | Extends Cloudflare's [security](/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/) and [performance](/cloudflare-for-platforms/cloudflare-for-saas/performance/) benefits to end-customers through their custom domains. | -| Auto-Renewal | Automates the [renewal](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/renew-certificates/) and management process for custom hostname certificates. | -| Apex Proxying | Supports end-customers using [domain apex](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/realtime-validation/#apex-proxying) (otherwise known as root domain) as custom hostnames. Used where your DNS service doesn't allow [CNAMEs for root domains](/dns/cname-flattening/), instead a [static IP](/byoip/address-maps/#static-ips-or-byoip) is used to allow an A record to be used. | -| Smart Load Balancing | Use the load balancer as [custom origins](/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/custom-origin/) to steer traffic with [session affinity](/load-balancing/understand-basics/session-affinity/). In the context of Cloudflare for SaaS, a custom origin lets you send traffic from one or more custom hostnames to somewhere besides your default proxy fallback origin. | +| Benefit | Description | +| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Minimized Downtime | Ensure [minimal downtime](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/validate-certificates/#minimize-downtime) not only during custom hostname migrations to Cloudflare for SaaS but also throughout the entire lifecycle of the application. | +| Security and Performance | Extends Cloudflare's [security](/cloudflare-for-platforms/cloudflare-for-saas/security/waf-for-saas/) and [performance](/cloudflare-for-platforms/cloudflare-for-saas/performance/) benefits to end-customers through their custom domains. | +| Auto-Renewal | Automates the [renewal](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/issue-and-validate/renew-certificates/) and management process for custom hostname certificates. | +| Apex Proxying | Supports end-customers using [domain apex](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/hostname-validation/realtime-validation/#apex-proxying) (otherwise known as root domain) as custom hostnames. Used where your DNS service doesn't allow [CNAMEs for root domains](/dns/cname-flattening/), instead a [static IP](/byoip/address-maps/#static-ips-or-byoip) is used to allow an A record to be used. | +| Smart Load Balancing | Use the load balancer as [custom origins](/cloudflare-for-platforms/cloudflare-for-saas/start/advanced-settings/custom-origin/) to steer traffic with [session affinity](/load-balancing/understand-basics/session-affinity/). In the context of Cloudflare for SaaS, a custom origin lets you send traffic from one or more custom hostnames to somewhere besides your default proxy fallback origin. | | O2O | For end-customers who already proxy traffic through Cloudflare, [O2O](/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/how-it-works/) may be required. Generally, it's recommended for those end-customers to [not proxy](/dns/proxy-status/#dns-only-records) the hostnames used by the SaaS provider. If O2O functionality is required, please review the [product compatibility](/cloudflare-for-platforms/cloudflare-for-saas/saas-customers/product-compatibility/). | -| Regional Services | Allows [regional traffic management](/data-localization/regional-services/) to comply with data localization requirements. | +| Regional Services | Allows [regional traffic management](/data-localization/regional-services/) to comply with data localization requirements. | ## Products included in this guide diff --git a/src/content/docs/reference-architecture/diagrams/ai/index.mdx b/src/content/docs/reference-architecture/diagrams/ai/index.mdx index a86575102d8dcfa..31b853acdc50598 100644 --- a/src/content/docs/reference-architecture/diagrams/ai/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/ai/index.mdx @@ -12,6 +12,6 @@ products: - workers-ai --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/content-delivery/index.mdx b/src/content/docs/reference-architecture/diagrams/content-delivery/index.mdx index 65249beeb1e0af4..b78ee67b330dcc6 100644 --- a/src/content/docs/reference-architecture/diagrams/content-delivery/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/content-delivery/index.mdx @@ -12,6 +12,6 @@ products: - cache --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx index 0e82981e3eafb7b..52648681f876333 100644 --- a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx +++ b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx @@ -1,7 +1,20 @@ --- title: Optimizing and securing connected transportation systems pcx_content_type: reference-architecture-diagram -products: [argo-smart-routing, api-shield, cache, ddos-protection, dns-firewall, load-balancing, r2, workers, ssl, waf, workers-ai] +products: + [ + argo-smart-routing, + api-shield, + cache, + ddos-protection, + dns-firewall, + load-balancing, + r2, + workers, + ssl, + waf, + workers-ai, + ] sidebar: order: 1 label: Connected transportation systems @@ -29,7 +42,6 @@ Devices connect to Cloudflare's anycast network, which inspects and filters inco 2. **Cloudflare anycast network**: Cloudflare uses [anycast](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) networking and is one of the world's most connected and geographically distributed networks. Traffic is routed to the nearest Cloudflare data center, which reduces the number of network hops, dynamically adapts to changing network conditions, and ensures data takes the shortest path to its destination, minimizing latency and maximizing reliability. 3. **Security services**: - 1. **API Shield**: Cloudflare's [API Shield](/api-shield/get-started/) protects critical APIs from unauthorized access and abuse, ensuring secure data exchange between connected systems. 2. **Web Application Firewall (WAF)**: Cloudflare's [WAF](/waf/) helps block malicious traffic and prevent application or API vulnerabilities from being exploited, safeguarding your network, devices and applications. 3. **DDoS Protection**: Cloudflare's [DDoS protection](/ddos-protection/about/attack-coverage/), covering the network, transport and application layer, prevents volumetric attacks that could compromise the availability of connected systems. By providing multi-layered protection, Cloudflare is able to mitigate a wide variety of DDoS threats. At lower layers, Cloudflare defends against high-volume attacks such as SYN floods, UDP floods, and other types of protocol-based disruptions that can overwhelm network resources. At the application layer, more sophisticated attacks targeting the application itself, such as HTTP floods \- which aim to exhaust server resources and disrupt user-facing services \- are blocked even in the face of [large-scale DDoS attempts](https://blog.cloudflare.com/tag/ddos-reports/). @@ -37,7 +49,6 @@ Devices connect to Cloudflare's anycast network, which inspects and filters inco 5. **TLS encryption**: [TLS encryption](/ssl/edge-certificates/) ensures that data exchanged across the network is protected from interception, maintaining data integrity and privacy. 4. **Performance and reliability services**: - 1. **Content Delivery Network (CDN)**: [Distribute content](https://www.cloudflare.com/en-gb/learning/cdn/what-is-a-cdn/) efficiently across the network, reducing latency for end users by caching data closer to them. 2. **Load balancing**: [Distribute incoming traffic](/load-balancing/get-started/quickstart/) across multiple servers or data centers, ensuring optimal resource utilization, preventing single points of failure, and improving the performance of connected systems. 3. **Cloudflare Workers**: Our serverless compute platform, [Cloudflare Workers](/workers/), allows data processing at the edge, reducing the need for data to travel long distances and significantly reducing latency. Combined with related services like [Workers KV](/kv/get-started/) and [D1](https://www.cloudflare.com/en-gb/developer-platform/products/d1/), Cloudflare's edge-based storage solutions enable efficient data management close to the user. Workers KV allows for quick, read-heavy data access, perfect for caching configurations and frequently used data, while D1 provides a serverless SQL database for more robust storage needs. Additionally, Cloudflare's [Durable Objects](https://blog.cloudflare.com/sqlite-in-durable-objects/) help manage stateful interactions at the edge, facilitating real-time data consistency. These tools together allow for seamless data processing, storage and lazy updates to core services, minimizing back-and-forth to centralized servers and ensuring faster, more efficient performance. diff --git a/src/content/docs/reference-architecture/diagrams/network/index.mdx b/src/content/docs/reference-architecture/diagrams/network/index.mdx index dab7f9b29c2ac8b..8d297fcb542d684 100644 --- a/src/content/docs/reference-architecture/diagrams/network/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/network/index.mdx @@ -12,6 +12,6 @@ products: - magic-transit --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/sase/index.mdx b/src/content/docs/reference-architecture/diagrams/sase/index.mdx index 952f8cbb7035014..5a5bcdc66e7f753 100644 --- a/src/content/docs/reference-architecture/diagrams/sase/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/sase/index.mdx @@ -12,6 +12,6 @@ products: - cloudflare-one --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/security/index.mdx b/src/content/docs/reference-architecture/diagrams/security/index.mdx index 6e7f959a2bf1894..b6a5e7116f9b9ab 100644 --- a/src/content/docs/reference-architecture/diagrams/security/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/security/index.mdx @@ -12,6 +12,6 @@ products: - waf --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx index be169cd2360397e..80a5daa8d28537b 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx @@ -1,7 +1,32 @@ --- title: Fullstack applications pcx_content_type: reference-architecture-diagram -products: [ai-gateway, agents, api-shield, bots, containers, d1, ddos-protection, durable-objects, images, kv, logs, pages, pipelines, queues, r2, realtime, ssl, stream, vectorize, waf, workflows, workers, workers-ai] +products: + [ + ai-gateway, + agents, + api-shield, + bots, + containers, + d1, + ddos-protection, + durable-objects, + images, + kv, + logs, + pages, + pipelines, + queues, + r2, + realtime, + ssl, + stream, + vectorize, + waf, + workflows, + workers, + workers-ai, + ] sidebar: order: 1 label: Fullstack applications diff --git a/src/content/docs/reference-architecture/diagrams/serverless/index.mdx b/src/content/docs/reference-architecture/diagrams/serverless/index.mdx index fd828080d0d13a7..ec24b3e2d1e0920 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/index.mdx @@ -11,6 +11,6 @@ products: - workers --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx index 59502f5c65c9030..37a97208f955c57 100644 --- a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx +++ b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx @@ -94,7 +94,6 @@ Data observability and control is crucial for security. [Outbound Workers](/clou 1. **Management Interface**: Interact with the platform through GUI, API, or CLI interfaces. 2. **Platform Processing**: Process these interactions to: - - Transform and bundle code - Perform security checks - Apply configuration diff --git a/src/content/docs/reference-architecture/diagrams/storage/index.mdx b/src/content/docs/reference-architecture/diagrams/storage/index.mdx index bed6aa10ef8f5ae..c1a8deb1e885b1a 100644 --- a/src/content/docs/reference-architecture/diagrams/storage/index.mdx +++ b/src/content/docs/reference-architecture/diagrams/storage/index.mdx @@ -11,6 +11,6 @@ products: - r2 --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/reference-architecture/implementation-guides/index.mdx b/src/content/docs/reference-architecture/implementation-guides/index.mdx index 2904c70b1df0a79..050e352a4e30355 100644 --- a/src/content/docs/reference-architecture/implementation-guides/index.mdx +++ b/src/content/docs/reference-architecture/implementation-guides/index.mdx @@ -23,4 +23,4 @@ Implementation guides provide [step-by-step instructions](/reference-architectur ## Application Security -- [Use mTLS with Cloudflare protected resources](/learning-paths/mtls/concepts/) \ No newline at end of file +- [Use mTLS with Cloudflare protected resources](/learning-paths/mtls/concepts/) diff --git a/src/content/docs/reference-architecture/implementation-guides/zero-trust/index.mdx b/src/content/docs/reference-architecture/implementation-guides/zero-trust/index.mdx index 5c5f919b63c0538..2fdb4a789da4092 100644 --- a/src/content/docs/reference-architecture/implementation-guides/zero-trust/index.mdx +++ b/src/content/docs/reference-architecture/implementation-guides/zero-trust/index.mdx @@ -19,4 +19,4 @@ Zero Trust implementation guides walk you through the steps to deploy a Zero Tru - [Secure your Internet traffic and SaaS apps](/learning-paths/secure-internet-traffic/concepts/) - [Replace your VPN](/learning-paths/replace-vpn/concepts/) - [Deploy Zero Trust Web Access](/learning-paths/clientless-access/concepts/) -- [Secure your email with Email security](/learning-paths/secure-your-email/concepts/) \ No newline at end of file +- [Secure your email with Email security](/learning-paths/secure-your-email/concepts/) diff --git a/src/content/docs/registrar/account-options/domain-contact-updates.mdx b/src/content/docs/registrar/account-options/domain-contact-updates.mdx index c68e021cdb34a52..33cc9a043acdbdd 100644 --- a/src/content/docs/registrar/account-options/domain-contact-updates.mdx +++ b/src/content/docs/registrar/account-options/domain-contact-updates.mdx @@ -12,18 +12,18 @@ It is important that you keep your contact details accurate and up-to-date. [ICA The contact information you can update includes: -* First name -* Last name -* Email -* Organization -* Phone -* Address including City, State/Province, Postal code & Country +- First name +- Last name +- Email +- Organization +- Phone +- Address including City, State/Province, Postal code & Country To update your registrant contacts: 1. In the Cloudflare dashboard, go to the **Manage domains** page. - + 2. Find **Default contact** and select **Edit**. 3. Update the relevant information, and select **Save**. @@ -32,10 +32,10 @@ To update your registrant contacts: If you change any of the following fields, Cloudflare Registrar will require a Change of Registrant approval before the changes are finalized: -* First name -* Last name -* Organization -* Email address +- First name +- Last name +- Organization +- Email address If you update any of the fields mentioned above, Cloudflare Registrar will send an approval email to the current registrant's email address. The approval email contains a link to a web page where the requested change may be viewed and approved or rejected. If the pending change is not approved or rejected within seven days, the request will automatically be canceled. @@ -43,11 +43,9 @@ If you do not update these fields, your contact information is updated immediate :::caution[Important] - After selecting the link in the approval email Cloudflare sends you, you have the option to accept or reject the contact changes. If you select the **Accept** button, your domain will be transfer-locked for 60 days. -If you do not want your domain to be locked, be sure to select the **Do not apply 60 day transfer lock** checkbox *before* selecting the **Accept** button. This applies to all supported TLDs, including `.uk`. - +If you do not want your domain to be locked, be sure to select the **Do not apply 60 day transfer lock** checkbox _before_ selecting the **Accept** button. This applies to all supported TLDs, including `.uk`. ::: diff --git a/src/content/docs/registrar/account-options/domain-management.mdx b/src/content/docs/registrar/account-options/domain-management.mdx index b00b69c71cdde48..436f7461a485b3f 100644 --- a/src/content/docs/registrar/account-options/domain-management.mdx +++ b/src/content/docs/registrar/account-options/domain-management.mdx @@ -6,7 +6,7 @@ products: description: Manage your registered domains in the dashboard. --- -import { DashButton, LinkButton } from "~/components" +import { DashButton, LinkButton } from "~/components"; ## Domain status @@ -14,9 +14,9 @@ When your domain is registered with Cloudflare, you can review your domain statu 1. In the Cloudflare dashboard, go to the **Manage domains** page. - + -2. From **Overview**, scroll down to **Domain Registration** to review the current expiration date. +2. From **Overview**, scroll down to **Domain Registration** to review the current expiration date. 3. Select **Manage domain** to review the Auto-Renew status for your domain. ## Billing information @@ -25,7 +25,7 @@ Domain registrations will not appear in the **Active Subscriptions** section of 1. In the Cloudflare dashboard, go to the **Manage Domains** page. - + 2. Find the domain you want to check and select **Manage**. 3. Refer to **Registration** for information regarding your domain fees. From here, you can also opt to [renew or extend](/registrar/account-options/renew-domains/) your domain registration. @@ -36,7 +36,7 @@ Cloudflare redacts WHOIS information from your domain by default. However, we do 1. In the Cloudflare dashboard, go to the **Manage Domains** page. - + 2. Find the domain you want to edit and select **Manage** > **Contacts**. 3. Select **Edit** in any of the contacts you previously set up. This allows you to update the contact information for the selected domain only. It will not update the contact information for other domains within the account. @@ -62,10 +62,10 @@ There may be instances where users may wish to delete a domain prior to expirati 1. In the Cloudflare dashboard, go to the **Manage Domains** page. - + -3. Under the **Configuration** tab on the Manage page you will find a **Delete** button. -4. If the domain is deletable the button will be active. The button will be disabled if your domain cannot be deleted and you should refer to the Registrar [FAQ](/registrar/faq/#why-am-i-unable-to-delete-my-registrar-domain). -5. Once you click the Delete button, you will be presented with a confirmation window. If you proceed, an email will be sent to all users with the Super Admin role in the account. The email contains a deletion authorization token that must be entered into the window which appears to confirm and complete the deletion. +2. Under the **Configuration** tab on the Manage page you will find a **Delete** button. +3. If the domain is deletable the button will be active. The button will be disabled if your domain cannot be deleted and you should refer to the Registrar [FAQ](/registrar/faq/#why-am-i-unable-to-delete-my-registrar-domain). +4. Once you click the Delete button, you will be presented with a confirmation window. If you proceed, an email will be sent to all users with the Super Admin role in the account. The email contains a deletion authorization token that must be entered into the window which appears to confirm and complete the deletion. Once all steps are completed, the domain will then be scheduled for deletion. To understand more about the timelines and potential reasons why a domain cannot be deleted, refer to the Registrar [FAQ](/registrar/faq/#domain-deletions). diff --git a/src/content/docs/registrar/account-options/icloud-domains.mdx b/src/content/docs/registrar/account-options/icloud-domains.mdx index 7cd576b2342f223..51ea04635dec389 100644 --- a/src/content/docs/registrar/account-options/icloud-domains.mdx +++ b/src/content/docs/registrar/account-options/icloud-domains.mdx @@ -17,7 +17,7 @@ You will need an active iCloud+ subscription to add a custom email domain. If you want to buy a custom email domain, go to your [iCloud](https://www.icloud.com/settings/) settings and scroll down to **Custom Email Domain**. -*** +--- ## Log in to Cloudflare @@ -31,7 +31,7 @@ If you had signed up with Apple, signing into Cloudflare is as easy as clicking If you had signed up with Cloudflare, signing into Cloudflare can be done with your email and password. -*** +--- ## Billing information @@ -39,9 +39,9 @@ If you had signed up with Cloudflare, signing into Cloudflare can be done with y For domain registration, Cloudflare supports the following payment methods: -* Credit Card -* PayPal -* Apple Pay (available if you have a wallet with a valid payment method and are using an iOS device or Safari on macOS) +- Credit Card +- PayPal +- Apple Pay (available if you have a wallet with a valid payment method and are using an iOS device or Safari on macOS) For domain renewals, Apple Pay does not currently support recurring payments. You can either add another payment method (Credit Card or PayPal) for automatic renewals or log into [your account](#log-in-to-cloudflare) near the renewal date and use Apple Pay. @@ -51,7 +51,7 @@ Users may see a price estimate in both U.S. Dollars and a local currency. This i The final payment will be charged in US dollars. -*** +--- ## Email issues @@ -67,7 +67,7 @@ If you are not receiving emails intended for your new email address, review your If your domain has records similar to those listed above and you are still experiencing problems with your new email address, contact [Apple Support](https://support.apple.com/). -*** +--- ## Domain website @@ -80,7 +80,7 @@ If you want your domain to be a fully functioning website, you will need to: 1. **Build your website**: Either using [Cloudflare Pages](/pages/), a website builder, or files hosted on a server. 2. **Update your Cloudflare DNS**: To direct visitors looking for your domain name to the actual content on your website ([detailed guide](/dns/manage-dns-records/how-to/create-zone-apex/)). -*** +--- ## Landing Page @@ -92,18 +92,16 @@ If you do not want to have Landing Page enabled: 1. In the Cloudflare dashboard, go to the **Manage domains** page. - + -3. Find the domain you want to disable Landing Page for, and select **Manage** > **Configuration**. -4. Scroll to Landing Page and select **Disable**. +2. Find the domain you want to disable Landing Page for, and select **Manage** > **Configuration**. +3. Scroll to Landing Page and select **Disable**. You now have Landing Page disabled. The page can also be re-enabled through the same process. :::note - Customers must disable the landing page before they can add DNS records to point to a new website. - ::: diff --git a/src/content/docs/registrar/account-options/index.mdx b/src/content/docs/registrar/account-options/index.mdx index c28da7b171d3437..0ad0fed63956d72 100644 --- a/src/content/docs/registrar/account-options/index.mdx +++ b/src/content/docs/registrar/account-options/index.mdx @@ -8,6 +8,6 @@ products: description: Explore Cloudflare Registrar account options. --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/registrar/account-options/inter-account-transfer.mdx b/src/content/docs/registrar/account-options/inter-account-transfer.mdx index 9ec8ed6c910675e..8089af6ebb59ebd 100644 --- a/src/content/docs/registrar/account-options/inter-account-transfer.mdx +++ b/src/content/docs/registrar/account-options/inter-account-transfer.mdx @@ -15,28 +15,29 @@ This process only applies to domains which are registered with Cloudflare Regist Before proceeding, please be aware of the following: -* WHOIS contact information will be moved as is. -* No other configuration will be moved. -* After successful move, the registration will be transfer-locked for 30 days. -* The target account will become responsible for domain renewals going forward. +- WHOIS contact information will be moved as is. +- No other configuration will be moved. +- After successful move, the registration will be transfer-locked for 30 days. +- The target account will become responsible for domain renewals going forward. ## 1. Prepare for the move Before you request the move, you will need to do the following: -* Obtain the [account ID](/fundamentals/account/find-account-and-zone-ids/) of the new account. -* Add the domain as a website to the new account and select a plan. -* [Disable DNSSEC](/dns/dnssec/#disable-dnssec) for the domain and ensure it is set up and ready in the new dashboard account you intend to move it to. +- Obtain the [account ID](/fundamentals/account/find-account-and-zone-ids/) of the new account. +- Add the domain as a website to the new account and select a plan. +- [Disable DNSSEC](/dns/dnssec/#disable-dnssec) for the domain and ensure it is set up and ready in the new dashboard account you intend to move it to. The following pre-conditions must be met before the domain can be moved: -* The domain must have been registered more than 10 days ago. -* The domain must be added to the new account as a website and a plan must be selected. -* The domain must not be administratively locked, such as being locked due to a dispute or court order. -* The domain must not have any of the following registry statuses: `pendingDelete`, `redemptionPeriod`, or `pendingTransfer`. -* The registrant email address must be verified. -* A pending Change of Registrant request cannot be present. If there is a pending request, it should be completed before initiating the move request. -* DNSSEC must be turned off. It can be re-enabled on the new zone once the move completes. -* If the current zone is locked, the lock must be released. + +- The domain must have been registered more than 10 days ago. +- The domain must be added to the new account as a website and a plan must be selected. +- The domain must not be administratively locked, such as being locked due to a dispute or court order. +- The domain must not have any of the following registry statuses: `pendingDelete`, `redemptionPeriod`, or `pendingTransfer`. +- The registrant email address must be verified. +- A pending Change of Registrant request cannot be present. If there is a pending request, it should be completed before initiating the move request. +- DNSSEC must be turned off. It can be re-enabled on the new zone once the move completes. +- If the current zone is locked, the lock must be released. ## 2. Submit the move request diff --git a/src/content/docs/registrar/account-options/renew-domains.mdx b/src/content/docs/registrar/account-options/renew-domains.mdx index dda7c66958054bd..285bff694c78d57 100644 --- a/src/content/docs/registrar/account-options/renew-domains.mdx +++ b/src/content/docs/registrar/account-options/renew-domains.mdx @@ -21,10 +21,8 @@ If you decide you no longer need the domain, [disable auto-renew for your domain :::note[Note] - The first auto-renew attempt will occur approximately 30 days prior to expiration. If you wish to disable auto-renew, do so at least 30 days prior to the expiration date. - ::: You can continue to keep your domain registered with Cloudflare for the time remaining until the expiration date. If you decide you want to keep the domain, enable auto-renew at any time prior to expiration. @@ -35,7 +33,7 @@ If you want your domains to renew automatically, keep the default settings for y 1. In the Cloudflare dashboard, go to the **Manage domains** page. - + 2. Find the domain you want to automatically renew, and make sure the **Auto-renew** toggle is enabled. @@ -47,10 +45,8 @@ If the renewal fails, you will receive an email notification and Cloudflare will :::note - If you want to delete your domain from Cloudflare, **disable** Auto-Renew first. - ::: ## Renew a domain manually @@ -59,7 +55,7 @@ You can renew a domain at any time. To renew a domain registered with Cloudflare 1. In the Cloudflare dashboard, go to the **Manage domains** page. - + 2. Find the domain you want to renew and select **Manage**. 3. In **Registration** select **Renew/Extend Domain**. @@ -72,24 +68,22 @@ Once Cloudflare validates your payment, the status of your domain changes to **R Once a domain is registered, Registrar sends the following expiration notices to the Super Admin of the domain: -* A monthly email listing all domains set to renew automatically within the next 45 days. -* A monthly email listing all domains expiring in the next 60-90 days. +- A monthly email listing all domains set to renew automatically within the next 45 days. +- A monthly email listing all domains expiring in the next 60-90 days. In addition to the Super Admin, the following expiration notices are sent to the WHOIS Registrant contact associated with the domain: -* A weekly email listing all domains expiring within the next month. -* A daily email listing all domains expiring in seven days. -* An email one day after a domain expires. -* An email 20 days after the expiration date. +- A weekly email listing all domains expiring within the next month. +- A daily email listing all domains expiring in seven days. +- An email one day after a domain expires. +- An email 20 days after the expiration date. :::note - If you do not renew your domain before the expiration date, your domain will enter a Redemption Grace Period (RGP) for 30 days. These domains are not deleted and you can restore them to your account, but restoration may require an additional fee. You cannot transfer domains during the RGP. All renewals are final and Cloudflare will not issue refunds. When renewing a domain, additional years are always added to the current expiration date regardless of when the renewal takes place. - ::: diff --git a/src/content/docs/registrar/account-options/transfer-out-from-cloudflare.mdx b/src/content/docs/registrar/account-options/transfer-out-from-cloudflare.mdx index b699b2181413945..9c7bbb499016c44 100644 --- a/src/content/docs/registrar/account-options/transfer-out-from-cloudflare.mdx +++ b/src/content/docs/registrar/account-options/transfer-out-from-cloudflare.mdx @@ -13,9 +13,9 @@ import { DashButton } from "~/components"; Cloudflare Registrar makes it easy to transfer your domain to another registrar. Be aware that ICANN rules prohibit a domain from being transferred if: -* The domain has been transferred within the last 60 days; -* The domain was registered within the last 60 days; -* If the WHOIS registrant information has been modified in the last 60 days (even if redacted). +- The domain has been transferred within the last 60 days; +- The domain was registered within the last 60 days; +- If the WHOIS registrant information has been modified in the last 60 days (even if redacted). Follow the instructions below to transfer your domain out from Cloudflare. @@ -28,7 +28,7 @@ Anyone with super-admin and admin permissions for a zone can also manage your do 1. In the Cloudflare dashboard, go to the **Manage Domains** page. - + 2. Find the domain you want to transfer, and select **Manage**. 3. Select **Configuration** > **Unlock**. @@ -37,8 +37,8 @@ Anyone with super-admin and admin permissions for a zone can also manage your do If you lose your authentication code, you can get a new one by: -* Selecting the **Regenerate** button; -* Locking the domain and repeating steps 1-6. +- Selecting the **Regenerate** button; +- Locking the domain and repeating steps 1-6. ## 2. Transfer to a new registrar diff --git a/src/content/docs/registrar/account-options/whois-redaction.mdx b/src/content/docs/registrar/account-options/whois-redaction.mdx index 54f84e462053f44..ae936db97b56984 100644 --- a/src/content/docs/registrar/account-options/whois-redaction.mdx +++ b/src/content/docs/registrar/account-options/whois-redaction.mdx @@ -20,8 +20,8 @@ Cloudflare’s WHOIS service can be found at [https://rdap.cloudflare.com/](http WHOIS redaction removes most contact information categorized as personal data (such as registrant name, email address, postal address) from the published WHOIS record for a domain. These fields will read `Data Redacted`. The nameserver, domain lock information, and date records for a domain are still available publicly. The following fields will continue to show in WHOIS, due to ICANN policy: -* Registrant state/province -* Registrant country +- Registrant state/province +- Registrant country Cloudflare still maintains the authoritative, unredacted, record of your WHOIS data. You can modify this information at any time. Refer to [Registrant contact updates](/registrar/account-options/domain-contact-updates) for more information. diff --git a/src/content/docs/registrar/custom-domain-protection.mdx b/src/content/docs/registrar/custom-domain-protection.mdx index 5175f44c6cba05f..7c230831d9ec50c 100644 --- a/src/content/docs/registrar/custom-domain-protection.mdx +++ b/src/content/docs/registrar/custom-domain-protection.mdx @@ -12,8 +12,8 @@ Cloudflare offers [Custom Domain Protection](https://www.cloudflare.com/products Custom Domain Protection offers additional safeguard features for registered domains, including: -* **Registry lock**: Cloudflare applies Registry Lock, when available, to all domains registered through Custom Domain Protection. Any changes to a domain requires Cloudflare to first unlock the domain at the registry level. -* **Out-of-band authentication**: All changes to domain ownership or nameserver information are verified and executed manually based on an authentication process defined by the customer. -* **No interface**: Custom Domain Protection does not offer an interface, to remove the possibility of domain hijack through a compromised account. +- **Registry lock**: Cloudflare applies Registry Lock, when available, to all domains registered through Custom Domain Protection. Any changes to a domain requires Cloudflare to first unlock the domain at the registry level. +- **Out-of-band authentication**: All changes to domain ownership or nameserver information are verified and executed manually based on an authentication process defined by the customer. +- **No interface**: Custom Domain Protection does not offer an interface, to remove the possibility of domain hijack through a compromised account. Contact your account team if you are interested in Cloudflare's Custom Domain Protection. diff --git a/src/content/docs/registrar/get-started/index.mdx b/src/content/docs/registrar/get-started/index.mdx index 0337c455830ed00..adddbd0c163091c 100644 --- a/src/content/docs/registrar/get-started/index.mdx +++ b/src/content/docs/registrar/get-started/index.mdx @@ -8,6 +8,6 @@ products: description: Set up Client IP Geolocation for your network. --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/registrar/get-started/register-domain.mdx b/src/content/docs/registrar/get-started/register-domain.mdx index b3d8c632b668672..7f46b29e462ccda 100644 --- a/src/content/docs/registrar/get-started/register-domain.mdx +++ b/src/content/docs/registrar/get-started/register-domain.mdx @@ -10,15 +10,14 @@ description: Register a new domain with Cloudflare. import { DashButton, Render } from "~/components"; - ## Prerequisites and restrictions :::note[Cloudflare nameservers] All domains acquired via Cloudflare Registrar use Cloudflare nameservers, automatically [protecting and speeding up](/fundamentals/concepts/how-cloudflare-works/) your content or services. You will not be able to change to another DNS provider's nameservers while using Cloudflare Registrar. ::: -* Cloudflare Registrar does not currently support internationalized domain names (IDNs), also known as Unicode. -* You must have a [verified account email address](/fundamentals/user-profiles/verify-email-address/), to transfer or register domains. +- Cloudflare Registrar does not currently support internationalized domain names (IDNs), also known as Unicode. +- You must have a [verified account email address](/fundamentals/user-profiles/verify-email-address/), to transfer or register domains. @@ -30,16 +29,14 @@ If you are registering a `.us` domain, refer to the [Additional requirements for 1. In the Cloudflare dashboard, go to the **Register domains** page. - + 2. In the search box, enter the domain name you wish to register, and select **Search**. You may also enter one or more keywords. The search results will contain a list of suggested domains. If the domain you entered does not appear in the list, this means it is not available for registration. :::caution[Important] - Cloudflare Registrar currently does not support internationalized domain names (IDNs), also known as unicode. For that reason, you cannot search for words with special characters, such as `à`, `ü`, `ç`, among others. - ::: 3. Select **Purchase** on the domain you wish to register. In rare instances, a domain that is not available for registration may appear in the search results. After selecting **Purchase**, a definitive availability check will be performed to confirm that the domain is actually available for registration. @@ -52,12 +49,10 @@ Cloudflare Registrar currently does not support internationalized domain names ( :::note - If you have previously registered or transferred a domain name, the form will be filled in advance with the information from your default contact. If not, you will need to fill out the form. It is important that you provide complete and accurate contact information. If you do not follow this recommendation, the domain registration may be suspended and/or canceled. - ::: 6. In **Payment**, select which type of payment you want to use. If you already have a billing profile, Cloudflare uses this information to automatically fill the form. If there is no billing profile, you need to enter your payment information. @@ -72,8 +67,6 @@ The registration process may take up to 30 seconds to complete. Once the registr At this time, you can only use ASCII characters for contact data. If the default contact has non-ASCII characters, you will need to update the domain contact details before proceeding. Cloudflare recommends that you update your default contact information to include ASCII characters only. - - | Field | Required? | Restrictions | | ------------ | --------- | ------------------------------------------------------------------------------------------------------------------------------ | | First Name | Yes | Minimum of two letters. | @@ -89,8 +82,6 @@ At this time, you can only use ASCII characters for contact data. If the default | Country | Yes | You must select one from the drop-down options. | | Postal Code | Yes | Must be a properly formatted postal code. | - - When you register a domain with Cloudflare, your personal information is redacted when permitted by the registry. Refer to [WHOIS redaction](/registrar/account-options/whois-redaction/) for more information. ## Next steps diff --git a/src/content/docs/registrar/top-level-domains/uk-domains.mdx b/src/content/docs/registrar/top-level-domains/uk-domains.mdx index 33034fbe090ae38..4ec5d8a00c26f8f 100644 --- a/src/content/docs/registrar/top-level-domains/uk-domains.mdx +++ b/src/content/docs/registrar/top-level-domains/uk-domains.mdx @@ -22,22 +22,16 @@ Cloudflare currently supports the transfer of `.uk`, `co.uk`, `org.uk`, and `me. 1. In the Cloudflare dashboard, go to the **Transfer domains** page. - + -Cloudflare will show you a list of domains that are eligible for transfer (see below for restrictions). If you do not see your domain, [add the domain you want to transfer](/fundamentals/manage-domains/add-site/) to your Cloudflare account before you try to transfer your `.uk` domain. -2. Select the domains you wish to transfer. -3. Proceed to checkout. Note that there is no fee to transfer a `.uk` domain and an additional year is NOT added during the transfer process. -4. After checkout, request your current registrar to update the [IPS tag](https://en.wikipedia.org/wiki/Internet_Provider_Security) to `CLOUDFLARE`. If the transfer is not completed within 24 hours, ask your registrar again to update the IPS tag. The transfer will be automatically canceled if not completed within 30 days. -5. Cloudflare will receive a notice once your registrar updates the IPS tag. After that, we will finish transferring your domain. +Cloudflare will show you a list of domains that are eligible for transfer (see below for restrictions). If you do not see your domain, [add the domain you want to transfer](/fundamentals/manage-domains/add-site/) to your Cloudflare account before you try to transfer your `.uk` domain. 2. Select the domains you wish to transfer. 3. Proceed to checkout. Note that there is no fee to transfer a `.uk` domain and an additional year is NOT added during the transfer process. 4. After checkout, request your current registrar to update the [IPS tag](https://en.wikipedia.org/wiki/Internet_Provider_Security) to `CLOUDFLARE`. If the transfer is not completed within 24 hours, ask your registrar again to update the IPS tag. The transfer will be automatically canceled if not completed within 30 days. 5. Cloudflare will receive a notice once your registrar updates the IPS tag. After that, we will finish transferring your domain. :::caution[Warning] - If you request your current registrar to update the IPS tag before completing the checkout process, the transfer request will be automatically rejected. You must complete the checkout process before requesting the IPS tag update. For security reasons, domains transferred to Cloudflare Registrar are locked for 60 days before they can be transferred out to another Registrar. - ::: ## Transfer a .UK domain to another registrar @@ -52,8 +46,6 @@ Your new registrar is responsible for accepting the transfer. Cloudflare has no :::note - If you do not know the IPS tag, contact your new registrar for instructions. Your new registrar may require you to follow some additional steps before starting the transfer process. - ::: diff --git a/src/content/docs/registrar/whoisrequests.mdx b/src/content/docs/registrar/whoisrequests.mdx index 445ca659095fc8e..95317e78416dd66 100644 --- a/src/content/docs/registrar/whoisrequests.mdx +++ b/src/content/docs/registrar/whoisrequests.mdx @@ -10,7 +10,7 @@ description: Submit WHOIS disclosure requests to Cloudflare. This page describes the mechanism and process for submitting a disclosure request to Cloudflare for WHOIS data under Section 10 of the Internet Corporation for Assigned Names and Number's ("ICANN") [Registration Data Policy](https://www.icann.org/en/contracted-parties/consensus-policies/registration-data-policy). -Please read the following instructions carefully. +Please read the following instructions carefully. ## 1. Prepare your request @@ -18,7 +18,7 @@ Your request must include the following elements: - Your name - The requestor's name, mailing address, and email -- Whether you are making this request on behalf of yourself as an individual or on behalf of another person or entity. If the latter, identify whether the requestor is an individual, corporation, or government +- Whether you are making this request on behalf of yourself as an individual or on behalf of another person or entity. If the latter, identify whether the requestor is an individual, corporation, or government - Any power of Attorney statements or similar statements evidencing authorization to act on the requestor's behalf, where applicable and relevant - A list of data element values requested by the requestor - Information about the legal rights of the requestor and specific rationale and basis for the request diff --git a/src/content/docs/resource-tagging/get-started.mdx b/src/content/docs/resource-tagging/get-started.mdx index 5a8aa68ee493d82..b9bc956239e99a5 100644 --- a/src/content/docs/resource-tagging/get-started.mdx +++ b/src/content/docs/resource-tagging/get-started.mdx @@ -26,13 +26,13 @@ curl -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/tags/keys ### Interpreting the response -| Response | Meaning | Action | -| --- | --- | --- | -| **200 OK** with `{"success": true, "result": [...]}` | Tagging is enabled. An empty array is normal if no tags exist yet. | Proceed to the next step. | -| **403** mentioning "permission" or "role" | The caller lacks required permissions. | Verify the caller has a Super Admin, Workers Admin, or Tag Admin role, or that the token has `#com.cloudflare.api.account.tag.list` scope. | -| **403** mentioning "feature" or "gate" | Tagging is not enabled for this account. | Contact [Cloudflare support](/support/contacting-cloudflare-support/) for assistance. | -| **401 Unauthorized** | Authentication failed. | Verify the token is valid, not expired, and formatted correctly in the `Authorization: Bearer` header. | -| Any other response | Unexpected error. | Capture the full response body and contact [Cloudflare support](/support/contacting-cloudflare-support/) with the Account ID, request details, and timestamp. | +| Response | Meaning | Action | +| ---------------------------------------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **200 OK** with `{"success": true, "result": [...]}` | Tagging is enabled. An empty array is normal if no tags exist yet. | Proceed to the next step. | +| **403** mentioning "permission" or "role" | The caller lacks required permissions. | Verify the caller has a Super Admin, Workers Admin, or Tag Admin role, or that the token has `#com.cloudflare.api.account.tag.list` scope. | +| **403** mentioning "feature" or "gate" | Tagging is not enabled for this account. | Contact [Cloudflare support](/support/contacting-cloudflare-support/) for assistance. | +| **401 Unauthorized** | Authentication failed. | Verify the token is valid, not expired, and formatted correctly in the `Authorization: Bearer` header. | +| Any other response | Unexpected error. | Capture the full response body and contact [Cloudflare support](/support/contacting-cloudflare-support/) with the Account ID, request details, and timestamp. | ## 2. Create your first tags diff --git a/src/content/docs/resource-tagging/how-to/index.mdx b/src/content/docs/resource-tagging/how-to/index.mdx index 8c39e93b47e1641..daacb0f1c1aa2d4 100644 --- a/src/content/docs/resource-tagging/how-to/index.mdx +++ b/src/content/docs/resource-tagging/how-to/index.mdx @@ -7,6 +7,6 @@ head: content: How-to guides --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/resource-tagging/how-to/manage-tags.mdx b/src/content/docs/resource-tagging/how-to/manage-tags.mdx index 813ad1a57752b9b..9625cc22be99763 100644 --- a/src/content/docs/resource-tagging/how-to/manage-tags.mdx +++ b/src/content/docs/resource-tagging/how-to/manage-tags.mdx @@ -75,9 +75,9 @@ curl -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/tags?reso ```json { - "environment": "production", - "team": "platform", - "cost-center": "engineering" + "environment": "production", + "team": "platform", + "cost-center": "engineering" } ``` diff --git a/src/content/docs/resource-tagging/reference/error-codes.mdx b/src/content/docs/resource-tagging/reference/error-codes.mdx index 7f1cd73a0d758bf..026f122644541f7 100644 --- a/src/content/docs/resource-tagging/reference/error-codes.mdx +++ b/src/content/docs/resource-tagging/reference/error-codes.mdx @@ -8,19 +8,19 @@ description: Tagging API error codes, causes, and resolutions. ## Error code reference -| Code | HTTP status | Message | Likely cause | Resolution | -| --- | --- | --- | --- | --- | -| `1002` | 400 | Invalid set payload | Request body is malformed or missing required fields | Verify the body is valid JSON with `resource_type`, `resource_id`, and `tags` | -| `1003` | 400 | `resource_type` and `resource_id` are required | Missing query parameters | Include both `resource_type` and `resource_id` in the query string | -| `1006` | 400 | Invalid resource type | Unsupported resource type | Use a [supported resource type](/resource-tagging/reference/resource-types/) | -| `1007` | 400 | tag parameter must be in format... | Tag filter syntax is incorrect | Refer to [tag filtering syntax](/resource-tagging/how-to/filter-resources/) | -| `1009` | 400 | `tag_key` is required | Missing `tag_key` parameter | Include the `tag_key` path parameter | -| `1010` | 400 | too many tag filters (maximum 20) | More than 20 `tag` query parameters | Reduce filters to 20 or fewer, or split across multiple requests | -| `1011` | 400 | tag key too long (maximum 256 characters) | Tag key exceeds 256 characters | Shorten the tag key | -| `1012` | 400 | tag value too long (maximum 1024 characters) | Tag value exceeds 1,024 characters | Shorten the tag value | -| `1013` | 400 | too many OR values in tag filter (maximum 10) | More than 10 comma-separated values in a single filter | Split into multiple filters | -| `1014` | 400 | Invalid tag key | Key contains invalid characters | Use only letters, digits, `_`, `.`, `-` | -| `1015` | 400 | Invalid delete payload | Delete request body is malformed | Verify the body includes `resource_type` and `resource_id` | +| Code | HTTP status | Message | Likely cause | Resolution | +| ------ | ----------- | ---------------------------------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------- | +| `1002` | 400 | Invalid set payload | Request body is malformed or missing required fields | Verify the body is valid JSON with `resource_type`, `resource_id`, and `tags` | +| `1003` | 400 | `resource_type` and `resource_id` are required | Missing query parameters | Include both `resource_type` and `resource_id` in the query string | +| `1006` | 400 | Invalid resource type | Unsupported resource type | Use a [supported resource type](/resource-tagging/reference/resource-types/) | +| `1007` | 400 | tag parameter must be in format... | Tag filter syntax is incorrect | Refer to [tag filtering syntax](/resource-tagging/how-to/filter-resources/) | +| `1009` | 400 | `tag_key` is required | Missing `tag_key` parameter | Include the `tag_key` path parameter | +| `1010` | 400 | too many tag filters (maximum 20) | More than 20 `tag` query parameters | Reduce filters to 20 or fewer, or split across multiple requests | +| `1011` | 400 | tag key too long (maximum 256 characters) | Tag key exceeds 256 characters | Shorten the tag key | +| `1012` | 400 | tag value too long (maximum 1024 characters) | Tag value exceeds 1,024 characters | Shorten the tag value | +| `1013` | 400 | too many OR values in tag filter (maximum 10) | More than 10 comma-separated values in a single filter | Split into multiple filters | +| `1014` | 400 | Invalid tag key | Key contains invalid characters | Use only letters, digits, `_`, `.`, `-` | +| `1015` | 400 | Invalid delete payload | Delete request body is malformed | Verify the body includes `resource_type` and `resource_id` | :::note[Error 1007 note] The error message text references `:` as the tag filter separator (for example, `key:value`), but the API implementation uses `=` in query parameters (for example, `tag=key=value`). The error message is outdated — always use `=` when constructing tag filters. diff --git a/src/content/docs/resource-tagging/reference/index.mdx b/src/content/docs/resource-tagging/reference/index.mdx index 6de666492e69204..9361dd2c4b8a0cd 100644 --- a/src/content/docs/resource-tagging/reference/index.mdx +++ b/src/content/docs/resource-tagging/reference/index.mdx @@ -7,6 +7,6 @@ head: content: Reference --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/resource-tagging/reference/limits.mdx b/src/content/docs/resource-tagging/reference/limits.mdx index 350cb2973f6183a..85a5ee4696d5f45 100644 --- a/src/content/docs/resource-tagging/reference/limits.mdx +++ b/src/content/docs/resource-tagging/reference/limits.mdx @@ -8,14 +8,14 @@ description: API limits, tag key validation rules, and pagination behavior. ## API limits -| Limit | Value | Error code | -| --- | --- | --- | -| Maximum tags per account | 10,000 (beta) | N/A | -| Maximum tag key length | 256 characters | `1011` | -| Maximum tag value length | 1,024 characters | `1012` | -| Maximum tag filters per query | 20 | `1010` | -| Maximum OR values per filter | 10 | `1013` | -| Results per page | 100 (fixed) | N/A | +| Limit | Value | Error code | +| ----------------------------- | ---------------- | ---------- | +| Maximum tags per account | 10,000 (beta) | N/A | +| Maximum tag key length | 256 characters | `1011` | +| Maximum tag value length | 1,024 characters | `1012` | +| Maximum tag filters per query | 20 | `1010` | +| Maximum OR values per filter | 10 | `1013` | +| Results per page | 100 (fixed) | N/A | When a limit is exceeded, the API returns `400 Bad Request` with the corresponding error code. @@ -45,16 +45,16 @@ Tag keys must follow these character rules: ### Examples -| Key | Valid | Reason | -| --- | --- | --- | -| `environment` | Yes | Letters only | -| `team_name` | Yes | Underscore | -| `cost-center` | Yes | Hyphen | -| `owner.email` | Yes | Period | -| `env123` | Yes | Letters and digits | -| `env name` | **No** | Contains space | -| `team@work` | **No** | Special character `@` | -| (empty) | **No** | Empty string | +| Key | Valid | Reason | +| ------------- | ------ | --------------------- | +| `environment` | Yes | Letters only | +| `team_name` | Yes | Underscore | +| `cost-center` | Yes | Hyphen | +| `owner.email` | Yes | Period | +| `env123` | Yes | Letters and digits | +| `env name` | **No** | Contains space | +| `team@work` | **No** | Special character `@` | +| (empty) | **No** | Empty string | Invalid tag keys return `400 Bad Request` with error code `1014`. @@ -63,6 +63,7 @@ Invalid tag keys return `400 Bad Request` with error code `1014`. List endpoints use cursor-based pagination with a fixed page size of 100. The page size is not configurable. Paginated endpoints: + - `GET /accounts/{account_id}/tags/keys` - `GET /accounts/{account_id}/tags/resources` - `GET /accounts/{account_id}/tags/values/{tag_key}` diff --git a/src/content/docs/resource-tagging/reference/resource-types.mdx b/src/content/docs/resource-tagging/reference/resource-types.mdx index 65c23a2da688ce7..0d2bab2a3ec669c 100644 --- a/src/content/docs/resource-tagging/reference/resource-types.mdx +++ b/src/content/docs/resource-tagging/reference/resource-types.mdx @@ -12,51 +12,51 @@ The Tagging API supports the following resource types across account-level and z Use `/accounts/{account_id}/tags` endpoints for these resource types. -| Resource type | Required extra fields | Description | -| --- | --- | --- | -| `account` | None | The Cloudflare account itself | -| `access_application` | None | Access application | -| `access_group` | None | Access group | -| `account_ruleset` | None | Account-level ruleset | -| `ai_gateway` | None | AI Gateway | -| `alerting_policy` | None | Notification policy | -| `alerting_webhook` | None | Notification webhook destination | -| `cloudflared_tunnel` | None | Cloudflare Tunnel | -| `d1_database` | None | D1 database | -| `durable_object_namespace` | None | Durable Objects namespace | -| `gateway_list` | None | Gateway list | -| `gateway_rule` | None | Gateway rule | -| `image` | None | Cloudflare Image | -| `kv_namespace` | None | Workers KV namespace | -| `load_balancer_monitor` | None | Load Balancer monitor | -| `load_balancer_pool` | None | Load Balancer pool | -| `pages_project` | None | Pages project | -| `queue` | None | Queue | -| `r2_bucket` | None | R2 bucket | -| `resource_share` | None | Resource share | -| `stream_live_input` | None | Stream live input | -| `stream_video` | None | Stream video | -| `vectorize_index` | None | Vectorize index | -| `worker` | None | Workers script | -| `worker_version` | `worker_id` | Specific version of a Worker | +| Resource type | Required extra fields | Description | +| -------------------------- | --------------------- | -------------------------------- | +| `account` | None | The Cloudflare account itself | +| `access_application` | None | Access application | +| `access_group` | None | Access group | +| `account_ruleset` | None | Account-level ruleset | +| `ai_gateway` | None | AI Gateway | +| `alerting_policy` | None | Notification policy | +| `alerting_webhook` | None | Notification webhook destination | +| `cloudflared_tunnel` | None | Cloudflare Tunnel | +| `d1_database` | None | D1 database | +| `durable_object_namespace` | None | Durable Objects namespace | +| `gateway_list` | None | Gateway list | +| `gateway_rule` | None | Gateway rule | +| `image` | None | Cloudflare Image | +| `kv_namespace` | None | Workers KV namespace | +| `load_balancer_monitor` | None | Load Balancer monitor | +| `load_balancer_pool` | None | Load Balancer pool | +| `pages_project` | None | Pages project | +| `queue` | None | Queue | +| `r2_bucket` | None | R2 bucket | +| `resource_share` | None | Resource share | +| `stream_live_input` | None | Stream live input | +| `stream_video` | None | Stream video | +| `vectorize_index` | None | Vectorize index | +| `worker` | None | Workers script | +| `worker_version` | `worker_id` | Specific version of a Worker | ## Zone-level resources Use `/zones/{zone_id}/tags` endpoints for these resource types. -| Resource type | Required extra fields | Description | -| --- | --- | --- | -| `access_application_policy` | `access_application_id` | Access application policy | -| `api_gateway_operation` | None | API Gateway operation | -| `custom_certificate` | None | Custom SSL certificate | -| `custom_hostname` | None | Custom hostname (SSL for SaaS) | -| `dns_record` | None | DNS record | -| `healthcheck` | None | Health check | -| `load_balancer` | None | Load Balancer | -| `managed_client_certificate` | None | Managed client certificate (mTLS) | -| `worker_route` | None | Worker route | -| `zone` | None | DNS zone | -| `zone_ruleset` | None | Zone-level ruleset | +| Resource type | Required extra fields | Description | +| ---------------------------- | ----------------------- | --------------------------------- | +| `access_application_policy` | `access_application_id` | Access application policy | +| `api_gateway_operation` | None | API Gateway operation | +| `custom_certificate` | None | Custom SSL certificate | +| `custom_hostname` | None | Custom hostname (SSL for SaaS) | +| `dns_record` | None | DNS record | +| `healthcheck` | None | Health check | +| `load_balancer` | None | Load Balancer | +| `managed_client_certificate` | None | Managed client certificate (mTLS) | +| `worker_route` | None | Worker route | +| `zone` | None | DNS zone | +| `zone_ruleset` | None | Zone-level ruleset | ## Extra fields diff --git a/src/content/docs/rules/normalization/settings.mdx b/src/content/docs/rules/normalization/settings.mdx index 5caa0fb2aa550f7..7243dde493afff1 100644 --- a/src/content/docs/rules/normalization/settings.mdx +++ b/src/content/docs/rules/normalization/settings.mdx @@ -35,8 +35,8 @@ Default value: _Off_ Configures URLs sent to the origin: - - When enabled, requests sent to the origin are normalized. - - When disabled, requests sent to the origin are not modified. +- When enabled, requests sent to the origin are normalized. +- When disabled, requests sent to the origin are not modified. You can only view and enable this option when **Normalize incoming URLs** is enabled. diff --git a/src/content/docs/rules/snippets/when-to-use.mdx b/src/content/docs/rules/snippets/when-to-use.mdx index e86e4a0e07433ec..37954e262869ef1 100644 --- a/src/content/docs/rules/snippets/when-to-use.mdx +++ b/src/content/docs/rules/snippets/when-to-use.mdx @@ -86,7 +86,7 @@ Snippets are ideal for fast, cost-free request and response modifications at the | Route traffic dynamically between [origin servers](/rules/snippets/examples/serve-different-origin/) | ✅ | ✅ | | [Authenticate](/rules/snippets/examples/auth-with-headers/) requests, [pre-sign](/cache/interaction-cloudflare-products/waf-snippets/) URLs, run [A/B testing](/rules/snippets/examples/ab-testing-same-url/) | ✅ | ✅ | | Define logic using [JavaScript and Web APIs](/workers/languages/javascript/) | ✅ | ✅ | -| Perform compute-heavy tasks (for example, [AI](/workers-ai/), [image transformations](/images/optimization/transformations/transform-via-workers/)) | ❌ | ✅ | +| Perform compute-heavy tasks (for example, [AI](/workers-ai/), [image transformations](/images/optimization/transformations/transform-via-workers/)) | ❌ | ✅ | | Store persistent data (for example, [KV](/kv/), [Durable Objects](/durable-objects/), and [D1](/d1/)) | ❌ | ✅ | | Build [APIs](/d1/tutorials/build-a-comments-api/) and [full-stack applications](/pages/framework-guides/deploy-an-astro-site/#video-tutorial) | ❌ | ✅ | | Use TypeScript, Python, Rust, or other programming [languages](/workers/languages/) | ❌ | ✅ | diff --git a/src/content/docs/rules/transform/managed-transforms/reference.mdx b/src/content/docs/rules/transform/managed-transforms/reference.mdx index 7167193080e4368..d28441888bab606 100644 --- a/src/content/docs/rules/transform/managed-transforms/reference.mdx +++ b/src/content/docs/rules/transform/managed-transforms/reference.mdx @@ -87,7 +87,6 @@ Turning on [IP geolocation](/network/ip-geolocation/) will send a `cf-ipcountry` Cloudflare always converts non-ASCII characters to UTF-8 in HTTP request and response header values. This applies to location headers added by the **Add visitor location headers** managed transform. - ### Add "True-Client-IP" header :::note diff --git a/src/content/docs/ruleset-engine/about/index.mdx b/src/content/docs/ruleset-engine/about/index.mdx index 4627da09be58e13..b2b96116594e34b 100644 --- a/src/content/docs/ruleset-engine/about/index.mdx +++ b/src/content/docs/ruleset-engine/about/index.mdx @@ -9,18 +9,17 @@ sidebar: head: - tag: title content: About Ruleset Engine - --- The Cloudflare Ruleset Engine allows you to create and deploy rules and rulesets. The engine syntax, inspired by the Wireshark Display Filter language, is defined by the [Rules language](/ruleset-engine/rules-language/). Cloudflare uses the Ruleset Engine in different products, allowing you to configure several products using the same basic syntax. There are several elements involved in the configuration and use of the Ruleset Engine. These elements are: -* [**Phase**](/ruleset-engine/about/phases/): Defines a stage in the life of a request where you can execute rulesets. -* [**Ruleset**](/ruleset-engine/about/rulesets/): Defines a versioned set of rules. You deploy rulesets to a phase, where they execute. -* [**Rule**](/ruleset-engine/about/rules/): Defines a filter and an action to perform on incoming requests that match the filter expression. A rule with an `execute` action executes a ruleset. +- [**Phase**](/ruleset-engine/about/phases/): Defines a stage in the life of a request where you can execute rulesets. +- [**Ruleset**](/ruleset-engine/about/rulesets/): Defines a versioned set of rules. You deploy rulesets to a phase, where they execute. +- [**Rule**](/ruleset-engine/about/rules/): Defines a filter and an action to perform on incoming requests that match the filter expression. A rule with an `execute` action executes a ruleset. -*** +--- ## Get started diff --git a/src/content/docs/ruleset-engine/managed-rulesets/override-examples/link-override-ddos-l34-rule-sensitivity.mdx b/src/content/docs/ruleset-engine/managed-rulesets/override-examples/link-override-ddos-l34-rule-sensitivity.mdx index 195f92316c007d2..4ead3afce0027eb 100644 --- a/src/content/docs/ruleset-engine/managed-rulesets/override-examples/link-override-ddos-l34-rule-sensitivity.mdx +++ b/src/content/docs/ruleset-engine/managed-rulesets/override-examples/link-override-ddos-l34-rule-sensitivity.mdx @@ -7,5 +7,4 @@ title: Adjust an L3/4 DDoS rule external_link: /ddos-protection/managed-rulesets/network/network-overrides/configure-api/#configure-an-override-for-the-network-layer-ddos-attack-protection-managed-ruleset sidebar: order: 7 - --- diff --git a/src/content/docs/ruleset-engine/rulesets-api/endpoints.mdx b/src/content/docs/ruleset-engine/rulesets-api/endpoints.mdx index 4e1b9c1603ab0bf..5e0d01303a761d5 100644 --- a/src/content/docs/ruleset-engine/rulesets-api/endpoints.mdx +++ b/src/content/docs/ruleset-engine/rulesets-api/endpoints.mdx @@ -34,14 +34,12 @@ For help with endpoints and pagination, refer to [Getting Started: Endpoints](/f :::note - The Rulesets API endpoints require a value for `{account_id}` or `{zone_id}`. To retrieve a list of accounts you have access to, use the [List Accounts](/api/resources/accounts/methods/list/) operation. Note the IDs of the accounts you want to manage. To retrieve a list of zones you have access to, use the [List Zones](/api/resources/zones/methods/list/) operation. Note the IDs of the zones you want to manage. - ::: The Cloudflare Rulesets API supports the operations outlined below. Visit the associated links for API endpoints and examples. @@ -49,206 +47,235 @@ The Cloudflare Rulesets API supports the operations outlined below. Visit the as ## List and view rulesets - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OperationMethodNotes
    - List existing rulesets - - GET - -

    Returns the list of existing rulesets at the account level or at the zone level.

    -
    - View a specific ruleset - - GET - -

    Returns the properties of the most recent version of a specific ruleset.

    -
    - - List all versions of a ruleset - - - GET - -

    Returns a list of all the versions of a ruleset.

    -
    - - View a specific version of a ruleset - - - GET - -

    Returns the configuration of a specific version of a ruleset, including its rules.

    -
    - - List rules in a managed ruleset with a specific tag - - - GET - -

    Returns a list of all the rules in a managed ruleset with a specific tag.

    -
    OperationMethodNotes
    + + List existing rulesets + + + GET + +

    + Returns the list of existing rulesets at the account level or at the + zone level. +

    +
    + + View a specific ruleset + + + GET + +

    + Returns the properties of the most recent version of a specific + ruleset. +

    +
    + + List all versions of a ruleset + + + GET + +

    Returns a list of all the versions of a ruleset.

    +
    + + View a specific version of a ruleset + + + GET + +

    + Returns the configuration of a specific version of a ruleset, + including its rules. +

    +
    + + List rules in a managed ruleset with a specific tag + + + GET + +

    + Returns a list of all the rules in a managed ruleset with a specific + tag. +

    +
    ## Create rulesets - - - - - - - - - - - - - - + + + + + + + + + + + + + +
    OperationVerbNotes
    - Create a ruleset - - POST - -

    Creates a new ruleset or a new phase entry point.

    -
    OperationVerbNotes
    + Create a ruleset + + POST + +

    Creates a new ruleset or a new phase entry point.

    +
    ## Update and deploy rulesets - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    OperationVerbNotes
    - Update or deploy a ruleset - - PUT - -

    - Updates the basic properties of a ruleset and the list of rules in the ruleset. -
    - Allows you to configure the execution of managed rulesets. -

    -
    - Add a rule to a ruleset - - POST - -

    - Adds a single rule to an existing ruleset. -
    - Allows you to add a single rule without having to include all the existing ruleset rules - in the request. -

    -
    - Update a rule in a ruleset - - PATCH - -

    - Updates the definition of a single rule within a ruleset. -
    - Allows you to change the order of a rule in a ruleset. -

    -
    - Delete a rule in a ruleset - - DELETE - -

    Deletes a single rule in a ruleset.

    -
    OperationVerbNotes
    + + Update or deploy a ruleset + + + PUT + +

    + Updates the basic properties of a ruleset and the list of rules in the + ruleset. +
    + Allows you to configure the execution of managed rulesets. +

    +
    + + Add a rule to a ruleset + + + POST + +

    + Adds a single rule to an existing ruleset. +
    + Allows you to add a single rule without having to include all the + existing ruleset rules in the request. +

    +
    + + Update a rule in a ruleset + + + PATCH + +

    + Updates the definition of a single rule within a ruleset. +
    + Allows you to change the order of a rule in a ruleset. +

    +
    + + Delete a rule in a ruleset + + + DELETE + +

    Deletes a single rule in a ruleset.

    +
    ## Delete rulesets - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + +
    OperationVerbNotes
    - Delete a ruleset - - DELETE - -

    Deletes all the versions of a ruleset.

    -
    - Delete a ruleset version - - DELETE - -

    Deletes a specific version of a ruleset.

    -
    OperationVerbNotes
    + + Delete a ruleset + + + DELETE + +

    Deletes all the versions of a ruleset.

    +
    + + Delete a ruleset version + + + DELETE + +

    Deletes a specific version of a ruleset.

    +
    diff --git a/src/content/docs/sandbox/bridge/http-api.mdx b/src/content/docs/sandbox/bridge/http-api.mdx index 8454191fa57021e..ba425ec0d9cf393 100644 --- a/src/content/docs/sandbox/bridge/http-api.mdx +++ b/src/content/docs/sandbox/bridge/http-api.mdx @@ -28,10 +28,10 @@ When `SANDBOX_API_KEY` is not configured, authentication is skipped for local de The bridge serves its own API documentation: -| Method | Route | Description | -|---|---|---| -| `GET` | `/v1/openapi.json` | Machine-readable OpenAPI 3.1 schema. | -| `GET` | `/v1/openapi` | Interactive HTML documentation. | +| Method | Route | Description | +| ------ | ------------------ | ------------------------------------ | +| `GET` | `/v1/openapi.json` | Machine-readable OpenAPI 3.1 schema. | +| `GET` | `/v1/openapi` | Interactive HTML documentation. | Both routes accept authentication via Bearer header or `?token=` query parameter. @@ -39,25 +39,25 @@ When running locally with `npm run dev`, open `http://localhost:8787/v1/openapi` ## Sandbox lifecycle -| Method | Route | Description | -|---|---|---| -| `POST` | `/v1/sandbox` | Create a new sandbox. Returns `{"id": ""}`. | -| `DELETE` | `/v1/sandbox/:id` | Destroy the sandbox container. Returns `204`. | -| `GET` | `/v1/sandbox/:id/running` | Check container liveness. Returns `{"running": true\|false}`. | +| Method | Route | Description | +| -------- | ------------------------- | ------------------------------------------------------------- | +| `POST` | `/v1/sandbox` | Create a new sandbox. Returns `{"id": ""}`. | +| `DELETE` | `/v1/sandbox/:id` | Destroy the sandbox container. Returns `204`. | +| `GET` | `/v1/sandbox/:id/running` | Check container liveness. Returns `{"running": true\|false}`. | ## Command execution -| Method | Route | Description | -|---|---|---| +| Method | Route | Description | +| ------ | ---------------------- | ----------------------------------------------------- | | `POST` | `/v1/sandbox/:id/exec` | Run a command. Response is an SSE stream (see below). | The `/exec` endpoint accepts a JSON body: ```json { - "argv": ["sh", "-lc", "echo hello"], - "timeout_ms": 10000, - "cwd": "/workspace" + "argv": ["sh", "-lc", "echo hello"], + "timeout_ms": 10000, + "cwd": "/workspace" } ``` @@ -69,27 +69,27 @@ Each element of the `argv` array is escaped using ANSI-C `$'...'` quoting before The response is a `text/event-stream` with the following event types: -| Event | Data | Description | -|---|---|---| -| `stdout` | Base64-encoded chunk | Standard output from the command. | -| `stderr` | Base64-encoded chunk | Standard error from the command. | -| `exit` | `{"exit_code": N}` | Command completed. Terminal event. | -| `error` | `{"error": "…", "code": "…"}` | Command failed. Terminal event. | +| Event | Data | Description | +| -------- | ----------------------------- | ---------------------------------- | +| `stdout` | Base64-encoded chunk | Standard output from the command. | +| `stderr` | Base64-encoded chunk | Standard error from the command. | +| `exit` | `{"exit_code": N}` | Command completed. Terminal event. | +| `error` | `{"error": "…", "code": "…"}` | Command failed. Terminal event. | ## File operations -| Method | Route | Description | -|---|---|---| -| `GET` | `/v1/sandbox/:id/file/*` | Read a file. Returns raw bytes (`application/octet-stream`). | -| `PUT` | `/v1/sandbox/:id/file/*` | Write a file. Request body is raw bytes. Returns `{"ok": true}`. Max 32 MiB. | +| Method | Route | Description | +| ------ | ------------------------ | ---------------------------------------------------------------------------- | +| `GET` | `/v1/sandbox/:id/file/*` | Read a file. Returns raw bytes (`application/octet-stream`). | +| `PUT` | `/v1/sandbox/:id/file/*` | Write a file. Request body is raw bytes. Returns `{"ok": true}`. Max 32 MiB. | The file path is encoded in the URL after `/file/`. All paths must resolve within `/workspace`. Path traversal attempts (for example, `../../etc/passwd`) are rejected. ## Workspace persistence -| Method | Route | Description | -|---|---|---| -| `POST` | `/v1/sandbox/:id/persist` | Serialize `/workspace` to a tar archive. Returns raw tar bytes. | +| Method | Route | Description | +| ------ | ------------------------- | ------------------------------------------------------------------ | +| `POST` | `/v1/sandbox/:id/persist` | Serialize `/workspace` to a tar archive. Returns raw tar bytes. | | `POST` | `/v1/sandbox/:id/hydrate` | Populate `/workspace` from a tar archive sent as the request body. | The `/persist` endpoint accepts an optional `excludes` query parameter — a comma-separated list of relative paths to exclude from the archive. @@ -98,10 +98,10 @@ The `/hydrate` endpoint accepts a raw tar payload up to 32 MiB. ## Bucket mounts -| Method | Route | Description | -|---|---|---| -| `POST` | `/v1/sandbox/:id/mount` | Mount an S3-compatible bucket as a local directory. | -| `POST` | `/v1/sandbox/:id/unmount` | Unmount a previously mounted bucket. | +| Method | Route | Description | +| ------ | ------------------------- | --------------------------------------------------- | +| `POST` | `/v1/sandbox/:id/mount` | Mount an S3-compatible bucket as a local directory. | +| `POST` | `/v1/sandbox/:id/unmount` | Unmount a previously mounted bucket. | The `/mount` endpoint accepts a JSON body. Two flows are supported: @@ -111,12 +111,12 @@ Omit `endpoint` and pass the Worker R2 binding name in `bucket`: ```json { - "bucket": "MY_BUCKET", - "mountPath": "/mnt/data", - "options": { - "readOnly": false, - "prefix": "/subdir" - } + "bucket": "MY_BUCKET", + "mountPath": "/mnt/data", + "options": { + "readOnly": false, + "prefix": "/subdir" + } } ``` @@ -126,17 +126,17 @@ For an explicit S3-compatible endpoint mount, include `endpoint` and optionally ```json { - "bucket": "my-r2-bucket", - "mountPath": "/mnt/data", - "options": { - "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com", - "readOnly": false, - "prefix": "/subdir", - "credentials": { - "accessKeyId": "...", - "secretAccessKey": "..." - } - } + "bucket": "my-r2-bucket", + "mountPath": "/mnt/data", + "options": { + "endpoint": "https://ACCOUNT_ID.r2.cloudflarestorage.com", + "readOnly": false, + "prefix": "/subdir", + "credentials": { + "accessKeyId": "...", + "secretAccessKey": "..." + } + } } ``` @@ -144,10 +144,10 @@ When `endpoint` is provided, `bucket` means the remote bucket name. Credentials ## Sessions -| Method | Route | Description | -|---|---|---| -| `POST` | `/v1/sandbox/:id/session` | Create a session. Returns `{"id": ""}`. | -| `DELETE` | `/v1/sandbox/:id/session/:sid` | Delete a session. Returns `204`. | +| Method | Route | Description | +| -------- | ------------------------------ | --------------------------------------------------- | +| `POST` | `/v1/sandbox/:id/session` | Create a session. Returns `{"id": ""}`. | +| `DELETE` | `/v1/sandbox/:id/session/:sid` | Delete a session. Returns `204`. | Sessions isolate working directory, environment variables, and command execution state within a sandbox. Pass the `Session-Id` header on `/exec`, `/file/*`, and `/pty` requests to scope them to a session. @@ -155,35 +155,35 @@ When no `Session-Id` header is provided, requests use the sandbox default sessio ## Terminal (PTY) -| Method | Route | Description | -|---|---|---| -| `GET` | `/v1/sandbox/:id/pty` | Upgrade to a WebSocket PTY session. | +| Method | Route | Description | +| ------ | --------------------- | ----------------------------------- | +| `GET` | `/v1/sandbox/:id/pty` | Upgrade to a WebSocket PTY session. | Query parameters: -| Parameter | Type | Default | Description | -|---|---|---|---| -| `cols` | number | `80` | Terminal width in columns. | -| `rows` | number | `24` | Terminal height in rows. | -| `shell` | string | — | Shell binary (for example, `/bin/bash`). | -| `session` | string | — | Session ID for session-scoped PTY. | +| Parameter | Type | Default | Description | +| --------- | ------ | ------- | ---------------------------------------- | +| `cols` | number | `80` | Terminal width in columns. | +| `rows` | number | `24` | Terminal height in rows. | +| `shell` | string | — | Shell binary (for example, `/bin/bash`). | +| `session` | string | — | Session ID for session-scoped PTY. | The WebSocket carries binary frames for terminal I/O and JSON text frames for control messages: -| Direction | Frame type | Content | -|---|---|---| -| Client to server | Binary | UTF-8 encoded keystrokes. | -| Server to client | Binary | Terminal output including ANSI escape sequences. | +| Direction | Frame type | Content | +| ---------------- | ----------- | ------------------------------------------------------------------------------ | +| Client to server | Binary | UTF-8 encoded keystrokes. | +| Server to client | Binary | Terminal output including ANSI escape sequences. | | Client to server | Text (JSON) | Control messages (for example, `{"type": "resize", "cols": 120, "rows": 30}`). | -| Server to client | Text (JSON) | Status messages (`ready`, `exit`, `error`). | +| Server to client | Text (JSON) | Status messages (`ready`, `exit`, `error`). | ## Warm pool -| Method | Route | Description | -|---|---|---| -| `GET` | `/v1/pool/stats` | Current pool statistics. | -| `POST` | `/v1/pool/prime` | Start the warm pool alarm loop. | -| `POST` | `/v1/pool/shutdown-prewarmed` | Stop all idle warm containers. | +| Method | Route | Description | +| ------ | ----------------------------- | ------------------------------- | +| `GET` | `/v1/pool/stats` | Current pool statistics. | +| `POST` | `/v1/pool/prime` | Start the warm pool alarm loop. | +| `POST` | `/v1/pool/shutdown-prewarmed` | Stop all idle warm containers. | The warm pool pre-starts sandbox containers so new sessions boot instantly. Configure it with environment variables in `wrangler.jsonc`: @@ -201,9 +201,9 @@ A cron trigger (`* * * * *`) primes the pool automatically after deployment. Set ## Health check -| Method | Route | Description | -|---|---|---| -| `GET` | `/health` | Unauthenticated liveness probe. Returns `{"ok": true}`. | +| Method | Route | Description | +| ------ | --------- | ------------------------------------------------------- | +| `GET` | `/health` | Unauthenticated liveness probe. Returns `{"ok": true}`. | ## Related resources diff --git a/src/content/docs/sandbox/concepts/containers.mdx b/src/content/docs/sandbox/concepts/containers.mdx index dd9a725669a262e..e1a711233feb34b 100644 --- a/src/content/docs/sandbox/concepts/containers.mdx +++ b/src/content/docs/sandbox/concepts/containers.mdx @@ -30,16 +30,18 @@ apt-get update && apt-get install -y redis-server The container provides a standard Linux filesystem. You can read and write anywhere you have permissions. **Standard directories**: + - `/workspace` - Default working directory for user code - `/tmp` - Temporary files - `/home` - User home directory - `/usr/bin`, `/usr/local/bin` - Executable binaries **Example**: + ```typescript -await sandbox.writeFile('/workspace/app.py', 'print("Hello")'); -await sandbox.writeFile('/tmp/cache.json', '{}'); -await sandbox.exec('ls -la /workspace'); +await sandbox.writeFile("/workspace/app.py", 'print("Hello")'); +await sandbox.writeFile("/tmp/cache.json", "{}"); +await sandbox.exec("ls -la /workspace"); ``` ## Process management @@ -47,20 +49,23 @@ await sandbox.exec('ls -la /workspace'); Processes run as you'd expect in a regular Linux environment. **Foreground processes** (`exec()`): + ```typescript -const result = await sandbox.exec('npm test'); +const result = await sandbox.exec("npm test"); // Waits for completion, returns output ``` **Background processes** (`startProcess()`): + ```typescript -const process = await sandbox.startProcess('node server.js'); +const process = await sandbox.startProcess("node server.js"); // Returns immediately, process runs in background ``` ## Network capabilities **Outbound connections** work: + ```bash curl https://api.example.com/data pip install requests @@ -68,9 +73,10 @@ npm install express ``` **Inbound connections** require port exposure: + ```typescript const { hostname } = new URL(request.url); -await sandbox.startProcess('python -m http.server 8000'); +await sandbox.startProcess("python -m http.server 8000"); const exposed = await sandbox.exposePort(8000, { hostname }); console.log(exposed.url); // Public URL ``` @@ -80,6 +86,7 @@ When using `wrangler dev`, you must add `EXPOSE` directives to your Dockerfile f ::: **Localhost** works within sandbox: + ```bash redis-server & # Start server redis-cli ping # Connect locally @@ -88,15 +95,18 @@ redis-cli ping # Connect locally ## Security **Between sandboxes** (isolated): + - Each sandbox is a separate container - Filesystem, memory and network are all isolated **Within sandbox** (shared): + - All processes see the same files - Processes can communicate with each other - Environment variables are session-scoped To run untrusted code, use separate sandboxes per user: + ```typescript const sandbox = getSandbox(env.Sandbox, `user-${userId}`); ``` @@ -104,6 +114,7 @@ const sandbox = getSandbox(env.Sandbox, `user-${userId}`); ## Limitations **Cannot**: + - Load kernel modules or access host hardware ## Related resources diff --git a/src/content/docs/sandbox/concepts/preview-urls.mdx b/src/content/docs/sandbox/concepts/preview-urls.mdx index 7fdf50c71ce90b4..43eecbf9c151321 100644 --- a/src/content/docs/sandbox/concepts/preview-urls.mdx +++ b/src/content/docs/sandbox/concepts/preview-urls.mdx @@ -24,9 +24,9 @@ const req = await fetch(`${tunnel.url}/api/users`); // => GET http://localhost:8 Cloudflare Tunnel support currently has the following limitations: - - No control over generated URL. - - No authentication mechanism beyond randomly generated URL. - - Each URL uses an additional `cloudflared` process on the sandbox. +- No control over generated URL. +- No authentication mechanism beyond randomly generated URL. +- Each URL uses an additional `cloudflared` process on the sandbox. :::note[Production requires custom domain] We are working on production deployments, custom hostnames and authentication for Cloudflare Tunnel support. In the mean time we recommend using `exposePort()` and `proxyToSandbox()` documented below under [Production usage, stable URLs and custom domains](#). diff --git a/src/content/docs/sandbox/concepts/sandboxes.mdx b/src/content/docs/sandbox/concepts/sandboxes.mdx index e0828106d246dbd..cd86f4ac0b8f21d 100644 --- a/src/content/docs/sandbox/concepts/sandboxes.mdx +++ b/src/content/docs/sandbox/concepts/sandboxes.mdx @@ -126,8 +126,8 @@ try { Containers with [`keepAlive: true`](/sandbox/configuration/sandbox-options/#keepalive) require explicit management since they do not timeout automatically: ```typescript -const sandbox = getSandbox(env.Sandbox, 'persistent-task', { - keepAlive: true +const sandbox = getSandbox(env.Sandbox, "persistent-task", { + keepAlive: true, }); // Later, when done with long-running work diff --git a/src/content/docs/sandbox/concepts/security.mdx b/src/content/docs/sandbox/concepts/security.mdx index 5c15d8d4295ba00..9954cb9833e9732 100644 --- a/src/content/docs/sandbox/concepts/security.mdx +++ b/src/content/docs/sandbox/concepts/security.mdx @@ -36,7 +36,7 @@ For complete isolation, use separate sandboxes per user: const userSandbox = getSandbox(env.Sandbox, `user-${userId}`); // Bad - Users sharing one sandbox -const shared = getSandbox(env.Sandbox, 'shared'); +const shared = getSandbox(env.Sandbox, "shared"); // Users can read each other's files! ``` @@ -53,12 +53,12 @@ await sandbox.exec(`cat ${filename}`); // User could input: "file.txt; rm -rf /" // Safe - validate input -const filename = userInput.replace(/[^a-zA-Z0-9._-]/g, ''); +const filename = userInput.replace(/[^a-zA-Z0-9._-]/g, ""); await sandbox.exec(`cat ${filename}`); // Better - use file API -await sandbox.writeFile('/tmp/input', userInput); -await sandbox.exec('cat /tmp/input'); +await sandbox.writeFile("/tmp/input", userInput); +await sandbox.exec("cat /tmp/input"); ``` ## Authentication @@ -69,16 +69,16 @@ Sandbox IDs provide basic access control but aren't cryptographically secure. Ad ```typescript export default { - async fetch(request: Request, env: Env): Promise { - const userId = await authenticate(request); - if (!userId) { - return new Response('Unauthorized', { status: 401 }); - } - - // User can only access their sandbox - const sandbox = getSandbox(env.Sandbox, userId); - return Response.json({ authorized: true }); - } + async fetch(request: Request, env: Env): Promise { + const userId = await authenticate(request); + if (!userId) { + return new Response("Unauthorized", { status: 401 }); + } + + // User can only access their sandbox + const sandbox = getSandbox(env.Sandbox, userId); + return Response.json({ authorized: true }); + }, }; ``` @@ -125,15 +125,18 @@ Use environment variables, not hardcoded secrets: ```typescript // Bad - hardcoded in file -await sandbox.writeFile('/workspace/config.js', ` +await sandbox.writeFile( + "/workspace/config.js", + ` const API_KEY = 'sk_live_abc123'; -`); +`, +); // Good - use environment variables -await sandbox.startProcess('node app.js', { - env: { - API_KEY: env.API_KEY, // From Worker environment binding - } +await sandbox.startProcess("node app.js", { + env: { + API_KEY: env.API_KEY, // From Worker environment binding + }, }); ``` @@ -141,10 +144,10 @@ Clean up temporary sensitive data: ```typescript try { - await sandbox.writeFile('/tmp/sensitive.txt', secretData); - await sandbox.exec('python process.py /tmp/sensitive.txt'); + await sandbox.writeFile("/tmp/sensitive.txt", secretData); + await sandbox.exec("python process.py /tmp/sensitive.txt"); } finally { - await sandbox.deleteFile('/tmp/sensitive.txt'); + await sandbox.deleteFile("/tmp/sensitive.txt"); } ``` @@ -178,30 +181,34 @@ This pattern is useful when accessing GitHub for private repository operations, ## Best practices **Use separate sandboxes for isolation**: + ```typescript const sandbox = getSandbox(env.Sandbox, `user-${userId}`); ``` **Validate all inputs**: + ```typescript -const safe = input.replace(/[^a-zA-Z0-9._-]/g, ''); +const safe = input.replace(/[^a-zA-Z0-9._-]/g, ""); await sandbox.exec(`command ${safe}`); ``` **Use environment variables for secrets**: + ```typescript -await sandbox.startProcess('node app.js', { - env: { API_KEY: env.API_KEY } +await sandbox.startProcess("node app.js", { + env: { API_KEY: env.API_KEY }, }); ``` **Clean up temporary resources**: + ```typescript try { - const sandbox = getSandbox(env.Sandbox, sessionId); - await sandbox.exec('npm test'); + const sandbox = getSandbox(env.Sandbox, sessionId); + await sandbox.exec("npm test"); } finally { - await sandbox.destroy(); + await sandbox.destroy(); } ``` diff --git a/src/content/docs/sandbox/concepts/sessions.mdx b/src/content/docs/sandbox/concepts/sessions.mdx index 1697cf6e8795d7f..dd054b3036ce8f7 100644 --- a/src/content/docs/sandbox/concepts/sessions.mdx +++ b/src/content/docs/sandbox/concepts/sessions.mdx @@ -18,14 +18,14 @@ Sessions are bash shell execution contexts within a sandbox. Think of them like Every sandbox has a default session that maintains shell state between commands while the container is active: ```typescript -const sandbox = getSandbox(env.Sandbox, 'my-sandbox'); +const sandbox = getSandbox(env.Sandbox, "my-sandbox"); // These commands run in the default session await sandbox.exec("cd /app"); -await sandbox.exec("pwd"); // Output: /app +await sandbox.exec("pwd"); // Output: /app await sandbox.exec("export MY_VAR=hello"); -await sandbox.exec("echo $MY_VAR"); // Output: hello +await sandbox.exec("echo $MY_VAR"); // Output: hello ``` Working directory, environment variables, and exported variables carry over between commands. This state resets if the container restarts due to inactivity. @@ -36,7 +36,7 @@ The container automatically creates sessions on first use. If you reference a no ```typescript // This session doesn't exist yet -const result = await sandbox.exec('echo hello', { sessionId: 'new-session' }); +const result = await sandbox.exec("echo hello", { sessionId: "new-session" }); // Container automatically creates 'new-session' with defaults: // - cwd: '/workspace' // - env: {} (empty) @@ -47,15 +47,15 @@ This behavior is particularly relevant after deleting a session: ```typescript // Create and configure a session const session = await sandbox.createSession({ - id: 'temp', - env: { MY_VAR: 'value' } + id: "temp", + env: { MY_VAR: "value" }, }); // Delete the session -await sandbox.deleteSession('temp'); +await sandbox.deleteSession("temp"); // Using the same session ID again works - auto-created with defaults -const result = await sandbox.exec('echo $MY_VAR', { sessionId: 'temp' }); +const result = await sandbox.exec("echo $MY_VAR", { sessionId: "temp" }); // Output: (empty) - MY_VAR is not set in the freshly created session ``` @@ -67,15 +67,15 @@ Create additional sessions for isolated shell contexts: ```typescript const buildSession = await sandbox.createSession({ - id: "build", - env: { NODE_ENV: "production" }, - cwd: "/build" + id: "build", + env: { NODE_ENV: "production" }, + cwd: "/build", }); const testSession = await sandbox.createSession({ - id: "test", - env: { NODE_ENV: "test" }, - cwd: "/test" + id: "test", + env: { NODE_ENV: "test" }, + cwd: "/test", }); // Different shell contexts @@ -87,8 +87,8 @@ You can also set a default command timeout for all commands in a session: ```typescript const session = await sandbox.createSession({ - id: "ci", - commandTimeoutMs: 30000 // 30s timeout for all commands + id: "ci", + commandTimeoutMs: 30000, // 30s timeout for all commands }); await session.exec("npm test"); // Times out after 30s if still running @@ -101,24 +101,27 @@ Individual commands can override the session timeout with the `timeout` option o Each session has its own: **Shell environment**: + ```typescript await session1.exec("export MY_VAR=hello"); -await session2.exec("echo $MY_VAR"); // Empty - different shell +await session2.exec("echo $MY_VAR"); // Empty - different shell ``` **Working directory**: + ```typescript await session1.exec("cd /workspace/project1"); -await session2.exec("pwd"); // Different working directory +await session2.exec("pwd"); // Different working directory ``` **Environment variables** (set via `createSession` options): + ```typescript const session1 = await sandbox.createSession({ - env: { API_KEY: 'key-1' } + env: { API_KEY: "key-1" }, }); const session2 = await sandbox.createSession({ - env: { API_KEY: 'key-2' } + env: { API_KEY: "key-2" }, }); ``` @@ -127,42 +130,47 @@ const session2 = await sandbox.createSession({ All sessions in a sandbox share: **Filesystem**: + ```typescript -await session1.writeFile('/workspace/file.txt', 'data'); -await session2.readFile('/workspace/file.txt'); // Can read it +await session1.writeFile("/workspace/file.txt", "data"); +await session2.readFile("/workspace/file.txt"); // Can read it ``` **Processes**: + ```typescript -await session1.startProcess('node server.js'); -await session2.listProcesses(); // Sees the server +await session1.startProcess("node server.js"); +await session2.listProcesses(); // Sees the server ``` ## When to use sessions **Use sessions when**: + - You need isolated shell state for different tasks - Running parallel operations with different environments - Keeping AI agent credentials separate from app runtime **Example - separate dev and runtime environments**: + ```typescript // Phase 1: AI agent writes code (with API keys) const devSession = await sandbox.createSession({ - id: "dev", - env: { ANTHROPIC_API_KEY: env.ANTHROPIC_API_KEY } + id: "dev", + env: { ANTHROPIC_API_KEY: env.ANTHROPIC_API_KEY }, }); await devSession.exec('ai-tool "build a web server"'); // Phase 2: Run the code (without API keys) const appSession = await sandbox.createSession({ - id: "app", - env: { PORT: "3000" } + id: "app", + env: { PORT: "3000" }, }); await appSession.exec("node server.js"); ``` **Use separate sandboxes when**: + - You need complete isolation (untrusted code) - Different users require fully separated environments - Independent resource allocation is needed @@ -172,28 +180,31 @@ await appSession.exec("node server.js"); ### Session cleanup **Clean up temporary sessions** to free resources while keeping the sandbox running: + ```typescript try { - const session = await sandbox.createSession({ id: 'temp' }); - await session.exec('command'); + const session = await sandbox.createSession({ id: "temp" }); + await session.exec("command"); } finally { - await sandbox.deleteSession('temp'); + await sandbox.deleteSession("temp"); } ``` **Default session cannot be deleted**: + ```typescript // This throws an error -await sandbox.deleteSession('default'); +await sandbox.deleteSession("default"); // Error: Cannot delete default session. Use sandbox.destroy() instead. ``` ### Filesystem isolation **Sessions share filesystem** - file operations affect all sessions: + ```typescript // Bad - affects all sessions -await session.exec('rm -rf /workspace/*'); +await session.exec("rm -rf /workspace/*"); // For untrusted code isolation, use separate sandboxes const userSandbox = getSandbox(env.Sandbox, userId); diff --git a/src/content/docs/sandbox/configuration/environment-variables.mdx b/src/content/docs/sandbox/configuration/environment-variables.mdx index 522821f21e1c931..2bd802277756cba 100644 --- a/src/content/docs/sandbox/configuration/environment-variables.mdx +++ b/src/content/docs/sandbox/configuration/environment-variables.mdx @@ -18,10 +18,10 @@ These environment variables configure how the Sandbox SDK behaves. Set these as ### SANDBOX_TRANSPORT -| | | -|---|---| -| **Type** | `"http"` \| `"websocket"` | -| **Default** | `"http"` | +| | | +| ----------- | ------------------------- | +| **Type** | `"http"` \| `"websocket"` | +| **Default** | `"http"` | Controls the transport protocol for SDK-to-container communication. WebSocket transport multiplexes all operations over a single persistent connection, avoiding [subrequest limits](/workers/platform/limits/#subrequests) when performing many SDK operations per request. @@ -39,10 +39,10 @@ See [Transport modes](/sandbox/configuration/transport/) for a complete guide in ### COMMAND_TIMEOUT_MS -| | | -|---|---| -| **Type** | `number` (milliseconds) | -| **Default** | None (no timeout) | +| | | +| ----------- | ----------------------- | +| **Type** | `number` (milliseconds) | +| **Default** | None (no timeout) | Sets a global default timeout for every `exec()` call. When set, any command that exceeds this duration raises an error on the caller side and closes the connection. @@ -95,9 +95,9 @@ await sandbox.setEnvVars({ ```typescript await sandbox.setEnvVars({ - API_KEY: 'new-key', // Sets API_KEY - OLD_SECRET: undefined, // Unsets OLD_SECRET - DEBUG_MODE: null // Unsets DEBUG_MODE + API_KEY: "new-key", // Sets API_KEY + OLD_SECRET: undefined, // Unsets OLD_SECRET + DEBUG_MODE: null, // Unsets DEBUG_MODE }); ``` @@ -153,12 +153,12 @@ The Sandbox SDK supports unsetting environment variables by passing `undefined` ```typescript await sandbox.setEnvVars({ // Set new values - API_KEY: 'new-key', + API_KEY: "new-key", DATABASE_URL: env.DATABASE_URL, // Unset variables (removes them from the environment) OLD_API_KEY: undefined, - TEMP_TOKEN: null + TEMP_TOKEN: null, }); ``` @@ -172,7 +172,7 @@ await sandbox.setEnvVars({ ```typescript // Use a temporary token -await sandbox.setEnvVars({ TEMP_TOKEN: 'abc123' }); +await sandbox.setEnvVars({ TEMP_TOKEN: "abc123" }); await sandbox.exec('curl -H "Authorization: $TEMP_TOKEN" api.example.com'); // Clean up the token @@ -184,8 +184,8 @@ await sandbox.setEnvVars({ TEMP_TOKEN: undefined }); ```typescript await sandbox.setEnvVars({ API_KEY: env.API_KEY, - DEBUG_MODE: env.NODE_ENV === 'development' ? 'true' : undefined, - PROFILING: env.ENABLE_PROFILING ? 'true' : undefined + DEBUG_MODE: env.NODE_ENV === "development" ? "true" : undefined, + PROFILING: env.ENABLE_PROFILING ? "true" : undefined, }); ``` diff --git a/src/content/docs/sandbox/configuration/transport.mdx b/src/content/docs/sandbox/configuration/transport.mdx index dce27bacce1ff87..18e5f33fc1b515d 100644 --- a/src/content/docs/sandbox/configuration/transport.mdx +++ b/src/content/docs/sandbox/configuration/transport.mdx @@ -22,7 +22,6 @@ The Sandbox SDK supports three transport modes for communication between the Dur - **NEW: RPC transport** - All SDK operations are multiplexed over a single persistent WebSocket connection. Will replace HTTP as the default transport in future. Available since 0.9.1. - **Deprecated: WebSocket transport** - All SDK operations are multiplexed over a single persistent WebSocket. Superseded by RPC transport which uses an improved protocol. - ## When to use RPC transport Use the RPC transport when your Worker or Durable Object makes many SDK operations per request. This avoids hitting [subrequest limits](/workers/platform/limits/#subrequests). @@ -112,11 +111,13 @@ No application code changes are needed. The SDK automatically uses the configure ### Connection lifecycle **HTTP transport:** + - Creates a new HTTP request for each SDK operation - No persistent connection - Each request is independent and stateless **RPC transport:** + - Establishes a WebSocket connection on the first SDK operation - Maintains the persistent connection for all subsequent operations - Connection is closed when the sandbox sleeps or is evicted @@ -136,6 +137,7 @@ Your code remains identical regardless of transport mode. All transports provide identical error handling behavior. The SDK automatically retries on transient errors (like 503 responses) with exponential backoff. WebSocket-specific behavior: + - Connection failures trigger automatic reconnection - The SDK transparently handles WebSocket disconnections - In-flight operations are not lost during reconnection @@ -154,7 +156,6 @@ Switching between transports requires no code changes. Using the `rpc` transport requires version 0.9.1 or newer. If you are using an older version of the Sandbox SDK upgrade and deploy your application with the newer `@cloudflare/sandbox` and image first. Otherwise there will be issues with newer SDK clients attempting to connect to older sandboxes that do not support the new transport. ::: - Add `SANDBOX_TRANSPORT` to your `wrangler.jsonc`: diff --git a/src/content/docs/sandbox/guides/production-deployment.mdx b/src/content/docs/sandbox/guides/production-deployment.mdx index 27c08a0c143f74a..c0f0ed75abf6508 100644 --- a/src/content/docs/sandbox/guides/production-deployment.mdx +++ b/src/content/docs/sandbox/guides/production-deployment.mdx @@ -24,10 +24,11 @@ The `.workers.dev` domain does not support wildcard subdomains, so production de If your worker runs on a subdomain (for example, `sandbox.yourdomain.com`), preview URLs become second-level wildcards like `*.sandbox.yourdomain.com`. Cloudflare's Universal SSL only covers first-level wildcards (`*.yourdomain.com`), so you need a certificate covering `*.sandbox.yourdomain.com`. Without it, preview URLs will fail with TLS handshake errors. You have three options: + - **Deploy on the apex domain** (`yourdomain.com`) so preview URLs stay at the first level (`*.yourdomain.com`), which Universal SSL covers automatically. This is the simplest option. - **Use [Advanced Certificate Manager](/ssl/edge-certificates/advanced-certificate-manager/)** ($10/month) to provision a certificate for `*.sandbox.yourdomain.com` through the Cloudflare dashboard. - **Upload a custom certificate** from a provider like [Let's Encrypt](https://letsencrypt.org/) (free). Generate a wildcard certificate for `*.sandbox.yourdomain.com` using the DNS-01 challenge, then upload it via the Cloudflare dashboard under **SSL/TLS > Edge Certificates > [Custom Certificates](/ssl/edge-certificates/custom-certificates/)**. You will need to renew it before expiry. -::: + ::: ## Prerequisites @@ -42,7 +43,7 @@ You have three options: In the Cloudflare dashboard, go to your domain and create an A record: - **Type**: A -- **Name**: * (wildcard) +- **Name**: \* (wildcard) - **IPv4 address**: 192.0.2.0 - **Proxy status**: Proxied (orange cloud) @@ -87,8 +88,8 @@ Test that preview URLs work: // Extract hostname from request const { hostname } = new URL(request.url); -const sandbox = getSandbox(env.Sandbox, 'test-sandbox'); -await sandbox.startProcess('python -m http.server 8080'); +const sandbox = getSandbox(env.Sandbox, "test-sandbox"); +await sandbox.startProcess("python -m http.server 8080"); const exposed = await sandbox.exposePort(8080, { hostname }); console.log(exposed.url); diff --git a/src/content/docs/sandbox/platform/pricing.mdx b/src/content/docs/sandbox/platform/pricing.mdx index cc9fe5632a5b833..cf39a5eba58829c 100644 --- a/src/content/docs/sandbox/platform/pricing.mdx +++ b/src/content/docs/sandbox/platform/pricing.mdx @@ -13,6 +13,7 @@ Sandbox SDK pricing is determined by the underlying [Containers](/containers/) p ## Containers Pricing Refer to [Containers pricing](/containers/pricing/) for complete details on: + - vCPU, memory, and disk usage rates - Network egress pricing - Instance types and their costs @@ -20,6 +21,7 @@ Refer to [Containers pricing](/containers/pricing/) for complete details on: ## Related Pricing When using Sandbox, you'll also be billed for: + - [Workers](/workers/platform/pricing/) - Handles incoming requests to your sandbox - [Durable Objects](/durable-objects/platform/pricing/) - Powers each sandbox instance - [Workers Logs](/workers/observability/logs/workers-logs/#pricing) - Optional observability (if enabled) diff --git a/src/content/docs/sandbox/tutorials/ai-code-executor.mdx b/src/content/docs/sandbox/tutorials/ai-code-executor.mdx index 992afa80321cc03..5e0e4d91dfa660e 100644 --- a/src/content/docs/sandbox/tutorials/ai-code-executor.mdx +++ b/src/content/docs/sandbox/tutorials/ai-code-executor.mdx @@ -25,6 +25,7 @@ An API that accepts questions like "What's the 100th Fibonacci number?", uses Cl You'll also need: + - An [Anthropic API key](https://console.anthropic.com/) for Claude - [Docker](https://www.docker.com/) running locally @@ -52,11 +53,11 @@ Install the Anthropic SDK: Replace the contents of `src/index.ts`: -```typescript -import { getSandbox, type Sandbox } from '@cloudflare/sandbox'; -import Anthropic from '@anthropic-ai/sdk'; +````typescript +import { getSandbox, type Sandbox } from "@cloudflare/sandbox"; +import Anthropic from "@anthropic-ai/sdk"; -export { Sandbox } from '@cloudflare/sandbox'; +export { Sandbox } from "@cloudflare/sandbox"; interface Env { Sandbox: DurableObjectNamespace; @@ -65,7 +66,10 @@ interface Env { export default { async fetch(request: Request, env: Env): Promise { - if (request.method !== 'POST' || new URL(request.url).pathname !== '/execute') { + if ( + request.method !== "POST" || + new URL(request.url).pathname !== "/execute" + ) { return new Response('POST /execute with { "question": "your question" }'); } @@ -73,65 +77,74 @@ export default { const { question } = await request.json(); if (!question) { - return Response.json({ error: 'Question is required' }, { status: 400 }); + return Response.json( + { error: "Question is required" }, + { status: 400 }, + ); } // Use Claude to generate Python code const anthropic = new Anthropic({ apiKey: env.ANTHROPIC_API_KEY }); const codeGeneration = await anthropic.messages.create({ - model: 'claude-sonnet-4-5', + model: "claude-sonnet-4-5", max_tokens: 1024, - messages: [{ - role: 'user', - content: `Generate Python code to answer: "${question}" + messages: [ + { + role: "user", + content: `Generate Python code to answer: "${question}" Requirements: - Use only Python standard library - Print the result using print() - Keep code simple and safe -Return ONLY the code, no explanations.` - }], +Return ONLY the code, no explanations.`, + }, + ], }); - const generatedCode = codeGeneration.content[0]?.type === 'text' - ? codeGeneration.content[0].text - : ''; + const generatedCode = + codeGeneration.content[0]?.type === "text" + ? codeGeneration.content[0].text + : ""; if (!generatedCode) { - return Response.json({ error: 'Failed to generate code' }, { status: 500 }); + return Response.json( + { error: "Failed to generate code" }, + { status: 500 }, + ); } // Strip markdown code fences if present const cleanCode = generatedCode - .replace(/^```python?\n?/, '') - .replace(/\n?```\s*$/, '') + .replace(/^```python?\n?/, "") + .replace(/\n?```\s*$/, "") .trim(); // Execute the code in a sandbox - const sandbox = getSandbox(env.Sandbox, 'demo-user'); - await sandbox.writeFile('/tmp/code.py', cleanCode); - const result = await sandbox.exec('python /tmp/code.py'); + const sandbox = getSandbox(env.Sandbox, "demo-user"); + await sandbox.writeFile("/tmp/code.py", cleanCode); + const result = await sandbox.exec("python /tmp/code.py"); return Response.json({ success: result.success, question, code: generatedCode, output: result.stdout, - error: result.stderr + error: result.stderr, }); - } catch (error: any) { return Response.json( - { error: 'Internal server error', message: error.message }, - { status: 500 } + { error: "Internal server error", message: error.message }, + { status: 500 }, ); } }, }; -``` +```` **How it works:** + 1. Receives a question via POST to `/execute` 2. Uses Claude to generate Python code 3. Writes code to `/tmp/code.py` in the sandbox @@ -176,11 +189,11 @@ Response: ```json { - "success": true, - "question": "What is the 10th Fibonacci number?", - "code": "def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)\n\nprint(fibonacci(10))", - "output": "55\n", - "error": "" + "success": true, + "question": "What is the 10th Fibonacci number?", + "code": "def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)\n\nprint(fibonacci(10))", + "output": "55\n", + "error": "" } ``` @@ -228,6 +241,7 @@ curl -X POST https://ai-code-executor.YOUR_SUBDOMAIN.workers.dev/execute \ ## What you built You created an AI code execution system that: + - Accepts natural language questions - Generates Python code with Claude - Executes code securely in isolated sandboxes diff --git a/src/content/docs/sandbox/tutorials/analyze-data-with-ai.mdx b/src/content/docs/sandbox/tutorials/analyze-data-with-ai.mdx index 5497b602e6f0f38..13784a7bf7fb634 100644 --- a/src/content/docs/sandbox/tutorials/analyze-data-with-ai.mdx +++ b/src/content/docs/sandbox/tutorials/analyze-data-with-ai.mdx @@ -119,24 +119,27 @@ export default { } async function streamToBase64(stream) { - const blob = await new Response(stream).blob(); - const buffer = await blob.arrayBuffer(); - const bytes = new Uint8Array(buffer); - - // Convert to base64 - let binary = ''; - for (let i = 0; i < bytes.length; i++) { - binary += String.fromCharCode(bytes[i]); - } - return btoa(binary); + const blob = await new Response(stream).blob(); + const buffer = await blob.arrayBuffer(); + const bytes = new Uint8Array(buffer); + + // Convert to base64 + let binary = ""; + for (let i = 0; i < bytes.length; i++) { + binary += String.fromCharCode(bytes[i]); + } + return btoa(binary); } // Check for generated chart let chart = null; try { - const { content, mimeType } = await sandbox.readFile("/workspace/chart.png", { - encoding: "none" - }); + const { content, mimeType } = await sandbox.readFile( + "/workspace/chart.png", + { + encoding: "none", + }, + ); chart = `data:${mimeType};base64,${await streamToBase64(content)}`; } catch { // No chart generated diff --git a/src/content/docs/sandbox/tutorials/automated-testing-pipeline.mdx b/src/content/docs/sandbox/tutorials/automated-testing-pipeline.mdx index 1a964dfdb7b13da..cc84853855df6ca 100644 --- a/src/content/docs/sandbox/tutorials/automated-testing-pipeline.mdx +++ b/src/content/docs/sandbox/tutorials/automated-testing-pipeline.mdx @@ -39,9 +39,15 @@ cd test-pipeline Replace `src/index.ts`: ```typescript -import { getSandbox, proxyToSandbox, parseSSEStream, type Sandbox, type ExecEvent } from '@cloudflare/sandbox'; +import { + getSandbox, + proxyToSandbox, + parseSSEStream, + type Sandbox, + type ExecEvent, +} from "@cloudflare/sandbox"; -export { Sandbox } from '@cloudflare/sandbox'; +export { Sandbox } from "@cloudflare/sandbox"; interface Env { Sandbox: DurableObjectNamespace; @@ -53,34 +59,39 @@ export default { const proxyResponse = await proxyToSandbox(request, env); if (proxyResponse) return proxyResponse; - if (request.method !== 'POST') { - return new Response('POST { "repoUrl": "https://github.com/owner/repo", "branch": "main" }'); + if (request.method !== "POST") { + return new Response( + 'POST { "repoUrl": "https://github.com/owner/repo", "branch": "main" }', + ); } try { const { repoUrl, branch } = await request.json(); if (!repoUrl) { - return Response.json({ error: 'repoUrl required' }, { status: 400 }); + return Response.json({ error: "repoUrl required" }, { status: 400 }); } const sandbox = getSandbox(env.Sandbox, `test-${Date.now()}`); try { // Clone repository - console.log('Cloning repository...'); + console.log("Cloning repository..."); let cloneUrl = repoUrl; - - if (env.GITHUB_TOKEN && cloneUrl.includes('github.com')) { - cloneUrl = cloneUrl.replace('https://', `https://${env.GITHUB_TOKEN}@`); + + if (env.GITHUB_TOKEN && cloneUrl.includes("github.com")) { + cloneUrl = cloneUrl.replace( + "https://", + `https://${env.GITHUB_TOKEN}@`, + ); } await sandbox.gitCheckout(cloneUrl, { ...(branch && { branch }), depth: 1, - targetDir: 'repo' + targetDir: "repo", }); - console.log('Repository cloned'); + console.log("Repository cloned"); // Detect project type const projectType = await detectProjectType(sandbox); @@ -89,38 +100,42 @@ export default { // Install dependencies const installCmd = getInstallCommand(projectType); if (installCmd) { - console.log('Installing dependencies...'); - const installStream = await sandbox.execStream(`cd /workspace/repo && ${installCmd}`); - + console.log("Installing dependencies..."); + const installStream = await sandbox.execStream( + `cd /workspace/repo && ${installCmd}`, + ); + let installExitCode = 0; for await (const event of parseSSEStream(installStream)) { - if (event.type === 'stdout' || event.type === 'stderr') { + if (event.type === "stdout" || event.type === "stderr") { console.log(event.data); - } else if (event.type === 'complete') { + } else if (event.type === "complete") { installExitCode = event.exitCode; } } - + if (installExitCode !== 0) { return Response.json({ success: false, - error: 'Install failed', - exitCode: installExitCode + error: "Install failed", + exitCode: installExitCode, }); } - console.log('Dependencies installed'); + console.log("Dependencies installed"); } // Run tests - console.log('Running tests...'); + console.log("Running tests..."); const testCmd = getTestCommand(projectType); - const testStream = await sandbox.execStream(`cd /workspace/repo && ${testCmd}`); - + const testStream = await sandbox.execStream( + `cd /workspace/repo && ${testCmd}`, + ); + let testExitCode = 0; for await (const event of parseSSEStream(testStream)) { - if (event.type === 'stdout' || event.type === 'stderr') { + if (event.type === "stdout" || event.type === "stderr") { console.log(event.data); - } else if (event.type === 'complete') { + } else if (event.type === "complete") { testExitCode = event.exitCode; } } @@ -130,13 +145,11 @@ export default { success: testExitCode === 0, exitCode: testExitCode, projectType, - message: testExitCode === 0 ? 'All tests passed' : 'Tests failed' + message: testExitCode === 0 ? "All tests passed" : "Tests failed", }); - } finally { await sandbox.destroy(); } - } catch (error: any) { return Response.json({ error: error.message }, { status: 500 }); } @@ -145,38 +158,46 @@ export default { async function detectProjectType(sandbox: any): Promise { try { - await sandbox.readFile('/workspace/repo/package.json'); - return 'nodejs'; + await sandbox.readFile("/workspace/repo/package.json"); + return "nodejs"; } catch {} try { - await sandbox.readFile('/workspace/repo/requirements.txt'); - return 'python'; + await sandbox.readFile("/workspace/repo/requirements.txt"); + return "python"; } catch {} try { - await sandbox.readFile('/workspace/repo/go.mod'); - return 'go'; + await sandbox.readFile("/workspace/repo/go.mod"); + return "go"; } catch {} - return 'unknown'; + return "unknown"; } function getInstallCommand(projectType: string): string { switch (projectType) { - case 'nodejs': return 'npm install'; - case 'python': return 'pip install -r requirements.txt || pip install -e .'; - case 'go': return 'go mod download'; - default: return ''; + case "nodejs": + return "npm install"; + case "python": + return "pip install -r requirements.txt || pip install -e ."; + case "go": + return "go mod download"; + default: + return ""; } } function getTestCommand(projectType: string): string { switch (projectType) { - case 'nodejs': return 'npm test'; - case 'python': return 'python -m pytest || python -m unittest discover'; - case 'go': return 'go test ./...'; - default: return 'echo "Unknown project type"'; + case "nodejs": + return "npm test"; + case "python": + return "python -m pytest || python -m unittest discover"; + case "go": + return "go test ./..."; + default: + return 'echo "Unknown project type"'; } } ``` @@ -203,10 +224,10 @@ You will see progress logs in the wrangler console, and receive a JSON response: ```json { - "success": true, - "exitCode": 0, - "projectType": "nodejs", - "message": "All tests passed" + "success": true, + "exitCode": 0, + "projectType": "nodejs", + "message": "All tests passed" } ``` @@ -225,6 +246,7 @@ npx wrangler secret put GITHUB_TOKEN ## What you built An automated testing pipeline that: + - Clones Git repositories - Detects project type (Node.js, Python, Go) - Installs dependencies automatically diff --git a/src/content/docs/sandbox/tutorials/claude-managed-agents.mdx b/src/content/docs/sandbox/tutorials/claude-managed-agents.mdx index 022b3803088764b..fc519d4cc81608a 100644 --- a/src/content/docs/sandbox/tutorials/claude-managed-agents.mdx +++ b/src/content/docs/sandbox/tutorials/claude-managed-agents.mdx @@ -19,7 +19,10 @@ Cloudflare provides a self-managed environment for [Claude Managed Agents](https This integration ships as an open-source deployment template. Fork the repo, deploy it to your Cloudflare account, and customize it as needed. - + Get Started @@ -66,15 +69,15 @@ You need a Workers Paid plan or Enterprise account. [Containers](/containers/) ( The repository includes detailed documentation on each capability: -| Topic | What it covers | -| --- | --- | -| [Connecting to private services](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/connecting-to-private-services.md) | Reach services in other clouds, on-prem, or on your laptop with Workers VPC bindings | -| [Applying egress policies](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/applying-egress-policies.md) | Inject credentials and lock down agent sessions. Set up allow/deny lists, header injection, custom Worker proxies, and VPC routing | -| [Isolate vs VM-based sandboxes](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/isolate-vs-vm-sandboxes.md) | Pick the best agent execution environment | -| [Agent email](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/agent-email.md) | Give agents their own email addresses and sending abilities | -| [Browser rendering tools](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/browser-rendering-tools.md) | Observable agent browser interactions with Browser Run | -| [Adding custom tools](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/adding-custom-tools.md) | New tools are declared in a single file — [`src/tools/custom-tools.ts`](https://github.com/cloudflare/claude-managed-agents/blob/main/src/tools/custom-tools.ts) | -| [Customizing sandboxes](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/customizing-sandboxes.md) | Change `Dockerfile` and `instance_type` knobs for the MicroVM backend | -| [Snapshots and state persistence](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/snapshots-and-state-persistence.md) | State persistence across both sandbox types | -| [Architecture](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/architecture.md) | Request lifecycle from webhook ingress through dispatch to either sandbox backend, and every Worker binding the control plane uses | -| [Securing access](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/securing-access.md) | Secure access to the CMA control plane | +| Topic | What it covers | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Connecting to private services](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/connecting-to-private-services.md) | Reach services in other clouds, on-prem, or on your laptop with Workers VPC bindings | +| [Applying egress policies](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/applying-egress-policies.md) | Inject credentials and lock down agent sessions. Set up allow/deny lists, header injection, custom Worker proxies, and VPC routing | +| [Isolate vs VM-based sandboxes](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/isolate-vs-vm-sandboxes.md) | Pick the best agent execution environment | +| [Agent email](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/agent-email.md) | Give agents their own email addresses and sending abilities | +| [Browser rendering tools](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/browser-rendering-tools.md) | Observable agent browser interactions with Browser Run | +| [Adding custom tools](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/adding-custom-tools.md) | New tools are declared in a single file — [`src/tools/custom-tools.ts`](https://github.com/cloudflare/claude-managed-agents/blob/main/src/tools/custom-tools.ts) | +| [Customizing sandboxes](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/customizing-sandboxes.md) | Change `Dockerfile` and `instance_type` knobs for the MicroVM backend | +| [Snapshots and state persistence](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/snapshots-and-state-persistence.md) | State persistence across both sandbox types | +| [Architecture](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/architecture.md) | Request lifecycle from webhook ingress through dispatch to either sandbox backend, and every Worker binding the control plane uses | +| [Securing access](https://github.com/cloudflare/claude-managed-agents/blob/main/docs/securing-access.md) | Secure access to the CMA control plane | diff --git a/src/content/docs/sandbox/tutorials/code-review-bot.mdx b/src/content/docs/sandbox/tutorials/code-review-bot.mdx index daeeff910905556..98052e0f745d6e9 100644 --- a/src/content/docs/sandbox/tutorials/code-review-bot.mdx +++ b/src/content/docs/sandbox/tutorials/code-review-bot.mdx @@ -108,9 +108,7 @@ export default { ) { console.log(`Starting review for PR #${payload.pull_request.number}`); // Use waitUntil to ensure the review completes even after response is sent - ctx.waitUntil( - reviewPullRequest(payload, env).catch(console.error), - ); + ctx.waitUntil(reviewPullRequest(payload, env).catch(console.error)); return Response.json({ message: "Review started" }); } diff --git a/src/content/docs/secrets-store/audit-logs.mdx b/src/content/docs/secrets-store/audit-logs.mdx index 144a24543be86f5..90f826135f55949 100644 --- a/src/content/docs/secrets-store/audit-logs.mdx +++ b/src/content/docs/secrets-store/audit-logs.mdx @@ -17,4 +17,4 @@ sidebar: - A boolean `"value_modified": true` is presented when the secret value is edited. - Delete -For information on how to access and use audit logs, refer to [Fundamentals](/fundamentals/account/account-security/review-audit-logs/). \ No newline at end of file +For information on how to access and use audit logs, refer to [Fundamentals](/fundamentals/account/account-security/review-audit-logs/). diff --git a/src/content/docs/secrets-store/index.mdx b/src/content/docs/secrets-store/index.mdx index 4d1e230e37ff9e9..e2ed5d0af9f4441 100644 --- a/src/content/docs/secrets-store/index.mdx +++ b/src/content/docs/secrets-store/index.mdx @@ -16,7 +16,8 @@ head: import { Description, Plan } from "~/components"; -Encrypt and store sensitive information as secrets that are securely reusable across your account. + Encrypt and store sensitive information as secrets that are securely reusable + across your account. diff --git a/src/content/docs/secrets-store/integrations/ai-gateway.mdx b/src/content/docs/secrets-store/integrations/ai-gateway.mdx index 918c8bcfa39217c..af789df84d1a0c0 100644 --- a/src/content/docs/secrets-store/integrations/ai-gateway.mdx +++ b/src/content/docs/secrets-store/integrations/ai-gateway.mdx @@ -8,4 +8,4 @@ external_link: /ai-gateway/configuration/bring-your-own-keys/ sidebar: order: 3 label: AI Gateway ---- \ No newline at end of file +--- diff --git a/src/content/docs/secrets-store/integrations/index.mdx b/src/content/docs/secrets-store/integrations/index.mdx index 64d5175c5fd2e82..a5ce8b0cbe2a887 100644 --- a/src/content/docs/secrets-store/integrations/index.mdx +++ b/src/content/docs/secrets-store/integrations/index.mdx @@ -13,4 +13,4 @@ sidebar: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/secrets-store/manage-secrets/how-to.mdx b/src/content/docs/secrets-store/manage-secrets/how-to.mdx index 2fd99158d2495e9..cb9d42efdc308d9 100644 --- a/src/content/docs/secrets-store/manage-secrets/how-to.mdx +++ b/src/content/docs/secrets-store/manage-secrets/how-to.mdx @@ -155,4 +155,4 @@ Refer to [Secrets Store API](/api/resources/secrets_store/) for the full API doc method="DELETE" /> - \ No newline at end of file + diff --git a/src/content/docs/secrets-store/manage-secrets/index.mdx b/src/content/docs/secrets-store/manage-secrets/index.mdx index 17a01164f12187d..e9a5f2e3ffdfc0c 100644 --- a/src/content/docs/secrets-store/manage-secrets/index.mdx +++ b/src/content/docs/secrets-store/manage-secrets/index.mdx @@ -28,4 +28,4 @@ If you use [Wrangler](/secrets-store/manage-secrets/how-to/#manage-via-wrangler) - [Create a secret](/secrets-store/manage-secrets/how-to/#create-a-secret) - [Duplicate a secret](/secrets-store/manage-secrets/how-to/#duplicate-a-secret) - [Edit a secret](/secrets-store/manage-secrets/how-to/#edit-a-secret) -- [Delete a secret](/secrets-store/manage-secrets/how-to/#delete-a-secret) \ No newline at end of file +- [Delete a secret](/secrets-store/manage-secrets/how-to/#delete-a-secret) diff --git a/src/content/docs/security-center/brand-protection.mdx b/src/content/docs/security-center/brand-protection.mdx index 3a021e91ce70f25..064f17815b2cfeb 100644 --- a/src/content/docs/security-center/brand-protection.mdx +++ b/src/content/docs/security-center/brand-protection.mdx @@ -54,7 +54,7 @@ To start searching for new domains that might be trying to impersonate your bran 5. To export all matches from a saved query, select your **Query name** > select the three dots > **Export matches**. -In the section **Monitor Strings**, you can check all the string queries that you selected to monitor. You can delete, clone, or create notifications for a string query. Refer to [Brand Protection Alerts](#brand-protection-alerts) to set up notifications. You can also dismiss any domain matched in the query if you have investigated and deemed it benign or a false positive. Users can still access their previously dismissed matches by turning on the **Show dismissed matches** toggle in the Cloudflare dashboard. +In the section **Monitor Strings**, you can check all the string queries that you selected to monitor. You can delete, clone, or create notifications for a string query. Refer to [Brand Protection Alerts](#brand-protection-alerts) to set up notifications. You can also dismiss any domain matched in the query if you have investigated and deemed it benign or a false positive. Users can still access their previously dismissed matches by turning on the **Show dismissed matches** toggle in the Cloudflare dashboard. ### Logo search (AI-powered) diff --git a/src/content/docs/security-center/changelog.mdx b/src/content/docs/security-center/changelog.mdx index 1c92506953963cf..889cbe1b2ec6c7b 100644 --- a/src/content/docs/security-center/changelog.mdx +++ b/src/content/docs/security-center/changelog.mdx @@ -16,20 +16,20 @@ import { ProductChangelog } from "~/components"; ## 2025-02-03 -* Security Center now has a role called Brand Protection. This role gives you access to the Brand Protection feature on the API and Cloudflare dashboard. Brand Protection role also gives you access to the Investigate platform, where you can consume the Threat Intel API and URL scanner API calls. +- Security Center now has a role called Brand Protection. This role gives you access to the Brand Protection feature on the API and Cloudflare dashboard. Brand Protection role also gives you access to the Investigate platform, where you can consume the Threat Intel API and URL scanner API calls. ## 2025-01-20 -* On the URL scanner, customers who search for a report will now get a list of all reports related to that specific hostname. A hash is also available in the security report. By selecting the hash, the dashboard will list reports containing the same hash. +- On the URL scanner, customers who search for a report will now get a list of all reports related to that specific hostname. A hash is also available in the security report. By selecting the hash, the dashboard will list reports containing the same hash. ## 2024-09-23 -* Customers can now export all matches from a saved query. Select your **Query name** > select the three dots > **Export matches**. +- Customers can now export all matches from a saved query. Select your **Query name** > select the three dots > **Export matches**. ## 2024-09-19 -* Customers can now create a `security.txt` file file to provide the security research team with a standardized way to report vulnerabilities. +- Customers can now create a `security.txt` file file to provide the security research team with a standardized way to report vulnerabilities. ## 2024-07-22 -* Customers can now archive multiple Security Insights at the same time. Go to **Security Center** > **Security Insights** and select the insights to archive. +- Customers can now archive multiple Security Insights at the same time. Go to **Security Center** > **Security Insights** and select the insights to archive. diff --git a/src/content/docs/security-center/cloudforce-one/cloudforce-one.mdx b/src/content/docs/security-center/cloudforce-one/cloudforce-one.mdx index 6749f8a8b7ee551..e90c084b944a737 100644 --- a/src/content/docs/security-center/cloudforce-one/cloudforce-one.mdx +++ b/src/content/docs/security-center/cloudforce-one/cloudforce-one.mdx @@ -7,5 +7,4 @@ products: external_link: https://www.cloudflare.com/threat-intelligence/ sidebar: order: 10 - --- diff --git a/src/content/docs/security-center/cloudforce-one/open-port-scanning.mdx b/src/content/docs/security-center/cloudforce-one/open-port-scanning.mdx index 55fbf7081e51889..33bd1dd3898a1bd 100644 --- a/src/content/docs/security-center/cloudforce-one/open-port-scanning.mdx +++ b/src/content/docs/security-center/cloudforce-one/open-port-scanning.mdx @@ -10,9 +10,7 @@ sidebar: text: Beta --- -import { Details } from "~/components" - - +import { Details } from "~/components"; Open Port Scanning allows [Magic Transit](/magic-transit/) and [Bring your Own IPs](/byoip/) users to efficiently monitor IP ranges for security vulnerabilities. This API enables users to scan their designated IP ranges, detect any open ports, and receive daily notifications regarding newly opened ports. @@ -21,24 +19,24 @@ You can access this feature via the [API](/api/resources/cloudforce_one/subresou ## Prerequisites - Cloudforce One Administrator, Administrator and Super Administrator roles. -- Account token: **Custom API Token** > **Cloudforce One:Edit**. +- Account token: **Custom API Token** > **Cloudforce One:Edit**. To create a custom API token: 1. From the [Cloudflare dashboard](https://dash.cloudflare.com/profile/api-tokens/), go to **My Profile** > **API Tokens** for user tokens. Go to **Create Custom Token** > **Get started**. 2. Enter a **Token name**, for example, `Open Port Scanning`. 3. In **Permissions**: - - Choose **Account**. - - Select **Cloudforce One** as the account. - - Choose **Edit** access. + - Choose **Account**. + - Select **Cloudforce One** as the account. + - Choose **Edit** access. 4. In Client IP Address Filtering: - - In **Operator**, select `is in`. - - In **Value**, enter a valid IP address. + - In **Operator**, select `is in`. + - In **Value**, enter a valid IP address. 5. Select **Continue to summary**. 6. Review the token, then select **Create Token**. :::note -The Open Port Scanner will run from a predetermined set of IPs. The Cloudforce One team recommends you to allowlist these IPs in your rules. +The Open Port Scanner will run from a predetermined set of IPs. The Cloudforce One team recommends you to allowlist these IPs in your rules. ::: ## Configure Open Port Scanning @@ -46,150 +44,56 @@ The Open Port Scanner will run from a predetermined set of IPs. The Cloudforce O To configure Open Port Scanning, follow these steps: 1. **Create a new scan config**: - - **IPs**: Enter the IP ranges you wish to monitor. Ensure that the ranges are correctly formatted to avoid scanning errors. The API will validate if the IPs requested are onboarded to Cloudflare and associated to the account belonging to the API token used. - - **Frequency**: Enter the scan frequency in days. - - **Ports**: Select the ports to scan. Choose among: - - All - - Default (refer to [Default ports](/security-center/cloudforce-one/open-port-scanning/#default-ports) for a comprehensive list) - - List of specific ports + - **IPs**: Enter the IP ranges you wish to monitor. Ensure that the ranges are correctly formatted to avoid scanning errors. The API will validate if the IPs requested are onboarded to Cloudflare and associated to the account belonging to the API token used. + - **Frequency**: Enter the scan frequency in days. + - **Ports**: Select the ports to scan. Choose among: + - All + - Default (refer to [Default ports](/security-center/cloudforce-one/open-port-scanning/#default-ports) for a comprehensive list) + - List of specific ports 2. **Scan IPs**: Initiate the scanning process. The system will analyze the specified IP ranges to identify any open ports. 3. **Generate list of open ports**: Once the scan is complete, the API will generate a list of detected open ports for review and action. -4. **Select open ports to list**: Choose which open ports you would like to be notified about. You can exclude any ports that do not require immediate attention. +4. **Select open ports to list**: Choose which open ports you would like to be notified about. You can exclude any ports that do not require immediate attention. 5. **View differences from previous scan**: The API will highlight any changes in open ports since the last scan, allowing you to quickly assess new vulnerabilities. -6. **Stop scanning**: If necessary, you can stop the scanning process at any time. -7. **Set up alerts**: Configure alerts for specific ports of interest. You will be notified immediately via email or webhook if any of these designated ports become newly open. +6. **Stop scanning**: If necessary, you can stop the scanning process at any time. +7. **Set up alerts**: Configure alerts for specific ports of interest. You will be notified immediately via email or webhook if any of these designated ports become newly open. :::note[Beta feature notice] Open Port Scanning feature is currently in closed beta. The Cloudforce One team appreciates your feedback as the team works to enhance its functionality and user experience. -If you want to subscribe to this feature or participate in the beta program, [join our closed beta for Port Scanning](https://www.cloudflare.com/lp/open-port-scanning-beta/). +If you want to subscribe to this feature or participate in the beta program, [join our closed beta for Port Scanning](https://www.cloudflare.com/lp/open-port-scanning-beta/). ::: ## Default ports
    -- `80` -- `631` -- `161` -- `137` -- `123` -- `138` -- `1434` -- `445` -- `135` -- `67` -- `23` -- `53` -- `443` -- `21` -- `139` -- `22` -- `500` -- `68` -- `520` -- `1900` -- `25` -- `4500` -- `514` -- `49152` -- `162` -- `69` -- `5353` -- `111` -- `49154` -- `3389` -- `110` -- `1701` -- `998` -- `996` -- `997` -- `999` -- `3283` -- `49153` -- `445` -- `1812` -- `136` -- `139` -- `143` -- `53` -- `2222` -- `135` -- `3306` -- `2049` -- `32768` -- `5060` -- `8080` -- `1025` -- `1433` -- `3456` -- `80` -- `1723` -- `111` -- `995` -- `993` -- `20031` -- `1026` -- `7` -- `5900` -- `1646` -- `1645` -- `593` -- `1025` -- `518` -- `2048` -- `626` -- `1027` -- `587` -- `177` -- `1719` -- `427` -- `497` -- `8888` -- `4444` -- `1023` -- `65024` -- `199` -- `19` -- `9` -- `49193` -- `1029` -- `1720` -- `49` -- `465` -- `88` -- `1028` -- `17185` -- `1718` -- `49186` -- `548` -- `113` -- `81` -- `6001` -- `2000` -- `10000` -- `31337` + - `80` - `631` - `161` - `137` - `123` - `138` - `1434` - `445` - `135` - `67` + - `23` - `53` - `443` - `21` - `139` - `22` - `500` - `68` - `520` - `1900` - + `25` - `4500` - `514` - `49152` - `162` - `69` - `5353` - `111` - `49154` - + `3389` - `110` - `1701` - `998` - `996` - `997` - `999` - `3283` - `49153` - + `445` - `1812` - `136` - `139` - `143` - `53` - `2222` - `135` - `3306` - + `2049` - `32768` - `5060` - `8080` - `1025` - `1433` - `3456` - `80` - `1723` + - `111` - `995` - `993` - `20031` - `1026` - `7` - `5900` - `1646` - `1645` - + `593` - `1025` - `518` - `2048` - `626` - `1027` - `587` - `177` - `1719` - + `427` - `497` - `8888` - `4444` - `1023` - `65024` - `199` - `19` - `9` - + `49193` - `1029` - `1720` - `49` - `465` - `88` - `1028` - `17185` - `1718` - + `49186` - `548` - `113` - `81` - `6001` - `2000` - `10000` - `31337`
    ## Frequently Asked Questions 1. What IPs will the scan come from? - - - `2a09:bac0:1008:5000:1000:0000:0000:0050/104.30.128.13` - - `2a09:bac0:1008:5000:1000:0000:0000:0048/104.30.129.33` - - `2001:19f0:1000:2941:5400:4ff:fe70:2a7a/140.82.60.241` + - `2a09:bac0:1008:5000:1000:0000:0000:0050/104.30.128.13` + - `2a09:bac0:1008:5000:1000:0000:0000:0048/104.30.129.33` + - `2001:19f0:1000:2941:5400:4ff:fe70:2a7a/140.82.60.241` 2. Can the Port Scanner bypass other security rules configured? - - - The Cloudforce One team asks customers to ensure they allow the IPs for the scanner to run correctly. + - The Cloudforce One team asks customers to ensure they allow the IPs for the scanner to run correctly. 3. How long do scans take? - - - Depending on the number of IP addresses and number of ports scanned, scans can take between a few minutes and up to 10 hours. + - Depending on the number of IP addresses and number of ports scanned, scans can take between a few minutes and up to 10 hours. 4. Can I stop automatic scanning? - - - Yes, you can decide at any point to stop scan and restart scans when it is convenient for you. + - Yes, you can decide at any point to stop scan and restart scans when it is convenient for you. 5. What are the limitations for the scans? - - - Scans are limited to ranges of up to 5,000 IPs. - - The API scans both IPv4 and IPv6 IP addresses. \ No newline at end of file + - Scans are limited to ranges of up to 5,000 IPs. + - The API scans both IPv4 and IPv6 IP addresses. diff --git a/src/content/docs/security-center/investigate/change-categorization.mdx b/src/content/docs/security-center/investigate/change-categorization.mdx index c2efde74687cbbf..bc56bde0cf28d7a 100644 --- a/src/content/docs/security-center/investigate/change-categorization.mdx +++ b/src/content/docs/security-center/investigate/change-categorization.mdx @@ -6,7 +6,6 @@ products: - security-center sidebar: order: 4 - --- import { DashButton } from "~/components"; diff --git a/src/content/docs/security-center/investigate/index.mdx b/src/content/docs/security-center/investigate/index.mdx index f63c519b1be248a..6a3e0202c62c662 100644 --- a/src/content/docs/security-center/investigate/index.mdx +++ b/src/content/docs/security-center/investigate/index.mdx @@ -6,7 +6,6 @@ products: - security-center sidebar: order: 6 - --- :::note[User permission] diff --git a/src/content/docs/security-center/investigate/investigate-threats.mdx b/src/content/docs/security-center/investigate/investigate-threats.mdx index 48ce56a091e23fd..8056b226555f5c8 100644 --- a/src/content/docs/security-center/investigate/investigate-threats.mdx +++ b/src/content/docs/security-center/investigate/investigate-threats.mdx @@ -6,10 +6,9 @@ products: - security-center sidebar: order: 3 - --- -import { Render, DashButton } from "~/components" +import { Render, DashButton } from "~/components"; Users can investigate the details of an IP address, domain name, URL, or Autonomous System Number (ASN). You can find the Investigate feature in your Cloudflare account's Security Center and in [Cloudflare Radar](https://radar.cloudflare.com/scan). @@ -106,4 +105,4 @@ To download a report: 2. Enter your domain and select **Search**. -3. Once the report has been generated, select **Download** and choose between **Download HAR** or **Download JSON**. \ No newline at end of file +3. Once the report has been generated, select **Download** and choose between **Download HAR** or **Download JSON**. diff --git a/src/content/docs/security-center/investigate/scan-limits.mdx b/src/content/docs/security-center/investigate/scan-limits.mdx index 4a87a3ad19d63d5..00c9e0921faf0d5 100644 --- a/src/content/docs/security-center/investigate/scan-limits.mdx +++ b/src/content/docs/security-center/investigate/scan-limits.mdx @@ -5,17 +5,13 @@ products: - security-center head: [] description: Limits - --- URL scans are limited by search history, Public and Unlisted visibility, and requests per second across different Cloudflare plans. - - | Cloudflare Plan | Search history | Public scans (per month) | Unlisted scans (per month) | Rate limit | | ------------------ | -------------- | ------------------------ | -------------------------- | ---------------- | | **Free / Radar** | last 50 scans | 5,000 | none | 1 per 10 seconds | | **Self serve** | 30 days | 5,000 | 500 | 1 per 10 seconds | | **Enterprise** | 12 months | 10,000 | 5,000 | 12 per second | | **Cloudforce One** | Unlimited | 75,000 | 20,000 | 12 per second | - diff --git a/src/content/docs/security/overview.mdx b/src/content/docs/security/overview.mdx index 544b227b7e54dfc..91001dcbbfba6db 100644 --- a/src/content/docs/security/overview.mdx +++ b/src/content/docs/security/overview.mdx @@ -24,10 +24,11 @@ The Security overview page displays: ## Security action items -**Security action items** shows you insights and recommendations related to misconfigurations, exposed infrastructure, and suspicious activity. - - **Action item types**: - - Suspicious activity - - Security insight +**Security action items** shows you insights and recommendations related to misconfigurations, exposed infrastructure, and suspicious activity. + +- **Action item types**: + - Suspicious activity + - Security insight - **Criticality**: Your action items are ranked by the highest criticality, showing critical first, moderate, and low respectively. - **Filters**: You can filter your action items by Criticality, Insight Type, and Security Category. - Criticality: @@ -35,20 +36,20 @@ The Security overview page displays: - Moderate - Critical - Insight Types: - - Suspicious activity - - Exposed infrastructure - - Insecure configuration + - Suspicious activity + - Exposed infrastructure + - Insecure configuration - Configuration suggestion - Compliance Violation - Email Security - Weak Authentication - - Security Category: + - Security Category: - Web application exploits - AI exploits - - DDoS attacks - - Bot traffic - - API abuse - - Client-side abuse + - DDoS attacks + - Bot traffic + - API abuse + - Client-side abuse - Fraud - **Review**: Review your security action items for more detailed information and recommended actions to resolve. - **Load more**: View the full list of security action items. @@ -71,14 +72,14 @@ Archiving a detected suspicious activity will only archive that item from the se To view when an action item’s status was changed and the rationale provided for that change, use the following API commands to retrieve audit logs: -| Method | Path | Description | -| ------ | ---- | ----------- | -| `GET` | `/api/accounts/{accountID}/insights/audit-log` | List all audit logs for an account | -| `GET` | `/api/accounts/{accountID}/insights/{insightID}/audit-log` | List audit logs for a specific issue | -| `GET` | `/api/accounts/{accountID}/issues/audit-log` | List all audit logs for account issues | -| `GET` | `/api/accounts/{accountID}/issues/{insightID}/audit-log` | List all audit logs for a specific issue | -| `GET` | `/api/accounts/{accountID}/zones/{zoneID}/insights/audit-log` | List all audit logs for a domain | -| `GET` | `/api/accounts/{accountID}/zones/{zoneID}/insights/{insightID}/audit-log` | List audit logs for a specific issue in a domain | +| Method | Path | Description | +| ------ | ------------------------------------------------------------------------- | ------------------------------------------------ | +| `GET` | `/api/accounts/{accountID}/insights/audit-log` | List all audit logs for an account | +| `GET` | `/api/accounts/{accountID}/insights/{insightID}/audit-log` | List audit logs for a specific issue | +| `GET` | `/api/accounts/{accountID}/issues/audit-log` | List all audit logs for account issues | +| `GET` | `/api/accounts/{accountID}/issues/{insightID}/audit-log` | List all audit logs for a specific issue | +| `GET` | `/api/accounts/{accountID}/zones/{zoneID}/insights/audit-log` | List all audit logs for a domain | +| `GET` | `/api/accounts/{accountID}/zones/{zoneID}/insights/{insightID}/audit-log` | List audit logs for a specific issue in a domain | Refer to our [Security Center API documentation](/api/resources/security_center) to review the action item audit logs by account, domain, or a specific `issue_id`. @@ -93,4 +94,4 @@ View the patterns and highlights from your domain's traffic in the past 30 days. The Cloudflare dashboard displays: - **Monthly requests**: View the monthly requests and traffic that has been mitigated by Cloudflare. -- **How you compare to your peers**: For enterprise plans, understand how your security posture compares to others in your industry protected by Cloudflare. \ No newline at end of file +- **How you compare to your peers**: For enterprise plans, understand how your security posture compares to others in your industry protected by Cloudflare. diff --git a/src/content/docs/smart-shield/concepts/index.mdx b/src/content/docs/smart-shield/concepts/index.mdx index 1120c7c003aa4c3..12403e47aa9a979 100644 --- a/src/content/docs/smart-shield/concepts/index.mdx +++ b/src/content/docs/smart-shield/concepts/index.mdx @@ -13,4 +13,4 @@ sidebar: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/concepts/network-diagram.mdx b/src/content/docs/smart-shield/concepts/network-diagram.mdx index 3eec884e62a0d79..307591a0ae523f1 100644 --- a/src/content/docs/smart-shield/concepts/network-diagram.mdx +++ b/src/content/docs/smart-shield/concepts/network-diagram.mdx @@ -16,4 +16,4 @@ Requests from visitors first reach a nearby lower-tier data center. For static ( For dynamic (non-cacheable) requests, [Argo Smart Routing](/smart-shield/configuration/argo/) finds the fastest network path to your origin. Between Cloudflare's upper-tier data centers and your origin, [connection reuse](/smart-shield/concepts/connection-reuse/) packages multiple requests into a single connection, reducing the total number of connections your origin handles. -[Health Checks](/smart-shield/configuration/health-checks/) run from multiple data centers to monitor whether your origin is online and responsive. [Dedicated CDN Egress IPs](/smart-shield/configuration/dedicated-egress-ips/) provide reserved IP addresses for traffic from Cloudflare to your origin, allowing you to restrict your origin firewall to a small allowlist. \ No newline at end of file +[Health Checks](/smart-shield/configuration/health-checks/) run from multiple data centers to monitor whether your origin is online and responsive. [Dedicated CDN Egress IPs](/smart-shield/configuration/dedicated-egress-ips/) provide reserved IP addresses for traffic from Cloudflare to your origin, allowing you to restrict your origin firewall to a small allowlist. diff --git a/src/content/docs/smart-shield/configuration/argo.mdx b/src/content/docs/smart-shield/configuration/argo.mdx index 16a4fce8d7e97be..0d1fcae78001d37 100644 --- a/src/content/docs/smart-shield/configuration/argo.mdx +++ b/src/content/docs/smart-shield/configuration/argo.mdx @@ -18,4 +18,4 @@ Available with Smart Shield + Argo and Smart Shield Advanced. Cloudflare provides analytics to show the performance benefits of Argo Smart Routing. - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/cache-reserve/analytics.mdx b/src/content/docs/smart-shield/configuration/cache-reserve/analytics.mdx index 14f71bac0cc40fc..3e14a1542d4343a 100644 --- a/src/content/docs/smart-shield/configuration/cache-reserve/analytics.mdx +++ b/src/content/docs/smart-shield/configuration/cache-reserve/analytics.mdx @@ -14,9 +14,9 @@ tags: import { Render } from "~/components"; \ No newline at end of file +/> diff --git a/src/content/docs/smart-shield/configuration/cache-reserve/index.mdx b/src/content/docs/smart-shield/configuration/cache-reserve/index.mdx index 8eeb03f8661c785..9c1e9769086a7e3 100644 --- a/src/content/docs/smart-shield/configuration/cache-reserve/index.mdx +++ b/src/content/docs/smart-shield/configuration/cache-reserve/index.mdx @@ -40,4 +40,4 @@ You can remove all data stored in Cache Reserve. In most cases, deletion takes a :::note If you want to purge your cache instead, refer to [cache configurations](/cache/how-to/purge-cache/). -::: \ No newline at end of file +::: diff --git a/src/content/docs/smart-shield/configuration/cache-reserve/operations.mdx b/src/content/docs/smart-shield/configuration/cache-reserve/operations.mdx index 5d0b8457ad806be..40b660890f6f6f9 100644 --- a/src/content/docs/smart-shield/configuration/cache-reserve/operations.mdx +++ b/src/content/docs/smart-shield/configuration/cache-reserve/operations.mdx @@ -13,7 +13,4 @@ tags: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/connection-forwarding.mdx b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/connection-forwarding.mdx index 6b011755c7d6d69..4af2a88245d5455 100644 --- a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/connection-forwarding.mdx +++ b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/connection-forwarding.mdx @@ -38,7 +38,7 @@ flowchart LR If the server does not have access to an applicable IP, the following options are checked and the first that is possible will take place: -* Another server in the same data center has access to an applicable IP and the connection is forwarded to that server. +- Another server in the same data center has access to an applicable IP and the connection is forwarded to that server. ```mermaid flowchart LR @@ -55,7 +55,7 @@ flowchart LR Y --egress--> C ``` -* Another data center in the same location has access to an applicable IP and the connection is forwarded to that data center. +- Another data center in the same location has access to an applicable IP and the connection is forwarded to that data center. ```mermaid flowchart LR @@ -77,7 +77,7 @@ flowchart LR Y --egress--> C ``` -* Another data center in a different location has access to an applicable IP. The closest location is selected and connection is forwarded to that location. +- Another data center in a different location has access to an applicable IP. The closest location is selected and connection is forwarded to that location. ```mermaid flowchart LR diff --git a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/index.mdx b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/index.mdx index c7f7d638be9549d..44ef7eec5859bde 100644 --- a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/index.mdx +++ b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/how-it-works/index.mdx @@ -14,4 +14,4 @@ import { DirectoryListing } from "~/components"; Refer to the pages below to understand how Dedicated CDN Egress IPs work. - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/index.mdx b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/index.mdx index 4ed679361eb9526..2275ff704685684 100644 --- a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/index.mdx +++ b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/index.mdx @@ -24,9 +24,9 @@ Dedicated CDN Egress IPs was formerly known as Cloudflare Aegis ([release blog p With Dedicated CDN Egress IPs, you can: -* Lock down your network firewall to only allow traffic from your dedicated IPs. -* Use [Cloudflare Access and CNI](/smart-shield/configuration/dedicated-egress-ips/other-products/#access-and-cni) to secure your applications without installing software or customizing code on your server. -* Ensure only authorized [Workers](/smart-shield/configuration/dedicated-egress-ips/other-products/#workers) can access your origin services. +- Lock down your network firewall to only allow traffic from your dedicated IPs. +- Use [Cloudflare Access and CNI](/smart-shield/configuration/dedicated-egress-ips/other-products/#access-and-cni) to secure your applications without installing software or customizing code on your server. +- Ensure only authorized [Workers](/smart-shield/configuration/dedicated-egress-ips/other-products/#workers) can access your origin services. ## Scope @@ -40,4 +40,4 @@ Dedicated CDN Egress IPs are included within [BGP advertisement over CNI](/netwo -[^1]: From Cloudflare to your origin. Refer to [how it works](/smart-shield/configuration/dedicated-egress-ips/how-it-works/egress-ips/) for details. \ No newline at end of file +[^1]: From Cloudflare to your origin. Refer to [how it works](/smart-shield/configuration/dedicated-egress-ips/how-it-works/egress-ips/) for details. diff --git a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/ips-utilization.mdx b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/ips-utilization.mdx index bf1bd852f10c57a..7e7eb7f4fe8699d 100644 --- a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/ips-utilization.mdx +++ b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/ips-utilization.mdx @@ -16,7 +16,7 @@ Use the [GraphQL API](/analytics/graphql-api/) to get aggregate data and monitor -Refer to the [GraphQL Analytics API documentation](/analytics/graphql-api/getting-started/) for further guidance, or consider the [example](#example) below for a quickstart. +Refer to the [GraphQL Analytics API documentation](/analytics/graphql-api/getting-started/) for further guidance, or consider the [example](#example) below for a quickstart. ## GraphQL schema @@ -25,19 +25,19 @@ The specific schema to get Dedicated CDN Egress IPs data is called `aegisIpUtili You can get average (`avg`) or maximum (`max`) utilization values (in percentage), and use the following dimensions: - `datetimeFiveMinutes` - - Timestamp truncated to five minutes. For example, `2025-01-10T00:05:00Z`. + - Timestamp truncated to five minutes. For example, `2025-01-10T00:05:00Z`. - `popName` - - The Cloudflare point of presence (PoP). For example, `sjc`. + - The Cloudflare point of presence (PoP). For example, `sjc`. - `egressIp` - - Your assigned Dedicated CDN Egress IP. For example, `192.0.2.1`. + - Your assigned Dedicated CDN Egress IP. For example, `192.0.2.1`. - `origin` - - Origin IP and port. For example, `203.0.113.150:443`. + - Origin IP and port. For example, `203.0.113.150:443`. - `popUtilizationKey` - - The Cloudflare point of presence (PoP), the Dedicated CDN Egress IP, and the origin IP and port. For example, `sjc 192.0.2.1 203.0.113.150:443`. + - The Cloudflare point of presence (PoP), the Dedicated CDN Egress IP, and the origin IP and port. For example, `sjc 192.0.2.1 203.0.113.150:443`. ## Example @@ -47,100 +47,100 @@ You can also select the button at the bottom to use this query for your account ```graphql graphql-api-explorer "popName: """ "egressIp: """ "origin: """ query AegisIpUtilizationQuery( - $accountTag: string - $datetimeStart: string - $datetimeEnd: string + $accountTag: string + $datetimeStart: string + $datetimeEnd: string ) { - viewer { - utilization: accounts(filter: { accountTag: $accountTag }) { - avgByPopUtilization: aegisIpUtilizationAdaptiveGroups( - limit: 100 - filter: { - datetimeFiveMinutes_geq: $datetimeStart - datetimeFiveMinutes_leq: $datetimeEnd - } - orderBy: [datetimeFiveMinutes_ASC] - ) { - avg { - utilization - } - dimensions { - datetimeFiveMinutes - popUtilizationKey - } - } - - maxByPopUtilization: aegisIpUtilizationAdaptiveGroups( - limit: 100 - filter: { - datetimeFiveMinutes_geq: $datetimeStart - datetimeFiveMinutes_leq: $datetimeEnd - } - orderBy: [datetimeFiveMinutes_ASC] - ) { - max { - utilization - } - dimensions { - datetimeFiveMinutes - popUtilizationKey - } - } - - filterPopUtilization: aegisIpUtilizationAdaptiveGroups( - limit: 100 - filter: { - datetimeFiveMinutes_geq: $datetimeStart - datetimeFiveMinutes_leq: $datetimeEnd - popName: "" - } - orderBy: [datetimeFiveMinutes_ASC] - ) { - max { - utilization - } - dimensions { - datetimeFiveMinutes - popUtilizationKey - } - } - - filterIPUtilization: aegisIpUtilizationAdaptiveGroups( - limit: 100 - filter: { - datetimeFiveMinutes_geq: $datetimeStart - datetimeFiveMinutes_leq: $datetimeEnd - egressIp: "" - } - orderBy: [datetimeFiveMinutes_ASC] - ) { - max { - utilization - } - dimensions { - datetimeFiveMinutes - popUtilizationKey - } - } - - filterOriginUtilization: aegisIpUtilizationAdaptiveGroups( - limit: 100 - filter: { - datetimeFiveMinutes_geq: $datetimeStart - datetimeFiveMinutes_leq: $datetimeEnd - origin: "" - } - orderBy: [datetimeFiveMinutes_ASC] - ) { - max { - utilization - } - dimensions { - datetimeFiveMinutes - popUtilizationKey - } - } - } - } + viewer { + utilization: accounts(filter: { accountTag: $accountTag }) { + avgByPopUtilization: aegisIpUtilizationAdaptiveGroups( + limit: 100 + filter: { + datetimeFiveMinutes_geq: $datetimeStart + datetimeFiveMinutes_leq: $datetimeEnd + } + orderBy: [datetimeFiveMinutes_ASC] + ) { + avg { + utilization + } + dimensions { + datetimeFiveMinutes + popUtilizationKey + } + } + + maxByPopUtilization: aegisIpUtilizationAdaptiveGroups( + limit: 100 + filter: { + datetimeFiveMinutes_geq: $datetimeStart + datetimeFiveMinutes_leq: $datetimeEnd + } + orderBy: [datetimeFiveMinutes_ASC] + ) { + max { + utilization + } + dimensions { + datetimeFiveMinutes + popUtilizationKey + } + } + + filterPopUtilization: aegisIpUtilizationAdaptiveGroups( + limit: 100 + filter: { + datetimeFiveMinutes_geq: $datetimeStart + datetimeFiveMinutes_leq: $datetimeEnd + popName: "" + } + orderBy: [datetimeFiveMinutes_ASC] + ) { + max { + utilization + } + dimensions { + datetimeFiveMinutes + popUtilizationKey + } + } + + filterIPUtilization: aegisIpUtilizationAdaptiveGroups( + limit: 100 + filter: { + datetimeFiveMinutes_geq: $datetimeStart + datetimeFiveMinutes_leq: $datetimeEnd + egressIp: "" + } + orderBy: [datetimeFiveMinutes_ASC] + ) { + max { + utilization + } + dimensions { + datetimeFiveMinutes + popUtilizationKey + } + } + + filterOriginUtilization: aegisIpUtilizationAdaptiveGroups( + limit: 100 + filter: { + datetimeFiveMinutes_geq: $datetimeStart + datetimeFiveMinutes_leq: $datetimeEnd + origin: "" + } + orderBy: [datetimeFiveMinutes_ASC] + ) { + max { + utilization + } + dimensions { + datetimeFiveMinutes + popUtilizationKey + } + } + } + } } -``` \ No newline at end of file +``` diff --git a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/other-products.mdx b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/other-products.mdx index f36cbde97e071bb..da17ba92284032c 100644 --- a/src/content/docs/smart-shield/configuration/dedicated-egress-ips/other-products.mdx +++ b/src/content/docs/smart-shield/configuration/dedicated-egress-ips/other-products.mdx @@ -63,4 +63,4 @@ Workers subrequests — requests from one Worker to another — are expected to For [`connect()` requests](/workers/runtime-apis/tcp-sockets/) - which create outbound TCP connections from Workers - Dedicated CDN Egress IPs are **not** used. -[^1]: When an attacker knows your origin server IP and uses it to directly interact with the target application. \ No newline at end of file +[^1]: When an attacker knows your origin server IP and uses it to directly interact with the target application. diff --git a/src/content/docs/smart-shield/configuration/health-checks/analytics.mdx b/src/content/docs/smart-shield/configuration/health-checks/analytics.mdx index 121427dcf85f924..2ff26322bf71a01 100644 --- a/src/content/docs/smart-shield/configuration/health-checks/analytics.mdx +++ b/src/content/docs/smart-shield/configuration/health-checks/analytics.mdx @@ -15,7 +15,4 @@ import { Render } from "~/components"; Use Health Checks analytics to debug possible origin issues. - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/health-checks/index.mdx b/src/content/docs/smart-shield/configuration/health-checks/index.mdx index ca2d659d7d5eb14..0f3fdf5c2c0f9a7 100644 --- a/src/content/docs/smart-shield/configuration/health-checks/index.mdx +++ b/src/content/docs/smart-shield/configuration/health-checks/index.mdx @@ -24,4 +24,4 @@ Available for Pro, Business, and Enterprise customers in all Smart Shield packag ## Further reading - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/health-checks/setup.mdx b/src/content/docs/smart-shield/configuration/health-checks/setup.mdx index 292d644b16b754d..07cacf201721425 100644 --- a/src/content/docs/smart-shield/configuration/health-checks/setup.mdx +++ b/src/content/docs/smart-shield/configuration/health-checks/setup.mdx @@ -20,8 +20,8 @@ Refer to the section below to learn how to manage your Smart Shield health check 3. For Health Checks, select **Manage**. 4. Select **Create** or find an existing health check and select **Edit**. 5. Fill out the form or edit existing values, paying special attention to: - * The values for **Interval** and **Check regions**, because decreasing the **Interval** and increasing **Check regions** may increase the load on your origin server. - * **Retries**, which specify the number of retries to attempt in case of a timeout before marking the origin as unhealthy. + - The values for **Interval** and **Check regions**, because decreasing the **Interval** and increasing **Check regions** may increase the load on your origin server. + - **Retries**, which specify the number of retries to attempt in case of a timeout before marking the origin as unhealthy. 6. Select **Save and Deploy**. ## Configure alerts diff --git a/src/content/docs/smart-shield/configuration/health-checks/zone-lockdown.mdx b/src/content/docs/smart-shield/configuration/health-checks/zone-lockdown.mdx index 5a42572ca2e935b..e269a8febaf8111 100644 --- a/src/content/docs/smart-shield/configuration/health-checks/zone-lockdown.mdx +++ b/src/content/docs/smart-shield/configuration/health-checks/zone-lockdown.mdx @@ -15,4 +15,4 @@ tags: import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/index.mdx b/src/content/docs/smart-shield/configuration/index.mdx index 9a1b637e55751a5..6244ba2195424e8 100644 --- a/src/content/docs/smart-shield/configuration/index.mdx +++ b/src/content/docs/smart-shield/configuration/index.mdx @@ -12,4 +12,4 @@ sidebar: import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/regional-tiered-cache.mdx b/src/content/docs/smart-shield/configuration/regional-tiered-cache.mdx index 9073a8017865420..49cf513c617947e 100644 --- a/src/content/docs/smart-shield/configuration/regional-tiered-cache.mdx +++ b/src/content/docs/smart-shield/configuration/regional-tiered-cache.mdx @@ -16,4 +16,4 @@ import { Render } from "~/components"; Available with Smart Shield Advanced. ::: - \ No newline at end of file + diff --git a/src/content/docs/smart-shield/configuration/smart-tiered-cache.mdx b/src/content/docs/smart-shield/configuration/smart-tiered-cache.mdx index f7fafaa47aea6a9..9b9c6760721cd54 100644 --- a/src/content/docs/smart-shield/configuration/smart-tiered-cache.mdx +++ b/src/content/docs/smart-shield/configuration/smart-tiered-cache.mdx @@ -18,4 +18,4 @@ Available in all Smart Shield packages. With data centers around the world, Cloudflare caches content very close to end users. However, if a piece of content is not in cache, the Cloudflare data centers must contact the origin server to receive the cacheable content. Tiered cache works by dividing Cloudflare's data centers into a hierarchy of lower-tiers and upper-tiers, where only upper-tiers can ask your origin for content. - \ No newline at end of file + diff --git a/src/content/docs/spectrum/about/byoip.mdx b/src/content/docs/spectrum/about/byoip.mdx index b574fc12e5048f2..3e3fb82322e59aa 100644 --- a/src/content/docs/spectrum/about/byoip.mdx +++ b/src/content/docs/spectrum/about/byoip.mdx @@ -5,22 +5,18 @@ description: Use your own IP addresses with Spectrum applications. products: - spectrum weight: 0 - --- -import { APIRequest, Render } from "~/components" +import { APIRequest, Render } from "~/components"; When creating a Spectrum application, Cloudflare normally assigns an arbitrary IP from Cloudflare’s IP pool to your application. If you want to be explicit in your network setup or use your own IP addresses, BYOIP with Spectrum allows you to do just that. BYOIP stands for [Bring Your Own IP](/byoip/). If you own an IP prefix you can migrate it to Cloudflare. After migration, Cloudflare broadcasts your IP prefix and traffic is routed to the global Cloudflare network. However, without configuration, Cloudflare will not know how to handle this traffic. The last step is to add Spectrum applications for all applications that you wish to protect with the IP addresses you want associated with them. - :::caution - When switching from non-BYOIP to BYOIP, if you are already using a Spectrum application, you need to delete your configurations and recreate new ones. - ::: The smallest prefixes that Cloudflare currently supports is /24 for IPv4 and /48 for IPv6. @@ -35,22 +31,22 @@ To use an IP, it must be assigned to a Spectrum app to create the appropriate A ```json { - "id": "4590376cf2994d72cee36828ec4eff19", - "protocol": "tcp/22", - "dns": { - "type": "ADDRESS", - "name": "ssh.example.com" - }, - "origin_direct": ["tcp://192.0.2.1:22"], - "ip_firewall": true, - "proxy_protocol": false, - "spp": false, - "tls": "off", - "traffic_type": "direct", - "edge_ips": { - "type": "static", - "ips": ["198.51.100.10", "2001:DB8::1"] - } + "id": "4590376cf2994d72cee36828ec4eff19", + "protocol": "tcp/22", + "dns": { + "type": "ADDRESS", + "name": "ssh.example.com" + }, + "origin_direct": ["tcp://192.0.2.1:22"], + "ip_firewall": true, + "proxy_protocol": false, + "spp": false, + "tls": "off", + "traffic_type": "direct", + "edge_ips": { + "type": "static", + "ips": ["198.51.100.10", "2001:DB8::1"] + } } ``` @@ -59,25 +55,20 @@ To use an IP, it must be assigned to a Spectrum app to create the appropriate A In the example below, the application routes traffic through Cloudflare’s HTTP pipeline, including WAF, Workers and CDN functionality. diff --git a/src/content/docs/spectrum/about/ddos-for-spectrum.mdx b/src/content/docs/spectrum/about/ddos-for-spectrum.mdx index 21f55d4cd8281c7..30cfcf85e672028 100644 --- a/src/content/docs/spectrum/about/ddos-for-spectrum.mdx +++ b/src/content/docs/spectrum/about/ddos-for-spectrum.mdx @@ -5,7 +5,6 @@ description: Layer 3 and 4 DDoS protection for TCP and UDP Spectrum applications products: - spectrum weight: 0 - --- Spectrum provides DDoS Protection at layers 3-4 of the [OSI model](https://www.cloudflare.com/learning/ddos/glossary/open-systems-interconnection-model-osi/), that is against TCP and UDP based DDoS attacks. diff --git a/src/content/docs/spectrum/about/ftp.mdx b/src/content/docs/spectrum/about/ftp.mdx index 1d666adace4bcc4..68f7e8ff116275c 100644 --- a/src/content/docs/spectrum/about/ftp.mdx +++ b/src/content/docs/spectrum/about/ftp.mdx @@ -13,17 +13,15 @@ Enabling Spectrum for FTP is not straightforward due to the implementation of th :::note - This feature requires an Enterprise plan. If you would like to upgrade, contact your account team. - ::: ## How FTP Operates FTP leverages two different sockets, one for issuing commands and the other for actual data transfer. The control socket takes care of users logging in and sending commands, and the data socket is where directory listings and files actually get transferred. -There are two ways in which client and server can establish a data socket: active and passive. In active mode, the server connects *back* to the client on a port that they have specified, which can create issues where clients are behind an NAT. The alternative is passive mode, where the server opens an extra port that the client then connects to. For an overview of active versus passive FTP, refer to [Active FTP vs. Passive FTP, a Definitive Explanation](http://slacksite.com/other/ftp.html). +There are two ways in which client and server can establish a data socket: active and passive. In active mode, the server connects _back_ to the client on a port that they have specified, which can create issues where clients are behind an NAT. The alternative is passive mode, where the server opens an extra port that the client then connects to. For an overview of active versus passive FTP, refer to [Active FTP vs. Passive FTP, a Definitive Explanation](http://slacksite.com/other/ftp.html). In passive mode, the FTP server communicates a port that the client should connect to, which is done on the control socket via a PASV command. By default, the FTP server responds with the IP address that it is listening on. This scenario is fine for servers running directly on a public-facing IP but creates issues when a server is behind an NAT, firewall, or Cloudflare Spectrum. @@ -31,7 +29,7 @@ Alternatively, more modern FTP server software supports [FTP extensions](https:/ ## What Does and Does Not Work -Spectrum is able to protect servers serving FTP traffic in *passive mode only*. Active mode is not supported due to the fact that the origin server sees the Spectrum IP as being the client instead of the actual client IP. When the client issues a PORT command with their own IP, the FTP server rejects because the two addresses do not match. +Spectrum is able to protect servers serving FTP traffic in _passive mode only_. Active mode is not supported due to the fact that the origin server sees the Spectrum IP as being the client instead of the actual client IP. When the client issues a PORT command with their own IP, the FTP server rejects because the two addresses do not match. Passive mode in combination with EPSV works out of the box with no origin-side configuration required. Note that the client must also support EPSV for this to work. Traditional passive mode with PASV is possible with minimal origin-side configuration (see below, Protecting an FTP server with Spectrum) @@ -71,14 +69,14 @@ Example configuration for [vsftpd](https://security.appspot.com/vsftpd.html): To use Spectrum TCP to proxy and protect FTPS, specifically ProFTPD, the following example configuration is recommended: -* **Control Port**: Port 21 -* **Data Ports**: Port ranges 50000-50500 +- **Control Port**: Port 21 +- **Data Ports**: Port ranges 50000-50500 On the ProFTPD server side use the following example configuration: -* `MasqueradeAddress`: `www.example.com` -* `AllowForeignAddress`: You can use the option `on` to allow all IPs, but it is recommended to only allow [Cloudflare IP](/fundamentals/concepts/cloudflare-ip-addresses/#allow-cloudflare-ip-addresses). -* `PassivePorts`: `50000-50500` +- `MasqueradeAddress`: `www.example.com` +- `AllowForeignAddress`: You can use the option `on` to allow all IPs, but it is recommended to only allow [Cloudflare IP](/fundamentals/concepts/cloudflare-ip-addresses/#allow-cloudflare-ip-addresses). +- `PassivePorts`: `50000-50500` For more details, refer to the [ProFTPD documentation](http://www.proftpd.org/docs/modules/mod_core.html). diff --git a/src/content/docs/spectrum/about/index.mdx b/src/content/docs/spectrum/about/index.mdx index a45de1bbf3080f6..79bf764731996bb 100644 --- a/src/content/docs/spectrum/about/index.mdx +++ b/src/content/docs/spectrum/about/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 3 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For more information about concepts related to Spectrum, refer to the sections below. diff --git a/src/content/docs/spectrum/about/static-ip.mdx b/src/content/docs/spectrum/about/static-ip.mdx index f075127c3337700..9ad484844461329 100644 --- a/src/content/docs/spectrum/about/static-ip.mdx +++ b/src/content/docs/spectrum/about/static-ip.mdx @@ -5,10 +5,9 @@ description: Assign persistent IP addresses to your Spectrum applications. products: - spectrum weight: 0 - --- -import { APIRequest, Render } from "~/components" +import { APIRequest, Render } from "~/components"; When you create a Spectrum application, you are assigned an IP. These IPs are normally dynamic, meaning that they will change over time. But, for instance, if you want to set up WAF custom rules for specific IPs, you may want to use static IPs. @@ -29,35 +28,30 @@ Once you get your static IP from Cloudflare, you can use it via API, just like [ When creating a Spectrum application through the API, specify the static IPs that you have been provided. See, for instance, the API example below that creates an application routing traffic through Cloudflare’s HTTP pipeline. ## Check your static IPs \ No newline at end of file +/> diff --git a/src/content/docs/spectrum/glossary.mdx b/src/content/docs/spectrum/glossary.mdx index 5dfed742cc6ccb5..e858503baad6ca3 100644 --- a/src/content/docs/spectrum/glossary.mdx +++ b/src/content/docs/spectrum/glossary.mdx @@ -6,10 +6,9 @@ products: - spectrum sidebar: order: 7 - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Spectrum documentation. diff --git a/src/content/docs/spectrum/how-to/enable-proxy-protocol.mdx b/src/content/docs/spectrum/how-to/enable-proxy-protocol.mdx index 3961a4766160937..bed4a42932be361 100644 --- a/src/content/docs/spectrum/how-to/enable-proxy-protocol.mdx +++ b/src/content/docs/spectrum/how-to/enable-proxy-protocol.mdx @@ -5,7 +5,6 @@ description: Pass client IP information to your origin using Proxy protocol v1 o products: - spectrum weight: 0 - --- import { DashButton } from "~/components"; @@ -16,10 +15,8 @@ Some services you run may require knowledge of the true client IP. In those case :::note - This feature requires an Enterprise plan. If you would like to upgrade, contact your account team. - ::: ## Enable Proxy Protocol v1 for TCP diff --git a/src/content/docs/spectrum/how-to/index.mdx b/src/content/docs/spectrum/how-to/index.mdx index 9f660cc61eee6f5..8edbdf1ca9239c5 100644 --- a/src/content/docs/spectrum/how-to/index.mdx +++ b/src/content/docs/spectrum/how-to/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 5 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For more information on completing Spectrum related tasks, refer to the sections below. diff --git a/src/content/docs/spectrum/protocols-per-plan.mdx b/src/content/docs/spectrum/protocols-per-plan.mdx index 6ae364f5a9f92e8..b82fd38bf63e579 100644 --- a/src/content/docs/spectrum/protocols-per-plan.mdx +++ b/src/content/docs/spectrum/protocols-per-plan.mdx @@ -6,10 +6,9 @@ products: - spectrum sidebar: order: 2 - --- -import { FeatureTable } from "~/components" +import { FeatureTable } from "~/components"; On this table, you have information about which protocols are available per plan. diff --git a/src/content/docs/spectrum/reference/analytics.mdx b/src/content/docs/spectrum/reference/analytics.mdx index 8ad2a392de6915f..3f021a4dd31e9fb 100644 --- a/src/content/docs/spectrum/reference/analytics.mdx +++ b/src/content/docs/spectrum/reference/analytics.mdx @@ -9,12 +9,10 @@ tags: - Analytics --- -import { Render, APIRequest } from "~/components" +import { Render, APIRequest } from "~/components"; Cloudflare measures the following metrics for every connection. - - | Metric | Name | Example | Unit | | -------------- | ----------------------------------- | ------- | -------------------- | | count | Count of total events | `1000` | Count | @@ -25,14 +23,10 @@ Cloudflare measures the following metrics for every connection. | duration90th | 90th percentile connection duration | `1.0` | Time in milliseconds | | duration99th | 99th percentile connection duration | `1.0` | Time in milliseconds | - - ## Additional dimensions You can divide your analytics further by the following dimensions. - - | Dimension | Name | Example | | --------- | ----------------------------- | -------------------------------------------------------------------- | | event | Connection Event | `connect`, `progress`, `disconnect`, `originError`, `clientFiltered` | @@ -40,14 +34,10 @@ You can divide your analytics further by the following dimensions. | coloName | Colo Name | `SFO` | | ipVersion | IP version used by the client | `4`, `6` | - - ## Operators for filtering Use the operators below to filter data. - - | Operator | Name | URL Encoded | | -------- | ------------------------ | ----------- | | `==` | Equals | `%3D%3D` | @@ -57,8 +47,6 @@ Use the operators below to filter data. | `>=` | Greater than or equal to | `%3E%3D` | | `<=` | Less than or equal to | `%3C%3D` | - - ## Analytics request structure @@ -68,26 +56,26 @@ Use the operators below to filter data. /api/v4/zones/{zone_id}/spectrum/analytics/events/bytime?metrics=METRICS&dimensions=DIMENSIONS&filters=FILTERS&since=FROM_TS&sort=SORT&until=TO_TS&limit=LIMIT ``` -* METRICS is one or more metrics (such as count) to compute -* DIMENSIONS can be used to break down the data by given attributes -* FILTERS used to filter rows by one or more dimensions (see Filters section below) -* SORT is the sort order for the result set; sort fields must be included in METRICS or DIMENSIONS -* TO\_TS is that end of time interval to query, defaults to current time -* FROM\_TS is that start of time interval to query, defaults to TO\_TS - 6 hours -* STEP is used to select time series resolution when using endpoint: -* auto or omitted - selects time step most appropriate to time interval - * year - * quarter - * month - * week - * day - * hour +- METRICS is one or more metrics (such as count) to compute +- DIMENSIONS can be used to break down the data by given attributes +- FILTERS used to filter rows by one or more dimensions (see Filters section below) +- SORT is the sort order for the result set; sort fields must be included in METRICS or DIMENSIONS +- TO_TS is that end of time interval to query, defaults to current time +- FROM_TS is that start of time interval to query, defaults to TO_TS - 6 hours +- STEP is used to select time series resolution when using endpoint: +- auto or omitted - selects time step most appropriate to time interval + - year + - quarter + - month + - week + - day + - hour ## Analytics query example Refer to the [Spectrum API documentation](/api/resources/spectrum/subresources/analytics/subresources/aggregates/subresources/currents/methods/get/) for more examples of API requests. diff --git a/src/content/docs/spectrum/reference/index.mdx b/src/content/docs/spectrum/reference/index.mdx index 1cb17fdcb764a75..2f5495921b7c522 100644 --- a/src/content/docs/spectrum/reference/index.mdx +++ b/src/content/docs/spectrum/reference/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 6 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For more information related to Spectrum, refer to the sections below. diff --git a/src/content/docs/spectrum/reference/layer-7-analytics.mdx b/src/content/docs/spectrum/reference/layer-7-analytics.mdx index ac15ed1aa946651..ed2b0717d749251 100644 --- a/src/content/docs/spectrum/reference/layer-7-analytics.mdx +++ b/src/content/docs/spectrum/reference/layer-7-analytics.mdx @@ -6,7 +6,7 @@ products: - spectrum --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; Even when you have Spectrum enabled to handle Layer 4 traffic (for example, TCP/UDP connections), you may still notice traffic in your Layer 7 (L7) analytics dashboard. This is due to the way Cloudflare's Layer 7 CDN and Spectrum handle customer identity differently. @@ -42,4 +42,4 @@ This means traffic for this hostname undergoes the standard Layer 7 CDN products If you want to prevent traffic for Layer-4-only Spectrum hostnames from being proxied through Layer 7 to your origin (including unwanted scans or requests), we recommend implementing a Layer 7 WAF (Web Application Firewall) rule. This rule can block traffic directed at specific hostnames or ports, ensuring that only legitimate traffic reaches your Spectrum service. -For example, you can create a WAF rule to block requests to `spectrum.example.com` unless they originate from a Spectrum IP or a customer's Spectrum BYOIP. The traffic will still be logged in Layer 7 Analytics, including WAF Security Events, but this prevents it from arriving at the wrong address and looping through the CDN a second time. \ No newline at end of file +For example, you can create a WAF rule to block requests to `spectrum.example.com` unless they originate from a Spectrum IP or a customer's Spectrum BYOIP. The traffic will still be logged in Layer 7 Analytics, including WAF Security Events, but this prevents it from arriving at the wrong address and looping through the CDN a second time. diff --git a/src/content/docs/spectrum/reference/logs.mdx b/src/content/docs/spectrum/reference/logs.mdx index 0ee954278aec0d5..e5c27ce81e5be5e 100644 --- a/src/content/docs/spectrum/reference/logs.mdx +++ b/src/content/docs/spectrum/reference/logs.mdx @@ -19,8 +19,6 @@ Spectrum [log events](/logs/logpush/logpush-job/datasets/) can be configured thr ## Status Codes - - | Code | Description | | ---- | -------------------------------------------------------------------------------------------------- | | 0 | Connection was opened successfully. | @@ -52,4 +50,3 @@ Spectrum [log events](/logs/logpush/logpush-job/datasets/) can be configured thr | 533 | Internal error while resolving origin to an IP. | | 540 | The client/edge TLS handshake failed due to an invalid configuration. | | 999 | Unknown connection error. | - diff --git a/src/content/docs/spectrum/reference/settings-by-plan.mdx b/src/content/docs/spectrum/reference/settings-by-plan.mdx index c243f1c03952069..9865188065dbb98 100644 --- a/src/content/docs/spectrum/reference/settings-by-plan.mdx +++ b/src/content/docs/spectrum/reference/settings-by-plan.mdx @@ -5,19 +5,12 @@ description: Spectrum API fields and settings available by Cloudflare plan. products: - spectrum weight: 0 - --- - - Certain fields in Spectrum request and response bodies require an Enterprise plan. To upgrade your plan, contact your account team. Spectrum properties requiring an Enterprise plan: - - - - | Name | Type | Description | Example | | -------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- | | `origin_dns` | object | Method and parameters used to discover the origin server address via DNS. Valid record types are `A`, `AAAA`, `SRV` and empty (both `A` and `AAA`).
    A request must contain either an `origin_dns` parameter or an `origin_direct` parameter. When both are specified the service returns an `HTTP 400 Bad Request`. | `origin_dns: {type: A, name: mqtt.example.com, ttl: 1200}` | @@ -25,11 +18,6 @@ Spectrum properties requiring an Enterprise plan: | `proxy_protocol` | string | Enables Proxy Protocol to the origin. Spectrum supports `v1`, `v2`, and `simple` proxy protocols. Refer to [Proxy Protocol](/spectrum/how-to/enable-proxy-protocol/) for more details. | `off` | | `ip_firewall` | boolean | Enables IP Access rules for this application. | `true` | | `tls` | string | Type of TLS termination for the application. Options are `off` (default, also known as Passthrough), `flexible`, `full`, and `strict`. Refer to [Configuration Options](/spectrum/reference/configuration-options/) for descriptions of each. | `full` | -| `argo_smart_routing` | boolean | Enables Argo Smart Routing for the application. Note that it is only available for TCP applications with traffic\_type set to `direct`. | `true` | - - - - +| `argo_smart_routing` | boolean | Enables Argo Smart Routing for the application. Note that it is only available for TCP applications with traffic_type set to `direct`. | `true` | Review the [Spectrum API documentation](/api/resources/spectrum/subresources/apps/methods/list/) for example API requests. - diff --git a/src/content/docs/speed/aim.mdx b/src/content/docs/speed/aim.mdx index c8139eed9a0013a..95fc9acbd18a0d7 100644 --- a/src/content/docs/speed/aim.mdx +++ b/src/content/docs/speed/aim.mdx @@ -4,7 +4,6 @@ description: Measure real-world internet quality metrics for your visitors. products: - speed title: Aggregated Internet Measurement - --- Aggregated Internet Measurement (AIM) helps you understand your Internet quality to identify scenarios that your Internet connection is good or bad for. Typically, an Internet speed test provides you with upload and download speeds, which may not always provide a holistic view of your Internet quality. @@ -15,28 +14,28 @@ AIM uses a scoring rubric that assigns point values based on speed tests to help AIM analyzes the following metrics to generate your score: -* Latency -* Packet Loss -* Download -* Upload -* Loaded Latency -* Jitter +- Latency +- Packet Loss +- Download +- Upload +- Loaded Latency +- Jitter -After the test is run and a point value is assigned to each metric, the points are translated to a network score for streaming, gaming, and webchat/RTC. These scores will indicate how good your Internet is in each of these scenarios. +After the test is run and a point value is assigned to each metric, the points are translated to a network score for streaming, gaming, and webchat/RTC. These scores will indicate how good your Internet is in each of these scenarios. The possible network scores are: -* Bad -* Poor -* Average -* Good -* Great +- Bad +- Poor +- Average +- Good +- Great ## Improve your network score You have a few options to help improve network scores. -* **Switch to a wired connection.** When possible, switch to a wired connection instead of wireless to avoid performance issues due to radio interference and signal strength. -* **Move closer to your router.** If you are unable to use a wired connection, try to move closer to your wireless router. Signal strength drops as you move away from your wireless router and a weaker signal means poorer connectivity. Keep in mind that any objects or materials between you and your wireless router can also have a negative impact on signal strength. -* **Upgrade your router.** Ensure you are using a router capable of handling smarter queueing with hardware that will not fall over under load. -* **Contact your ISP.** If you’re using a wired connection or have a good connection to your wireless router and are still seeing issues, you may have issues with your Internet connection and should reach out to your ISP. +- **Switch to a wired connection.** When possible, switch to a wired connection instead of wireless to avoid performance issues due to radio interference and signal strength. +- **Move closer to your router.** If you are unable to use a wired connection, try to move closer to your wireless router. Signal strength drops as you move away from your wireless router and a weaker signal means poorer connectivity. Keep in mind that any objects or materials between you and your wireless router can also have a negative impact on signal strength. +- **Upgrade your router.** Ensure you are using a router capable of handling smarter queueing with hardware that will not fall over under load. +- **Contact your ISP.** If you’re using a wired connection or have a good connection to your wireless router and are still seeing issues, you may have issues with your Internet connection and should reach out to your ISP. diff --git a/src/content/docs/speed/glossary.mdx b/src/content/docs/speed/glossary.mdx index fc3634a28e51568..2fb9f99dba9493c 100644 --- a/src/content/docs/speed/glossary.mdx +++ b/src/content/docs/speed/glossary.mdx @@ -4,10 +4,9 @@ pcx_content_type: glossary description: Definitions for terms used across Cloudflare Speed documentation. products: - speed - --- -import { Glossary } from "~/components" +import { Glossary } from "~/components"; Review the definitions for terms used across Cloudflare's Speed documentation. diff --git a/src/content/docs/speed/observatory/dashboard.mdx b/src/content/docs/speed/observatory/dashboard.mdx index 1017a25218c61a5..6a18975aceb0150 100644 --- a/src/content/docs/speed/observatory/dashboard.mdx +++ b/src/content/docs/speed/observatory/dashboard.mdx @@ -40,11 +40,10 @@ The **Network Performance** section shows timing data that can help pinpoint whe - **Time to First Byte (TTFB)**: Measures the time between the initial request and the first byte of the response. - **Time to Last Byte (TTLB) Breakdown**: Provides a breakdown of response phases: - - - DNS resolution time - - TCP connection time - - Request processing time at the server - - Response transfer time + - DNS resolution time + - TCP connection time + - Request processing time at the server + - Response transfer time This breakdown helps identify whether delays are caused by DNS, connection setup, server processing, or response delivery. @@ -77,4 +76,4 @@ Use the Speed Overview dashboard to: - Track **Core Web Vitals** to ensure a good user experience. - Analyze **Network Performance** to identify latency bottlenecks. - Diagnose errors with **HTTP Traffic** insights. -- Confirm site reliability using **Synthetic Monitoring** results. \ No newline at end of file +- Confirm site reliability using **Synthetic Monitoring** results. diff --git a/src/content/docs/speed/observatory/rum-beacon.mdx b/src/content/docs/speed/observatory/rum-beacon.mdx index 66c0e8035856ce1..8e343c58ee410d5 100644 --- a/src/content/docs/speed/observatory/rum-beacon.mdx +++ b/src/content/docs/speed/observatory/rum-beacon.mdx @@ -8,7 +8,6 @@ tags: - Privacy sidebar: order: 4 - --- The RUM beacon is a JavaScript snippet that runs when a Cloudflare customer enables RUM through [Web Analytics](/web-analytics/) or [Observatory](/speed/observatory/). This script runs in users' browsers when they visit the customer's site, and its purpose is to collect performance-related data, for example, page load time, and send it to Cloudflare's systems for processing. This [data](/web-analytics/data-metrics/) is then presented to the customer, providing valuable insights into the website's performance and usage. @@ -17,7 +16,7 @@ The RUM beacon script can be enabled into a webpage in two ways: - **One-click setup**: For [sites proxied through Cloudflare](/web-analytics/get-started/#sites-proxied-through-cloudflare) that have Web Analytics enabled, the snippet can be _automatically_ injected into pages as the HTML response passes through Cloudflare's edge network to the browser by simply enabling the automatic injection option. -- **Manual setup**: Websites can _manually_ add the script by embedding a code snippet into their pages. Refer to the [Sites not proxied through Cloudflare section](/web-analytics/get-started/#sites-not-proxied-through-cloudflare), for more information about how to manually insert the snippet into your HTML. +- **Manual setup**: Websites can _manually_ add the script by embedding a code snippet into their pages. Refer to the [Sites not proxied through Cloudflare section](/web-analytics/get-started/#sites-not-proxied-through-cloudflare), for more information about how to manually insert the snippet into your HTML. ## Data collection @@ -25,36 +24,36 @@ Once downloaded to the browser, the RUM beacon script runs as JavaScript in the The data collected from the browser is summarized in the table below: -| Field | Example | Description | How it is collected | -|------------|----------|--------------|------------------------| -| `pageloadId` | 0c698922-8d60-40bf-85ac-7982b5f8034d | The unique ID for the page. | Generated in the browser code. | -| `referrer` | https://cfrumtest.com/ | The referring page URL. | If it is a multi-page application (MPA), then it is generated from [document.referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer). If it is a single-page application (SPA), then it is generated from a local in-memory variable in the beacon code which stores previous URLs. | -| `startTime` | 1693488419352 | Baseline for performance-related timestamps. | [performance.timeOrigin](https://developer.mozilla.org/en-US/docs/Web/API/Performance/timeOrigin) | -| `memory` | `{ totalJSHeapSize: 39973671, usedJSHeapSize: 39127515, jsHeapSizeLimit: 4294705152 }` | Measures memory heap size. | [performance.memory](https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory) (deprecated) | -| `timings` | Object of [PerformanceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming) | Timing data. | [performance.timing](https://developer.mozilla.org/en-US/docs/Web/API/Performance/timing) (deprecated, fallback when `timingV2` is unavailable) | -| `timingV2` | Array of [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) | Navigation timing data. | [performance.getEntriesByType("navigation")](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType) | -| `resources` | Array of [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) | Resource timing data. | [performance.getEntriesByType("resource")](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) | -| `firstPaint` | Array of [PerformancePaintTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformancePaintTiming) | Paint timing data. | [performance.getEntriesByType("paint")](https://developer.mozilla.org/en-US/docs/Web/API/PerformancePaintTiming) | -| `firstContentfulPaint` | 209 | First Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | -| `FCP` | 209 | First Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | -| `LCP` | 209 | Largest Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | -| `CLS` | 0.001 | Cumulative Layout Shift metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | - | -| `TTFB` | 0.03 | Time to First Byte metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | -| `INP` | 1.23 | Interaction to Next Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | -| `landingPath`| https://cfrumtest.com/ | The landing page URL. | [performance.getEntriesByType("navigation")](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType) | +| Field | Example | Description | How it is collected | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `pageloadId` | 0c698922-8d60-40bf-85ac-7982b5f8034d | The unique ID for the page. | Generated in the browser code. | +| `referrer` | https://cfrumtest.com/ | The referring page URL. | If it is a multi-page application (MPA), then it is generated from [document.referrer](https://developer.mozilla.org/en-US/docs/Web/API/Document/referrer). If it is a single-page application (SPA), then it is generated from a local in-memory variable in the beacon code which stores previous URLs. | +| `startTime` | 1693488419352 | Baseline for performance-related timestamps. | [performance.timeOrigin](https://developer.mozilla.org/en-US/docs/Web/API/Performance/timeOrigin) | +| `memory` | `{ totalJSHeapSize: 39973671, usedJSHeapSize: 39127515, jsHeapSizeLimit: 4294705152 }` | Measures memory heap size. | [performance.memory](https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory) (deprecated) | +| `timings` | Object of [PerformanceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming) | Timing data. | [performance.timing](https://developer.mozilla.org/en-US/docs/Web/API/Performance/timing) (deprecated, fallback when `timingV2` is unavailable) | +| `timingV2` | Array of [PerformanceNavigationTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceNavigationTiming) | Navigation timing data. | [performance.getEntriesByType("navigation")](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType) | +| `resources` | Array of [PerformanceResourceTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) | Resource timing data. | [performance.getEntriesByType("resource")](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceResourceTiming) | +| `firstPaint` | Array of [PerformancePaintTiming](https://developer.mozilla.org/en-US/docs/Web/API/PerformancePaintTiming) | Paint timing data. | [performance.getEntriesByType("paint")](https://developer.mozilla.org/en-US/docs/Web/API/PerformancePaintTiming) | +| `firstContentfulPaint` | 209 | First Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| `FCP` | 209 | First Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| `LCP` | 209 | Largest Contentful Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| `CLS` | 0.001 | Cumulative Layout Shift metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| | +| `TTFB` | 0.03 | Time to First Byte metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| `INP` | 1.23 | Interaction to Next Paint metric. | [web-vitals module](https://www.npmjs.com/package/web-vitals) [^1] | +| `landingPath` | https://cfrumtest.com/ | The landing page URL. | [performance.getEntriesByType("navigation")](https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntriesByType) | ## Data processing RUM data is generally processed at the nearest Cloudflare data center based on how the incoming request is routed. This is determined by a number of factors including [Anycast](https://www.cloudflare.com/en-gb/learning/cdn/glossary/anycast-network/) and [Unimog](https://blog.cloudflare.com/unimog-cloudflares-edge-load-balancer/). Since RUM data does not use location services, it may be processed in a different country or region from where it originated. Although the RUM service receives the client/source IP address from the beacon as part of normal HTTP request handling process, it discards the IP address at the nearest Cloudflare data center and does not store it in core databases or logs. -## Privacy information +## Privacy information The RUM beacon script does not store any data in the browser or access any storage data, such as [cookies](https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie), [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage), [sessionStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage), IP address, or [IndexedDB](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB). The data we collect is performance data from the browser performance [APIs](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API). This performance data is ephemeral and only relates to the current webpage that is being viewed. If the user refreshes their browser, all the previous performance data is gone and new performance data starts being available. This data is not stored or accessed from anywhere on the device, it is only available as in-memory data. ## RUM excluding EEA/EU -Customers have the option to enable RUM globally or to limit its application to exclude users connecting to Cloudflare data centers in the EEA/EU. If the latter option is selected, the RUM beacon does not process performance data for users connecting to a Cloudflare data center located in the following countries (ISO codes): AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IS, IE, IT, LV, LI, LT, LU, MT, NL, NO, PL, PT, RO, SK, SI, ES, SE, CH, GB. +Customers have the option to enable RUM globally or to limit its application to exclude users connecting to Cloudflare data centers in the EEA/EU. If the latter option is selected, the RUM beacon does not process performance data for users connecting to a Cloudflare data center located in the following countries (ISO codes): AT, BE, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IS, IE, IT, LV, LI, LT, LU, MT, NL, NO, PL, PT, RO, SK, SI, ES, SE, CH, GB. Free customers have RUM enabled automatically, with EU traffic excluded, and can switch it off if they prefer. Customers on other plans may enable RUM as needed. @@ -64,5 +63,4 @@ Free customers have RUM enabled automatically, with EU traffic excluded, and can
    - -[^1]: The web-vitals module is an open-source module written by Google. It does not access any type of storage on the browser. \ No newline at end of file +[^1]: The web-vitals module is an open-source module written by Google. It does not access any type of storage on the browser. diff --git a/src/content/docs/speed/observatory/run-speed-test.mdx b/src/content/docs/speed/observatory/run-speed-test.mdx index b86b5c58655a186..5ae182cbf4eb09c 100644 --- a/src/content/docs/speed/observatory/run-speed-test.mdx +++ b/src/content/docs/speed/observatory/run-speed-test.mdx @@ -50,20 +50,19 @@ RUM uses a lightweight JavaScript beacon to collect the information Observatory Quota limits for the number of tests you can run per month are currently the following: | Plan | One-off tests | Recurring tests | Frequency of recurring tests | -|------------|---------------|-----------------|------------------------------| +| ---------- | ------------- | --------------- | ---------------------------- | | Pro | 50 | 5 | Daily | | Business | 100 | 10 | Daily | | Enterprise | 150 | 15 | Daily | **Available Regions (all plans):** -| Region | Region | Region | -|------------------------|---------------------|--------------------| -| Iowa, USA | Hamina, Finland | Changhua County, Taiwan | -| South Carolina, USA | Madrid, Spain | Tokyo, Japan | -| North Virginia, USA | St. Ghislain, Belgium | Osaka, Japan | -| Dallas, USA | Eemshaven, Netherlands | Jurong West, Singapore | -| Oregon, USA | Milan, Italy | Sydney, Australia | -| London, England | Paris, France | Mumbai, India | -| Frankfurt, Germany | Tel Aviv, Israel | São Paulo, Brazil | - +| Region | Region | Region | +| ------------------- | ---------------------- | ----------------------- | +| Iowa, USA | Hamina, Finland | Changhua County, Taiwan | +| South Carolina, USA | Madrid, Spain | Tokyo, Japan | +| North Virginia, USA | St. Ghislain, Belgium | Osaka, Japan | +| Dallas, USA | Eemshaven, Netherlands | Jurong West, Singapore | +| Oregon, USA | Milan, Italy | Sydney, Australia | +| London, England | Paris, France | Mumbai, India | +| Frankfurt, Germany | Tel Aviv, Israel | São Paulo, Brazil | diff --git a/src/content/docs/speed/observatory/test-results.mdx b/src/content/docs/speed/observatory/test-results.mdx index a9b42c82085bb1a..c6bf699af5e19a6 100644 --- a/src/content/docs/speed/observatory/test-results.mdx +++ b/src/content/docs/speed/observatory/test-results.mdx @@ -6,7 +6,6 @@ products: title: Understand test results sidebar: order: 3 - --- The test result page shows you how your website performed regarding several key industry metrics. Some of these metrics are presented for synthetic tests and the real user monitoring, and others only apply to synthetic tests or only to real user monitoring. @@ -36,19 +35,19 @@ These metrics result from the synthetic tests. These metrics are collected as part of the real user data, as they require real user interaction with a page. -| Metric | Definition | -| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Interaction to Next Paint ([INP](https://web.dev/inp/)) | Aims to represent a page's overall responsiveness by measuring all click, tap, and keyboard interactions made with a page. | +| Metric | Definition | +| ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| Interaction to Next Paint ([INP](https://web.dev/inp/)) | Aims to represent a page's overall responsiveness by measuring all click, tap, and keyboard interactions made with a page. | Refer to [Data and metrics](/web-analytics/data-metrics/) for more information about the metrics you can find in the Real User Monitoring dashboard. You can find details about [Core Web Vitals](/web-analytics/data-metrics/core-web-vitals/), the debug view and the data collected. ## Network monitoring metrics -| Metric | Definition | -| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | -| Wait Time | Measures the time spent waiting for the server to send back the first byte of a response after a request is made. | -| Load Time | Measures the total time it takes for a web page to fully load in a user’s browser from the network. | -| Time to First Byte ([TTFB](https://web.dev/articles/ttfb)) | Measures the duration between initiating a web page request and receiving the first byte from the server. | -| Server Response Time | Measures the time it takes for a server to respond to a request from a user's browser. | -| Connect Time | Measures the time taken to establish a connection between the user's browser and the web server. | -| TLS Time | Measures the time required to complete the TLS/SSL handshake between the user's browser and the web server. | \ No newline at end of file +| Metric | Definition | +| ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | +| Wait Time | Measures the time spent waiting for the server to send back the first byte of a response after a request is made. | +| Load Time | Measures the total time it takes for a web page to fully load in a user’s browser from the network. | +| Time to First Byte ([TTFB](https://web.dev/articles/ttfb)) | Measures the duration between initiating a web page request and receiving the first byte from the server. | +| Server Response Time | Measures the time it takes for a server to respond to a request from a user's browser. | +| Connect Time | Measures the time taken to establish a connection between the user's browser and the web server. | +| TLS Time | Measures the time required to complete the TLS/SSL handshake between the user's browser and the web server. | diff --git a/src/content/docs/speed/optimization/content/apo.mdx b/src/content/docs/speed/optimization/content/apo.mdx index bf378bf7685846b..f706bab097e8e8c 100644 --- a/src/content/docs/speed/optimization/content/apo.mdx +++ b/src/content/docs/speed/optimization/content/apo.mdx @@ -7,5 +7,4 @@ title: Automatic Platform Optimization external_link: /automatic-platform-optimization/ sidebar: order: 2 - --- diff --git a/src/content/docs/speed/optimization/content/compression.mdx b/src/content/docs/speed/optimization/content/compression.mdx index 93ad3418e9054de..e021ae803ef2b55 100644 --- a/src/content/docs/speed/optimization/content/compression.mdx +++ b/src/content/docs/speed/optimization/content/compression.mdx @@ -22,9 +22,9 @@ Cloudflare compresses content in two ways: between Cloudflare and your website v In addition to Cloudflare's [default caching behavior](/cache/concepts/default-cache-behavior/), Cloudflare supports Gzip, Brotli, and Zstandard compression when delivering content to website visitors. :::note diff --git a/src/content/docs/speed/optimization/content/early-hints.mdx b/src/content/docs/speed/optimization/content/early-hints.mdx index 3263897899e5f21..f40d05197e0f6de 100644 --- a/src/content/docs/speed/optimization/content/early-hints.mdx +++ b/src/content/docs/speed/optimization/content/early-hints.mdx @@ -7,5 +7,4 @@ title: Early Hints external_link: /cache/advanced-configuration/early-hints/ sidebar: order: 5 - --- diff --git a/src/content/docs/speed/optimization/content/fonts/troubleshooting.mdx b/src/content/docs/speed/optimization/content/fonts/troubleshooting.mdx index b5627175aec2342..778b154ef43acac 100644 --- a/src/content/docs/speed/optimization/content/fonts/troubleshooting.mdx +++ b/src/content/docs/speed/optimization/content/fonts/troubleshooting.mdx @@ -28,7 +28,10 @@ To test that the Fonts feature is working correctly, follow these steps: For the feature to work, the response HTML (when the feature is disabled) must include a link tag with `href` pointing to `fonts.googleapis.com`. You can check this on the browser by viewing the source code of the webpage. As an example of what to look for, the following link tag is for the Roboto Google Font: ```html - + ``` If the tag does not exist in the HTML, but you are still sure that your page is using Google Fonts, it might be that your hosting provider is optimizing your Google Fonts on the server. This can prevent Cloudflare Fonts from working properly. diff --git a/src/content/docs/speed/optimization/content/index.mdx b/src/content/docs/speed/optimization/content/index.mdx index a778f875d6059cc..e1a5decf41e6b26 100644 --- a/src/content/docs/speed/optimization/content/index.mdx +++ b/src/content/docs/speed/optimization/content/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/content/rocket-loader/ignore-javascripts.mdx b/src/content/docs/speed/optimization/content/rocket-loader/ignore-javascripts.mdx index 148e6cc5d93b485..115046f10c28f12 100644 --- a/src/content/docs/speed/optimization/content/rocket-loader/ignore-javascripts.mdx +++ b/src/content/docs/speed/optimization/content/rocket-loader/ignore-javascripts.mdx @@ -23,15 +23,13 @@ Rocket Loader will still optimize the loading of all other scripts on the page. :::note - If Rocket Loader is only impacting a specific page, use a [Configuration Rule](/rules/configuration-rules/) to exclude that page by URL. - ::: ## Limitations -* Adding this attribute within JavaScript will not work if you wish to exclude the script from Rocket Loader. -* If the script you want Rocket Loader to ignore has dependency on other JavaScript(s) on the page, those dependencies must also have the `data-cfasync="false"` attribute. -* The `data-cfasync` attribute must be added before the `src` attribute. -* Rocket Loader will recognize the tag when either single or double quotes are placed around the attribute value. +- Adding this attribute within JavaScript will not work if you wish to exclude the script from Rocket Loader. +- If the script you want Rocket Loader to ignore has dependency on other JavaScript(s) on the page, those dependencies must also have the `data-cfasync="false"` attribute. +- The `data-cfasync` attribute must be added before the `src` attribute. +- Rocket Loader will recognize the tag when either single or double quotes are placed around the attribute value. diff --git a/src/content/docs/speed/optimization/content/shared-dictionaries.mdx b/src/content/docs/speed/optimization/content/shared-dictionaries.mdx index 8b56ec1c37765c8..e17a32a6e8a3b82 100644 --- a/src/content/docs/speed/optimization/content/shared-dictionaries.mdx +++ b/src/content/docs/speed/optimization/content/shared-dictionaries.mdx @@ -43,11 +43,11 @@ Shared dictionaries work when all of the following are true: The protocol uses two new request and response headers and two new content encodings: -| Header | Direction | Purpose | -| -------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------- | +| Header | Direction | Purpose | +| -------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------- | | `Use-As-Dictionary` | Origin → browser | Marks a response as usable as a dictionary for future requests matching the supplied `match` value. | -| `Available-Dictionary` | Browser → origin | Advertises the SHA-256 hash of a dictionary the browser already has for the request URL. | -| `Content-Encoding: dcb` or `dcz` | Origin → browser | Delta-compressed against the advertised dictionary, using Brotli (`dcb`) or Zstandard (`dcz`). | +| `Available-Dictionary` | Browser → origin | Advertises the SHA-256 hash of a dictionary the browser already has for the request URL. | +| `Content-Encoding: dcb` or `dcz` | Origin → browser | Delta-compressed against the advertised dictionary, using Brotli (`dcb`) or Zstandard (`dcz`). | The first response for a versioned asset includes `Use-As-Dictionary`, and the browser stores the response. On subsequent requests for assets matching the pattern, the browser sends `Available-Dictionary: ::` and adds `dcb, dcz` to `Accept-Encoding`. Your origin compresses the new asset against the dictionary and returns it with `Content-Encoding: dcb` or `dcz`. The browser uses its stored copy to reconstruct the full response. diff --git a/src/content/docs/speed/optimization/content/smart-hints.mdx b/src/content/docs/speed/optimization/content/smart-hints.mdx index 74a30be29625c81..9df2f2740a81901 100644 --- a/src/content/docs/speed/optimization/content/smart-hints.mdx +++ b/src/content/docs/speed/optimization/content/smart-hints.mdx @@ -7,5 +7,4 @@ title: Smart Hints external_link: https://blog.cloudflare.com/smart-hints/ sidebar: order: 8 - --- diff --git a/src/content/docs/speed/optimization/content/speed-brain.mdx b/src/content/docs/speed/optimization/content/speed-brain.mdx index e0de7cbfe69f617..979f0002e29fc50 100644 --- a/src/content/docs/speed/optimization/content/speed-brain.mdx +++ b/src/content/docs/speed/optimization/content/speed-brain.mdx @@ -10,7 +10,13 @@ sidebar: description: Learn how Speed Brain enhances web performance by prefetching likely next pages, improving metrics like LCP and TTFB. --- -import { FeatureTable, TabItem, Tabs, APIRequest, DashButton } from "~/components"; +import { + FeatureTable, + TabItem, + Tabs, + APIRequest, + DashButton, +} from "~/components"; Speed Brain is a tool for improving web page performance by prefetching the most likely next navigation. @@ -111,7 +117,6 @@ You can also configure Speed Brain using Terraform. For more details, refer to t ## Caveats - Since prefetch responses are not guaranteed to be rendered by the browser, Speed Brain includes two safeguards to minimize the risk of [unsafe prefetching](https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API#unsafe_prefetching): - - Speed Brain will not prefetch on routes that run Workers. Without this safeguard, prefetch requests could inadvertently run Worker logic that assumes the incoming request is a normal (that is, not a prefetch) request. An example of this could be an incrementing page view counter running in a Worker. A page view counter should not increment if the page is not actually rendered in the browser. - Prefetch requests will never reach origin servers. Prefetch requests only serve content that is stored in Cloudflare’s Cache. If the content is not in Cache, the prefetch request will not continue to origin servers. Without this safeguard, origin server state could be modified despite the prefetch response not being rendered in the browser. An example of this could be a prefetch `GET` request to a sign-out URL inadvertently triggering a sign-out action on the server. diff --git a/src/content/docs/speed/optimization/content/troubleshooting/index.mdx b/src/content/docs/speed/optimization/content/troubleshooting/index.mdx index 274ba87dc345bae..e125fcbbe0254bf 100644 --- a/src/content/docs/speed/optimization/content/troubleshooting/index.mdx +++ b/src/content/docs/speed/optimization/content/troubleshooting/index.mdx @@ -11,9 +11,8 @@ sidebar: head: - tag: title content: Troubleshooting Optimization issues - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/images/image-resizing.mdx b/src/content/docs/speed/optimization/images/image-resizing.mdx index 5e5c8613ef540aa..6594df5754962d0 100644 --- a/src/content/docs/speed/optimization/images/image-resizing.mdx +++ b/src/content/docs/speed/optimization/images/image-resizing.mdx @@ -7,5 +7,4 @@ title: Image Resizing external_link: /images/optimization/transformations/overview/ sidebar: order: 2 - --- diff --git a/src/content/docs/speed/optimization/images/index.mdx b/src/content/docs/speed/optimization/images/index.mdx index d027767b2a3faf5..c079cac0a17b480 100644 --- a/src/content/docs/speed/optimization/images/index.mdx +++ b/src/content/docs/speed/optimization/images/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 3 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/images/polish.mdx b/src/content/docs/speed/optimization/images/polish.mdx index c529447865e7b61..631c4cbe263d8c9 100644 --- a/src/content/docs/speed/optimization/images/polish.mdx +++ b/src/content/docs/speed/optimization/images/polish.mdx @@ -7,5 +7,4 @@ title: Polish external_link: /images/polish/ sidebar: order: 2 - --- diff --git a/src/content/docs/speed/optimization/images/troubleshooting/index.mdx b/src/content/docs/speed/optimization/images/troubleshooting/index.mdx index 1f8d029c7d93ae9..cb64aa9539c46b7 100644 --- a/src/content/docs/speed/optimization/images/troubleshooting/index.mdx +++ b/src/content/docs/speed/optimization/images/troubleshooting/index.mdx @@ -11,9 +11,8 @@ sidebar: head: - tag: title content: Troubleshooting Image issues - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/images/troubleshooting/multiple-optimizations.mdx b/src/content/docs/speed/optimization/images/troubleshooting/multiple-optimizations.mdx index 9ac31a532e60906..fb72840fc7b149a 100644 --- a/src/content/docs/speed/optimization/images/troubleshooting/multiple-optimizations.mdx +++ b/src/content/docs/speed/optimization/images/troubleshooting/multiple-optimizations.mdx @@ -5,7 +5,6 @@ products: - speed source: https://support.cloudflare.com/hc/en-us/articles/200168046-Will-Cloudflare-s-image-optimization-features-help-if-I-m-already-optimizing-images- title: Image optimization on optimized images - --- Cloudflare's [image optimization features](/speed/optimization/images/) will likely not help much if you are already optimizing your images in some way (Smush.it, etc.). diff --git a/src/content/docs/speed/optimization/images/troubleshooting/polish.mdx b/src/content/docs/speed/optimization/images/troubleshooting/polish.mdx index 26bdaff52e6866e..ce279de1efcba70 100644 --- a/src/content/docs/speed/optimization/images/troubleshooting/polish.mdx +++ b/src/content/docs/speed/optimization/images/troubleshooting/polish.mdx @@ -6,5 +6,4 @@ products: title: Polish statuses external_link: /images/polish/cf-polished-statuses/ weight: 0 - --- diff --git a/src/content/docs/speed/optimization/images/troubleshooting/troubleshooting-missing-images.mdx b/src/content/docs/speed/optimization/images/troubleshooting/troubleshooting-missing-images.mdx index ed4e61afdf15934..12268c9dc18cddc 100644 --- a/src/content/docs/speed/optimization/images/troubleshooting/troubleshooting-missing-images.mdx +++ b/src/content/docs/speed/optimization/images/troubleshooting/troubleshooting-missing-images.mdx @@ -15,9 +15,9 @@ If images are missing from your website, other Cloudflare features may be interf To troubleshoot: 1. Perform one of the following actions: + - [Purge cache](/cache/how-to/purge-cache) for the URL of the missing image file. + - [Temporarily pause Cloudflare](/fundamentals/manage-domains/pause-cloudflare/). + - Disable [Rocket Loader](/speed/optimization/content/rocket-loader/enable/). - * [Purge cache](/cache/how-to/purge-cache) for the URL of the missing image file. - * [Temporarily pause Cloudflare](/fundamentals/manage-domains/pause-cloudflare/). - * Disable [Rocket Loader](/speed/optimization/content/rocket-loader/enable/). 2. Retest the image load in a private browser tab. 3. If the issue is not fixed, try another of the actions suggested in Step 1. diff --git a/src/content/docs/speed/optimization/index.mdx b/src/content/docs/speed/optimization/index.mdx index bd80c971ba9878a..83b3fba317047d6 100644 --- a/src/content/docs/speed/optimization/index.mdx +++ b/src/content/docs/speed/optimization/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; The Optimization section will show you a list of Cloudflare products that are recommended for enhancing your website's performance. diff --git a/src/content/docs/speed/optimization/measurement.mdx b/src/content/docs/speed/optimization/measurement.mdx index 016533a4dd1986e..89a7f989f4b71dc 100644 --- a/src/content/docs/speed/optimization/measurement.mdx +++ b/src/content/docs/speed/optimization/measurement.mdx @@ -6,7 +6,6 @@ products: title: Measurement sidebar: order: 2 - --- Enable measurement to track your traffic in a privacy-first manner, optimizing your site's speed tools. To access this feature, you need to enable [Web Analytics](/web-analytics/) on your website. This analytics tool leverages [Real User Measurement](/speed/observatory/run-speed-test/#enable-real-user-monitoring-rum) (RUM) data, providing insights based on actual user interactions to enhance site performance effectively. diff --git a/src/content/docs/speed/optimization/protocol/http2.mdx b/src/content/docs/speed/optimization/protocol/http2.mdx index 74d4e0a9ae7f530..13e54b4c22eaedd 100644 --- a/src/content/docs/speed/optimization/protocol/http2.mdx +++ b/src/content/docs/speed/optimization/protocol/http2.mdx @@ -56,10 +56,10 @@ The origin web server may be sending improperly formatted HTTP response headers. #### Resolution -Make a request directly to your origin web server and inspect its HTTP response headers for anomalies. Make sure that the field values respect the following requirements: +Make a request directly to your origin web server and inspect its HTTP response headers for anomalies. Make sure that the field values respect the following requirements: - [RFC 9110](https://www.rfc-editor.org/rfc/rfc9110.html#section-5.5) -- [RFC 9113](https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.1) +- [RFC 9113](https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.1) - [RFC 5234](https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1) ### Compression issues diff --git a/src/content/docs/speed/optimization/protocol/index.mdx b/src/content/docs/speed/optimization/protocol/index.mdx index fdfe4aa14eb11b1..094dadd43d13cf2 100644 --- a/src/content/docs/speed/optimization/protocol/index.mdx +++ b/src/content/docs/speed/optimization/protocol/index.mdx @@ -8,9 +8,8 @@ sidebar: order: 4 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/protocol/troubleshooting/enhanced-http2-prioritization-ios-safari.mdx b/src/content/docs/speed/optimization/protocol/troubleshooting/enhanced-http2-prioritization-ios-safari.mdx index 45783c25f400853..957822a95ff61cf 100644 --- a/src/content/docs/speed/optimization/protocol/troubleshooting/enhanced-http2-prioritization-ios-safari.mdx +++ b/src/content/docs/speed/optimization/protocol/troubleshooting/enhanced-http2-prioritization-ios-safari.mdx @@ -4,7 +4,6 @@ description: Fix Enhanced HTTP/2 Prioritization issues on iOS and Safari. products: - speed title: Enhanced HTTP/2 Prioritization negatively affects iOS/Safari devices - --- Occasionally, [Enhanced HTTP/2 Prioritization](/speed/optimization/protocol/enhanced-http2-prioritization/) can negatively affect the experience of visitors using Safari on macOS or any browser on iOS. @@ -17,10 +16,8 @@ If visitors using using Safari on macOS or any browser on iOS are experiencing i :::note - Sometimes, [HTTP/2](/speed/optimization/protocol/http2/) will cause **Enhanced HTTP/2 Prioritization** to be re-enabled automatically. If you notice this happening, also disable **HTTP/2**. - ::: diff --git a/src/content/docs/speed/optimization/protocol/troubleshooting/index.mdx b/src/content/docs/speed/optimization/protocol/troubleshooting/index.mdx index 0d6974f96123177..804f216d9cf3f8c 100644 --- a/src/content/docs/speed/optimization/protocol/troubleshooting/index.mdx +++ b/src/content/docs/speed/optimization/protocol/troubleshooting/index.mdx @@ -11,9 +11,8 @@ sidebar: head: - tag: title content: Troubleshooting Protocol optimization issues - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; diff --git a/src/content/docs/speed/optimization/recommendations.mdx b/src/content/docs/speed/optimization/recommendations.mdx index 1367d8efb7789e2..aac4598f71a5531 100644 --- a/src/content/docs/speed/optimization/recommendations.mdx +++ b/src/content/docs/speed/optimization/recommendations.mdx @@ -6,7 +6,6 @@ products: title: Recommendations sidebar: order: 1 - --- In the **Recommendations** tab, with one click you can enable all the recommended settings available for your plan. You can enable all the recommended settings at once or you can also just enable the ones you want. diff --git a/src/content/docs/speed/smart-shield.mdx b/src/content/docs/speed/smart-shield.mdx index 76f0af22755c9f7..9fc997ea18add10 100644 --- a/src/content/docs/speed/smart-shield.mdx +++ b/src/content/docs/speed/smart-shield.mdx @@ -7,5 +7,4 @@ title: Smart Shield sidebar: order: 4 external_link: /smart-shield/ - ---- \ No newline at end of file +--- diff --git a/src/content/docs/speed/troubleshooting.mdx b/src/content/docs/speed/troubleshooting.mdx index 1a73653e90dc280..6f7d78e7f34c259 100644 --- a/src/content/docs/speed/troubleshooting.mdx +++ b/src/content/docs/speed/troubleshooting.mdx @@ -7,12 +7,15 @@ title: Troubleshooting hideChildren: true sidebar: order: 20 - --- -import { ResourcesBySelector } from "~/components" +import { ResourcesBySelector } from "~/components"; The following topics are useful for troubleshooting Speed issues. - - + diff --git a/src/content/docs/ssl/changelog.mdx b/src/content/docs/ssl/changelog.mdx index c96ac0914a9da7c..96577c758525512 100644 --- a/src/content/docs/ssl/changelog.mdx +++ b/src/content/docs/ssl/changelog.mdx @@ -16,7 +16,7 @@ import { ProductChangelog } from "~/components"; ## 2024-10-18 -**New cloudflare\_branding flag allows hostnames with over 64 characters for all CAs** +**New cloudflare_branding flag allows hostnames with over 64 characters for all CAs** To order certificates for hostnames longer than 64 characters, customers can now use the `cloudflare_branding` flag when ordering a certificate via [API](https://developers.cloudflare.com/api/resources/ssl/subresources/certificate_packs/methods/create/). Setting `cloudflare_branding` to `true` will cause `sni.cloudflaressl.com` to be used as the common name, while the long hostname is added as part of the subject alternative name (SAN). @@ -24,4 +24,4 @@ To order certificates for hostnames longer than 64 characters, customers can now **SSL.com available with ACM and SSL for SaaS** -SSL.com is one of the [certificate authorities](/ssl/reference/certificate-authorities/) that Cloudflare partners with. SSL.com is now available as an option to customers with Advanced Certificate Manager (ACM) or SSL for SaaS. Consider our [reference documentation](/ssl/reference/certificate-authorities/#sslcom) for details. \ No newline at end of file +SSL.com is one of the [certificate authorities](/ssl/reference/certificate-authorities/) that Cloudflare partners with. SSL.com is now available as an option to customers with Advanced Certificate Manager (ACM) or SSL for SaaS. Consider our [reference documentation](/ssl/reference/certificate-authorities/#sslcom) for details. diff --git a/src/content/docs/ssl/client-certificates/forward-a-client-certificate.mdx b/src/content/docs/ssl/client-certificates/forward-a-client-certificate.mdx index fda3782b24250c6..129b0ea9d7b037b 100644 --- a/src/content/docs/ssl/client-certificates/forward-a-client-certificate.mdx +++ b/src/content/docs/ssl/client-certificates/forward-a-client-certificate.mdx @@ -15,4 +15,4 @@ import { Render } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/ssl/client-certificates/revoke-client-certificate.mdx b/src/content/docs/ssl/client-certificates/revoke-client-certificate.mdx index 20bc4a82a73822d..c362c3ea0cbfc69 100644 --- a/src/content/docs/ssl/client-certificates/revoke-client-certificate.mdx +++ b/src/content/docs/ssl/client-certificates/revoke-client-certificate.mdx @@ -6,7 +6,6 @@ products: title: Revoke a client certificate sidebar: order: 8 - --- import { DashButton } from "~/components"; @@ -26,10 +25,8 @@ It is not possible to permanently delete client certificates generated with the :::caution[Important] - After revoking a certificate, you must update any mTLS rules that check for the presence of a client certificate so that they block all requests that include a revoked certificate. For more information, refer to [Check for revoked certificates](/api-shield/security/mtls/configure/#check-for-revoked-certificates). - ::: diff --git a/src/content/docs/ssl/concepts.mdx b/src/content/docs/ssl/concepts.mdx index 2f0333d5ec7c728..074f33eaa264a9e 100644 --- a/src/content/docs/ssl/concepts.mdx +++ b/src/content/docs/ssl/concepts.mdx @@ -25,9 +25,9 @@ Since [Cloudflare's global network](https://www.cloudflare.com/network/) is at t The [edge certificates](/ssl/edge-certificates/) are the ones that Cloudflare presents to clients visiting your website or application. You can manage edge certificates through the [Cloudflare Dashboard](https://dash.cloudflare.com/?to=/:account/:zone/ssl-tls/edge-certificates). ### Origin certificate diff --git a/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/index.mdx b/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/index.mdx index 18550b308521f31..c4d44c211b0ec09 100644 --- a/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/index.mdx +++ b/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/index.mdx @@ -30,9 +30,9 @@ If you are a SaaS provider looking to restrict cipher suites for connections to Custom cipher suites is a hostname-level setting, which implies that: -* When you customize cipher suites for a zone, this will affect all hostnames within that zone. If you are not familiar with what a Cloudflare zone is, refer to [Fundamentals](/fundamentals/concepts/accounts-and-zones/#zones). -* The configuration is applicable to all edge certificates used to connect to the hostname(s), regardless of the [certificate type](/ssl/edge-certificates/) (universal, advanced, or custom). -* If you need to use a per-hostname cipher suite customization, you must ensure that the hostname is specified on the certificate. +- When you customize cipher suites for a zone, this will affect all hostnames within that zone. If you are not familiar with what a Cloudflare zone is, refer to [Fundamentals](/fundamentals/concepts/accounts-and-zones/#zones). +- The configuration is applicable to all edge certificates used to connect to the hostname(s), regardless of the [certificate type](/ssl/edge-certificates/) (universal, advanced, or custom). +- If you need to use a per-hostname cipher suite customization, you must ensure that the hostname is specified on the certificate. ## Scope @@ -50,4 +50,4 @@ This documentation only refers to connections [between clients and the Cloudflar Cloudflare uses the [hostname priority logic](/ssl/reference/certificate-and-hostname-priority/) to determine which setting to apply. -ECDSA cipher suites are prioritized over RSA, and Cloudflare preserves the specified cipher suites in the order they are set. This means that, if both ECDSA and RSA are used, Cloudflare presents the ECDSA ciphers first - in the order they were set - and then the RSA ciphers, also in the order they were set. \ No newline at end of file +ECDSA cipher suites are prioritized over RSA, and Cloudflare preserves the specified cipher suites in the order they are set. This means that, if both ECDSA and RSA are used, Cloudflare presents the ECDSA ciphers first - in the order they were set - and then the RSA ciphers, also in the order they were set. diff --git a/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/supported-cipher-suites.mdx b/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/supported-cipher-suites.mdx index 7aae1bb58f1bbd9..c8b458d6184c218 100644 --- a/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/supported-cipher-suites.mdx +++ b/src/content/docs/ssl/edge-certificates/additional-options/cipher-suites/supported-cipher-suites.mdx @@ -16,31 +16,31 @@ tags: Cloudflare supports the following cipher suites by default. If needed, you can [restrict your website or application](/ssl/edge-certificates/additional-options/cipher-suites/customize-cipher-suites/) to only use specific cipher suites. -| Cipher name | Minimum protocol | [Security recommendation](/ssl/edge-certificates/additional-options/cipher-suites/recommendations/) | Cipher suite | IANA name | -| -------------------------------- | ---------------- | ------------------------------------------------------------------------ | ------------ | --------------------------------------------------- | -| ECDHE-ECDSA-AES128-GCM-SHA256 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02b] | TLS\_ECDHE\_ECDSA\_WITH\_AES\_128\_GCM\_SHA256 | -| ECDHE-ECDSA-CHACHA20-POLY1305 | TLS 1.2 | Modern, Compatible, Legacy | \[0xcca9] | TLS\_ECDHE\_ECDSA\_WITH\_CHACHA20\_POLY1305\_SHA256 | -| ECDHE-RSA-AES128-GCM-SHA256 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02f] | TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256 | -| ECDHE-RSA-CHACHA20-POLY1305 | TLS 1.2 | Modern, Compatible, Legacy | \[0xcca8] | TLS\_ECDHE\_RSA\_WITH\_CHACHA20\_POLY1305\_SHA256 | -| ECDHE-ECDSA-AES128-SHA256 | TLS 1.2 | Compatible, Legacy | \[0xc023] | TLS\_ECDHE\_ECDSA\_WITH\_AES\_128\_CBC\_SHA256 | -| ECDHE-ECDSA-AES128-SHA | TLS 1.0 | Legacy | \[0xc009] | TLS\_ECDHE\_ECDSA\_WITH\_AES\_128\_CBC\_SHA | -| ECDHE-RSA-AES128-SHA256 | TLS 1.2 | Compatible, Legacy | \[0xc027] | TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA256 | -| ECDHE-RSA-AES128-SHA | TLS 1.0 | Legacy | \[0xc013] | TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA | -| AES128-GCM-SHA256 | TLS 1.2 | Legacy | \[0x9c] | TLS\_RSA\_WITH\_AES\_128\_GCM\_SHA256 | -| AES128-SHA256 | TLS 1.2 | Legacy | \[0x3c] | TLS\_RSA\_WITH\_AES\_128\_CBC\_SHA256 | -| AES128-SHA | TLS 1.0 | Legacy | \[0x2f] | TLS\_RSA\_WITH\_AES\_128\_CBC\_SHA | -| ECDHE-ECDSA-AES256-GCM-SHA384 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02c] | TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_GCM\_SHA384 | -| ECDHE-ECDSA-AES256-SHA384 | TLS 1.2 | Compatible, Legacy | \[0xc024] | TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA384 | -| ECDHE-RSA-AES256-GCM-SHA384 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc030] | TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384 | -| ECDHE-RSA-AES256-SHA384 | TLS 1.2 | Compatible, Legacy | \[0xc028] | TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384 | -| ECDHE-RSA-AES256-SHA | TLS 1.0 | Legacy | \[0xc014] | TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA | -| AES256-GCM-SHA384 | TLS 1.2 | Legacy | \[0x9d] | TLS\_RSA\_WITH\_AES\_256\_GCM\_SHA384 | -| AES256-SHA256 | TLS 1.2 | Legacy | \[0x3d] | TLS\_RSA\_WITH\_AES\_256\_CBC\_SHA256 | -| AES256-SHA | TLS 1.0 | Legacy | \[0x35] | TLS\_RSA\_WITH\_AES\_256\_CBC\_SHA | -| DES-CBC3-SHA | TLS 1.0 | Legacy | \[0x0a] | TLS\_RSA\_WITH\_3DES\_EDE\_CBC\_SHA | -| AEAD-AES128-GCM-SHA256 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x01} | TLS\_AES\_128\_GCM\_SHA256 | -| AEAD-AES256-GCM-SHA384 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x02} | TLS\_AES\_256\_GCM\_SHA384 | -| AEAD-CHACHA20-POLY1305-SHA256 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x03} | TLS\_CHACHA20\_POLY1305\_SHA256 | +| Cipher name | Minimum protocol | [Security recommendation](/ssl/edge-certificates/additional-options/cipher-suites/recommendations/) | Cipher suite | IANA name | +| -------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------- | ------------ | --------------------------------------------- | +| ECDHE-ECDSA-AES128-GCM-SHA256 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02b] | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 | +| ECDHE-ECDSA-CHACHA20-POLY1305 | TLS 1.2 | Modern, Compatible, Legacy | \[0xcca9] | TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 | +| ECDHE-RSA-AES128-GCM-SHA256 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02f] | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 | +| ECDHE-RSA-CHACHA20-POLY1305 | TLS 1.2 | Modern, Compatible, Legacy | \[0xcca8] | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 | +| ECDHE-ECDSA-AES128-SHA256 | TLS 1.2 | Compatible, Legacy | \[0xc023] | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 | +| ECDHE-ECDSA-AES128-SHA | TLS 1.0 | Legacy | \[0xc009] | TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA | +| ECDHE-RSA-AES128-SHA256 | TLS 1.2 | Compatible, Legacy | \[0xc027] | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 | +| ECDHE-RSA-AES128-SHA | TLS 1.0 | Legacy | \[0xc013] | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA | +| AES128-GCM-SHA256 | TLS 1.2 | Legacy | \[0x9c] | TLS_RSA_WITH_AES_128_GCM_SHA256 | +| AES128-SHA256 | TLS 1.2 | Legacy | \[0x3c] | TLS_RSA_WITH_AES_128_CBC_SHA256 | +| AES128-SHA | TLS 1.0 | Legacy | \[0x2f] | TLS_RSA_WITH_AES_128_CBC_SHA | +| ECDHE-ECDSA-AES256-GCM-SHA384 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc02c] | TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 | +| ECDHE-ECDSA-AES256-SHA384 | TLS 1.2 | Compatible, Legacy | \[0xc024] | TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 | +| ECDHE-RSA-AES256-GCM-SHA384 | TLS 1.2 | Modern, Compatible, Legacy | \[0xc030] | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 | +| ECDHE-RSA-AES256-SHA384 | TLS 1.2 | Compatible, Legacy | \[0xc028] | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 | +| ECDHE-RSA-AES256-SHA | TLS 1.0 | Legacy | \[0xc014] | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA | +| AES256-GCM-SHA384 | TLS 1.2 | Legacy | \[0x9d] | TLS_RSA_WITH_AES_256_GCM_SHA384 | +| AES256-SHA256 | TLS 1.2 | Legacy | \[0x3d] | TLS_RSA_WITH_AES_256_CBC_SHA256 | +| AES256-SHA | TLS 1.0 | Legacy | \[0x35] | TLS_RSA_WITH_AES_256_CBC_SHA | +| DES-CBC3-SHA | TLS 1.0 | Legacy | \[0x0a] | TLS_RSA_WITH_3DES_EDE_CBC_SHA | +| AEAD-AES128-GCM-SHA256 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x01} | TLS_AES_128_GCM_SHA256 | +| AEAD-AES256-GCM-SHA384 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x02} | TLS_AES_256_GCM_SHA384 | +| AEAD-CHACHA20-POLY1305-SHA256 \* | TLS 1.3 | Modern, Compatible, Legacy | \{0x13,0x03} | TLS_CHACHA20_POLY1305_SHA256 | :::note[* TLS 1.3 minimum protocol] diff --git a/src/content/docs/ssl/edge-certificates/additional-options/index.mdx b/src/content/docs/ssl/edge-certificates/additional-options/index.mdx index 33d50ea3a037245..186ef035f3bc82f 100644 --- a/src/content/docs/ssl/edge-certificates/additional-options/index.mdx +++ b/src/content/docs/ssl/edge-certificates/additional-options/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 11 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Once you set up SSL/TLS on your application, you can adjust the following settings on the [**Edge Certificates**](https://dash.cloudflare.com/?to=/:account/:zone/ssl-tls/edge-certificates) page: diff --git a/src/content/docs/ssl/edge-certificates/additional-options/minimum-tls.mdx b/src/content/docs/ssl/edge-certificates/additional-options/minimum-tls.mdx index cb0cd6575e94980..c5f7c351636e7ea 100644 --- a/src/content/docs/ssl/edge-certificates/additional-options/minimum-tls.mdx +++ b/src/content/docs/ssl/edge-certificates/additional-options/minimum-tls.mdx @@ -8,7 +8,14 @@ sidebar: order: 13 --- -import { FeatureTable, TabItem, Tabs, APIRequest, Render, DashButton } from "~/components"; +import { + FeatureTable, + TabItem, + Tabs, + APIRequest, + Render, + DashButton, +} from "~/components"; Minimum TLS Version only allows HTTPS connections from visitors that support the selected TLS protocol version or newer. @@ -86,13 +93,13 @@ Cloudflare uses the [hostname priority logic](/ssl/reference/certificate-and-hos In the following example, the minimum TLS version for a specific hostname will be set to `1.2`. Replace the zone ID, hostname, and authentication placeholders with your information, and adjust the `value` field with your chosen TLS version. @@ -100,7 +107,6 @@ In the following example, the minimum TLS version for a specific hostname will b If you are a SaaS provider looking to configure minimum TLS version for your custom hostnames, refer to the Cloudflare for SaaS [TLS management](/cloudflare-for-platforms/cloudflare-for-saas/security/certificate-management/enforce-mtls/#minimum-tls-version). - ## Test supported TLS versions - \ No newline at end of file + diff --git a/src/content/docs/ssl/edge-certificates/additional-options/tls-13.mdx b/src/content/docs/ssl/edge-certificates/additional-options/tls-13.mdx index 0e4362cf11468cb..f302408667237f8 100644 --- a/src/content/docs/ssl/edge-certificates/additional-options/tls-13.mdx +++ b/src/content/docs/ssl/edge-certificates/additional-options/tls-13.mdx @@ -10,7 +10,14 @@ tags: - TLS --- -import { Details, FeatureTable, Render, TabItem, Tabs, DashButton } from "~/components"; +import { + Details, + FeatureTable, + Render, + TabItem, + Tabs, + DashButton, +} from "~/components"; TLS 1.3 enables the latest version of the TLS protocol (when supported) for improved security and performance. diff --git a/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/api-commands.mdx b/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/api-commands.mdx index 4a643427148e0dc..9de3f9a1b2d4d87 100644 --- a/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/api-commands.mdx +++ b/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/api-commands.mdx @@ -6,19 +6,15 @@ products: title: API commands sidebar: order: 5 - --- Use the following API commands to manage advanced certificates. If you are using our API for the first time, review our [API documentation](/fundamentals/api/). - - -| Command | Method | Endpoint | Additional notes | -| ------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| [Order advanced certificate](/api/resources/ssl/subresources/certificate_packs/methods/create/) | `POST` | `zones/<>/ssl/certificate_packs/order` | | -| [Restart certificate validation](/api/resources/ssl/subresources/certificate_packs/methods/edit/) | `PATCH` | `zones/<>/ssl/certificate_packs/<>` | For a Certificate Pack in a `validation_timed_out` status. | -| [Delete certificate pack](/api/resources/ssl/subresources/certificate_packs/methods/delete/) | `DELETE` | `zones/<>/ssl/certificate_packs/<>` | | +| Command | Method | Endpoint | Additional notes | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ---------------------------------------------------- | ------------------------------------------------------------------------------------------- | +| [Order advanced certificate](/api/resources/ssl/subresources/certificate_packs/methods/create/) | `POST` | `zones/<>/ssl/certificate_packs/order` | | +| [Restart certificate validation](/api/resources/ssl/subresources/certificate_packs/methods/edit/) | `PATCH` | `zones/<>/ssl/certificate_packs/<>` | For a Certificate Pack in a `validation_timed_out` status. | +| [Delete certificate pack](/api/resources/ssl/subresources/certificate_packs/methods/delete/) | `DELETE` | `zones/<>/ssl/certificate_packs/<>` | | | [List certificate packs in a zone](/api/resources/ssl/subresources/certificate_packs/methods/list/) | `GET` | `zones/<>/ssl/certificate_packs?status=all` | This API call returns all certificate packs for a domain (Universal, Custom, and Advanced). | | List Cipher Suite settings: [Get zone setting](/api/resources/zones/subresources/settings/methods/get/) with `ciphers` as the setting name in the URI path | `GET` | `zones/<>/settings/ciphers` | | | Change Cipher Suite settings: [Edit zone setting](/api/resources/zones/subresources/settings/methods/edit/) with `ciphers` as the setting name in the URI path | `PATCH` | `zones/<>/settings/ciphers` | To restore default settings, send a blank array in the `value` parameter. | - diff --git a/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/manage-certificates.mdx b/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/manage-certificates.mdx index 8bb9170bb3e5e55..6261626f47813e8 100644 --- a/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/manage-certificates.mdx +++ b/src/content/docs/ssl/edge-certificates/advanced-certificate-manager/manage-certificates.mdx @@ -10,7 +10,13 @@ description: Learn how to create, delete and perform other operations to manage your Cloudflare Advanced SSL certificates. --- -import { AvailableNotifications, Render, TabItem, Tabs, DashButton } from "~/components"; +import { + AvailableNotifications, + Render, + TabItem, + Tabs, + DashButton, +} from "~/components"; ## Create a certificate diff --git a/src/content/docs/ssl/edge-certificates/backup-certificates.mdx b/src/content/docs/ssl/edge-certificates/backup-certificates.mdx index cd1a9df4c9a9acd..9612b1b4e300149 100644 --- a/src/content/docs/ssl/edge-certificates/backup-certificates.mdx +++ b/src/content/docs/ssl/edge-certificates/backup-certificates.mdx @@ -6,10 +6,9 @@ products: title: Backup certificates sidebar: order: 9 - --- -import { FeatureTable } from "~/components" +import { FeatureTable } from "~/components"; If Cloudflare is providing [authoritative DNS](/dns/zone-setups/full-setup/) for your domain, Cloudflare will issue a backup [Universal SSL certificate](/ssl/edge-certificates/universal-ssl/) for every standard Universal certificate issued. diff --git a/src/content/docs/ssl/edge-certificates/caa-records.mdx b/src/content/docs/ssl/edge-certificates/caa-records.mdx index 81472be5e1532d4..d8baa4eef05cff2 100644 --- a/src/content/docs/ssl/edge-certificates/caa-records.mdx +++ b/src/content/docs/ssl/edge-certificates/caa-records.mdx @@ -77,4 +77,3 @@ Check CAA at all levels of your CNAME chain: dig yourdomain.com CAA +short dig cname-target.com CAA +short ``` - diff --git a/src/content/docs/ssl/edge-certificates/custom-certificates/bundling-methodologies.mdx b/src/content/docs/ssl/edge-certificates/custom-certificates/bundling-methodologies.mdx index cc1c3b4df79dbed..96fb56d94da1db3 100644 --- a/src/content/docs/ssl/edge-certificates/custom-certificates/bundling-methodologies.mdx +++ b/src/content/docs/ssl/edge-certificates/custom-certificates/bundling-methodologies.mdx @@ -6,7 +6,6 @@ products: title: Bundle methodologies sidebar: order: 4 - --- import { Tabs, TabItem } from "~/components"; @@ -43,4 +42,4 @@ The related value for the `bundle_method` parameter when using the [API](/api/re User-defined allows you to paste your own certificate chain and present that bundle to clients. If you are using a self-signed certificate (not recommended), you must use this mode. -The related value for the `bundle_method` parameter when using the [API](/api/resources/custom_certificates/methods/create/) is `force`. \ No newline at end of file +The related value for the `bundle_method` parameter when using the [API](/api/resources/custom_certificates/methods/create/) is `force`. diff --git a/src/content/docs/ssl/edge-certificates/custom-certificates/renewing.mdx b/src/content/docs/ssl/edge-certificates/custom-certificates/renewing.mdx index b6e2aa56fcc596a..450b178703c442c 100644 --- a/src/content/docs/ssl/edge-certificates/custom-certificates/renewing.mdx +++ b/src/content/docs/ssl/edge-certificates/custom-certificates/renewing.mdx @@ -8,10 +8,9 @@ sidebar: head: [] description: Learn how renewal and expiration work when using Cloudflare Custom SSL certificates. - --- -import { GlossaryTooltip, DashButton } from "~/components" +import { GlossaryTooltip, DashButton } from "~/components"; ## Renew custom certificates diff --git a/src/content/docs/ssl/edge-certificates/ech.mdx b/src/content/docs/ssl/edge-certificates/ech.mdx index 0fbfdfc7d498d82..f41c594d329fe41 100644 --- a/src/content/docs/ssl/edge-certificates/ech.mdx +++ b/src/content/docs/ssl/edge-certificates/ech.mdx @@ -35,7 +35,7 @@ In practice, this means that any intermediary that is looking at your traffic wi In the example below, a user is visiting `example.com`. Without ECH, any intermediate networks will be able to detect the website being accessed by the user. With ECH, the visible information will be limited to `cloudflare-ech.com` instead. -
    +
    ```mermaid flowchart LR @@ -46,7 +46,7 @@ A(User visits example.com) A -- Without ECH --> D(intermediaries see example.com)-->B(Cloudflare) ``` -
    +
    For more details about ECH protocol technology, refer to our [introductory blog](https://blog.cloudflare.com/encrypted-client-hello/). diff --git a/src/content/docs/ssl/edge-certificates/geokey-manager/supported-options.mdx b/src/content/docs/ssl/edge-certificates/geokey-manager/supported-options.mdx index 1f5ef82895c17f4..01b85e22786233d 100644 --- a/src/content/docs/ssl/edge-certificates/geokey-manager/supported-options.mdx +++ b/src/content/docs/ssl/edge-certificates/geokey-manager/supported-options.mdx @@ -31,7 +31,7 @@ For customers with Geo Key Manager v2, you can use the `policy` parameter to spe | WEUR | Western Europe | | WNAM | Western North America | -*** +--- ## Available countries @@ -39,7 +39,7 @@ For customers with Geo Key Manager v2, you can use the `policy` parameter to spe Examples of supported countries are Japan, Canada, India, and Australia. -*** +--- ## Highest security data centers diff --git a/src/content/docs/ssl/edge-certificates/index.mdx b/src/content/docs/ssl/edge-certificates/index.mdx index ffb763f9a56da56..e7cf9b2a13c1a4d 100644 --- a/src/content/docs/ssl/edge-certificates/index.mdx +++ b/src/content/docs/ssl/edge-certificates/index.mdx @@ -22,7 +22,7 @@ This behavior occurs when all of the following conditions are true: - The zone is on a [subdomain setup](/dns/zone-setups/subdomain-setup/). - The certificate has a subject or SAN that is a wildcard for the zone's parent domain. -::: + ::: ## Use cases diff --git a/src/content/docs/ssl/edge-certificates/staging-environment.mdx b/src/content/docs/ssl/edge-certificates/staging-environment.mdx index 339031829e8da8c..19eb3fbbdf32035 100644 --- a/src/content/docs/ssl/edge-certificates/staging-environment.mdx +++ b/src/content/docs/ssl/edge-certificates/staging-environment.mdx @@ -8,22 +8,21 @@ sidebar: order: 8 badge: text: Beta - --- -import { FeatureTable, DashButton } from "~/components" +import { FeatureTable, DashButton } from "~/components"; Use your certificate staging environment to test new custom (modern) certificates before pushing them to your production environment. This process helps you solve potential certificate problems **before** there's an incident, such as when: -* You make a mistake when uploading a new custom certificate. -* You misunderstand the order of your certificates. -* Clients have previously pinned your custom certificate, causing a TLS termination error. +- You make a mistake when uploading a new custom certificate. +- You misunderstand the order of your certificates. +- Clients have previously pinned your custom certificate, causing a TLS termination error. ## Availability -*** +--- ## Use your staging environment @@ -49,9 +48,9 @@ curl --resolve :: https:// -iv You should confirm whether: -* TLS termination is successful. -* The right certificate is being served at the edge. -* Any clients are pinning the old certificate. +- TLS termination is successful. +- The right certificate is being served at the edge. +- Any clients are pinning the old certificate. ### 3. Push certificate to production @@ -78,7 +77,7 @@ If you roll out a custom (modern) certificate to production and encounter issues 3. Select **Deactivate**. 4. Select **Push to Staging**. -*** +--- ## Limitations @@ -90,5 +89,5 @@ Currently, staging environments are only available to Enterprise customers parti At the moment, staging environments have limited functionality: -* Only custom (modern) certificates -* Only accessed via the dashboard +- Only custom (modern) certificates +- Only accessed via the dashboard diff --git a/src/content/docs/ssl/edge-certificates/universal-ssl/alerts.mdx b/src/content/docs/ssl/edge-certificates/universal-ssl/alerts.mdx index 3104afffd410349..70ebac7297e8244 100644 --- a/src/content/docs/ssl/edge-certificates/universal-ssl/alerts.mdx +++ b/src/content/docs/ssl/edge-certificates/universal-ssl/alerts.mdx @@ -9,13 +9,15 @@ sidebar: head: - tag: title content: Alerts for Universal SSL - --- -import { AvailableNotifications, Render } from "~/components" +import { AvailableNotifications, Render } from "~/components"; You can configure alerts to receive notifications for changes in your certificates. - + diff --git a/src/content/docs/ssl/edge-certificates/universal-ssl/disable-universal-ssl.mdx b/src/content/docs/ssl/edge-certificates/universal-ssl/disable-universal-ssl.mdx index b594fc5113be2e0..818182201a137ed 100644 --- a/src/content/docs/ssl/edge-certificates/universal-ssl/disable-universal-ssl.mdx +++ b/src/content/docs/ssl/edge-certificates/universal-ssl/disable-universal-ssl.mdx @@ -25,13 +25,11 @@ To avoid errors with your domain, either [upload a custom certificate](/ssl/edge If you disable Universal SSL, you may experience errors with the following scenarios: - **Enabled features**: - - [HTTP Strict Transport Security (HSTS)](/ssl/edge-certificates/additional-options/http-strict-transport-security/) - [Always Use HTTPS](/ssl/edge-certificates/additional-options/always-use-https/) - [Opportunistic Encryption](/ssl/edge-certificates/additional-options/opportunistic-encryption/) - **Other setups**: - - [Page Rules](/rules/page-rules/) that redirect traffic to HTTPS - HTTP to HTTPS redirects at your origin web server diff --git a/src/content/docs/ssl/edge-certificates/universal-ssl/troubleshooting.mdx b/src/content/docs/ssl/edge-certificates/universal-ssl/troubleshooting.mdx index 9caba32b58ee4c2..e18e34ce743050c 100644 --- a/src/content/docs/ssl/edge-certificates/universal-ssl/troubleshooting.mdx +++ b/src/content/docs/ssl/edge-certificates/universal-ssl/troubleshooting.mdx @@ -17,10 +17,10 @@ If a certificate issuance times out, Cloudflare tells you where in the chain of To resolve timeout issues, try one or more of the following options: -* Change the **Proxy status** of related DNS records to **DNS only** (gray-clouded) and wait at least a minute. Then, change the **Proxy status** back to **Proxied** (orange-clouded). -* [Disable Universal SSL](/ssl/edge-certificates/universal-ssl/disable-universal-ssl/) and wait at least a minute. Then, re-enable Universal SSL. -* Send a PATCH request to the [validation endpoint](/api/resources/ssl/subresources/verification/methods/edit/) using the same [DCV method](/ssl/edge-certificates/changing-dcv-method/) (API only). Make sure that the `--data` field is not empty in your request. -* Review your domain control validation (DCV). Changing the DCV method will restart certificate issuance. +- Change the **Proxy status** of related DNS records to **DNS only** (gray-clouded) and wait at least a minute. Then, change the **Proxy status** back to **Proxied** (orange-clouded). +- [Disable Universal SSL](/ssl/edge-certificates/universal-ssl/disable-universal-ssl/) and wait at least a minute. Then, re-enable Universal SSL. +- Send a PATCH request to the [validation endpoint](/api/resources/ssl/subresources/verification/methods/edit/) using the same [DCV method](/ssl/edge-certificates/changing-dcv-method/) (API only). Make sure that the `--data` field is not empty in your request. +- Review your domain control validation (DCV). Changing the DCV method will restart certificate issuance. ## Delete certificates diff --git a/src/content/docs/ssl/keyless-ssl/configuration/index.mdx b/src/content/docs/ssl/keyless-ssl/configuration/index.mdx index f525157d8b998f3..08f0a67ed984db2 100644 --- a/src/content/docs/ssl/keyless-ssl/configuration/index.mdx +++ b/src/content/docs/ssl/keyless-ssl/configuration/index.mdx @@ -11,10 +11,9 @@ sidebar: head: - tag: title content: Get started with Keyless SSL - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; The way you set up Keyless SSL depends on how you route traffic to your keyless server. diff --git a/src/content/docs/ssl/keyless-ssl/glossary.mdx b/src/content/docs/ssl/keyless-ssl/glossary.mdx index e64a45f3d972083..ac939b4a2946953 100644 --- a/src/content/docs/ssl/keyless-ssl/glossary.mdx +++ b/src/content/docs/ssl/keyless-ssl/glossary.mdx @@ -9,7 +9,6 @@ head: - tag: title content: Glossary | Keyless SSL description: Learn more about the common terms related to Keyless SSL. - --- ## Cloudflare Keyless SSL key server (“key server”) diff --git a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/azure-managed-hsm.mdx b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/azure-managed-hsm.mdx index 0ca6a0fe976beb8..3804977bcd01432 100644 --- a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/azure-managed-hsm.mdx +++ b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/azure-managed-hsm.mdx @@ -69,7 +69,6 @@ brew install azure-cli ``` 4. If the key server is running in an Azure VM in the same account, use **Managed services** for authorization: - 1. Enable managed services on the VM in the UI. 2. Give your service user (associated with your VM) HSM sign permissions diff --git a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/fortanix-dsm.mdx b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/fortanix-dsm.mdx index df9caf0b486ccaf..18a3cbbad52b8b7 100644 --- a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/fortanix-dsm.mdx +++ b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/fortanix-dsm.mdx @@ -14,4 +14,4 @@ You can use Cloudflare Keyless SSL with [Fortanix Data Security Manager (DSM)](h You must have a [Data Security Manager Enterprise Tier](https://www.fortanix.com/start-your-free-trial) and set up a group and an application assigned to the group. -For detailed guidance, follow the tutorial in the [Fortanix documentation](https://support.fortanix.com/docs/fortanix-data-security-manager-with-cloudflare-integration#50-configure-fortanix-dsm). This guide is based on the Keyless SSL [public DNS](/ssl/keyless-ssl/configuration/public-dns/) option and has been tested using a virtual machine (VM) deployed to Azure running Ubuntu 22.04.3 LTS. \ No newline at end of file +For detailed guidance, follow the tutorial in the [Fortanix documentation](https://support.fortanix.com/docs/fortanix-data-security-manager-with-cloudflare-integration#50-configure-fortanix-dsm). This guide is based on the Keyless SSL [public DNS](/ssl/keyless-ssl/configuration/public-dns/) option and has been tested using a virtual machine (VM) deployed to Azure running Ubuntu 22.04.3 LTS. diff --git a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/index.mdx b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/index.mdx index fd448a9791cb833..a28200144687ee8 100644 --- a/src/content/docs/ssl/keyless-ssl/hardware-security-modules/index.mdx +++ b/src/content/docs/ssl/keyless-ssl/hardware-security-modules/index.mdx @@ -6,12 +6,11 @@ products: title: Hardware security modules sidebar: order: 2 - --- In addition to private keys stored on disk, Keyless SSL supports keys stored in a Hardware Security Module (HSM) via the PKCS#11 standard. Keyless uses PKCS#11 for signing and decrypting payloads without having direct access to the private keys. -*** +--- ## Why use Keyless SSL with an HSM? @@ -19,7 +18,7 @@ Hardware Security Modules (HSMs) facilitate a higher level of protection for you Moreover, many HSMs are also capable of generating keys and producing cryptographically secure randomness. Some are purpose-built to perform cryptographic computations more efficiently. -*** +--- ## Communicating using PKCS#11 @@ -45,4 +44,4 @@ Also, the following cloud HSM offerings have been tested with Keyless SSL: - [Azure Managed HSM](/ssl/keyless-ssl/hardware-security-modules/azure-managed-hsm/) - [Fortanix DSM](/ssl/keyless-ssl/hardware-security-modules/fortanix-dsm/) - [IBM Cloud HSM](/ssl/keyless-ssl/hardware-security-modules/ibm-cloud-hsm/) -- [Google Cloud HSM](/ssl/keyless-ssl/hardware-security-modules/google-cloud-hsm/) \ No newline at end of file +- [Google Cloud HSM](/ssl/keyless-ssl/hardware-security-modules/google-cloud-hsm/) diff --git a/src/content/docs/ssl/keyless-ssl/reference/high-availability.mdx b/src/content/docs/ssl/keyless-ssl/reference/high-availability.mdx index 459196f2dd78e7d..f2176ee72e743cd 100644 --- a/src/content/docs/ssl/keyless-ssl/reference/high-availability.mdx +++ b/src/content/docs/ssl/keyless-ssl/reference/high-availability.mdx @@ -6,7 +6,6 @@ products: title: High availability sidebar: order: 3 - --- The Cloudflare Keyless SSL server runs as a single binary with minimal dependencies and is designed to be robust and reliable. However, the network between your key server and Cloudflare may not be, which could prevent new TLS connections. diff --git a/src/content/docs/ssl/keyless-ssl/reference/index.mdx b/src/content/docs/ssl/keyless-ssl/reference/index.mdx index 4c22ae751c29b2c..78c6fba61f6ed5e 100644 --- a/src/content/docs/ssl/keyless-ssl/reference/index.mdx +++ b/src/content/docs/ssl/keyless-ssl/reference/index.mdx @@ -11,10 +11,9 @@ sidebar: head: - tag: title content: Reference — Keyless SSL - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; For more information on Keyless SSL, refer to the following resources: diff --git a/src/content/docs/ssl/keyless-ssl/reference/keyless-delegation.mdx b/src/content/docs/ssl/keyless-ssl/reference/keyless-delegation.mdx index 08105e84ad0afe6..b0c023f66fe907a 100644 --- a/src/content/docs/ssl/keyless-ssl/reference/keyless-delegation.mdx +++ b/src/content/docs/ssl/keyless-ssl/reference/keyless-delegation.mdx @@ -8,7 +8,6 @@ tags: - TLS sidebar: order: 7 - --- Keyless Delegation is Cloudflare's implementation of the emerging delegated credentials standard ([RFC 9345](https://www.rfc-editor.org/rfc/rfc9345.html)). When you upload a certificate for use with Keyless that has the special extension permitting the use of delegated credentials, Cloudflare will automatically produce a delegated credential and use it at the edge with clients that support this feature. The handshakes will complete without the extra latency induced by reaching back to the Keyless Server, and there are [additional advantages to flexibility in algorithm choice](https://blog.cloudflare.com/keyless-delegation/). diff --git a/src/content/docs/ssl/keyless-ssl/reference/metrics.mdx b/src/content/docs/ssl/keyless-ssl/reference/metrics.mdx index 0e9d1a59aa73910..292a3c66bcec5c5 100644 --- a/src/content/docs/ssl/keyless-ssl/reference/metrics.mdx +++ b/src/content/docs/ssl/keyless-ssl/reference/metrics.mdx @@ -6,13 +6,10 @@ products: title: Key server metrics sidebar: order: 5 - --- The gokeyless key server exposes a [Prometheus](https://prometheus.io/) metrics endpoint that you can use to monitor signing performance, error rates, connection health, and certificate expiry. This endpoint can also be scraped by the OpenTelemetry Collector Prometheus receiver, making the metrics available to any OpenTelemetry-compatible backend. - - ## Metrics endpoint By default, metrics are served at: @@ -31,24 +28,24 @@ The endpoint serves only `/metrics`. There are no additional HTTP endpoints such All histogram metrics share the same bucket configuration: 15 exponential buckets starting at 100 microseconds, doubling each step up to approximately 1.64 seconds, plus a final `+Inf` bucket. -| Bucket | Upper bound | -| --- | --- | -| 1 | 100 µs | -| 2 | 200 µs | -| 3 | 400 µs | -| 4 | 800 µs | -| 5 | 1.6 ms | -| 6 | 3.2 ms | -| 7 | 6.4 ms | -| 8 | 12.8 ms | -| 9 | 25.6 ms | -| 10 | 51.2 ms | -| 11 | 102 ms | -| 12 | 205 ms | -| 13 | 410 ms | -| 14 | 819 ms | -| 15 | ~1.64 s | -| +Inf | Anything above ~1.64 s | +| Bucket | Upper bound | +| ------ | ---------------------- | +| 1 | 100 µs | +| 2 | 200 µs | +| 3 | 400 µs | +| 4 | 800 µs | +| 5 | 1.6 ms | +| 6 | 3.2 ms | +| 7 | 6.4 ms | +| 8 | 12.8 ms | +| 9 | 25.6 ms | +| 10 | 51.2 ms | +| 11 | 102 ms | +| 12 | 205 ms | +| 13 | 410 ms | +| 14 | 819 ms | +| 15 | ~1.64 s | +| +Inf | Anything above ~1.64 s | :::note When using a hardware security module (HSM) with a PKCS#11 session pool, the pool wait timeout is hardcoded at 10 seconds. A pool exhaustion event will therefore always appear in the `+Inf` bucket. Spikes in `+Inf` observations on signing operations with `error="cryptography error"` are a direct indicator of PKCS#11 session pool saturation. @@ -69,45 +66,45 @@ The `opcode` label uses the full constant name from the gokeyless protocol. #### RSA operations -| `opcode` label | Wire value | Description | -| --- | --- | --- | -| `OpRSADecrypt` | `0x01` | RSA raw decryption — used in TLS RSA key exchange (deprecated in TLS 1.3) | -| `OpRSASignMD5SHA1` | `0x02` | RSA PKCS#1 v1.5 signature over MD5+SHA1 combined hash — TLS 1.0/1.1 handshake | -| `OpRSASignSHA1` | `0x03` | RSA PKCS#1 v1.5 signature over SHA1 | -| `OpRSASignSHA224` | `0x04` | RSA PKCS#1 v1.5 signature over SHA224 | -| `OpRSASignSHA256` | `0x05` | RSA PKCS#1 v1.5 signature over SHA256 | -| `OpRSASignSHA384` | `0x06` | RSA PKCS#1 v1.5 signature over SHA384 | -| `OpRSASignSHA512` | `0x07` | RSA PKCS#1 v1.5 signature over SHA512 | -| `OpRSAPSSSignSHA256` | `0x35` | RSASSA-PSS signature over SHA256 — primary RSA operation in TLS 1.3 | -| `OpRSAPSSSignSHA384` | `0x36` | RSASSA-PSS signature over SHA384 | -| `OpRSAPSSSignSHA512` | `0x37` | RSASSA-PSS signature over SHA512 | +| `opcode` label | Wire value | Description | +| -------------------- | ---------- | ----------------------------------------------------------------------------- | +| `OpRSADecrypt` | `0x01` | RSA raw decryption — used in TLS RSA key exchange (deprecated in TLS 1.3) | +| `OpRSASignMD5SHA1` | `0x02` | RSA PKCS#1 v1.5 signature over MD5+SHA1 combined hash — TLS 1.0/1.1 handshake | +| `OpRSASignSHA1` | `0x03` | RSA PKCS#1 v1.5 signature over SHA1 | +| `OpRSASignSHA224` | `0x04` | RSA PKCS#1 v1.5 signature over SHA224 | +| `OpRSASignSHA256` | `0x05` | RSA PKCS#1 v1.5 signature over SHA256 | +| `OpRSASignSHA384` | `0x06` | RSA PKCS#1 v1.5 signature over SHA384 | +| `OpRSASignSHA512` | `0x07` | RSA PKCS#1 v1.5 signature over SHA512 | +| `OpRSAPSSSignSHA256` | `0x35` | RSASSA-PSS signature over SHA256 — primary RSA operation in TLS 1.3 | +| `OpRSAPSSSignSHA384` | `0x36` | RSASSA-PSS signature over SHA384 | +| `OpRSAPSSSignSHA512` | `0x37` | RSASSA-PSS signature over SHA512 | #### ECDSA operations -| `opcode` label | Wire value | Description | -| --- | --- | --- | -| `OpECDSASignMD5SHA1` | `0x12` | ECDSA signature over MD5+SHA1 combined hash | -| `OpECDSASignSHA1` | `0x13` | ECDSA signature over SHA1 | -| `OpECDSASignSHA224` | `0x14` | ECDSA signature over SHA224 | -| `OpECDSASignSHA256` | `0x15` | ECDSA signature over SHA256 — most common in TLS 1.2 and TLS 1.3 | -| `OpECDSASignSHA384` | `0x16` | ECDSA signature over SHA384 | -| `OpECDSASignSHA512` | `0x17` | ECDSA signature over SHA512 | +| `opcode` label | Wire value | Description | +| -------------------- | ---------- | ---------------------------------------------------------------- | +| `OpECDSASignMD5SHA1` | `0x12` | ECDSA signature over MD5+SHA1 combined hash | +| `OpECDSASignSHA1` | `0x13` | ECDSA signature over SHA1 | +| `OpECDSASignSHA224` | `0x14` | ECDSA signature over SHA224 | +| `OpECDSASignSHA256` | `0x15` | ECDSA signature over SHA256 — most common in TLS 1.2 and TLS 1.3 | +| `OpECDSASignSHA384` | `0x16` | ECDSA signature over SHA384 | +| `OpECDSASignSHA512` | `0x17` | ECDSA signature over SHA512 | #### Other signing -| `opcode` label | Wire value | Description | -| --- | --- | --- | -| `OpEd25519Sign` | `0x18` | Ed25519 signature over an arbitrary-length payload (not a pre-hashed digest) | +| `opcode` label | Wire value | Description | +| --------------- | ---------- | ---------------------------------------------------------------------------- | +| `OpEd25519Sign` | `0x18` | Ed25519 signature over an arbitrary-length payload (not a pre-hashed digest) | #### Sealing and infrastructure operations -| `opcode` label | Wire value | Description | -| --- | --- | --- | -| `OpSeal` | `0x21` | Encrypt a blob using the server's sealing key — used for TLS session tickets | -| `OpUnseal` | `0x22` | Decrypt a blob previously encrypted by `OpSeal`. Returns `ErrExpired` if the sealing key has rotated | -| `OpRPC` | `0x23` | Execute a named function registered on the server. Available to all connection types | -| `OpCustom` | `0x24` | Execute a custom function set in the server configuration. Available to unrestricted connections only | -| `OpPing` | `0xF1` | Health check — the server echoes the payload back as `OpPong` with no HSM or key lookup involved | +| `opcode` label | Wire value | Description | +| -------------- | ---------- | ----------------------------------------------------------------------------------------------------- | +| `OpSeal` | `0x21` | Encrypt a blob using the server's sealing key — used for TLS session tickets | +| `OpUnseal` | `0x22` | Decrypt a blob previously encrypted by `OpSeal`. Returns `ErrExpired` if the sealing key has rotated | +| `OpRPC` | `0x23` | Execute a named function registered on the server. Available to all connection types | +| `OpCustom` | `0x24` | Execute a custom function set in the server configuration. Available to unrestricted connections only | +| `OpPing` | `0xF1` | Health check — the server echoes the payload back as `OpPong` with no HSM or key lookup involved | --- @@ -124,15 +121,15 @@ This metric does not include time a request spends waiting for a connection sema Opcodes are grouped into coarser categories for this label: -| `type` label | Opcodes included | -| --- | --- | -| `rsa` | `OpRSADecrypt`, all `OpRSASign*`, all `OpRSAPSSSign*` | -| `ecdsa` | All `OpECDSASign*` | -| `ed25519` | `OpEd25519Sign` | -| `rpc` | `OpRPC` | -| `custom` | `OpCustom` | -| `other` | `OpSeal`, `OpUnseal`, `OpPing`, `OpPong`, `OpResponse`, `OpError` | -| `unknown` | Any unrecognised opcode byte | +| `type` label | Opcodes included | +| ------------ | ----------------------------------------------------------------- | +| `rsa` | `OpRSADecrypt`, all `OpRSASign*`, all `OpRSAPSSSign*` | +| `ecdsa` | All `OpECDSASign*` | +| `ed25519` | `OpEd25519Sign` | +| `rpc` | `OpRPC` | +| `custom` | `OpCustom` | +| `other` | `OpSeal`, `OpUnseal`, `OpPing`, `OpPong`, `OpResponse`, `OpError` | +| `unknown` | Any unrecognised opcode byte | :::note `OpPing` is grouped into `other` alongside `OpSeal` and `OpUnseal`. Ping round-trip latency cannot be separated from seal and unseal operation latency in this metric. @@ -142,20 +139,20 @@ Opcodes are grouped into coarser categories for this label: For successful requests the value is `no error`. All other values indicate a failed operation. -| `error` label | Description | Common cause | -| --- | --- | --- | -| `no error` | Operation completed successfully | — | -| `cryptography error` | HSM or signing operation failed | PKCS#11 session pool exhaustion (`resource pool timed out`), HSM returned an error, key type mismatch | -| `key not found due to no matching SKI/SNI/ServerIP` | Key lookup returned no result | Key not loaded in keystore, incorrect SKI in request | -| `read failure` | I/O read error during the operation | Disk error reading key file | -| `version mismatch` | Protocol version not supported | Client and server version skew | -| `bad opcode` | Unknown opcode received | `OpCustom` sent with no custom handler configured | -| `unexpected opcode` | A response opcode was used as a request | Client sent `OpPong`, `OpResponse`, or `OpError` as a request | -| `malformed message` | TLV parse failure | Corrupt or truncated packet | -| `internal error` | Non-cryptographic server-side failure | Sealer is nil, RPC dispatch error | -| `certificate not found` | Certificate lookup failed | Certificate not loaded | -| `sealing key expired` | `OpUnseal` blob is too old to decrypt | TLS session ticket key rotation — blob sealed with a key that has since been retired | -| `remote configuration error` | Remote key server is misconfigured | Key points to an unreachable or misconfigured remote key server | +| `error` label | Description | Common cause | +| --------------------------------------------------- | --------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| `no error` | Operation completed successfully | — | +| `cryptography error` | HSM or signing operation failed | PKCS#11 session pool exhaustion (`resource pool timed out`), HSM returned an error, key type mismatch | +| `key not found due to no matching SKI/SNI/ServerIP` | Key lookup returned no result | Key not loaded in keystore, incorrect SKI in request | +| `read failure` | I/O read error during the operation | Disk error reading key file | +| `version mismatch` | Protocol version not supported | Client and server version skew | +| `bad opcode` | Unknown opcode received | `OpCustom` sent with no custom handler configured | +| `unexpected opcode` | A response opcode was used as a request | Client sent `OpPong`, `OpResponse`, or `OpError` as a request | +| `malformed message` | TLV parse failure | Corrupt or truncated packet | +| `internal error` | Non-cryptographic server-side failure | Sealer is nil, RPC dispatch error | +| `certificate not found` | Certificate lookup failed | Certificate not loaded | +| `sealing key expired` | `OpUnseal` blob is too old to decrypt | TLS session ticket key rotation — blob sealed with a key that has since been retired | +| `remote configuration error` | Remote key server is misconfigured | Key points to an unreachable or misconfigured remote key server | --- @@ -197,16 +194,16 @@ It is **not** recorded for `OpPing`, `OpSeal`, `OpUnseal`, `OpRPC`, or `OpCustom Counts connection-level transport failures. This metric reflects problems at the network or TLS layer — it does not count signing errors or key lookup failures, which are reported in the `error` label of the duration histograms. -| Scenario | Counted? | -| --- | --- | -| TLS handshake failure | No | -| Client disconnected before TLS handshake (EOF) | No | -| Failure determining connection trust level after TLS | Yes | -| Non-EOF read error on an established connection | Yes | -| Write error when delivering a response | Yes | -| Read timeout — graceful connection drain | No | -| Signing error, including PKCS#11 pool timeout | No | -| Key not found | No | +| Scenario | Counted? | +| ---------------------------------------------------- | -------- | +| TLS handshake failure | No | +| Client disconnected before TLS handshake (EOF) | No | +| Failure determining connection trust level after TLS | Yes | +| Non-EOF read error on an established connection | Yes | +| Write error when delivering a response | Yes | +| Read timeout — graceful connection drain | No | +| Signing error, including PKCS#11 pool timeout | No | +| Key not found | No | --- @@ -218,18 +215,19 @@ Counts connection-level transport failures. This metric reflects problems at the Reports the expiration time (`NotAfter`) of each certificate loaded by the key server as a Unix timestamp. One time series is emitted per certificate. This metric is updated: + - At startup, for the server authentication certificate (`auth_cert`) and the Cloudflare CA certificate (`cloudflare_ca_cert`). - On each successful inbound TLS connection, for the peer certificates presented by the connecting client. -| Label | Description | -| --- | --- | -| `source` | File path for startup certs; `listener: ` for peer certs from incoming connections | -| `serial_no` | Certificate serial number | -| `cn` | Subject Common Name | -| `hostnames` | Sorted, comma-separated list of DNS Subject Alternative Names | -| `ca` | `1` if the certificate is a CA certificate, `0` otherwise | -| `server` | `1` if the certificate includes `ExtKeyUsageServerAuth`, `0` otherwise | -| `client` | `1` if the certificate includes `ExtKeyUsageClientAuth`, `0` otherwise | +| Label | Description | +| ----------- | ---------------------------------------------------------------------------------------- | +| `source` | File path for startup certs; `listener: ` for peer certs from incoming connections | +| `serial_no` | Certificate serial number | +| `cn` | Subject Common Name | +| `hostnames` | Sorted, comma-separated list of DNS Subject Alternative Names | +| `ca` | `1` if the certificate is a CA certificate, `0` otherwise | +| `server` | `1` if the certificate includes `ExtKeyUsageServerAuth`, `0` otherwise | +| `client` | `1` if the certificate includes `ExtKeyUsageClientAuth`, `0` otherwise | :::note `server_utilization` is a registered `GaugeVec` metric that is never written to by the key server. Because no label values are ever set, it emits no time series in the `/metrics` output at all. Do not use it. diff --git a/src/content/docs/ssl/keyless-ssl/reference/scaling-and-benchmarking.mdx b/src/content/docs/ssl/keyless-ssl/reference/scaling-and-benchmarking.mdx index 22b7833a2be107e..4edb4db09bab546 100644 --- a/src/content/docs/ssl/keyless-ssl/reference/scaling-and-benchmarking.mdx +++ b/src/content/docs/ssl/keyless-ssl/reference/scaling-and-benchmarking.mdx @@ -6,7 +6,6 @@ products: title: Scaling and benchmarking sidebar: order: 4 - --- Cloudflare's Keyless SSL technology was designed to scale to accommodate any sized workload using vertical and horizontal scaling, and pre-computation techniques wherever possible, such as ECDSA. The goals of the architectural design of the key server are to minimize latency while maximizing signing operations per second. @@ -15,7 +14,7 @@ Each key server uses a worker pool model, with incoming client connections handl Where needed, multiple key servers can be deployed and balanced between using your preferred ingress load balancing configuration. For full high availability, make sure to deploy sufficient key servers to handle twice the expected workload. -*** +--- ## Key type @@ -25,7 +24,7 @@ ECDSA signing can be broken down into two steps. Since the first step — genera Additional details can be found in the [gokeyless server readme file](https://github.com/cloudflare/gokeyless#readme) file. -*** +--- ## Benchmarks diff --git a/src/content/docs/ssl/keyless-ssl/upgrading-your-key-server.mdx b/src/content/docs/ssl/keyless-ssl/upgrading-your-key-server.mdx index 4f8047f3f0bc964..725673be1dbd8c2 100644 --- a/src/content/docs/ssl/keyless-ssl/upgrading-your-key-server.mdx +++ b/src/content/docs/ssl/keyless-ssl/upgrading-your-key-server.mdx @@ -6,7 +6,6 @@ products: title: Upgrade your key server sidebar: order: 4 - --- Periodically, you may need to update your key server when using Cloudflare's Keyless SSL. @@ -25,8 +24,6 @@ To upgrade your key server: :::caution - If you are running a [high availability configuration](/ssl/keyless-ssl/reference/high-availability/), upgrade one server at a time as new TLS connections will fail to terminate at Cloudflare's global network without a functioning key server. - ::: diff --git a/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/global.mdx b/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/global.mdx index c8ca40f070b5e2a..bda18f6939d8966 100644 --- a/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/global.mdx +++ b/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/global.mdx @@ -24,10 +24,9 @@ Global, [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/ - Make sure your zone is using an [SSL/TLS encryption mode](/ssl/origin-configuration/ssl-modes/) of **Full** or higher. - Consider your security and certificate needs: + - The Cloudflare-provided certificate is not exclusive to your account. It only guarantees that a request is coming from the Cloudflare network. If you need stricter security, set up [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) or [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP with your own certificate instead. - - The Cloudflare-provided certificate is not exclusive to your account. It only guarantees that a request is coming from the Cloudflare network. If you need stricter security, set up [zone-level](/ssl/origin-configuration/authenticated-origin-pull/set-up/zone-level/) or [per-hostname](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/) AOP with your own certificate instead. - - - Global AOP is applied to all proxied hostnames on your zone, including [custom hostnames](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/) configured on a Cloudflare for SaaS zone. If you need a different AOP certificate for different custom hostnames, use [per-hostname AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/). + - Global AOP is applied to all proxied hostnames on your zone, including [custom hostnames](/cloudflare-for-platforms/cloudflare-for-saas/domain-support/) configured on a Cloudflare for SaaS zone. If you need a different AOP certificate for different custom hostnames, use [per-hostname AOP](/ssl/origin-configuration/authenticated-origin-pull/set-up/per-hostname/). ## 1. Download the Cloudflare certificate diff --git a/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/index.mdx b/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/index.mdx index d2d6befaa600c0d..5ab7622aa6b0069 100644 --- a/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/index.mdx +++ b/src/content/docs/ssl/origin-configuration/authenticated-origin-pull/set-up/index.mdx @@ -11,9 +11,8 @@ sidebar: head: - tag: title content: Set up Authenticated Origin Pulls - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; - \ No newline at end of file + diff --git a/src/content/docs/ssl/origin-configuration/cipher-suites.mdx b/src/content/docs/ssl/origin-configuration/cipher-suites.mdx index 051fcf061c534ca..8a042656568dd34 100644 --- a/src/content/docs/ssl/origin-configuration/cipher-suites.mdx +++ b/src/content/docs/ssl/origin-configuration/cipher-suites.mdx @@ -28,19 +28,19 @@ The list order is based on how the cipher suites appear in the [ClientHello](htt | Cipher name | TLS 1.0 | TLS 1.1 | TLS 1.2 | TLS 1.3 | | ---------------------------------- | ------- | ------- | ------- | ------- | -| AEAD-AES128-GCM-SHA256 [^1] | ❌ | ❌ | ❌ | ✅ | -| AEAD-AES256-GCM-SHA384 [^1] | ❌ | ❌ | ❌ | ✅ | -| AEAD-CHACHA20-POLY1305-SHA256 [^1] | ❌ | ❌ | ❌ | ✅ | -| ECDHE-ECDSA-AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | -| ECDHE-RSA-AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | -| ECDHE-RSA-AES128-SHA | ✅ | ✅ | ✅ | ❌ | -| AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | -| AES128-SHA | ✅ | ✅ | ✅ | ❌ | -| ECDHE-ECDSA-AES256-GCM-SHA384 | ❌ | ❌ | ✅ | ❌ | -| ECDHE-RSA-AES256-GCM-SHA384 | ❌ | ❌ | ✅ | ❌ | -| ECDHE-RSA-AES256-SHA384 | ❌ | ❌ | ✅ | ❌ | -| AES256-SHA | ✅ | ✅ | ✅ | ❌ | -| DES-CBC3-SHA | ✅ | ❌ | ❌ | ❌ | +| AEAD-AES128-GCM-SHA256 [^1] | ❌ | ❌ | ❌ | ✅ | +| AEAD-AES256-GCM-SHA384 [^1] | ❌ | ❌ | ❌ | ✅ | +| AEAD-CHACHA20-POLY1305-SHA256 [^1] | ❌ | ❌ | ❌ | ✅ | +| ECDHE-ECDSA-AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | +| ECDHE-RSA-AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | +| ECDHE-RSA-AES128-SHA | ✅ | ✅ | ✅ | ❌ | +| AES128-GCM-SHA256 | ❌ | ❌ | ✅ | ❌ | +| AES128-SHA | ✅ | ✅ | ✅ | ❌ | +| ECDHE-ECDSA-AES256-GCM-SHA384 | ❌ | ❌ | ✅ | ❌ | +| ECDHE-RSA-AES256-GCM-SHA384 | ❌ | ❌ | ✅ | ❌ | +| ECDHE-RSA-AES256-SHA384 | ❌ | ❌ | ✅ | ❌ | +| AES256-SHA | ✅ | ✅ | ✅ | ❌ | +| DES-CBC3-SHA | ✅ | ❌ | ❌ | ❌ | ### TLS 1.3 cipher suites @@ -67,4 +67,4 @@ ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RS ssl_prefer_server_ciphers on; ``` -[^1]: Refer to [TLS 1.3 cipher suites](#tls-13-cipher-suites) for details. \ No newline at end of file +[^1]: Refer to [TLS 1.3 cipher suites](#tls-13-cipher-suites) for details. diff --git a/src/content/docs/ssl/origin-configuration/index.mdx b/src/content/docs/ssl/origin-configuration/index.mdx index aac15f2f4132e15..ca68ac364da293b 100644 --- a/src/content/docs/ssl/origin-configuration/index.mdx +++ b/src/content/docs/ssl/origin-configuration/index.mdx @@ -8,10 +8,9 @@ sidebar: order: 5 group: hideIndex: true - --- -import { DirectoryListing } from "~/components" +import { DirectoryListing } from "~/components"; Learn more about SSL/TLS protection options for your origin servers: diff --git a/src/content/docs/ssl/origin-configuration/origin-ca/troubleshooting.mdx b/src/content/docs/ssl/origin-configuration/origin-ca/troubleshooting.mdx index b417523729d50b6..6669b3202cadc81 100644 --- a/src/content/docs/ssl/origin-configuration/origin-ca/troubleshooting.mdx +++ b/src/content/docs/ssl/origin-configuration/origin-ca/troubleshooting.mdx @@ -64,7 +64,7 @@ If the user does not have **API Access**, this error is returned. Make sure that the user creating the certificate has access to the API. You can check in the account **Members** page. - + - The default setting for the account is specified in the card **Enable API Access**. - Specific user API Access (which can override the default setting) is presented after selecting the user in the list of members. diff --git a/src/content/docs/ssl/origin-configuration/ssl-modes/full.mdx b/src/content/docs/ssl/origin-configuration/ssl-modes/full.mdx index 087e14efa75240d..c19aaa19e4e96d1 100644 --- a/src/content/docs/ssl/origin-configuration/ssl-modes/full.mdx +++ b/src/content/docs/ssl/origin-configuration/ssl-modes/full.mdx @@ -16,9 +16,9 @@ import { Stream, Render, TabItem, Tabs } from "~/components"; When you set your encryption mode to **Full**, Cloudflare allows HTTPS connections between your visitor and Cloudflare and makes connections to the origin using the scheme requested by the visitor. If your visitor uses `http`, then Cloudflare connects to the origin using plaintext HTTP and vice versa. ## Use when diff --git a/src/content/docs/ssl/origin-configuration/ssl-modes/index.mdx b/src/content/docs/ssl/origin-configuration/ssl-modes/index.mdx index d914207fd292d04..ffbf39cb4685b3c 100644 --- a/src/content/docs/ssl/origin-configuration/ssl-modes/index.mdx +++ b/src/content/docs/ssl/origin-configuration/ssl-modes/index.mdx @@ -45,7 +45,7 @@ Automatic SSL/TLS leverages advanced methods developed by the SSL/TLS Recommende Automatic SSL/TLS will not change your setting to a less secure encryption mode. For example, if your origin certificate expires, the encryption mode will not change from **Full (strict)** to **Full**. You must ensure the validity of your origin SSL/TLS configuration at all times. ::: -Automatic upgrades are applied gradually. Automatic SSL/TLS begins to upgrade the domain by starting with just 1% of its traffic. If no issues are found, the new SSL/TLS encryption mode is applied to traffic in 10% increments until 100% of traffic uses the recommended mode. If origin connectivity fails during this process, Cloudflare aborts the upgrade, immediately rolls traffic back to the previous mode, and logs the failure. Once 100% of traffic has been successfully upgraded with no TLS-related errors, the domain's SSL/TLS setting is permanently updated. +Automatic upgrades are applied gradually. Automatic SSL/TLS begins to upgrade the domain by starting with just 1% of its traffic. If no issues are found, the new SSL/TLS encryption mode is applied to traffic in 10% increments until 100% of traffic uses the recommended mode. If origin connectivity fails during this process, Cloudflare aborts the upgrade, immediately rolls traffic back to the previous mode, and logs the failure. Once 100% of traffic has been successfully upgraded with no TLS-related errors, the domain's SSL/TLS setting is permanently updated. Flexible → Full/Strict transitions are handled with extra caution since the origin scheme change (HTTP → HTTPS) alters cache keys. In this case, the ramp-up may proceed more slowly to allow cache warm-up before resuming standard increments. diff --git a/src/content/docs/ssl/origin-configuration/ssl-modes/ssl-only-origin-pull.mdx b/src/content/docs/ssl/origin-configuration/ssl-modes/ssl-only-origin-pull.mdx index 60489481ea636f2..44f4f531ad50fd4 100644 --- a/src/content/docs/ssl/origin-configuration/ssl-modes/ssl-only-origin-pull.mdx +++ b/src/content/docs/ssl/origin-configuration/ssl-modes/ssl-only-origin-pull.mdx @@ -23,12 +23,11 @@ When you set your encryption mode to **Strict (SSL-Only Origin Pull)**, connecti The certificate presented by the origin will be validated the same as with [Full (strict) mode](/ssl/origin-configuration/ssl-modes/full-strict/). - ## Use when You want the most secure configuration available for your origin, you are an Enterprise customer, and you meet the requirements for [**Full (strict)** mode](/ssl/origin-configuration/ssl-modes/full-strict/). diff --git a/src/content/docs/ssl/reference/all-features.mdx b/src/content/docs/ssl/reference/all-features.mdx index 83243c2d35356e9..e4526a1b070534c 100644 --- a/src/content/docs/ssl/reference/all-features.mdx +++ b/src/content/docs/ssl/reference/all-features.mdx @@ -7,13 +7,12 @@ sidebar: order: 9 head: [] description: Review information on all Cloudflare SSL/TLS features and their availability. - --- -import { ProductFeatures } from "~/components" +import { ProductFeatures } from "~/components"; Cloudflare provides the following features for different [plans](https://www.cloudflare.com/plans/). ## Features - \ No newline at end of file + diff --git a/src/content/docs/ssl/reference/browser-compatibility.mdx b/src/content/docs/ssl/reference/browser-compatibility.mdx index a7af16592d73bd7..964b497ae00d5c6 100644 --- a/src/content/docs/ssl/reference/browser-compatibility.mdx +++ b/src/content/docs/ssl/reference/browser-compatibility.mdx @@ -8,7 +8,6 @@ sidebar: head: [] description: Review information about browser compatibility for the different Cloudflare SSL/TLS offerings. - --- Cloudflare attempts to provide compatibility for as wide a range of user agents (browsers, API clients, etc.) as possible. However, the specific set of supported clients can vary depending on the different SSL/TLS certificate types, your visitor's [browser version](#non-sni-support), and the [certificate authority (CA)](/ssl/reference/certificate-authorities/) that issues the certificate. @@ -31,13 +30,13 @@ Although [SNI extensions](https://www.cloudflare.com/learning/ssl/what-is-sni/) To support non-SNI requests, you can: -* [Upload a custom certificate](/ssl/edge-certificates/custom-certificates/uploading/#upload-a-custom-certificate) and specify a value of `Legacy` for its client support. +- [Upload a custom certificate](/ssl/edge-certificates/custom-certificates/uploading/#upload-a-custom-certificate) and specify a value of `Legacy` for its client support. Note that `Legacy` custom certificates are not compatible with [BYOIP](/byoip/) and that, unlike [Universal SSL](/ssl/edge-certificates/universal-ssl/) or [advanced certificates](/ssl/edge-certificates/advanced-certificate-manager/), Cloudflare does not manage issuance and renewal for [custom certificates](/ssl/edge-certificates/custom-certificates/). -* (BYOIP customers only) Enterprise customers can choose to bring their own IP prefix to the Cloudflare network and [specify the default SNI used for any non-SNI handshake in the address map](/byoip/address-maps/setup/#non-sni-support). +- (BYOIP customers only) Enterprise customers can choose to bring their own IP prefix to the Cloudflare network and [specify the default SNI used for any non-SNI handshake in the address map](/byoip/address-maps/setup/#non-sni-support). -* (Paid plans only) [Contact Cloudflare Support](/support/contacting-cloudflare-support/) and request a set of non-SNI IPs for your zone. +- (Paid plans only) [Contact Cloudflare Support](/support/contacting-cloudflare-support/) and request a set of non-SNI IPs for your zone. ## HTTPS records @@ -55,4 +54,4 @@ If you need HTTPS records without Universal SSL, you can manually add them, but Cloudflare's OCSP implementation uses HTTP/1.1 by default for plain HTTP connections. -For HTTPS connections, the client automatically attempts to use HTTP/2 if the server supports it through the TLS ALPN (Application-Layer Protocol Negotiation) extension. If HTTP/2 is not available or supported by the server, it will fall back to HTTP/1.1. \ No newline at end of file +For HTTPS connections, the client automatically attempts to use HTTP/2 if the server supports it through the TLS ALPN (Application-Layer Protocol Negotiation) extension. If HTTP/2 is not available or supported by the server, it will fall back to HTTP/1.1. diff --git a/src/content/docs/ssl/reference/certificate-and-hostname-priority.mdx b/src/content/docs/ssl/reference/certificate-and-hostname-priority.mdx index 2c27bca6871ec0e..455857836c90c94 100644 --- a/src/content/docs/ssl/reference/certificate-and-hostname-priority.mdx +++ b/src/content/docs/ssl/reference/certificate-and-hostname-priority.mdx @@ -7,14 +7,13 @@ sidebar: order: 4 head: [] description: Learn about how Cloudflare decides which certificate and associated SSL/TLS settings to apply to individual hostnames. - --- import { GlossaryTooltip } from "~/components"; When a new certificate is created, Cloudflare first deploys the certificate and then serves it. -*** +--- ## Certificate deployment @@ -42,17 +41,17 @@ For any given hostname, Cloudflare uses the following order to determine which c In this case, when the certificate with the closest expiration date is renewed, it will then become the one with the latest expiration date and get presented. ::: -*** +--- ## Certificate presentation Cloudflare uses the following order to determine the certificate and settings used during a TLS handshake: -1. **SNI match**: Certificates and settings that match the SNI hostname *exactly* take precedence. +1. **SNI match**: Certificates and settings that match the SNI hostname _exactly_ take precedence. 2. **SNI wildcard match**: If there is not an exact match between the hostname and SNI hostname, Cloudflare uses certificates and settings that match an SNI wildcard. 3. **IP address**: If no SNI is presented, Cloudflare uses certificate based on the IP address (the hostname can support TLS handshakes made without SNI). -*** +--- ## Hostname priority @@ -61,13 +60,11 @@ When multiple proxied DNS records + diff --git a/src/content/docs/ssl/troubleshooting/mixed-content-errors.mdx b/src/content/docs/ssl/troubleshooting/mixed-content-errors.mdx index 5b2b86f88806a9d..8499af2e2c86769 100644 --- a/src/content/docs/ssl/troubleshooting/mixed-content-errors.mdx +++ b/src/content/docs/ssl/troubleshooting/mixed-content-errors.mdx @@ -10,7 +10,6 @@ sidebar: learning_center: title: What is mixed content? link: https://www.cloudflare.com/learning/ssl/what-is-mixed-content/ - --- Domains added to Cloudflare receive SSL certificates and can serve traffic over HTTPS. However, after starting to use Cloudflare, some customers notice missing content or page rendering issues when they first serve HTTPS traffic. @@ -21,7 +20,7 @@ Normally, if your website loads all resources securely over HTTPS, visitors obse This indicates your site has a working SSL certificate and all resources loaded by the site are loaded over HTTPS. The green lock assures visitors that their connection is safe. One of the [symptoms of mixed content](#symptoms-of-mixed-content-occurrence) is that different icons appear instead of the green lock icon. -*** +--- ## Symptoms of mixed content occurrence @@ -31,8 +30,8 @@ Most modern browsers block HTTP requests on secure HTTPS pages. Blocked content Each web browser uses different methods to warn visitors about mixed content on a website, potentially including: -* A yellow triangle or information symbol beside the URL bar -* Messages mentioning "secure content" +- A yellow triangle or information symbol beside the URL bar +- Messages mentioning "secure content" ### **Console logs** @@ -46,7 +45,7 @@ For mixed content errors, the browser refuses to load the resources over an inse Information on using the browser’s debug tools to locate these issues are found in the documentation for [Chrome](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content) and [Firefox](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content). Alternatively, you can view your page source and find specific references of *http\://* for paths to other resources. -*** +--- ## Resolution @@ -60,12 +59,12 @@ There are two methods to resolve mixed content errors. ### WordPress users -Cloudflare recommends WordPress users to install the [Cloudflare WordPress plugin](https://wordpress.org/plugins/cloudflare/) and enable the *Automatic HTTPS rewrites* option within the plugin. +Cloudflare recommends WordPress users to install the [Cloudflare WordPress plugin](https://wordpress.org/plugins/cloudflare/) and enable the _Automatic HTTPS rewrites_ option within the plugin. -*** +--- ## Related resources -* [Debugging mixed content in Chrome](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content) -* [Debugging mixed content in Firefox](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content) -* [Community Tip - Fixing mixed content errors](https://community.cloudflare.com/t/community-tip-fixing-mixed-content-errors/42476) +- [Debugging mixed content in Chrome](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/fixing-mixed-content) +- [Debugging mixed content in Firefox](https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content) +- [Community Tip - Fixing mixed content errors](https://community.cloudflare.com/t/community-tip-fixing-mixed-content-errors/42476) diff --git a/src/content/docs/ssl/troubleshooting/version-cipher-mismatch.mdx b/src/content/docs/ssl/troubleshooting/version-cipher-mismatch.mdx index 3ffbddefe30f522..759b5d1a646ae8d 100644 --- a/src/content/docs/ssl/troubleshooting/version-cipher-mismatch.mdx +++ b/src/content/docs/ssl/troubleshooting/version-cipher-mismatch.mdx @@ -14,7 +14,11 @@ description: Learn how to troubleshoot ERR_SSL_VERSION_OR_CIPHER_MISMATCH when import { Stream, Render } from "~/components"; - + After you [add a new domain](/fundamentals/manage-domains/add-site/) to Cloudflare, your visitors' browsers might display one of the following errors: diff --git a/src/content/docs/stream/edit-videos/adding-captions.mdx b/src/content/docs/stream/edit-videos/adding-captions.mdx index a5d5afcbca787ae..1cadfef74b3cd32 100644 --- a/src/content/docs/stream/edit-videos/adding-captions.mdx +++ b/src/content/docs/stream/edit-videos/adding-captions.mdx @@ -6,7 +6,6 @@ sidebar: order: 5 products: - stream - --- import { Tabs, TabItem } from "~/components"; @@ -149,15 +148,15 @@ Example response: ```json { - "result": { - "language": "en", - "label": "English (auto-generated)", - "generated": true, - "status": "inprogress" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "language": "en", + "label": "English (auto-generated)", + "generated": true, + "status": "inprogress" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -253,15 +252,15 @@ See the full [Workers Stream binding API reference](/stream/manage-video-library ```json { - "result": { - "language": "en", - "label": "English", - "generated": false, - "status": "ready" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "language": "en", + "label": "English", + "generated": false, + "status": "ready" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -339,23 +338,23 @@ See the full [Workers Stream binding API reference](/stream/manage-video-library ```json { - "result": [ - { - "language": "en", - "label": "English (auto-generated)", - "generated": true, - "status": "inprogress" - }, - { - "language": "de", - "label": "Deutsch", - "generated": false, - "status": "ready" - } - ], - "success": true, - "errors": [], - "messages": [] + "result": [ + { + "language": "en", + "label": "English (auto-generated)", + "generated": true, + "status": "inprogress" + }, + { + "language": "de", + "label": "Deutsch", + "generated": false, + "status": "ready" + } + ], + "success": true, + "errors": [], + "messages": [] } ``` @@ -371,7 +370,7 @@ https://api.cloudflare.com/client/v4/accounts//stream//ca ### Example response to get the caption file for a video -``` text +```text WEBVTT 1 @@ -458,25 +457,25 @@ deleted. ```json { - "result": "", - "success": true, - "errors": [], - "messages": [] + "result": "", + "success": true, + "errors": [], + "messages": [] } ``` ## Limitations -* A video must be uploaded before a caption can be attached to it. In the following +- A video must be uploaded before a caption can be attached to it. In the following example URLs, the video's ID is referenced as `media_id`. -* Stream only supports [WebVTT](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API) +- Stream only supports [WebVTT](https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API) formatted caption files. If you have a differently formatted caption file, use [a tool to convert your file to WebVTT](https://subtitletools.com/convert-to-vtt-online) prior to uploading it. -* Videos may include several language captions, but each language must be unique. +- Videos may include several language captions, but each language must be unique. For example, a video may have English, French, and German captions associated with it, but it cannot have two French captions. -* Each caption file is limited to 10 MB in size. [Contact support](/support/contacting-cloudflare-support/) +- Each caption file is limited to 10 MB in size. [Contact support](/support/contacting-cloudflare-support/) if you need to upload a larger file. ## Most common language codes @@ -505,4 +504,4 @@ deleted. | pl | Polish | | uk | Ukrainian | | my | Burmese | -| th | Thai | \ No newline at end of file +| th | Thai | diff --git a/src/content/docs/stream/edit-videos/player-enhancements.mdx b/src/content/docs/stream/edit-videos/player-enhancements.mdx index c439bce5564db4f..17a4d16c0a03c04 100644 --- a/src/content/docs/stream/edit-videos/player-enhancements.mdx +++ b/src/content/docs/stream/edit-videos/player-enhancements.mdx @@ -4,8 +4,8 @@ title: Add player enhancements description: Customize the Cloudflare Stream player with branding, logos, and share links. products: - stream - --- + import { DashButton } from "~/components"; With player enhancements, you can modify your video player to incorporate elements of your branding such as your logo, and customize additional options to present to your viewers. @@ -14,10 +14,10 @@ The player enhancements are automatically applied to videos using the Stream Pla ## Properties -* `title`: The title that appears when viewers hover over the video. The title may differ from the file name of the video. -* `share_link`: Provides the user with a click-to-copy option to easily share the video URL. This is commonly set to the URL of the page that the video is embedded on. -* `channel_link`: The URL users will be directed to when selecting the logo from the video player. -* `logo`: A valid HTTPS URL for the image of your logo. +- `title`: The title that appears when viewers hover over the video. The title may differ from the file name of the video. +- `share_link`: Provides the user with a click-to-copy option to easily share the video URL. This is commonly set to the URL of the page that the video is embedded on. +- `channel_link`: The URL users will be directed to when selecting the logo from the video player. +- `logo`: A valid HTTPS URL for the image of your logo. ## Customize your own player @@ -61,6 +61,6 @@ You can also pull the JSON by using the endpoint below. 2. Select a video from the list to edit it. -4. Select the **Public Details** tab. -5. From **Public Details**, enter information in the text fields for the properties you want to set. -6. When you are done, select **Save**. +3. Select the **Public Details** tab. +4. From **Public Details**, enter information in the text fields for the properties you want to set. +5. When you are done, select **Save**. diff --git a/src/content/docs/stream/examples/dash-js.mdx b/src/content/docs/stream/examples/dash-js.mdx index 08404220937a1dd..734287e03dbb82d 100644 --- a/src/content/docs/stream/examples/dash-js.mdx +++ b/src/content/docs/stream/examples/dash-js.mdx @@ -1,5 +1,4 @@ --- - summary: Example of video playback with Cloudflare Stream and the DASH reference player (dash.js) tags: diff --git a/src/content/docs/stream/examples/hls-js.mdx b/src/content/docs/stream/examples/hls-js.mdx index aeb76104307a2ce..db446e6987ec0c9 100644 --- a/src/content/docs/stream/examples/hls-js.mdx +++ b/src/content/docs/stream/examples/hls-js.mdx @@ -1,5 +1,4 @@ --- - summary: Example of video playback with Cloudflare Stream and the HLS reference player (hls.js) tags: @@ -25,12 +24,12 @@ products: diff --git a/src/content/docs/stream/examples/vidstack.mdx b/src/content/docs/stream/examples/vidstack.mdx index 50ee3a7e270f9f3..fee573dfe355731 100644 --- a/src/content/docs/stream/examples/vidstack.mdx +++ b/src/content/docs/stream/examples/vidstack.mdx @@ -1,5 +1,4 @@ --- - summary: Example of video playback with Cloudflare Stream and Vidstack tags: - Playback @@ -19,13 +18,13 @@ products: There's a few options to choose from when getting started with Vidstack, follow any of the links below to get setup. You can replace the player `src` with `https://customer-f33zs165nr7gyfy4.cloudflarestream.com/6b9e68b07dfee8cc2d116e4c51d6a957/manifest/video.m3u8` to test Cloudflare Stream. -* [Angular](https://www.vidstack.io/docs/player/getting-started/installation/angular?provider=video) -* [React](https://www.vidstack.io/docs/player/getting-started/installation/react?provider=video) -* [Svelte](https://www.vidstack.io/docs/player/getting-started/installation/svelte?provider=video) -* [Vue](https://www.vidstack.io/docs/player/getting-started/installation/vue?provider=video) -* [Solid](https://www.vidstack.io/docs/player/getting-started/installation/solid?provider=video) -* [Web Components](https://www.vidstack.io/docs/player/getting-started/installation/web-components?provider=video) -* [CDN](https://www.vidstack.io/docs/player/getting-started/installation/cdn?provider=video) +- [Angular](https://www.vidstack.io/docs/player/getting-started/installation/angular?provider=video) +- [React](https://www.vidstack.io/docs/player/getting-started/installation/react?provider=video) +- [Svelte](https://www.vidstack.io/docs/player/getting-started/installation/svelte?provider=video) +- [Vue](https://www.vidstack.io/docs/player/getting-started/installation/vue?provider=video) +- [Solid](https://www.vidstack.io/docs/player/getting-started/installation/solid?provider=video) +- [Web Components](https://www.vidstack.io/docs/player/getting-started/installation/web-components?provider=video) +- [CDN](https://www.vidstack.io/docs/player/getting-started/installation/cdn?provider=video) ## Examples diff --git a/src/content/docs/stream/getting-analytics/fetching-bulk-analytics.mdx b/src/content/docs/stream/getting-analytics/fetching-bulk-analytics.mdx index 67fd72638c29427..84765138fc82658 100644 --- a/src/content/docs/stream/getting-analytics/fetching-bulk-analytics.mdx +++ b/src/content/docs/stream/getting-analytics/fetching-bulk-analytics.mdx @@ -7,6 +7,7 @@ sidebar: products: - stream --- + import { DashButton } from "~/components"; Stream provides analytics about both live video and video uploaded to Stream, via the GraphQL API described below, as well as on the Stream **Analytics** page of the Cloudflare dashboard. diff --git a/src/content/docs/stream/getting-analytics/index.mdx b/src/content/docs/stream/getting-analytics/index.mdx index 0b87d38fd44efbc..ddc5d2b46f2d12e 100644 --- a/src/content/docs/stream/getting-analytics/index.mdx +++ b/src/content/docs/stream/getting-analytics/index.mdx @@ -6,20 +6,21 @@ sidebar: order: 8 products: - stream - --- + import { DashButton } from "~/components"; Stream provides server-side analytics that can be used to: -* Identify most viewed video content in your app or platform. -* Identify where content is viewed from and when it is viewed. -* Understand which creators on your platform are publishing the most viewed content, and analyze trends. +- Identify most viewed video content in your app or platform. +- Identify where content is viewed from and when it is viewed. +- Understand which creators on your platform are publishing the most viewed content, and analyze trends. You can access data on either: + - The Stream **Analytics** page of the Cloudflare dashboard. - + - The [GraphQL Analytics API](/stream/getting-analytics/fetching-bulk-analytics). diff --git a/src/content/docs/stream/getting-analytics/live-viewer-count.mdx b/src/content/docs/stream/getting-analytics/live-viewer-count.mdx index b4650f2f9bc28c2..2f19eae42ea7fc3 100644 --- a/src/content/docs/stream/getting-analytics/live-viewer-count.mdx +++ b/src/content/docs/stream/getting-analytics/live-viewer-count.mdx @@ -6,7 +6,6 @@ sidebar: order: 2 products: - stream - --- The Stream player has full support for live viewer counts by default. To get the viewer count for live videos for use with third party players, make a `GET` request to the `/views` endpoint. diff --git a/src/content/docs/stream/manage-video-library/index.mdx b/src/content/docs/stream/manage-video-library/index.mdx index f1c87b325b33406..b4ece17f01bbf40 100644 --- a/src/content/docs/stream/manage-video-library/index.mdx +++ b/src/content/docs/stream/manage-video-library/index.mdx @@ -9,4 +9,3 @@ sidebar: products: - stream --- - diff --git a/src/content/docs/stream/manage-video-library/searching.mdx b/src/content/docs/stream/manage-video-library/searching.mdx index 385d98f5df957d0..78979f3e8fe99a6 100644 --- a/src/content/docs/stream/manage-video-library/searching.mdx +++ b/src/content/docs/stream/manage-video-library/searching.mdx @@ -4,7 +4,6 @@ title: Search for videos description: Search your Cloudflare Stream video library by name using the Stream API. products: - stream - --- You can search for videos by name through the Stream API by adding a `search` query parameter to the [list media files](/api/resources/stream/methods/list/) endpoint. diff --git a/src/content/docs/stream/stream-api.mdx b/src/content/docs/stream/stream-api.mdx index 14a6a735991b555..3cb2866bfef54bb 100644 --- a/src/content/docs/stream/stream-api.mdx +++ b/src/content/docs/stream/stream-api.mdx @@ -7,5 +7,4 @@ sidebar: order: 11 products: - stream - --- diff --git a/src/content/docs/stream/stream-live/custom-domains.mdx b/src/content/docs/stream/stream-live/custom-domains.mdx index cbea1246aae4f56..9d386faca81de66 100644 --- a/src/content/docs/stream/stream-live/custom-domains.mdx +++ b/src/content/docs/stream/stream-live/custom-domains.mdx @@ -9,8 +9,8 @@ sidebar: order: 3 products: - stream - --- + import { DashButton } from "~/components"; With custom ingest domains, you can configure your RTMPS feeds to use an ingest URL that you specify instead of using `live.cloudflare.com.` @@ -21,7 +21,6 @@ Custom Ingest Domains cannot be configured for domains with [zone holds](/fundam ::: - 1. In the Cloudflare dashboard, go to the **Live inputs** page. diff --git a/src/content/docs/stream/stream-live/download-stream-live-videos.mdx b/src/content/docs/stream/stream-live/download-stream-live-videos.mdx index de3dd780bfe12a4..6cc5f62c4cb10f5 100644 --- a/src/content/docs/stream/stream-live/download-stream-live-videos.mdx +++ b/src/content/docs/stream/stream-live/download-stream-live-videos.mdx @@ -9,18 +9,16 @@ sidebar: order: 4 products: - stream - --- + import { DashButton } from "~/components"; You can enable downloads for live stream videos from the Cloudflare dashboard. Videos are available for download after they enter the **Ready** state. :::note - Downloadable MP4s are only available for live recordings under four hours. Live recordings exceeding four hours can be played at a later time but cannot be downloaded as an MP4. - ::: 1. In the Cloudflare dashboard, go to the **Live inputs** page. diff --git a/src/content/docs/stream/stream-live/dvr-for-live.mdx b/src/content/docs/stream/stream-live/dvr-for-live.mdx index 47ae2985c0d2fce..3bcb1c067f39da8 100644 --- a/src/content/docs/stream/stream-live/dvr-for-live.mdx +++ b/src/content/docs/stream/stream-live/dvr-for-live.mdx @@ -13,14 +13,14 @@ manifest URL. ## Stream Player -``` html title="Stream Player embed format" +```html title="Stream Player embed format"
    - +
    ``` @@ -37,7 +37,7 @@ When DVR mode is enabled the Stream Player will: ## HLS manifest for custom players -``` text title="HLS manifest URL format" +```text title="HLS manifest URL format" https://customer-.cloudflarestream.com//manifest/video.m3u8?dvrEnabled=true ``` diff --git a/src/content/docs/stream/stream-live/index.mdx b/src/content/docs/stream/stream-live/index.mdx index 3234ba97f8bbef7..7baf513e8a40a50 100644 --- a/src/content/docs/stream/stream-live/index.mdx +++ b/src/content/docs/stream/stream-live/index.mdx @@ -9,7 +9,6 @@ sidebar: order: 4 products: - stream - --- Cloudflare Stream lets you or your users [stream live video](https://www.cloudflare.com/learning/video/what-is-live-streaming/), and play live video in your website or app, without managing and configuring any of your own infrastructure. @@ -37,7 +36,7 @@ With ABR, client video players need to be provided with estimates of how much ba ### How it works -If a live stream contains content with low visual complexity, like a slideshow presentation, the bandwidth estimates provided in the HLS and DASH manifests will be lower —  a stream like this has a low bitrate and requires relatively little bandwidth, even at high resolution. This ensures that as many viewers as possible view the highest quality level. +If a live stream contains content with low visual complexity, like a slideshow presentation, the bandwidth estimates provided in the HLS and DASH manifests will be lower —  a stream like this has a low bitrate and requires relatively little bandwidth, even at high resolution. This ensures that as many viewers as possible view the highest quality level. Conversely, if a live stream contains content with high visual complexity, like live sports with motion and camera panning, the bandwidth estimates provided in the manifest will be higher — a stream like this has a high bitrate and requires more bandwidth. This ensures that viewers with inadequate bandwidth switch down to a lower quality level, and their playback does not buffer. @@ -59,7 +58,7 @@ After the live stream ends, you can [replay live stream recordings](/stream/stre Stream Live is billed identically to the rest of Cloudflare Stream. -* You pay $5 per 1000 minutes of recorded video. -* You pay $1 per 1000 minutes of delivered video. +- You pay $5 per 1000 minutes of recorded video. +- You pay $1 per 1000 minutes of delivered video. All Stream Live videos are automatically recorded. There is no additional cost for encoding and packaging live videos. diff --git a/src/content/docs/stream/stream-live/live-instant-clipping.mdx b/src/content/docs/stream/stream-live/live-instant-clipping.mdx index 900ea4ee817bc3f..7c329e9302fd291 100644 --- a/src/content/docs/stream/stream-live/live-instant-clipping.mdx +++ b/src/content/docs/stream/stream-live/live-instant-clipping.mdx @@ -10,10 +10,8 @@ Stream supports generating clips of live streams and recordings so creators and :::note[Note:] - Clipping works differently for uploaded / on-demand videos. For more information, refer to [Clip videos](/stream/edit-videos/video-clipping/). - ::: ## Prerequisites @@ -32,18 +30,12 @@ To help users replay and seek recent content, request a preview manifest by addi https://customer-.cloudflarestream.com//manifest/video.m3u8?duration=5m ``` - - -* `duration` string duration of the preview, up to 5 minutes as either a number of seconds ("30s") or minutes ("3m") - +- `duration` string duration of the preview, up to 5 minutes as either a number of seconds ("30s") or minutes ("3m") When the preview manifest is delivered, inspect the headers for two properties: - - -* `preview-start-seconds` float seconds into the start of the live stream or recording that the preview manifest starts. Useful in applications that allow a user to select a range from the preview because the clip will need to reference its offset from the *broadcast* start time, not the *preview* start time. -* `stream-media-id` string the video ID of the live stream or recording. Useful in applications that render the player using an *input* ID because the clip URL should reference the *video* ID. - +- `preview-start-seconds` float seconds into the start of the live stream or recording that the preview manifest starts. Useful in applications that allow a user to select a range from the preview because the clip will need to reference its offset from the _broadcast_ start time, not the _preview_ start time. +- `stream-media-id` string the video ID of the live stream or recording. Useful in applications that render the player using an _input_ ID because the clip URL should reference the _video_ ID. This manifest can be played and seeked using any HLS-compatible player. @@ -59,38 +51,44 @@ let currentPreviewVideoID; // Override the pLoader (playlist loader) to read the manifest headers: class pLoader extends Hls.DefaultConfig.loader { - constructor(config) { - super(config); - var load = this.load.bind(this); - this.load = function (context, config, callbacks) { - if (context.type == 'manifest') { - var onSuccess = callbacks.onSuccess; - // copy the existing onSuccess handler to fire it later. - - callbacks.onSuccess = function (response, stats, context, networkDetails) { - // The fourth argument here is undocumented in HLS.js but contains - // the response object for the manifest fetch, which gives us headers: - - currentPreviewStart = - parseFloat(networkDetails.getResponseHeader('preview-start-seconds')); - // Save the start time of the preview manifest - - currentPreviewVideoID = - networkDetails.getResponseHeader('stream-media-id'); - // Save the video ID in case the preview was loaded with an input ID - - onSuccess(response, stats, context); - // And fire the existing success handler. - }; - } - load(context, config, callbacks); - }; - } + constructor(config) { + super(config); + var load = this.load.bind(this); + this.load = function (context, config, callbacks) { + if (context.type == "manifest") { + var onSuccess = callbacks.onSuccess; + // copy the existing onSuccess handler to fire it later. + + callbacks.onSuccess = function ( + response, + stats, + context, + networkDetails, + ) { + // The fourth argument here is undocumented in HLS.js but contains + // the response object for the manifest fetch, which gives us headers: + + currentPreviewStart = parseFloat( + networkDetails.getResponseHeader("preview-start-seconds"), + ); + // Save the start time of the preview manifest + + currentPreviewVideoID = + networkDetails.getResponseHeader("stream-media-id"); + // Save the video ID in case the preview was loaded with an input ID + + onSuccess(response, stats, context); + // And fire the existing success handler. + }; + } + load(context, config, callbacks); + }; + } } // Specify the new loader class when setting up HLS const hls = new Hls({ - pLoader: pLoader, + pLoader: pLoader, }); ``` @@ -102,11 +100,8 @@ To play a clip of a live stream or recording, request a clip manifest with a dur https://customer-.cloudflarestream.com//manifest/clip.m3u8?time=600s&duration=30s ``` - - -* `time` string start time of the clip in seconds, from the start of the live stream or recording -* `duration` string duration of the clip in seconds, up to 60 seconds max - +- `time` string start time of the clip in seconds, from the start of the live stream or recording +- `duration` string duration of the clip in seconds, up to 60 seconds max This manifest can be played and seeked using any HLS-compatible player. @@ -118,8 +113,6 @@ An MP4 of the clip can also be generated dynamically to be saved and shared on o https://customer-.cloudflarestream.com//clip.mp4?time=600s&duration=30s&filename=clip.mp4 ``` - - -* `time` string start time of the clip in seconds, from the start of the live stream or recording (example: "500s") -* `duration` string duration of the clip in seconds, up to 60 seconds max (example: "60s") -* `filename` string *(optional)* a filename for the clip +- `time` string start time of the clip in seconds, from the start of the live stream or recording (example: "500s") +- `duration` string duration of the clip in seconds, up to 60 seconds max (example: "60s") +- `filename` string _(optional)_ a filename for the clip diff --git a/src/content/docs/stream/stream-live/simulcasting.mdx b/src/content/docs/stream/stream-live/simulcasting.mdx index e5f03f9003c3432..0f88a8a94fd31ff 100644 --- a/src/content/docs/stream/stream-live/simulcasting.mdx +++ b/src/content/docs/stream/stream-live/simulcasting.mdx @@ -9,8 +9,8 @@ sidebar: order: 5 products: - stream - --- + import { DashButton } from "~/components"; Simulcasting lets you forward your live stream to third-party platforms such as Twitch, YouTube, Facebook, Twitter, and more. You can simulcast to up to 50 concurrent destinations from each live input. To begin simulcasting, select an input and add one or more Outputs. @@ -28,30 +28,32 @@ https://api.cloudflare.com/client/v4/accounts//stream/live_inputs/" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "uid": "6f8339ed45fe87daa8e7f0fe4e4ef776", + "url": "rtmp://a.rtmp.youtube.com/live2", + "streamKey": "" + }, + "success": true, + "errors": [], + "messages": [] } ``` ## Control when you start and stop simulcasting You can enable and disable individual live outputs with either: + - The **Live inputs** page of the Cloudflare dashboard. - + + - [The API](/api/resources/stream/subresources/live_inputs/subresources/outputs/methods/update/) This allows you to: -* Start a live stream, but wait to start simulcasting to YouTube and Twitch until right before the content begins. -* Stop simulcasting before the live stream ends, to encourage viewers to transition from a third-party service like YouTube or Twitch to a direct live stream. -* Give your own users manual control over when they go live to specific simulcasting destinations. +- Start a live stream, but wait to start simulcasting to YouTube and Twitch until right before the content begins. +- Stop simulcasting before the live stream ends, to encourage viewers to transition from a third-party service like YouTube or Twitch to a direct live stream. +- Give your own users manual control over when they go live to specific simulcasting destinations. When a live output is disabled, video is not simulcast to the live output, even when actively streaming to the corresponding live input. @@ -68,11 +70,11 @@ By default, all live outputs are enabled. ## Manage outputs -| Command | Method | Endpoint | -| ------------------------------------------------------------------------ | -------- | ------------------------------------------------------------------------ | -| [List outputs](/api/resources/stream/subresources/live_inputs/methods/list/) | `GET` | `accounts/:account_identifier/stream/live_inputs` | -| [Delete outputs](/api/resources/stream/subresources/live_inputs/methods/delete/) | `DELETE` | `accounts/:account_identifier/stream/live_inputs/:live_input_identifier` | -| [List All Outputs Associated With A Specified Live Input](/api/resources/stream/subresources/live_inputs/subresources/outputs/methods/list/) | `GET` | `/accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs` | -| [Delete An Output](/api/resources/stream/subresources/live_inputs/subresources/outputs/methods/delete/) | `DELETE` | `/accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs/{output_identifier}` | +| Command | Method | Endpoint | +| -------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ----------------------------------------------------------------------------------------------- | +| [List outputs](/api/resources/stream/subresources/live_inputs/methods/list/) | `GET` | `accounts/:account_identifier/stream/live_inputs` | +| [Delete outputs](/api/resources/stream/subresources/live_inputs/methods/delete/) | `DELETE` | `accounts/:account_identifier/stream/live_inputs/:live_input_identifier` | +| [List All Outputs Associated With A Specified Live Input](/api/resources/stream/subresources/live_inputs/subresources/outputs/methods/list/) | `GET` | `/accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs` | +| [Delete An Output](/api/resources/stream/subresources/live_inputs/subresources/outputs/methods/delete/) | `DELETE` | `/accounts/{account_id}/stream/live_inputs/{live_input_identifier}/outputs/{output_identifier}` | If the associated live input is already retransmitting to this output when you make the `DELETE` request, that output will be disconnected within 30 seconds. diff --git a/src/content/docs/stream/stream-live/start-stream-live.mdx b/src/content/docs/stream/stream-live/start-stream-live.mdx index 0f114459ebb8755..7c32e2b8b669da8 100644 --- a/src/content/docs/stream/stream-live/start-stream-live.mdx +++ b/src/content/docs/stream/stream-live/start-stream-live.mdx @@ -22,6 +22,7 @@ After you subscribe to Stream, you can create Live Inputs in Dash or via the API ## Use the dashboard **Step 1:** In the Cloudflare dashboard, go to the **Live inputs** page and create a live input. + ![Create live input field from dashboard](~/assets/images/stream/create-live-input-from-stream-dashboard.png) diff --git a/src/content/docs/stream/stream-live/troubleshooting.mdx b/src/content/docs/stream/stream-live/troubleshooting.mdx index d82985f4c5dfeff..48973fe852b3b32 100644 --- a/src/content/docs/stream/stream-live/troubleshooting.mdx +++ b/src/content/docs/stream/stream-live/troubleshooting.mdx @@ -7,7 +7,8 @@ sidebar: products: - stream --- -import {Details, DashButton } from "~/components" + +import { Details, DashButton } from "~/components"; In addition to following the live stream troubleshooting steps in this guide, make sure that your video settings align with [Cloudflare live stream recommendations](/stream/stream-live/start-stream-live/#recommendations-requirements-and-limitations). If you use OBS, you can also check these [OBS-specific recommendations](/stream/examples/obs-from-scratch/#6-optional-optimize-settings). @@ -23,29 +24,37 @@ If your live stream is buffering, freezing, experiencing latency issues, or havi 3. Look at your **Keyframe Interval** chart. - It should be a consistent flat line that stays between 2s and 8s. If you see an inconsistent or wavy line, or a line that is consistently below 2s or above 8s, adjust the keyframe interval (also called GOP size) in your software or service used to send the stream to Cloudflare. The exact steps for editing those settings will depend on your platform. - * Start by setting the keyframe interval to 4s. If playback is stable but latency is still too high, lower it to 2s. If you are experiencing buffering or freezing in playback, increase it to 8s. - - * If the keyframe interval is "variable" or "automatic", change it to a specific number instead, like 4s. + It should be a consistent flat line that stays between 2s and 8s. If you see an inconsistent or wavy line, or a line that is consistently below 2s or above 8s, adjust the keyframe interval (also called GOP size) in your software or service used to send the stream to Cloudflare. The exact steps for editing those settings will depend on your platform. \* Start by setting the keyframe interval to 4s. If playback is stable but latency is still too high, lower it to 2s. If you are experiencing buffering or freezing in playback, increase it to 8s. + - If the keyframe interval is "variable" or "automatic", change it to a specific number instead, like 4s. -
    - The keyframe interval (also called GOP size) is a measurement of how often keyframes are sent to Stream. A shorter keyframe interval requires more Internet bandwidth on the broadcast side, but can reduce glass-to-glass latency. A longer keyframe requires less Internet bandwidth and can reduce buffering and freezing, but can increase glass-to-glass latency. -
    +
    + The keyframe interval (also called GOP size) is a measurement of how often + keyframes are sent to Stream. A shorter keyframe interval requires more + Internet bandwidth on the broadcast side, but can reduce glass-to-glass + latency. A longer keyframe requires less Internet bandwidth and can reduce + buffering and freezing, but can increase glass-to-glass latency. +
    -3. Look at your **Upload-to-Duration Ratio** chart. +4. Look at your **Upload-to-Duration Ratio** chart. - It should be a consistent flat line below 90%. If you see an inconsistent or wavy line, or a line that is consistently above 100%, try the following troubleshooting steps: - * [Check that your Internet upload speed](https://speed.cloudflare.com/) is at least 20 Mbps. If it is below 20 Mbps, use common troubleshooting steps such as restarting your router, using an Ethernet connection instead of Wi-Fi, or contacting your Internet service provider. + It should be a consistent flat line below 90%. If you see an inconsistent or wavy line, or a line that is consistently above 100%, try the following troubleshooting steps: + - [Check that your Internet upload speed](https://speed.cloudflare.com/) is at least 20 Mbps. If it is below 20 Mbps, use common troubleshooting steps such as restarting your router, using an Ethernet connection instead of Wi-Fi, or contacting your Internet service provider. - * Check the video bitrate setting in the software or service you use to send the stream to Cloudflare. - * If it is "variable", change it to "constant" with a specific number, like 8 Mbps. - * If it is above 15 Mbps, lower it to 8 Mbps or 70% of your Internet speed, whichever is lower. + - Check the video bitrate setting in the software or service you use to send the stream to Cloudflare. + - If it is "variable", change it to "constant" with a specific number, like 8 Mbps. + - If it is above 15 Mbps, lower it to 8 Mbps or 70% of your Internet speed, whichever is lower. - * Follow the steps above (the keyframe interval steps) to _increase_ the keyframe interval in the software or service you use to send the stream to Cloudflare. + - Follow the steps above (the keyframe interval steps) to _increase_ the keyframe interval in the software or service you use to send the stream to Cloudflare. -
    - The upload-to-duration ratio is a measurement of how long it takes to upload a part of the stream compared to how long that part would take to play. A ratio of less than 100% means that the stream is uploading at least as fast as it would take to play, so most users should not experience buffering or freezing. A ratio of 100% or more means that your video is uploading slower than it would take to play, so it is likely that most users will experience buffering and freezing. -
    +
    + The upload-to-duration ratio is a measurement of how long it takes to + upload a part of the stream compared to how long that part would take to + play. A ratio of less than 100% means that the stream is uploading at least + as fast as it would take to play, so most users should not experience + buffering or freezing. A ratio of 100% or more means that your video is + uploading slower than it would take to play, so it is likely that most + users will experience buffering and freezing. +
    ## Encoder failing to connect or keeps disconnecting @@ -55,22 +64,22 @@ If your encoder shows a connection error such as "Failed to connect to server" o - Verify that the live input is enabled. A live input that is _disabled_ will reject all incoming connections. You can enable or disable a live input from the **Live inputs** page in the Dashboard or via the API using the `enabled` property. - + - ```bash - curl -X GET \ - --header "Authorization: Bearer " \ - https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/live_inputs/{input_id} - ``` + ```bash + curl -X GET \ + --header "Authorization: Bearer " \ + https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/live_inputs/{input_id} + ``` - If `enabled` is `false` in the response, update the live input to enable it: + If `enabled` is `false` in the response, update the live input to enable it: - ```bash - curl --request PUT \ - https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/live_inputs/{input_id} \ - --header "Authorization: Bearer " \ - --data '{"enabled": true}' - ``` + ```bash + curl --request PUT \ + https://api.cloudflare.com/client/v4/accounts/{account_id}/stream/live_inputs/{input_id} \ + --header "Authorization: Bearer " \ + --data '{"enabled": true}' + ``` - If you use [Live Webhooks](/stream/stream-live/webhooks/), check for a `live_input.errored` event. The webhook payload includes an [error code](/stream/stream-live/webhooks/#error-codes) that can help you troubleshoot the specific cause. @@ -84,4 +93,4 @@ If your encoder is connected and the dashboard shows a green **Connected** statu - Verify that your encoder is sending [AAC audio](/stream/stream-live/start-stream-live/#recommendations-requirements-and-limitations). If it is not, set your encoder's settings to AAC explicitly. -- Verify that your encoder is sending keyframes at a fixed interval between two and eight seconds. If the keyframe interval is set to *variable* or *automatic*, change it to a specific value such as four seconds. For more details, refer to the keyframe information in the [Buffering, freezing, and latency](#buffering-freezing-and-latency) section above. \ No newline at end of file +- Verify that your encoder is sending keyframes at a fixed interval between two and eight seconds. If the keyframe interval is set to _variable_ or _automatic_, change it to a specific value such as four seconds. For more details, refer to the keyframe information in the [Buffering, freezing, and latency](#buffering-freezing-and-latency) section above. diff --git a/src/content/docs/stream/stream-live/webhooks.mdx b/src/content/docs/stream/stream-live/webhooks.mdx index b80693318e6d6cb..2f298bf7ca81d9d 100644 --- a/src/content/docs/stream/stream-live/webhooks.mdx +++ b/src/content/docs/stream/stream-live/webhooks.mdx @@ -8,7 +8,7 @@ products: - stream --- -import { AvailableNotifications,DashButton } from "~/components" +import { AvailableNotifications, DashButton } from "~/components"; Stream Live offers webhooks to notify your service when an Input connects, disconnects, or encounters an error with Stream Live. @@ -40,15 +40,15 @@ Webhooks works differently for uploaded / on-demand videos. For more information ```json title="Example webhook payload" { - "name": "Live Webhook Test", - "text": "Notification type: Stream Live Input\nInput ID: eb222fcca08eeb1ae84c981ebe8aeeb6\nEvent type: live_input.disconnected\nUpdated at: 2022-01-13T11:43:41.855717910Z", - "data": { - "notification_name": "Stream Live Input", - "input_id": "eb222fcca08eeb1ae84c981ebe8aeeb6", - "event_type": "live_input.disconnected", - "updated_at": "2022-01-13T11:43:41.855717910Z" - }, - "ts": 1642074233 + "name": "Live Webhook Test", + "text": "Notification type: Stream Live Input\nInput ID: eb222fcca08eeb1ae84c981ebe8aeeb6\nEvent type: live_input.disconnected\nUpdated at: 2022-01-13T11:43:41.855717910Z", + "data": { + "notification_name": "Stream Live Input", + "input_id": "eb222fcca08eeb1ae84c981ebe8aeeb6", + "event_type": "live_input.disconnected", + "updated_at": "2022-01-13T11:43:41.855717910Z" + }, + "ts": 1642074233 } ``` @@ -58,30 +58,30 @@ If there are issues detected with the input, the `event_type` will be `live_inpu ## Error codes -* `ERR_GOP_OUT_OF_RANGE` – The input GOP size or keyframe interval is out of range. -* `ERR_UNSUPPORTED_VIDEO_CODEC` – The input video codec is unsupported for the protocol used. -* `ERR_UNSUPPORTED_AUDIO_CODEC` – The input audio codec is unsupported for the protocol used. -* `ERR_STORAGE_QUOTA_EXHAUSTED` – The account storage quota has been exceeded. Delete older content or purchase additional storage. -* `ERR_MISSING_SUBSCRIPTION` – Unauthorized to start a live stream. Check subscription or log into Dash for details. +- `ERR_GOP_OUT_OF_RANGE` – The input GOP size or keyframe interval is out of range. +- `ERR_UNSUPPORTED_VIDEO_CODEC` – The input video codec is unsupported for the protocol used. +- `ERR_UNSUPPORTED_AUDIO_CODEC` – The input audio codec is unsupported for the protocol used. +- `ERR_STORAGE_QUOTA_EXHAUSTED` – The account storage quota has been exceeded. Delete older content or purchase additional storage. +- `ERR_MISSING_SUBSCRIPTION` – Unauthorized to start a live stream. Check subscription or log into Dash for details. ```json title="Example live_input.errored webhook payload" { - "name": "Live Webhook Test", - "text": "Notification type: Stream Live Input\nInput ID: 2c28dd2cc444cb77578c4840b51e43a8\nEvent type: live_input.errored\nUpdated at: 2024-07-09T18:07:51.077371662Z\nError Code: ERR_GOP_OUT_OF_RANGE\nError Message: Input GOP size or keyframe interval is out of range.\nVideo Codec: \nAudio Codec: ", - "data": { - "notification_name": "Stream Live Input", - "input_id": "eb222fcca08eeb1ae84c981ebe8aeeb6", - "event_type": "live_input.errored", - "updated_at": "2024-07-09T18:07:51.077371662Z", - "live_input_errored": { - "error": { - "code": "ERR_GOP_OUT_OF_RANGE", - "message": "Input GOP size or keyframe interval is out of range." - }, - "video_codec": "", - "audio_codec": "" - } - }, - "ts": 1720548474, + "name": "Live Webhook Test", + "text": "Notification type: Stream Live Input\nInput ID: 2c28dd2cc444cb77578c4840b51e43a8\nEvent type: live_input.errored\nUpdated at: 2024-07-09T18:07:51.077371662Z\nError Code: ERR_GOP_OUT_OF_RANGE\nError Message: Input GOP size or keyframe interval is out of range.\nVideo Codec: \nAudio Codec: ", + "data": { + "notification_name": "Stream Live Input", + "input_id": "eb222fcca08eeb1ae84c981ebe8aeeb6", + "event_type": "live_input.errored", + "updated_at": "2024-07-09T18:07:51.077371662Z", + "live_input_errored": { + "error": { + "code": "ERR_GOP_OUT_OF_RANGE", + "message": "Input GOP size or keyframe interval is out of range." + }, + "video_codec": "", + "audio_codec": "" + } + }, + "ts": 1720548474 } ``` diff --git a/src/content/docs/stream/transform-videos/bindings.mdx b/src/content/docs/stream/transform-videos/bindings.mdx index 5e17fac1f2f59de..8d5cd162e0df120 100644 --- a/src/content/docs/stream/transform-videos/bindings.mdx +++ b/src/content/docs/stream/transform-videos/bindings.mdx @@ -13,7 +13,6 @@ products: import { WranglerConfig, InlineBadge } from "~/components"; - A [binding](/workers/runtime-apis/bindings/) connects your [Worker](/workers/) to external resources on the Developer Platform, like [Media Transformations](/stream/transform-videos/), [R2 buckets](/r2/buckets/), or [KV namespaces](/kv/concepts/kv-namespaces/). You can bind the Media Transformations API to your Worker to transform, resize, and extract content from videos without requiring them to be accessible through a URL. @@ -155,8 +154,8 @@ export default { const frame = await env.MEDIA.input(video.body) .transform({ width: 720 }) .output({ - mode: 'frame', - time: '3s', + mode: "frame", + time: "3s", }) .response(); @@ -166,13 +165,10 @@ export default { prompt: "Generate a caption for this image", max_tokens: 512, }; - const response = await env.AI.run( - "@cf/unum/uform-gen2-qwen-500m", - payload - ); + const response = await env.AI.run("@cf/unum/uform-gen2-qwen-500m", payload); return new Response(JSON.stringify(response)); - } -} + }, +}; ``` ### Extract audio @@ -214,28 +210,22 @@ export default { const audio = await env.MEDIA.input(video.body) .transform() .output({ - mode: 'audio', - }) + mode: "audio", + }) .response(); // Prepare and run Workers AI inference const payload = { audio: [...new Uint8Array(await audio.arrayBuffer())], }; - const response = await env.AI.run( - "@cf/openai/whisper", - payload - ); + const response = await env.AI.run("@cf/openai/whisper", payload); // response will have props {text, word_count, vtt, words} - return new Response( - JSON.stringify(response, null, 2), - { - headers: {'Content-Type': 'application/json'} - } - ); - } -} + return new Response(JSON.stringify(response, null, 2), { + headers: { "Content-Type": "application/json" }, + }); + }, +}; ``` ### Store transformed output in R2 diff --git a/src/content/docs/stream/transform-videos/index.mdx b/src/content/docs/stream/transform-videos/index.mdx index cd79ead8f896bd9..1d9dfe55c0bc0b1 100644 --- a/src/content/docs/stream/transform-videos/index.mdx +++ b/src/content/docs/stream/transform-videos/index.mdx @@ -7,17 +7,15 @@ sidebar: products: - stream --- + import { DashButton } from "~/components"; :::note[Media Transformations is now GA:] - Billing for Media Transformations began on November 1st, 2025. - ::: - You can optimize and manipulate videos stored _outside_ of Cloudflare Stream with Media Transformations. Transformed videos and images are served from one of your zones on Cloudflare. To transform a video or image, you must [enable transformations](/stream/transform-videos/#getting-started) for your zone. If your zone already has Image Transformations enabled, you can also optimize videos with Media Transformations. diff --git a/src/content/docs/stream/uploading-videos/index.mdx b/src/content/docs/stream/uploading-videos/index.mdx index 1e357b50c36f54c..8d01549e5d26ccf 100644 --- a/src/content/docs/stream/uploading-videos/index.mdx +++ b/src/content/docs/stream/uploading-videos/index.mdx @@ -12,17 +12,15 @@ Before you upload your video, review the options for uploading a video, supporte ## Upload options -| Upload method | When to use | -|---------------|-------------| -|[Stream Dashboard](https://dash.cloudflare.com/?to=/:account/stream)| Upload videos from the Stream Dashboard without writing any code. -|[Upload with a link](/stream/uploading-videos/upload-via-link/)| Upload videos using a link, such as an S3 bucket or content management system. -|[Upload video file](/stream/uploading-videos/upload-video-file/)| Upload videos stored on a computer. -|[Direct creator uploads](/stream/uploading-videos/direct-creator-uploads/)| Allows end users of your website or app to upload videos directly to Cloudflare Stream. - +| Upload method | When to use | +| -------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | +| [Stream Dashboard](https://dash.cloudflare.com/?to=/:account/stream) | Upload videos from the Stream Dashboard without writing any code. | +| [Upload with a link](/stream/uploading-videos/upload-via-link/) | Upload videos using a link, such as an S3 bucket or content management system. | +| [Upload video file](/stream/uploading-videos/upload-video-file/) | Upload videos stored on a computer. | +| [Direct creator uploads](/stream/uploading-videos/direct-creator-uploads/) | Allows end users of your website or app to upload videos directly to Cloudflare Stream. | ## Supported video formats - :::note Files must be less than 30 GB, and content should be encoded and uploaded in the same frame rate it was recorded. ::: diff --git a/src/content/docs/stream/uploading-videos/player-api.mdx b/src/content/docs/stream/uploading-videos/player-api.mdx index ba0c652f2710a62..afe17603c50c36e 100644 --- a/src/content/docs/stream/uploading-videos/player-api.mdx +++ b/src/content/docs/stream/uploading-videos/player-api.mdx @@ -22,103 +22,82 @@ Multiple attributes can be used together, added one after each other like this: ## Supported attributes -* `autoplay` boolean - - * Tells the browser to immediately start downloading the video and play it as soon as it can. Note that mobile browsers generally do not support this attribute, the user must tap the screen to begin video playback. Please consider mobile users or users with Internet usage limits as some users do not have unlimited Internet access before using this attribute. +- `autoplay` boolean + - Tells the browser to immediately start downloading the video and play it as soon as it can. Note that mobile browsers generally do not support this attribute, the user must tap the screen to begin video playback. Please consider mobile users or users with Internet usage limits as some users do not have unlimited Internet access before using this attribute. :::note To disable video autoplay, the `autoplay` attribute needs to be removed altogether as this attribute. Setting `autoplay="false"` will not work; the video will autoplay if the attribute is there in the `` tag. In addition, some browsers now prevent videos with audio from playing automatically. You may add the `mute` attribute to allow your videos to autoplay. For more information, see [new video policies for iOS](https://webkit.org/blog/6784/new-video-policies-for-ios/). - ::: - -* `controls` boolean - - * Shows the default video controls such as buttons for play/pause, volume controls. You may choose to build buttons and controls that work with the player. [See an example.](/stream/viewing-videos/using-own-player/) - -* `height` integer - - * The height of the video's display area, in CSS pixels. +::: -* `loop` boolean +- `controls` boolean + - Shows the default video controls such as buttons for play/pause, volume controls. You may choose to build buttons and controls that work with the player. [See an example.](/stream/viewing-videos/using-own-player/) - * A Boolean attribute; if included in the HTML tag, player will, automatically seek back to the start upon reaching the end of the video. +- `height` integer + - The height of the video's display area, in CSS pixels. -* `muted` boolean +- `loop` boolean + - A Boolean attribute; if included in the HTML tag, player will, automatically seek back to the start upon reaching the end of the video. - * A Boolean attribute which indicates the default setting of the audio contained in the video. If set, the audio will be initially silenced. +- `muted` boolean + - A Boolean attribute which indicates the default setting of the audio contained in the video. If set, the audio will be initially silenced. -* `preload` string | null - - * This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. You may choose to include this attribute as a boolean attribute without a value, or you may specify the value `preload="auto"` to preload the beginning of the video. Not including the attribute or using `preload="metadata"` will just load the metadata needed to start video playback when requested. +- `preload` string | null + - This enumerated attribute is intended to provide a hint to the browser about what the author thinks will lead to the best user experience. You may choose to include this attribute as a boolean attribute without a value, or you may specify the value `preload="auto"` to preload the beginning of the video. Not including the attribute or using `preload="metadata"` will just load the metadata needed to start video playback when requested. :::note The `