Skip to content

Commit bd7dfc6

Browse files
committed
Add eslint rules for dealing with promises
1 parent 0ca134d commit bd7dfc6

15 files changed

+79
-63
lines changed

.eslintrc.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,18 @@ module.exports = {
2929
"semi": "warn",
3030
"no-console": "warn"
3131
},
32+
overrides: [
33+
{
34+
files: ["src/**/*.ts"],
35+
36+
parserOptions: {
37+
project: ["./tsconfig.json"],
38+
},
39+
40+
rules: {
41+
"@typescript-eslint/no-misused-promises": "warn",
42+
"@typescript-eslint/no-floating-promises" : "warn"
43+
}
44+
},
45+
],
3246
};

src/app.ts

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -85,18 +85,18 @@ function setupRoutes(router: Router) {
8585
}
8686

8787
//add the get function
88-
router.get("/api/getVideoSponsorTimes", oldGetVideoSponsorTimes);
88+
router.get("/api/getVideoSponsorTimes", void oldGetVideoSponsorTimes);
8989

9090
//add the oldpost function
91-
router.get("/api/postVideoSponsorTimes", oldSubmitSponsorTimes);
92-
router.post("/api/postVideoSponsorTimes", oldSubmitSponsorTimes);
91+
router.get("/api/postVideoSponsorTimes", void oldSubmitSponsorTimes);
92+
router.post("/api/postVideoSponsorTimes", void oldSubmitSponsorTimes);
9393

9494
//add the skip segments functions
95-
router.get("/api/skipSegments", getSkipSegments);
96-
router.post("/api/skipSegments", postSkipSegments);
95+
router.get("/api/skipSegments", void getSkipSegments);
96+
router.post("/api/skipSegments", void postSkipSegments);
9797

9898
// add the privacy protecting skip segments functions
99-
router.get("/api/skipSegments/:prefix", getSkipSegmentsByHash);
99+
router.get("/api/skipSegments/:prefix", void getSkipSegmentsByHash);
100100

