@mikandev/next-discord-auth 1.0.8 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.js ADDED
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import {} from "./index";
4
+ import { getSession } from "./server-actions";
5
+ import { createContext, useContext } from "react";
6
+ import useSWR from "swr";
7
+ import { NextRequest, NextResponse } from "next/server";
8
+ const UserInfoContext = createContext(undefined);
9
+ const fetcher = async (url) => {
10
+ const res = await fetch(url);
11
+ const data = (await res.json());
12
+ if ("error" in data && data.error) {
13
+ return null;
14
+ }
15
+ return data;
16
+ };
17
+ export function UserInfoProvider({ children, path, }) {
18
+ const { data, error, isLoading, mutate } = useSWR(path, fetcher, {
19
+ revalidateOnFocus: false,
20
+ revalidateOnReconnect: true,
21
+ });
22
+ return (_jsx(UserInfoContext.Provider, { value: {
23
+ session: data ?? null,
24
+ isLoading,
25
+ isError: !!error,
26
+ mutate,
27
+ }, children: children }));
28
+ }
29
+ export function useUserInfo() {
30
+ const context = useContext(UserInfoContext);
31
+ if (context === undefined) {
32
+ throw new Error("useUserInfo must be used within a UserInfoProvider");
33
+ }
34
+ return context;
35
+ }
36
+ export const createSessionProviderRoute = () => {
37
+ return async (_request) => {
38
+ const session = await getSession();
39
+ if (!session) {
40
+ return NextResponse.json({ error: "Not logged in" });
41
+ }
42
+ else {
43
+ const { accessToken, refreshToken, ...clientSession } = session;
44
+ return NextResponse.json(clientSession);
45
+ }
46
+ };
47
+ };
package/dist/redirect.js CHANGED
@@ -27,7 +27,7 @@ export const handleRedirect = async (req) => {
27
27
  id: userData.id,
28
28
  name: `${userData.username}`,
29
29
  email: userData.email,
30
- avatar: `https://cdn.discordapp.com/avatars/${userData.id}/${userData.avatar}.png`
30
+ avatar: `https://cdn.discordapp.com/avatars/${userData.id}/${userData.avatar}.png`,
31
31
  },
32
32
  expires: new Date(Date.now() + response.expiresIn * 1000).toISOString(),
33
33
  accessToken: response.accessToken,
@@ -37,7 +37,11 @@ export const handleRedirect = async (req) => {
37
37
  expiresIn: response.expiresIn,
38
38
  });
39
39
  const redirectUri = cookieStore.get("REDIRECT_AFTER")?.value || "/";
40
- cookieStore.set("AUTH_SESSION", token, { sameSite: "lax", httpOnly: true, secure: true });
40
+ cookieStore.set("AUTH_SESSION", token, {
41
+ sameSite: "lax",
42
+ httpOnly: true,
43
+ secure: true,
44
+ });
41
45
  cookieStore.delete("REDIRECT_AFTER");
42
46
  return redirect(redirectUri);
43
47
  };
@@ -20,14 +20,19 @@ export const getSession = async () => {
20
20
  }
