Jelajahi Sumber

refactor: remove false positive hard coded creds

Sv443 2 tahun lalu
induk
melakukan
b6ac351148
3 mengubah file dengan 35 tambahan dan 28 penghapusan
  1. 16 15
      src/songData.ts
  2. 6 0
      src/utils.ts
  3. 13 13
      tsconfig.json

+ 16 - 15
src/songData.ts

@@ -5,6 +5,7 @@ import Fuse from "fuse.js";
 import { nanoid } from "nanoid";
 import { clamp, Stringifiable } from "svcorelib";
 import type { Album, ApiSearchResult, ApiSongResult, GetMetaArgs, GetMetaResult, GetTranslationsArgs, MetaSearchHit, SongMeta, SongTranslation } from "./types";
+import { getAxiosAuthConfig } from "./utils";
 
 const defaultFuzzyThreshold = 0.65;
 
@@ -20,13 +21,15 @@ export async function getMeta({
     preferLang,
 }: GetMetaArgs): Promise<GetMetaResult | null>
 {
-    const accessToken = process.env.GENIUS_ACCESS_TOKEN ?? "ERR_NO_ENV";
-
     const query = q ? q : `${artist} ${song}`;
 
-    const { data: { response }, status } = await axios.get<ApiSearchResult>(`https://api.genius.com/search?q=${encodeURIComponent(query)}`, {
-        headers: { "Authorization": `Bearer ${accessToken}` },
-    });
+    const {
+        data: { response },
+        status,
+    } = await axios.get<ApiSearchResult>(
+        `https://api.genius.com/search?q=${encodeURIComponent(query)}`,
+        getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+    );
 
     if(threshold === undefined || isNaN(threshold))
         threshold = defaultFuzzyThreshold;
@@ -164,11 +167,10 @@ export async function getMeta({
  */
 export async function getTranslations(songId: number, { preferLang }: GetTranslationsArgs): Promise<SongTranslation[] | null> {
     try {
-        const accessToken = process.env.GENIUS_ACCESS_TOKEN ?? "ERR_NO_ENV";
-
-        const { data, status } = await axios.get<ApiSongResult>(`https://api.genius.com/songs/${songId}`, {
-            headers: { "Authorization": `Bearer ${accessToken}` },
-        });
+        const { data, status } = await axios.get<ApiSongResult>(
+            `https://api.genius.com/songs/${songId}`,
+            getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+        );
 
         if(status >= 200 && status < 300 && Array.isArray(data?.response?.song?.translation_songs))
         {
@@ -197,11 +199,10 @@ export async function getTranslations(songId: number, { preferLang }: GetTransla
 
 export async function getAlbum(songId: number): Promise<Album | null> {
     try {
-        const accessToken = process.env.GENIUS_ACCESS_TOKEN ?? "ERR_NO_ENV";
-
-        const { data, status } = await axios.get<ApiSongResult>(`https://api.genius.com/songs/${songId}`, {
-            headers: { "Authorization": `Bearer ${accessToken}` },
-        });
+        const { data, status } = await axios.get<ApiSongResult>(
+            `https://api.genius.com/songs/${songId}`,
+            getAxiosAuthConfig(process.env.GENIUS_ACCESS_TOKEN)
+        );
 
         if(status >= 200 && status < 300 && data?.response?.song?.album?.id)
         {

+ 6 - 0
src/utils.ts

@@ -70,3 +70,9 @@ export function respond(res: Response, type: ResponseType | number, data: String
     res.setHeader("Content-Type", format === "xml" ? "application/xml" : "application/json");
     res.status(statusCode).send(finalData);
 }
+
+export function getAxiosAuthConfig(authToken?: string) {
+    return authToken ? {
+        headers: { "Authorization": `Bearer ${authToken}` },
+    } : {};
+}

+ 13 - 13
tsconfig.json

@@ -1,22 +1,22 @@
 {
   "compilerOptions": {
-    "baseUrl": ".",
-    "target": "es2022",
-    "module": "CommonJS",
-    "rootDir": ".",
-    "outDir": "./out/",
-    "moduleResolution": "node",
-    "sourceMap": true,
-    "useDefineForClassFields": true,
     "allowJs": false,
-    "importHelpers": true,
-    "skipLibCheck": true,
-    "esModuleInterop": true,
     "allowSyntheticDefaultImports": true,
-    "strict": true,
+    "baseUrl": ".",
+    "esModuleInterop": true,
     "forceConsistentCasingInFileNames": true,
-    "resolveJsonModule": true,
+    "importHelpers": true,
     "isolatedModules": true,
+    "module": "CommonJS",
+    "moduleResolution": "node",
     "noUncheckedIndexedAccess": true,
+    "outDir": "./out/",
+    "resolveJsonModule": true,
+    "rootDir": ".",
+    "skipLibCheck": true,
+    "sourceMap": true,
+    "strict": true,
+    "target": "es2022",
+    "useDefineForClassFields": true,
   }
 }