● Zion Boggan
repos/Docket/next.config.js
zionboggan.com ↗
60 lines · javascript
History for this file →
1
 
2
const csp = [
3
  "default-src 'self'",
4
  "base-uri 'self'",
5
  "form-action 'self'",
6
  "frame-ancestors 'none'",
7
  "frame-src 'self' https://archive.usdocket.org https://www.govinfo.gov https://govinfo.gov",
8
  "object-src 'self' https://archive.usdocket.org https://www.govinfo.gov https://govinfo.gov",
9
  `script-src 'self' 'unsafe-inline'${process.env.NODE_ENV === "development" ? " 'unsafe-eval'" : ""}`,
10
  "style-src 'self' 'unsafe-inline'",
11
  "font-src 'self' data:",
12
  "img-src 'self' data: https://unitedstates.github.io https://bioguide.congress.gov https://upload.wikimedia.org",
13
  "connect-src 'self'",
14
  "upgrade-insecure-requests",
15
].join("; ");
16
 
17
const securityHeaders = [
18
  { key: "Content-Security-Policy", value: csp },
19
  { key: "Strict-Transport-Security", value: "max-age=63072000; includeSubDomains; preload" },
20
  { key: "X-Frame-Options", value: "DENY" },
21
  { key: "X-Content-Type-Options", value: "nosniff" },
22
  { key: "Referrer-Policy", value: "strict-origin-when-cross-origin" },
23
  { key: "Permissions-Policy", value: "camera=(), microphone=(), geolocation=(), interest-cohort=()" },
24
  { key: "X-DNS-Prefetch-Control", value: "off" },
25
  { key: "Cross-Origin-Opener-Policy", value: "same-origin" },
26
  { key: "Cross-Origin-Resource-Policy", value: "same-origin" },
27
];
28
 
29
const nextConfig = {
30
  reactStrictMode: true,
31
  poweredByHeader: false,
32
  experimental: {
33
    serverComponentsExternalPackages: ["better-sqlite3"],
34
  },
35
  async headers() {
36
    return [
37
      { source: "/:path*", headers: securityHeaders },
38
      {
39
        source: "/(votes|bills|bill|laws|members|spending|executive|search|states)(.*)?",
40
        headers: [
41
          {
42
            key: "Cache-Control",
43
            value: "public, s-maxage=300, stale-while-revalidate=600",
44
          },
45
        ],
46
      },
47
      {
48
        source: "/api/:path*",
49
        headers: [
50
          {
51
            key: "Cache-Control",
52
            value: "public, s-maxage=300, stale-while-revalidate=600",
53
          },
54
        ],
55
      },
56
    ];
57
  },
58
};
59
 
60
module.exports = nextConfig;