diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 5b94578..06fdc32 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -12,6 +12,7 @@ module.exports = { "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-explicit-any": "off", "@typescript-eslint/no-unused-vars": ["off", { argsIgnorePattern: "^_" }], + "@typescript-eslint/no-non-null-assertion": "off", }, env: { browser: true, diff --git a/src/auth.ts b/src/auth.ts index b57e3aa..edecf04 100644 --- a/src/auth.ts +++ b/src/auth.ts @@ -115,8 +115,7 @@ export class Auth { } const jwt = this.signToken(token); - console.log(jwt); - const redirect = await this.getRedirectUrl(host, redirectUrl); + const redirect = await this.getRedirectUrl(host, redirectUrl ?? undefined); return { status: 302, @@ -158,9 +157,9 @@ export class Auth { const match = path.match(/\/api\/auth\/(?signin|callback)\/(?\w+)/); - if (match) { + if (match && match.groups) { const provider = this.config?.providers?.find( - (provider) => provider.id === match.groups.provider, + (provider) => provider.id === match.groups!.provider, ); if (provider) { if (match.groups.method === "signin") { @@ -170,6 +169,11 @@ export class Auth { } } } + + return { + status: 404, + body: "Not found.", + }; } get: RequestHandler = async (request) => { diff --git a/src/client/signIn.ts b/src/client/signIn.ts index be97123..3bec5a7 100644 --- a/src/client/signIn.ts +++ b/src/client/signIn.ts @@ -19,17 +19,19 @@ export async function signIn(provider: string, data?: any, config?: SignInConfig return await res.json(); } - let redirectUrl: string; + let redirectUrl: string | undefined; if (config?.redirectUrl) { redirectUrl = config.redirectUrl; } else { - let $val: Page; + let $val: Page | undefined; page.subscribe(($) => ($val = $))(); - redirectUrl = `${$val.host}${$val.path}?${$val.query}`; + if ($val) { + redirectUrl = `${$val.host}${$val.path}?${$val.query}`; + } } const queryData = { - redirect: redirectUrl, + redirect: redirectUrl ?? "/", }; const query = new URLSearchParams(queryData); const path = `/api/auth/login/${provider}?${query}`; diff --git a/src/providers/base.ts b/src/providers/base.ts index 4d84d54..7671264 100644 --- a/src/providers/base.ts +++ b/src/providers/base.ts @@ -11,7 +11,7 @@ export abstract class Provider { id: string; constructor(protected readonly config: T) { - this.id = config.id; + this.id = config.id!; } getUri(host: string, path: string) { diff --git a/src/providers/facebook.ts b/src/providers/facebook.ts index c012b64..594d819 100644 --- a/src/providers/facebook.ts +++ b/src/providers/facebook.ts @@ -28,7 +28,7 @@ export class FacebookAuthProvider extends OAuth2Provider extends Pro getStateValue(query: URLSearchParams, name: string) { if (query.get("state")) { - const state = Buffer.from(query.get("state"), "base64").toString(); + const state = Buffer.from(query.get("state")!, "base64").toString(); return state .split(",") .find((state) => state.startsWith(`${name}=`)) @@ -47,7 +47,7 @@ export abstract class OAuth2Provider extends Pro const code = query.get("code"); const redirect = this.getStateValue(query, "redirect"); - const tokens = await this.getTokens(code, this.getCallbackUri(host)); + const tokens = await this.getTokens(code!, this.getCallbackUri(host)); let user = await this.getUserProfile(tokens); if (this.config.profile) { diff --git a/src/providers/reddit.ts b/src/providers/reddit.ts index 240a502..885ab3d 100644 --- a/src/providers/reddit.ts +++ b/src/providers/reddit.ts @@ -79,8 +79,8 @@ export class RedditOAuthProvider extends OAuth2Provider