chore: Move to Typescript (#2783)

This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously.

closes #1282
This commit is contained in:
Tom Moor
2021-11-29 06:40:55 -08:00
committed by GitHub
parent 25ccfb5d04
commit 15b1069bcc
1017 changed files with 17410 additions and 54942 deletions

62
server/utils/passport.ts Normal file
View File

@@ -0,0 +1,62 @@
import { addMinutes, subMinutes } from "date-fns";
import fetch from "fetch-with-proxy";
import { Request } from "koa";
import { OAuthStateMismatchError } from "../errors";
import { getCookieDomain } from "./domains";
export class StateStore {
key = "state";
store = (req: Request, callback: () => void) => {
// Produce an 8-character random string as state
const state = Math.random().toString(36).slice(-8);
// @ts-expect-error ts-migrate(2339) FIXME: Property 'cookies' does not exist on type 'Request... Remove this comment to see the full error message
req.cookies.set(this.key, state, {
httpOnly: false,
expires: addMinutes(new Date(), 10),
domain: getCookieDomain(req.hostname),
});
// @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 2.
callback(null, state);
};
verify = (req: Request, providedState: string, callback: () => void) => {
// @ts-expect-error ts-migrate(2339) FIXME: Property 'cookies' does not exist on type 'Request... Remove this comment to see the full error message
const state = req.cookies.get(this.key);
if (!state) {
return callback(
// @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.
new OAuthStateMismatchError("State not return in OAuth flow")
);
}
// @ts-expect-error ts-migrate(2339) FIXME: Property 'cookies' does not exist on type 'Request... Remove this comment to see the full error message
req.cookies.set(this.key, "", {
httpOnly: false,
expires: subMinutes(new Date(), 1),
domain: getCookieDomain(req.hostname),
});
if (state !== providedState) {
// @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 1.
return callback(new OAuthStateMismatchError());
}
// @ts-expect-error ts-migrate(2554) FIXME: Expected 0 arguments, but got 2.
callback(null, true);
};
}
export async function request(endpoint: string, accessToken: string) {
const response = await fetch(endpoint, {
method: "GET",
credentials: "same-origin",
headers: {
Authorization: `Bearer ${accessToken}`,
"Content-Type": "application/json",
},
});
return response.json();
}