Files
wehub-resource-sync b3a7f98e5a
CI / E2E Cloudflare (4/8) (push) Failing after 0s
CI / E2E Cloudflare (8/8) (push) Failing after 1s
CI / Lint (push) Failing after 1s
Auto Extract / Extract (push) Failing after 4s
CI / Version Check (push) Failing after 9s
CI / Integration Tests (push) Failing after 1s
CI / E2E tests (1/8) (push) Failing after 1s
CI / E2E tests (2/8) (push) Failing after 2s
CI / E2E tests (3/8) (push) Failing after 2s
CI / Browser Tests (push) Failing after 1s
CI / E2E tests (5/8) (push) Failing after 1s
CI / E2E Cloudflare (2/8) (push) Failing after 2s
CI / Typecheck (push) Failing after 1s
CI / Changeset Validation (push) Failing after 2s
CI / E2E Cloudflare (5/8) (push) Failing after 1s
CI / E2E Cloudflare (6/8) (push) Failing after 1s
CI / E2E Cloudflare (7/8) (push) Failing after 1s
CodeQL / Analyze (javascript-typescript) (push) Failing after 1s
Format / Format (push) Failing after 0s
CodeQL / Analyze (actions) (push) Failing after 4s
CI / E2E tests (4/8) (push) Failing after 1s
CI / E2E tests (6/8) (push) Failing after 1s
CI / E2E tests (7/8) (push) Failing after 2s
CI / E2E tests (8/8) (push) Failing after 1s
CI / E2E Cloudflare (1/8) (push) Failing after 1s
CI / E2E Cloudflare (3/8) (push) Failing after 2s
Preview Releases / Publish Preview (push) Failing after 0s
zizmor / Run zizmor (push) Failing after 1s
Release / Release (push) Failing after 2s
CI / Smoke Tests (push) Failing after 5m36s
CI / Tests (push) Failing after 6m36s
Release / Sync Templates (push) Has been skipped
CI / E2E Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:23:53 +08:00

115 lines
2.8 KiB
JavaScript

// @ts-check
import cloudflare from "@astrojs/cloudflare";
import react from "@astrojs/react";
import {
d1,
r2,
access,
sandbox,
cloudflareCache,
cloudflareImages,
cloudflareStream,
} from "@emdash-cms/cloudflare";
import { formsPlugin } from "@emdash-cms/plugin-forms";
import webhookNotifier from "@emdash-cms/plugin-webhook-notifier";
import { defineConfig, fontProviders } from "astro/config";
import emdash from "emdash/astro";
export default defineConfig({
output: "server",
adapter: cloudflare({
imageService: "cloudflare",
}),
i18n: {
defaultLocale: "en",
locales: ["en", "fr", "es"],
fallback: {
fr: "en",
es: "en",
},
},
image: {
// Enable responsive images globally
layout: "constrained",
responsiveStyles: true,
},
integrations: [
react(),
emdash({
// D1 database - binding name must match wrangler.jsonc
// session: "auto" enables read replicas (nearest replica for anon,
// bookmark-based consistency for authenticated users)
database: d1({ binding: "DB", session: "auto" }),
// R2 storage for media
storage: r2({ binding: "MEDIA" }),
// Cloudflare Access authentication
// Reads CF_ACCESS_AUDIENCE from env (wrangler secret or .env)
auth: access({
teamDomain: "cloudflare-cto.cloudflareaccess.com",
autoProvision: true,
defaultRole: 30, // Author
// Map your IdP groups to roles (optional)
// roleMapping: {
// "Admins": 50,
// "Editors": 40,
// },
}),
// Media providers - Cloudflare Images and Stream
// Reads from env vars at runtime: CF_ACCOUNT_ID, CF_IMAGES_TOKEN, CF_STREAM_TOKEN
// Or customize with accountIdEnvVar/apiTokenEnvVar options
mediaProviders: [
cloudflareImages({
accountIdEnvVar: "CF_MEDIA_ACCOUNT_ID",
apiTokenEnvVar: "CF_MEDIA_API_TOKEN",
accountHash: "5LGXGUnHU18h6ehN_xjpXQ",
}),
cloudflareStream({
accountIdEnvVar: "CF_MEDIA_ACCOUNT_ID",
apiTokenEnvVar: "CF_MEDIA_API_TOKEN",
}),
],
// Trusted plugins (run in host worker)
plugins: [
// Test plugin that exercises all v2 APIs
formsPlugin(),
],
// Sandboxed plugins (run in isolated workers)
sandboxed: [webhookNotifier],
// Sandbox runner for Cloudflare
sandboxRunner: sandbox(),
// Plugin marketplace
marketplace: "https://marketplace.emdashcms.com",
}),
],
cache: {
provider: cloudflareCache(),
},
routeRules: {
"/": {
maxAge: 3_600,
swr: 864_000,
},
"/[...slug]": {
maxAge: 3_600,
swr: 864_000,
},
},
fonts: [
{
provider: fontProviders.google(),
name: "Inter",
cssVariable: "--font-sans",
weights: [400, 500, 600, 700],
fallbacks: ["sans-serif"],
},
{
provider: fontProviders.google(),
name: "JetBrains Mono",
cssVariable: "--font-mono",
weights: [400, 500],
fallbacks: ["monospace"],
},
],
devToolbar: { enabled: false },
});