From e7256fd1d8668bca552f0d5839cf9c7918850011 Mon Sep 17 00:00:00 2001
From: dangered wolf <d@ngeredwolf.me>
Date: Fri, 15 Jul 2022 22:52:20 -0400
Subject: [PATCH] Moved some constants to a dotenv config

---
 .env.example      |  4 ++++
 .gitignore        |  3 ++-
 package-lock.json | 32 +++++++++++++++++++++++++-------
 package.json      |  1 +
 src/constants.ts  | 13 ++++---------
 src/env.d.ts      |  4 ++++
 webpack.config.js | 18 +++++++++++++++++-
 7 files changed, 57 insertions(+), 18 deletions(-)
 create mode 100644 .env.example
 create mode 100644 src/env.d.ts

diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..64bea2a
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,4 @@
+BRANDING_NAME = "pxTwitter"
+DIRECT_MEDIA_DOMAINS = "d.pxtwitter.com,d.twittpr.com,dl.pxtwitter.com,dl.twittpr.com"
+HOST_URL = "https://pxtwitter.com"
+REDIRECT_URL = "https://github.com/dangeredwolf/pxTwitter"
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 50f1b1d..9a264cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 dist
 node_modules
-wrangler.toml
\ No newline at end of file
+wrangler.toml
+.env
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 9ad3cf2..63d4f44 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,6 +14,7 @@
       "devDependencies": {
         "@cloudflare/workers-types": "^3.14.1",
         "@types/service-worker-mock": "^2.0.1",
+        "dotenv": "^16.0.1",
         "prettier": "^2.7.1",
         "service-worker-mock": "^2.0.5",
         "ts-loader": "^9.3.1",
@@ -181,6 +182,15 @@
         "node": ">=16.7"
       }
     },
+    "node_modules/@miniflare/core/node_modules/dotenv": {
+      "version": "10.0.0",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
+      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+      "dev": true,
+      "engines": {
+        "node": ">=10"
+      }
+    },
     "node_modules/@miniflare/durable-objects": {
       "version": "2.6.0",
       "resolved": "https://registry.npmjs.org/@miniflare/durable-objects/-/durable-objects-2.6.0.tgz",
@@ -862,12 +872,12 @@
       }
     },
     "node_modules/dotenv": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
-      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+      "version": "16.0.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
+      "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==",
       "dev": true,
       "engines": {
-        "node": ">=10"
+        "node": ">=12"
       }
     },
     "node_modules/electron-to-chromium": {
@@ -2804,6 +2814,14 @@
         "set-cookie-parser": "^2.4.8",
         "undici": "5.5.1",
         "urlpattern-polyfill": "^4.0.3"
+      },
+      "dependencies": {
+        "dotenv": {
+          "version": "10.0.0",
+          "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
+          "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+          "dev": true
+        }
       }
     },
     "@miniflare/durable-objects": {
@@ -3359,9 +3377,9 @@
       }
     },
     "dotenv": {
-      "version": "10.0.0",
-      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
-      "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+      "version": "16.0.1",
+      "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz",
+      "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==",
       "dev": true
     },
     "electron-to-chromium": {
diff --git a/package.json b/package.json
index 3cc8400..6e62bb9 100644
--- a/package.json
+++ b/package.json
@@ -16,6 +16,7 @@
   "devDependencies": {
     "@cloudflare/workers-types": "^3.14.1",
     "@types/service-worker-mock": "^2.0.1",
+    "dotenv": "^16.0.1",
     "prettier": "^2.7.1",
     "service-worker-mock": "^2.0.5",
     "ts-loader": "^9.3.1",
diff --git a/src/constants.ts b/src/constants.ts
index de242d8..da34b22 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -1,15 +1,10 @@
 const fakeChromeVersion = '103';
 
 export const Constants = {
-  BRANDING_NAME: `pxTwitter`,
-  DIRECT_MEDIA_DOMAINS: [
-    'd.pxtwitter.com',
-    'd.twittpr.com',
-    'dl.pxtwitter.com',
-    'dl.twittpr.com'
-  ],
-  HOST_URL: `https://pxtwitter.com`,
-  REDIRECT_URL: 'https://github.com/dangeredwolf/pxTwitter',
+  BRANDING_NAME: BRANDING_NAME,
+  DIRECT_MEDIA_DOMAINS: DIRECT_MEDIA_DOMAINS.split(','),
+  HOST_URL: HOST_URL,
+  REDIRECT_URL: REDIRECT_URL,
   TWITTER_ROOT: 'https://twitter.com',
   TWITTER_API_ROOT: 'https://api.twitter.com',
   /* We used to use Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA
diff --git a/src/env.d.ts b/src/env.d.ts
new file mode 100644
index 0000000..79123a9
--- /dev/null
+++ b/src/env.d.ts
@@ -0,0 +1,4 @@
+declare const BRANDING_NAME: string;
+declare const DIRECT_MEDIA_DOMAINS: string;
+declare const HOST_URL: string;
+declare const REDIRECT_URL: string;
\ No newline at end of file
diff --git a/webpack.config.js b/webpack.config.js
index ed0bcc1..968780f 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,4 +1,7 @@
 const path = require('path');
+const webpack = require('webpack');
+
+require('dotenv').config();
 
 module.exports = {
   entry: {
@@ -13,7 +16,20 @@ module.exports = {
     extensions: ['.ts', '.tsx', '.js'],
     fallback: { util: false }
   },
-  plugins: [],
+  plugins: [
+    new webpack.DefinePlugin({
+      BRANDING_NAME: `'${process.env.BRANDING_NAME}'`,
+    }),
+    new webpack.DefinePlugin({
+      DIRECT_MEDIA_DOMAINS: `'${process.env.DIRECT_MEDIA_DOMAINS}'`,
+    }),
+    new webpack.DefinePlugin({
+      HOST_URL: `'${process.env.HOST_URL}'`,
+    }),
+    new webpack.DefinePlugin({
+      REDIRECT_URL: `'${process.env.REDIRECT_URL}'`,
+    }),
+  ],
   optimization: {
     mangleExports: 'size'
   },