101101
//voting endpoint
102102
router.get("/api/voteOnSponsorTime", ...voteEndpoints);
@@ -107,106 +107,106 @@ function setupRoutes(router: Router) {
107107
router.post("/api/viewedVideoSponsorTime", ...viewEndpoints);
108108

109109
//To set your username for the stats view
110-
router.post("/api/setUsername", setUsername);
110+
router.post("/api/setUsername", void setUsername);
111111

112112
//get what username this user has
113-
router.get("/api/getUsername", getUsername);
113+
router.get("/api/getUsername", void getUsername);
114114

115115
//Endpoint used to hide a certain user's data
116-
router.post("/api/shadowBanUser", shadowBanUser);
116+
router.post("/api/shadowBanUser", void shadowBanUser);
117117

118118
//Endpoint used to make a user a VIP user with special privileges
119-
router.post("/api/addUserAsVIP", addUserAsVIP);
119+
router.post("/api/addUserAsVIP", void addUserAsVIP);
120120
//Endpoint to add a user as a temporary VIP
121-
router.post("/api/addUserAsTempVIP", addUserAsTempVIP);
121+
router.post("/api/addUserAsTempVIP", void addUserAsTempVIP);
122122

123123
//Gets all the views added up for one userID
124124
//Useful to see how much one user has contributed
125-
router.get("/api/getViewsForUser", getViewsForUser);
125+
router.get("/api/getViewsForUser", void getViewsForUser);
126126

127127
//Gets all the saved time added up (views * sponsor length) for one userID
128128
//Useful to see how much one user has contributed
129129
//In minutes
130-
router.get("/api/getSavedTimeForUser", getSavedTimeForUser);
130+
router.get("/api/getSavedTimeForUser", void getSavedTimeForUser);
131131

132-
router.get("/api/getTopUsers", getTopUsers);
133-
router.get("/api/getTopCategoryUsers", getTopCategoryUsers);
132+
router.get("/api/getTopUsers", void getTopUsers);
133+
router.get("/api/getTopCategoryUsers", void getTopCategoryUsers);
134134

135135
//send out totals
136136
//send the total submissions, total views and total minutes saved
137-
router.get("/api/getTotalStats", getTotalStats);
137+
router.get("/api/getTotalStats", void getTotalStats);
138138

139-
router.get("/api/getUserInfo", getUserInfo);
140-
router.get("/api/userInfo", getUserInfo);
139+
router.get("/api/getUserInfo", void getUserInfo);
140+
router.get("/api/userInfo", void getUserInfo);
141141

142142
//send out a formatted time saved total
143-
router.get("/api/getDaysSavedFormatted", getDaysSavedFormatted);
143+
router.get("/api/getDaysSavedFormatted", void getDaysSavedFormatted);
144144

145145
//submit video to lock categories
146-
router.post("/api/noSegments", postLockCategories);
147-
router.post("/api/lockCategories", postLockCategories);
146+
router.post("/api/noSegments", void postLockCategories);
147+
router.post("/api/lockCategories", void postLockCategories);
148148

149-
router.delete("/api/noSegments", deleteLockCategoriesEndpoint);
150-
router.delete("/api/lockCategories", deleteLockCategoriesEndpoint);
149+
router.delete("/api/noSegments", void deleteLockCategoriesEndpoint);
150+
router.delete("/api/lockCategories", void deleteLockCategoriesEndpoint);
151151

152152
//get if user is a vip
153-
router.get("/api/isUserVIP", getIsUserVIP);
153+
router.get("/api/isUserVIP", void getIsUserVIP);
154154

155155
//sent user a warning
156-
router.post("/api/warnUser", postWarning);
156+
router.post("/api/warnUser", void postWarning);
157157

158158
//get if user is a vip
159-
router.post("/api/segmentShift", postSegmentShift);
159+
router.post("/api/segmentShift", void postSegmentShift);
160160

161161
//get segment info
162-
router.get("/api/segmentInfo", getSegmentInfo);
162+
router.get("/api/segmentInfo", void getSegmentInfo);
163163

164164
//clear cache as VIP
165-
router.post("/api/clearCache", postClearCache);
165+
router.post("/api/clearCache", void postClearCache);
166166

167167
//purge all segments for VIP
168-
router.post("/api/purgeAllSegments", postPurgeAllSegments);
168+
router.post("/api/purgeAllSegments", void postPurgeAllSegments);
169169

170-
router.post("/api/unlistedVideo", addUnlistedVideo);
170+
router.post("/api/unlistedVideo", void addUnlistedVideo);
171171

172172
// get userID from username
173-
router.get("/api/userID", getUserID);
173+
router.get("/api/userID", void getUserID);
174174

175175
// get lock categores from userID
176-
router.get("/api/lockCategories", getLockCategories);
176+
router.get("/api/lockCategories", void getLockCategories);
177177

178178
// get privacy protecting lock categories functions
179-
router.get("/api/lockCategories/:prefix", getLockCategoriesByHash);
179+
router.get("/api/lockCategories/:prefix", void getLockCategoriesByHash);
180180

181181
// get all segments that match a search
182-
router.get("/api/searchSegments", getSearchSegments);
182+
router.get("/api/searchSegments", void getSearchSegments);
183183

184184
// autocomplete chapter names
185-
router.get("/api/chapterNames", getChapterNames);
185+
router.get("/api/chapterNames", void getChapterNames);
186186

187187
// get status
188-
router.get("/api/status/:value", getStatus);
189-
router.get("/api/status", getStatus);
188+
router.get("/api/status/:value", void getStatus);
189+
router.get("/api/status", void getStatus);
190190

191-
router.get("/api/youtubeApiProxy", youtubeApiProxy);
191+
router.get("/api/youtubeApiProxy", void youtubeApiProxy);
192192
// get user category stats
193-
router.get("/api/userStats", getUserStats);
193+
router.get("/api/userStats", void getUserStats);
194194

195-
router.get("/api/lockReason", getLockReason);
195+
router.get("/api/lockReason", void getLockReason);
196196

197-
router.post("/api/feature", addFeature);
197+
router.post("/api/feature", void addFeature);
198198

199-
router.get("/api/generateToken/:type", generateTokenRequest);
200-
router.get("/api/verifyToken", verifyTokenRequest);
199+
router.get("/api/generateToken/:type", void generateTokenRequest);
200+
router.get("/api/verifyToken", void verifyTokenRequest);
201201

202202
if (config.postgres?.enabled) {
203-
router.get("/database", (req, res) => dumpDatabase(req, res, true));
204-
router.get("/database.json", (req, res) => dumpDatabase(req, res, false));
205-
router.get("/database/*", downloadFile);
203+
router.get("/database", (req, res) => void dumpDatabase(req, res, true));
204+
router.get("/database.json", (req, res) => void dumpDatabase(req, res, false));
205+
router.get("/database/*", void downloadFile);
206206
router.use("/download", express.static(appExportPath));
207207
} else {
208208
router.get("/database.db", function (req: Request, res: Response) {
209209
res.sendFile("./databases/sponsorTimes.db", { root: "./" });
210210
});
211211
}
212-
}
212+
}