21
21
  else {
22
22
  const timeUntilExpiration = expiresAt.getTime() - Date.now();
23
- if (timeUntilExpiration < 5 * 60 * 1000) { // less than 5 minutes
23
+ if (timeUntilExpiration < 5 * 60 * 1000) {
24
+ // less than 5 minutes
24
25
  const refreshedSession = await RefreshAccessToken(config, session.refreshToken || "");
25
26
  if (refreshedSession) {
26
27
  session.accessToken = refreshedSession.accessToken;
27
28
  session.refreshToken = refreshedSession.refreshToken;
28
29
  session.expires = new Date(Date.now() + refreshedSession.expiresIn * 1000).toISOString();
29
30
  const newToken = jwt.sign(session, config.jwtSecret);
30
- cookieStore.set("AUTH_SESSION", newToken, { sameSite: "lax", httpOnly: true, secure: true });
31
+ cookieStore.set("AUTH_SESSION", newToken, {
32
+ sameSite: "lax",
33
+ httpOnly: true,
34
+ secure: true,
35
+ });
31
36
  }
32
37
  }
33
38
  return session;
@@ -46,7 +51,11 @@ export const signIn = async (redirectTo) => {
46
51
  const cookieStore = await cookies();
47
52
  const headersList = await headers();
48
53
  const redirectUri = redirectTo ?? headersList.get("Referer") ?? "/";
49
- await cookieStore.set("REDIRECT_AFTER", redirectUri, { sameSite: "lax", httpOnly: true, secure: true });
54
+ await cookieStore.set("REDIRECT_AFTER", redirectUri, {
55
+ sameSite: "lax",
56
+ httpOnly: true,
57
+ secure: true,
58
+ });
50
59
  if (session) {
51
60
  return Response.json({ message: "Already signed in" }, { status: 200 });
52
61
  }
@@ -0,0 +1,21 @@
1
+ import type { ClientSession } from "./index";
2
+ import type { ReactNode } from "react";
3
+ import type { NextRequest } from "next/server";
4
+
5
+ interface UserInfoContextType {
6
+ session: ClientSession | null;
7
+ isLoading: boolean;
8
+ isError: boolean;
9
+ mutate: () => void;
10
+ }
11
+
12
+ export declare function UserInfoProvider(props: {
13
+ children: ReactNode;
14
+ path: string;
15
+ }): JSX.Element;
16
+
17
+ export declare function useUserInfo(): UserInfoContextType;
18
+
19
+ export declare function createSessionProviderRoute(
20
+ request: NextRequest,
21
+ ): Promise<Response>;
@@ -1,3 +1 @@
1
- export declare function handleRedirect(
2
- req: Request,
3
- ): Promise<Response | void>;
1
+ export declare function handleRedirect(req: Request): Promise<Response | void>;
@@ -4,4 +4,4 @@ export declare function getSession(): Promise<Session | null>;
4
4
 
5
5
  export declare function signIn(): Promise<Response>;
6
6
 
7
- export declare function signOut(): Promise<Response>;
7
+ export declare function signOut(): Promise<Response>;
package/package.json CHANGED
@@ -4,11 +4,9 @@
4
4
  "module": "dist/index.ts",
5
5
  "types": "dist/index.d.ts",
6
6
  "main": "dist/index.js",
7
- "files": [
8
- "dist"
9
- ],
7
+ "files": ["dist"],
10
8
  "license": "WTFPL",
11
- "version": "1.0.8",
9
+ "version": "1.0.9",
12
10
  "type": "module",
13
11
  "keywords": [
14
12
  "auth",
@@ -31,16 +29,19 @@
31
29
  "lintfix": "biome lint --fix"
32
30
  },
33
31
  "devDependencies": {
32
+ "@types/react": "^19",
34
33
  "@biomejs/biome": "^1.9.4",
35
- "@types/bun": "latest",
34
+ "@types/bun": "^1.3.11",
36
35
  "@types/jsonwebtoken": "^9.0.9"
37
36
  },
38
37
  "peerDependencies": {
39
38
  "typescript": "^5"
40
39
  },
41
40
  "dependencies": {
42
- "jsonwebtoken": "^9.0.2",
43
- "next": "^16.0.8"
41
+ "jsonwebtoken": "^9.0.3",
42
+ "next": "^16.2.1",
43
+ "react": "^19",
44
+ "swr": "^2.4.1"
44
45
  },
45
46
  "exports": {
46
47
  ".": {
@@ -57,16 +58,18 @@
57
58
  "import": "./dist/server-actions.js",
58
59
  "require": "./dist/server-actions.js",
59
60
  "types": "./dist/types/server-actions.d.ts"
61
+ },
62
+ "./client": {
63
+ "import": "./dist/client.js",
64
+ "require": "./dist/client.js",
65
+ "types": "./dist/types/client.d.ts"
60
66
  }
61
67
  },
62
68
  "typesVersions": {
63
69
  "*": {
64
- "redirect": [
65
- "dist/types/redirect.d.ts"
66
- ],
67
- "server-actions": [
68
- "dist/types/server-actions.d.ts"
69
- ]
70
+ "redirect": ["dist/types/redirect.d.ts"],
71
+ "server-actions": ["dist/types/server-actions.d.ts"],
72
+ "client": ["dist/types/client.d.ts"]
70
73
  }
71
74
  }
72
75
  }