aboutsummaryrefslogtreecommitdiff
path: root/next.config.js
blob: b3cf9a1a4dd31a2d6ef9a2a5ad7019e6d8cfc013 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/** @type {import('next').NextConfig} */
const nextSafe = require("next-safe");

const withPWA = require("next-pwa")({
  dest: "public",
  register: true,
  disable: process.env.NODE_ENV === "development",
  skipWaiting: true,
});

module.exports = withPWA({
  reactStrictMode: false,
  images: {
    unoptimized: true,
    remotePatterns: [
      {
        protocol: "https",
        hostname: "s4.anilist.co",
      },
    ],
  },
  distDir: process.env.BUILD_DIR || ".next",
  trailingSlash: true,
  output: "standalone",
  async headers() {
    return [
      {
        // matching all API routes
        source: "/api/:path*",
        headers: [
          { key: "Access-Control-Allow-Credentials", value: "true" },
          {
            key: "Access-Control-Allow-Origin",
            value: "https://moopa.live",
          }, // replace this your actual origin
          {
            key: "Access-Control-Allow-Methods",
            value: "GET,DELETE,PATCH,POST,PUT",
          },
          {
            key: "Access-Control-Allow-Headers",
            value:
              "X-CSRF-Token, X-Requested-With, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version",
          },
        ],
      },
      {
        source: "/:path*",
        headers: nextSafe({
          contentTypeOptions: "nosniff",
          contentSecurityPolicy: {
            "base-uri": "'none'",
            "child-src": "'none'",
            "connect-src": [
              "'self'",
              "webpack://*",
              "https://graphql.anilist.co/",
              "https://api.aniskip.com/",
              "https://m3u8proxy.moopa.workers.dev/",
            ],
            "default-src": "'self'",
            "font-src": [
              "'self'",
              "https://cdnjs.cloudflare.com/",
              "https://fonts.gstatic.com/",
            ],
            "form-action": "'self'",
            "frame-ancestors": "'none'",
            "frame-src": "'none'",
            "img-src": [
              "'self'",
              "https://s4.anilist.co",
              "data:",
              "https://media.kitsu.io",
              "https://artworks.thetvdb.com",
              "https://img.moopa.live",
              "https://meo.comick.pictures",
              "https://kitsu-production-media.s3.us-west-002.backblazeb2.com",
            ],
            "manifest-src": "'self'",
            "media-src": ["'self'", "blob:"],
            "object-src": "'none'",
            "prefetch-src": false,
            "script-src": [
              "'self'",
              "https://static.cloudflareinsights.com",
              "'unsafe-inline'",
              "'unsafe-eval'",
            ],

            "style-src": [
              "'self'",
              "'unsafe-inline'",
              "https://cdnjs.cloudflare.com",
              "https://fonts.googleapis.com",
            ],
            "worker-src": "'self'",
            mergeDefaultDirectives: false,
            reportOnly: false,
          },
          frameOptions: "DENY",
          permissionsPolicy: false,
          // permissionsPolicyDirectiveSupport: ["proposed", "standard"],
          isDev: false,
          referrerPolicy: "no-referrer",
          xssProtection: "1; mode=block",
        }),
      },
    ];
  },
});