src/cronjob/downvoteSegmentArchiveJob.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export const archiveDownvoteSegment = async (dayLimit: number, voteLimit: number
5757

5858
const DownvoteSegmentArchiveJob = new CronJob(
5959
jobConfig?.schedule || "0 0 * * * 0",
60-
() => archiveDownvoteSegment(jobConfig?.timeThresholdInDays, jobConfig?.voteThreshold)
60+
() => void archiveDownvoteSegment(jobConfig?.timeThresholdInDays, jobConfig?.voteThreshold)
6161
);
6262

6363
if (serverConfig?.crons?.enabled && jobConfig && !jobConfig.schedule) {

src/databases/Postgres.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ export class Postgres implements IDatabase {
177177
);
178178
}
179179

180-
client.end();
180+
client.end().catch(err => Logger.error(`closing db (postgres): ${err}`));
181181
}
182182

183183
private async upgradeDB(fileNamePrefix: string, schemaFolder: string) {

src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ async function init() {
2727
}).setTimeout(15000);
2828
}
2929

30-
init();
30+
init().catch((err) => Logger.error(err));

src/middleware/requestRateLimit.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export function rateLimitMiddleware(limitConfig: RateLimitConfig, getUserID?: (r
2222
keyGenerator: (req) => {
2323
return getHash(getIP(req), 1);
2424
},
25+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
2526
handler: async (req, res, next) => {
2627
if (getUserID === undefined || !await isUserVIP(await getHashCache(getUserID(req)))) {
2728
return res.status(limitConfig.statusCode).send(limitConfig.message);

src/routes/dumpDatabase.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ function removeOutdatedDumps(exportPath: string): Promise<void> {
7575
}, {});
7676

7777
// read files in export directory
78+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
7879
fs.readdir(exportPath, async (err: any, files: string[]) => {
7980
if (err) Logger.error(err);
8081
if (err) return resolve();

src/routes/getTopCategoryUsers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { config } from "../config";
44
import { Request, Response } from "express";
55

66
const MILLISECONDS_IN_MINUTE = 60000;
7-
const getTopCategoryUsersWithCache = createMemoryCache(generateTopCategoryUsersStats, config.getTopUsersCacheTimeMinutes * MILLISECONDS_IN_MINUTE);
7+
const getTopCategoryUsersWithCache = createMemoryCache(void generateTopCategoryUsersStats, config.getTopUsersCacheTimeMinutes * MILLISECONDS_IN_MINUTE);
88
const maxRewardTimePerSegmentInSeconds = config.maxRewardTimePerSegmentInSeconds ?? 86400;
99

1010
interface DBSegment {

src/routes/getTopUsers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { config } from "../config";
44
import { Request, Response } from "express";
55

66
const MILLISECONDS_IN_MINUTE = 60000;
7-
const getTopUsersWithCache = createMemoryCache(generateTopUsersStats, config.getTopUsersCacheTimeMinutes * MILLISECONDS_IN_MINUTE);
7+
const getTopUsersWithCache = createMemoryCache(void generateTopUsersStats, config.getTopUsersCacheTimeMinutes * MILLISECONDS_IN_MINUTE);
88
const maxRewardTimePerSegmentInSeconds = config.maxRewardTimePerSegmentInSeconds ?? 86400;
99

1010
async function generateTopUsersStats(sortBy: string, categoryStatsEnabled = false) {

src/routes/postSkipSegments.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ async function sendWebhooks(apiVideoInfo: APIVideoInfo, userID: string, videoID:
7676
sendWebhookNotification(userID, videoID, UUID, userSubmissionCountRow.submissionCount, data, {
7777
submissionStart: startTime,
7878
submissionEnd: endTime,
79-
}, segmentInfo);
79+
}, segmentInfo).catch(Logger.error);
8080

8181
// If it is a first time submission
8282
// Then send a notification to discord
@@ -395,7 +395,7 @@ async function updateDataIfVideoDurationChange(videoID: VideoID, service: Servic
395395
await db.prepare("run", `UPDATE "sponsorTimes" SET "hidden" = 1 WHERE "UUID" = ?`, [submission.UUID]);
396396
}
397397
lockedCategoryList = [];
398-
deleteLockCategories(videoID, null, null, service);
398+
deleteLockCategories(videoID, null, null, service).catch(Logger.error);
399399
}
400400

401401
return {
@@ -614,7 +614,7 @@ export async function postSkipSegments(req: Request, res: Response): Promise<Res
614614
}
615615

616616
for (let i = 0; i < segments.length; i++) {
617-
sendWebhooks(apiVideoInfo, userID, videoID, UUIDs[i], segments[i], service);
617+
sendWebhooks(apiVideoInfo, userID, videoID, UUIDs[i], segments[i], service).catch(Logger.error);
618618
}
619619
return res.json(newSegments);
620620
}

0 commit comments

Comments
 (0)