naystack 1.2.16 → 1.2.19

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.
Files changed (59) hide show
  1. package/dist/auth/email/client.cjs.js +35 -7
  2. package/dist/auth/email/client.d.mts +13 -1
  3. package/dist/auth/email/client.d.ts +13 -1
  4. package/dist/auth/email/client.esm.js +34 -4
  5. package/dist/auth/email/index.cjs.js +23 -18
  6. package/dist/auth/email/index.d.mts +4 -12
  7. package/dist/auth/email/index.d.ts +4 -12
  8. package/dist/auth/email/index.esm.js +23 -18
  9. package/dist/auth/email/routes/delete.cjs.js +45 -1
  10. package/dist/auth/email/routes/delete.esm.js +45 -1
  11. package/dist/auth/email/routes/get.cjs.js +6 -2
  12. package/dist/auth/email/routes/get.d.mts +2 -2
  13. package/dist/auth/email/routes/get.d.ts +2 -2
  14. package/dist/auth/email/routes/get.esm.js +6 -2
  15. package/dist/auth/email/routes/post.cjs.js +3 -1
  16. package/dist/auth/email/routes/post.esm.js +3 -1
  17. package/dist/auth/email/routes/put.cjs.js +3 -0
  18. package/dist/auth/email/routes/put.esm.js +3 -0
  19. package/dist/auth/email/types.d.mts +5 -3
  20. package/dist/auth/email/types.d.ts +5 -3
  21. package/dist/auth/email/utils.cjs.js +8 -8
  22. package/dist/auth/email/utils.d.mts +3 -5
  23. package/dist/auth/email/utils.d.ts +3 -5
  24. package/dist/auth/email/utils.esm.js +7 -7
  25. package/dist/auth/index.cjs.js +23 -18
  26. package/dist/auth/index.d.mts +1 -0
  27. package/dist/auth/index.d.ts +1 -0
  28. package/dist/auth/index.esm.js +23 -18
  29. package/dist/client/hooks.d.mts +2 -2
  30. package/dist/client/hooks.d.ts +2 -2
  31. package/dist/file/client.cjs.js +20 -23
  32. package/dist/file/client.d.mts +4 -10
  33. package/dist/file/client.d.ts +4 -10
  34. package/dist/file/client.esm.js +19 -22
  35. package/dist/file/index.cjs.js +47 -55
  36. package/dist/file/index.d.mts +0 -1
  37. package/dist/file/index.d.ts +0 -1
  38. package/dist/file/index.esm.js +47 -55
  39. package/dist/file/put.cjs.js +29 -58
  40. package/dist/file/put.d.mts +2 -1
  41. package/dist/file/put.d.ts +2 -1
  42. package/dist/file/put.esm.js +29 -58
  43. package/dist/file/setup.cjs.js +47 -55
  44. package/dist/file/setup.d.mts +16 -12
  45. package/dist/file/setup.d.ts +16 -12
  46. package/dist/file/setup.esm.js +47 -55
  47. package/dist/file/utils.cjs.js +29 -27
  48. package/dist/file/utils.d.mts +9 -6
  49. package/dist/file/utils.d.ts +9 -6
  50. package/dist/file/utils.esm.js +24 -22
  51. package/dist/graphql/client.cjs.js +11 -34
  52. package/dist/graphql/client.d.mts +3 -9
  53. package/dist/graphql/client.d.ts +3 -9
  54. package/dist/graphql/client.esm.js +8 -30
  55. package/dist/graphql/server.d.mts +2 -2
  56. package/dist/graphql/server.d.ts +2 -2
  57. package/dist/graphql/types.d.mts +2 -0
  58. package/dist/graphql/types.d.ts +2 -0
  59. package/package.json +1 -1
@@ -17,16 +17,40 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/auth/email/client.ts
20
+ // src/auth/email/client.tsx
21
21
  var client_exports = {};
22
22
  __export(client_exports, {
23
- getEmailAuthUtils: () => getEmailAuthUtils
23
+ TokenContext: () => TokenContext,
24
+ getApolloWrapper: () => getApolloWrapper,
25
+ getEmailAuthUtils: () => getEmailAuthUtils,
26
+ useSetToken: () => useSetToken,
27
+ useToken: () => useToken
24
28
  });
25
29
  module.exports = __toCommonJS(client_exports);
26
- var import_client = require("naystack/graphql/client");
27
30
  var import_react = require("react");
31
+ var TokenContext = (0, import_react.createContext)({
32
+ token: null,
33
+ setToken: () => null
34
+ });
35
+ var getApolloWrapper = (endpoint) => ({ children }) => {
36
+ const [token, setToken] = (0, import_react.useState)(null);
37
+ (0, import_react.useEffect)(() => {
38
+ fetch(endpoint, {
39
+ credentials: "include"
40
+ }).then((res) => res.json()).then((data) => setToken(data.accessToken));
41
+ }, []);
42
+ return /* @__PURE__ */ React.createElement(TokenContext.Provider, { value: { token, setToken } }, children);
43
+ };
44
+ function useToken() {
45
+ const { token } = (0, import_react.useContext)(TokenContext);
46
+ return token;
47
+ }
48
+ function useSetToken() {
49
+ const { setToken } = (0, import_react.useContext)(TokenContext);
50
+ return setToken;
51
+ }
28
52
  function useSignUpWithEmail(endpoint) {
29
- const setToken = (0, import_client.useSetToken)();
53
+ const setToken = useSetToken();
30
54
  return (0, import_react.useCallback)(
31
55
  async (data) => {
32
56
  const res = await fetch(endpoint, {
@@ -45,7 +69,7 @@ function useSignUpWithEmail(endpoint) {
45
69
  );
46
70
  }
47
71
  function useLoginWithEmail(endpoint) {
48
- const setToken = (0, import_client.useSetToken)();
72
+ const setToken = useSetToken();
49
73
  return (0, import_react.useCallback)(
50
74
  async (data) => {
51
75
  const res = await fetch(endpoint, {
@@ -64,7 +88,7 @@ function useLoginWithEmail(endpoint) {
64
88
  );
65
89
  }
66
90
  function useLogout(endpoint) {
67
- const setToken = (0, import_client.useSetToken)();
91
+ const setToken = useSetToken();
68
92
  return (0, import_react.useCallback)(
69
93
  async (data) => {
70
94
  setToken(null);
@@ -86,5 +110,9 @@ function getEmailAuthUtils(endpoint) {
86
110
  }
87
111
  // Annotate the CommonJS export names for ESM import in node:
88
112
  0 && (module.exports = {
89
- getEmailAuthUtils
113
+ TokenContext,
114
+ getApolloWrapper,
115
+ getEmailAuthUtils,
116
+ useSetToken,
117
+ useToken
90
118
  });
@@ -1,7 +1,19 @@
1
+ import * as react from 'react';
2
+ import { Dispatch, SetStateAction } from 'react';
3
+
4
+ declare const TokenContext: react.Context<{
5
+ token: string | null;
6
+ setToken: Dispatch<SetStateAction<string | null>>;
7
+ }>;
8
+ declare const getApolloWrapper: (endpoint: string) => ({ children }: {
9
+ children: React.ReactNode;
10
+ }) => react.JSX.Element;
11
+ declare function useToken(): string | null;
12
+ declare function useSetToken(): Dispatch<SetStateAction<string | null>>;
1
13
  declare function getEmailAuthUtils(endpoint: string): {
2
14
  useSignUp: () => (data: object) => Promise<string | null>;
3
15
  useLogin: () => (data: object) => Promise<string | null>;
4
16
  useLogout: () => (data?: object) => Promise<void>;
5
17
  };
6
18
 
7
- export { getEmailAuthUtils };
19
+ export { TokenContext, getApolloWrapper, getEmailAuthUtils, useSetToken, useToken };
@@ -1,7 +1,19 @@
1
+ import * as react from 'react';
2
+ import { Dispatch, SetStateAction } from 'react';
3
+
4
+ declare const TokenContext: react.Context<{
5
+ token: string | null;
6
+ setToken: Dispatch<SetStateAction<string | null>>;
7
+ }>;
8
+ declare const getApolloWrapper: (endpoint: string) => ({ children }: {
9
+ children: React.ReactNode;
10
+ }) => react.JSX.Element;
11
+ declare function useToken(): string | null;
12
+ declare function useSetToken(): Dispatch<SetStateAction<string | null>>;
1
13
  declare function getEmailAuthUtils(endpoint: string): {
2
14
  useSignUp: () => (data: object) => Promise<string | null>;
3
15
  useLogin: () => (data: object) => Promise<string | null>;
4
16
  useLogout: () => (data?: object) => Promise<void>;
5
17
  };
6
18
 
7
- export { getEmailAuthUtils };
19
+ export { TokenContext, getApolloWrapper, getEmailAuthUtils, useSetToken, useToken };
@@ -1,6 +1,32 @@
1
- // src/auth/email/client.ts
2
- import { useSetToken } from "naystack/graphql/client";
3
- import { useCallback } from "react";
1
+ // src/auth/email/client.tsx
2
+ import {
3
+ createContext,
4
+ useCallback,
5
+ useContext,
6
+ useEffect,
7
+ useState
8
+ } from "react";
9
+ var TokenContext = createContext({
10
+ token: null,
11
+ setToken: () => null
12
+ });
13
+ var getApolloWrapper = (endpoint) => ({ children }) => {
14
+ const [token, setToken] = useState(null);
15
+ useEffect(() => {
16
+ fetch(endpoint, {
17
+ credentials: "include"
18
+ }).then((res) => res.json()).then((data) => setToken(data.accessToken));
19
+ }, []);
20
+ return /* @__PURE__ */ React.createElement(TokenContext.Provider, { value: { token, setToken } }, children);
21
+ };
22
+ function useToken() {
23
+ const { token } = useContext(TokenContext);
24
+ return token;
25
+ }
26
+ function useSetToken() {
27
+ const { setToken } = useContext(TokenContext);
28
+ return setToken;
29
+ }
4
30
  function useSignUpWithEmail(endpoint) {
5
31
  const setToken = useSetToken();
6
32
  return useCallback(
@@ -61,5 +87,9 @@ function getEmailAuthUtils(endpoint) {
61
87
  };
62
88
  }
63
89
  export {
64
- getEmailAuthUtils
90
+ TokenContext,
91
+ getApolloWrapper,
92
+ getEmailAuthUtils,
93
+ useSetToken,
94
+ useToken
65
95
  };
@@ -128,42 +128,49 @@ async function verifyCaptcha(token, secret) {
128
128
  }
129
129
  return false;
130
130
  }
131
- var getUserContext = (refreshKey, signingKey, req) => {
131
+ var getContext = (refreshKey, signingKey, req) => {
132
132
  const bearer = req.headers.get("authorization");
133
133
  if (!bearer) {
134
134
  const refresh = req.cookies.get("refresh")?.value;
135
135
  const userId = getUserIdFromRefreshToken(refreshKey, refresh);
136
- if (userId) return { refreshUserID: userId };
137
- return null;
136
+ if (userId) return { userId, isRefreshID: true };
137
+ return { userId: null };
138
138
  }
139
139
  const token = bearer.slice(7);
140
140
  try {
141
141
  const res = (0, import_jsonwebtoken2.verify)(token, signingKey);
142
142
  if (typeof res === "string") {
143
- return null;
143
+ return { userId: null };
144
144
  }
145
145
  return {
146
- accessUserId: res.id
146
+ userId: res.id
147
147
  };
148
148
  } catch {
149
149
  }
150
- return null;
150
+ return { userId: null };
151
151
  };
152
152
 
153
153
  // src/auth/email/routes/delete.ts
154
154
  var getDeleteRoute = (options) => async (req) => {
155
- if (options.onLogout) await options.onLogout?.(await req.json());
155
+ if (options.onLogout) {
156
+ const ctx = await getContext(options.refreshKey, options.signingKey, req);
157
+ await options.onLogout?.(ctx.userId, req);
158
+ }
156
159
  return getTokenizedResponse(void 0, "");
157
160
  };
158
161
 
159
162
  // src/auth/email/routes/get.ts
160
- var getGetRoute = (options) => (req) => {
163
+ var getGetRoute = (options) => async (req) => {
161
164
  const refresh = req.cookies.get("refresh")?.value;
162
165
  const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
163
- if (userID)
166
+ if (userID) {
167
+ if (options.onRefresh) {
168
+ await options.onRefresh?.(userID, req);
169
+ }
164
170
  return getTokenizedResponse(
165
171
  generateAccessToken(userID, options.signingKey)
166
172
  );
173
+ }
167
174
  return getTokenizedResponse();
168
175
  };
169
176
 
@@ -188,7 +195,9 @@ var getPostRoute = (options) => async (req) => {
188
195
  password: encryptedPassword
189
196
  });
190
197
  if (newUser) {
191
- options.onSignUp?.(newUser);
198
+ if (options.onSignUp) {
199
+ await options.onSignUp?.(newUser.id, req);
200
+ }
192
201
  return getTokenizedResponse(
193
202
  generateAccessToken(newUser.id, options.signingKey),
194
203
  generateRefreshToken(newUser.id, options.refreshKey)
@@ -205,6 +214,9 @@ var getPutRoute = (options) => async (req) => {
205
214
  if (!user)
206
215
  return handleError(400, "A user does not exist", options.onError);
207
216
  if (await verifyUser(user, data.password)) {
217
+ if (options.onLogin) {
218
+ await options.onLogin?.(user.id, req);
219
+ }
208
220
  return getTokenizedResponse(
209
221
  generateAccessToken(user.id, options.signingKey),
210
222
  generateRefreshToken(user.id, options.refreshKey)
@@ -220,14 +232,7 @@ function getEmailAuthRoutes(options) {
220
232
  POST: getPostRoute(options),
221
233
  PUT: getPutRoute(options),
222
234
  DELETE: getDeleteRoute(options),
223
- getContext: (req) => {
224
- const ids = getUserContext(options.refreshKey, options.signingKey, req);
225
- if (!ids) return { userId: null };
226
- if (ids.refreshUserID) {
227
- return { userId: ids.refreshUserID, isRefreshID: true };
228
- }
229
- return { userId: ids.accessUserId };
230
- }
235
+ getContext: (req) => getContext(options.refreshKey, options.signingKey, req)
231
236
  };
232
237
  }
233
238
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,29 +1,21 @@
1
1
  import * as next_server from 'next/server';
2
2
  import { NextRequest } from 'next/server';
3
+ import { Context } from '../../graphql/types.mjs';
3
4
  import { InitRoutesOptions } from './types.mjs';
4
5
  import '../types.mjs';
5
6
 
6
7
  declare function getEmailAuthRoutes(options: InitRoutesOptions): {
7
- GET: (req: NextRequest) => next_server.NextResponse<{
8
+ GET: (req: NextRequest) => Promise<next_server.NextResponse<{
8
9
  accessToken: string | undefined;
9
10
  refreshToken: string | undefined;
10
- }>;
11
+ }>>;
11
12
  POST: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
12
13
  PUT: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
13
14
  DELETE: (req: NextRequest) => Promise<next_server.NextResponse<{
14
15
  accessToken: string | undefined;
15
16
  refreshToken: string | undefined;
16
17
  }>>;
17
- getContext: (req: NextRequest) => {
18
- userId: null;
19
- isRefreshID?: undefined;
20
- } | {
21
- userId: number;
22
- isRefreshID: boolean;
23
- } | {
24
- userId: number | undefined;
25
- isRefreshID?: undefined;
26
- };
18
+ getContext: (req: NextRequest) => Context;
27
19
  };
28
20
 
29
21
  export { getEmailAuthRoutes };
@@ -1,29 +1,21 @@
1
1
  import * as next_server from 'next/server';
2
2
  import { NextRequest } from 'next/server';
3
+ import { Context } from '../../graphql/types.js';
3
4
  import { InitRoutesOptions } from './types.js';
4
5
  import '../types.js';
5
6
 
6
7
  declare function getEmailAuthRoutes(options: InitRoutesOptions): {
7
- GET: (req: NextRequest) => next_server.NextResponse<{
8
+ GET: (req: NextRequest) => Promise<next_server.NextResponse<{
8
9
  accessToken: string | undefined;
9
10
  refreshToken: string | undefined;
10
- }>;
11
+ }>>;
11
12
  POST: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
12
13
  PUT: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
13
14
  DELETE: (req: NextRequest) => Promise<next_server.NextResponse<{
14
15
  accessToken: string | undefined;
15
16
  refreshToken: string | undefined;
16
17
  }>>;
17
- getContext: (req: NextRequest) => {
18
- userId: null;
19
- isRefreshID?: undefined;
20
- } | {
21
- userId: number;
22
- isRefreshID: boolean;
23
- } | {
24
- userId: number | undefined;
25
- isRefreshID?: undefined;
26
- };
18
+ getContext: (req: NextRequest) => Context;
27
19
  };
28
20
 
29
21
  export { getEmailAuthRoutes };
@@ -102,42 +102,49 @@ async function verifyCaptcha(token, secret) {
102
102
  }
103
103
  return false;
104
104
  }
105
- var getUserContext = (refreshKey, signingKey, req) => {
105
+ var getContext = (refreshKey, signingKey, req) => {
106
106
  const bearer = req.headers.get("authorization");
107
107
  if (!bearer) {
108
108
  const refresh = req.cookies.get("refresh")?.value;
109
109
  const userId = getUserIdFromRefreshToken(refreshKey, refresh);
110
- if (userId) return { refreshUserID: userId };
111
- return null;
110
+ if (userId) return { userId, isRefreshID: true };
111
+ return { userId: null };
112
112
  }
113
113
  const token = bearer.slice(7);
114
114
  try {
115
115
  const res = verify2(token, signingKey);
116
116
  if (typeof res === "string") {
117
- return null;
117
+ return { userId: null };
118
118
  }
119
119
  return {
120
- accessUserId: res.id
120
+ userId: res.id
121
121
  };
122
122
  } catch {
123
123
  }
124
- return null;
124
+ return { userId: null };
125
125
  };
126
126
 
127
127
  // src/auth/email/routes/delete.ts
128
128
  var getDeleteRoute = (options) => async (req) => {
129
- if (options.onLogout) await options.onLogout?.(await req.json());
129
+ if (options.onLogout) {
130
+ const ctx = await getContext(options.refreshKey, options.signingKey, req);
131
+ await options.onLogout?.(ctx.userId, req);
132
+ }
130
133
  return getTokenizedResponse(void 0, "");
131
134
  };
132
135
 
133
136
  // src/auth/email/routes/get.ts
134
- var getGetRoute = (options) => (req) => {
137
+ var getGetRoute = (options) => async (req) => {
135
138
  const refresh = req.cookies.get("refresh")?.value;
136
139
  const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
137
- if (userID)
140
+ if (userID) {
141
+ if (options.onRefresh) {
142
+ await options.onRefresh?.(userID, req);
143
+ }
138
144
  return getTokenizedResponse(
139
145
  generateAccessToken(userID, options.signingKey)
140
146
  );
147
+ }
141
148
  return getTokenizedResponse();
142
149
  };
143
150
 
@@ -162,7 +169,9 @@ var getPostRoute = (options) => async (req) => {
162
169
  password: encryptedPassword
163
170
  });
164
171
  if (newUser) {
165
- options.onSignUp?.(newUser);
172
+ if (options.onSignUp) {
173
+ await options.onSignUp?.(newUser.id, req);
174
+ }
166
175
  return getTokenizedResponse(
167
176
  generateAccessToken(newUser.id, options.signingKey),
168
177
  generateRefreshToken(newUser.id, options.refreshKey)
@@ -179,6 +188,9 @@ var getPutRoute = (options) => async (req) => {
179
188
  if (!user)
180
189
  return handleError(400, "A user does not exist", options.onError);
181
190
  if (await verifyUser(user, data.password)) {
191
+ if (options.onLogin) {
192
+ await options.onLogin?.(user.id, req);
193
+ }
182
194
  return getTokenizedResponse(
183
195
  generateAccessToken(user.id, options.signingKey),
184
196
  generateRefreshToken(user.id, options.refreshKey)
@@ -194,14 +206,7 @@ function getEmailAuthRoutes(options) {
194
206
  POST: getPostRoute(options),
195
207
  PUT: getPutRoute(options),
196
208
  DELETE: getDeleteRoute(options),
197
- getContext: (req) => {
198
- const ids = getUserContext(options.refreshKey, options.signingKey, req);
199
- if (!ids) return { userId: null };
200
- if (ids.refreshUserID) {
201
- return { userId: ids.refreshUserID, isRefreshID: true };
202
- }
203
- return { userId: ids.accessUserId };
204
- }
209
+ getContext: (req) => getContext(options.refreshKey, options.signingKey, req)
205
210
  };
206
211
  }
207
212
  export {
@@ -49,10 +49,54 @@ function getTokenizedResponse(accessToken, refreshToken) {
49
49
  }
50
50
  return response;
51
51
  }
52
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
53
+ if (refreshToken)
54
+ try {
55
+ const decoded = (0, import_jsonwebtoken.verify)(refreshToken, refreshKey);
56
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
57
+ return decoded.id;
58
+ } catch (e) {
59
+ if (!(e instanceof import_jsonwebtoken.JsonWebTokenError)) console.error(e, "errors");
60
+ return null;
61
+ }
62
+ return null;
63
+ }
64
+
65
+ // src/auth/email/utils.ts
66
+ var import_jsonwebtoken2 = require("jsonwebtoken");
67
+
68
+ // src/auth/utils/errors.ts
69
+ var import_server2 = require("next/server");
70
+
71
+ // src/auth/email/utils.ts
72
+ var getContext = (refreshKey, signingKey, req) => {
73
+ const bearer = req.headers.get("authorization");
74
+ if (!bearer) {
75
+ const refresh = req.cookies.get("refresh")?.value;
76
+ const userId = getUserIdFromRefreshToken(refreshKey, refresh);
77
+ if (userId) return { userId, isRefreshID: true };
78
+ return { userId: null };
79
+ }
80
+ const token = bearer.slice(7);
81
+ try {
82
+ const res = (0, import_jsonwebtoken2.verify)(token, signingKey);
83
+ if (typeof res === "string") {
84
+ return { userId: null };
85
+ }
86
+ return {
87
+ userId: res.id
88
+ };
89
+ } catch {
90
+ }
91
+ return { userId: null };
92
+ };
52
93
 
53
94
  // src/auth/email/routes/delete.ts
54
95
  var getDeleteRoute = (options) => async (req) => {
55
- if (options.onLogout) await options.onLogout?.(await req.json());
96
+ if (options.onLogout) {
97
+ const ctx = await getContext(options.refreshKey, options.signingKey, req);
98
+ await options.onLogout?.(ctx.userId, req);
99
+ }
56
100
  return getTokenizedResponse(void 0, "");
57
101
  };
58
102
  // Annotate the CommonJS export names for ESM import in node:
@@ -23,10 +23,54 @@ function getTokenizedResponse(accessToken, refreshToken) {
23
23
  }
24
24
  return response;
25
25
  }
26
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
27
+ if (refreshToken)
28
+ try {
29
+ const decoded = verify(refreshToken, refreshKey);
30
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
31
+ return decoded.id;
32
+ } catch (e) {
33
+ if (!(e instanceof JsonWebTokenError)) console.error(e, "errors");
34
+ return null;
35
+ }
36
+ return null;
37
+ }
38
+
39
+ // src/auth/email/utils.ts
40
+ import { verify as verify2 } from "jsonwebtoken";
41
+
42
+ // src/auth/utils/errors.ts
43
+ import { NextResponse as NextResponse2 } from "next/server";
44
+
45
+ // src/auth/email/utils.ts
46
+ var getContext = (refreshKey, signingKey, req) => {
47
+ const bearer = req.headers.get("authorization");
48
+ if (!bearer) {
49
+ const refresh = req.cookies.get("refresh")?.value;
50
+ const userId = getUserIdFromRefreshToken(refreshKey, refresh);
51
+ if (userId) return { userId, isRefreshID: true };
52
+ return { userId: null };
53
+ }
54
+ const token = bearer.slice(7);
55
+ try {
56
+ const res = verify2(token, signingKey);
57
+ if (typeof res === "string") {
58
+ return { userId: null };
59
+ }
60
+ return {
61
+ userId: res.id
62
+ };
63
+ } catch {
64
+ }
65
+ return { userId: null };
66
+ };
26
67
 
27
68
  // src/auth/email/routes/delete.ts
28
69
  var getDeleteRoute = (options) => async (req) => {
29
- if (options.onLogout) await options.onLogout?.(await req.json());
70
+ if (options.onLogout) {
71
+ const ctx = await getContext(options.refreshKey, options.signingKey, req);
72
+ await options.onLogout?.(ctx.userId, req);
73
+ }
30
74
  return getTokenizedResponse(void 0, "");
31
75
  };
32
76
  export {
@@ -68,13 +68,17 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
68
68
  }
69
69
 
70
70
  // src/auth/email/routes/get.ts
71
- var getGetRoute = (options) => (req) => {
71
+ var getGetRoute = (options) => async (req) => {
72
72
  const refresh = req.cookies.get("refresh")?.value;
73
73
  const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
74
- if (userID)
74
+ if (userID) {
75
+ if (options.onRefresh) {
76
+ await options.onRefresh?.(userID, req);
77
+ }
75
78
  return getTokenizedResponse(
76
79
  generateAccessToken(userID, options.signingKey)
77
80
  );
81
+ }
78
82
  return getTokenizedResponse();
79
83
  };
80
84
  // Annotate the CommonJS export names for ESM import in node:
@@ -3,9 +3,9 @@ import { NextRequest } from 'next/server';
3
3
  import { InitRoutesOptions } from '../types.mjs';
4
4
  import '../../types.mjs';
5
5
 
6
- declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => next_server.NextResponse<{
6
+ declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => Promise<next_server.NextResponse<{
7
7
  accessToken: string | undefined;
8
8
  refreshToken: string | undefined;
9
- }>;
9
+ }>>;
10
10
 
11
11
  export { getGetRoute };
@@ -3,9 +3,9 @@ import { NextRequest } from 'next/server';
3
3
  import { InitRoutesOptions } from '../types.js';
4
4
  import '../../types.js';
5
5
 
6
- declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => next_server.NextResponse<{
6
+ declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => Promise<next_server.NextResponse<{
7
7
  accessToken: string | undefined;
8
8
  refreshToken: string | undefined;
9
- }>;
9
+ }>>;
10
10
 
11
11
  export { getGetRoute };
@@ -42,13 +42,17 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
42
42
  }
43
43
 
44
44
  // src/auth/email/routes/get.ts
45
- var getGetRoute = (options) => (req) => {
45
+ var getGetRoute = (options) => async (req) => {
46
46
  const refresh = req.cookies.get("refresh")?.value;
47
47
  const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
48
- if (userID)
48
+ if (userID) {
49
+ if (options.onRefresh) {
50
+ await options.onRefresh?.(userID, req);
51
+ }
49
52
  return getTokenizedResponse(
50
53
  generateAccessToken(userID, options.signingKey)
51
54
  );
55
+ }
52
56
  return getTokenizedResponse();
53
57
  };
54
58
  export {
@@ -136,7 +136,9 @@ var getPostRoute = (options) => async (req) => {
136
136
  password: encryptedPassword
137
137
  });
138
138
  if (newUser) {
139
- options.onSignUp?.(newUser);
139
+ if (options.onSignUp) {
140
+ await options.onSignUp?.(newUser.id, req);
141
+ }
140
142
  return getTokenizedResponse(
141
143
  generateAccessToken(newUser.id, options.signingKey),
142
144
  generateRefreshToken(newUser.id, options.refreshKey)
@@ -112,7 +112,9 @@ var getPostRoute = (options) => async (req) => {
112
112
  password: encryptedPassword
113
113
  });
114
114
  if (newUser) {
115
- options.onSignUp?.(newUser);
115
+ if (options.onSignUp) {
116
+ await options.onSignUp?.(newUser.id, req);
117
+ }
116
118
  return getTokenizedResponse(
117
119
  generateAccessToken(newUser.id, options.signingKey),
118
120
  generateRefreshToken(newUser.id, options.refreshKey)
@@ -123,6 +123,9 @@ var getPutRoute = (options) => async (req) => {
123
123
  if (!user)
124
124
  return handleError(400, "A user does not exist", options.onError);
125
125
  if (await verifyUser(user, data.password)) {
126
+ if (options.onLogin) {
127
+ await options.onLogin?.(user.id, req);
128
+ }
126
129
  return getTokenizedResponse(
127
130
  generateAccessToken(user.id, options.signingKey),
128
131
  generateRefreshToken(user.id, options.refreshKey)
@@ -97,6 +97,9 @@ var getPutRoute = (options) => async (req) => {
97
97
  if (!user)
98
98
  return handleError(400, "A user does not exist", options.onError);
99
99
  if (await verifyUser(user, data.password)) {
100
+ if (options.onLogin) {
101
+ await options.onLogin?.(user.id, req);
102
+ }
100
103
  return getTokenizedResponse(
101
104
  generateAccessToken(user.id, options.signingKey),
102
105
  generateRefreshToken(user.id, options.refreshKey)
@@ -1,5 +1,5 @@
1
+ import { NextRequest } from 'next/server';
1
2
  import { UserOutput, UserInput, ErrorHandler } from '../types.mjs';
2
- import 'next/server';
3
3
 
4
4
  type InitRoutesOptions = {
5
5
  getUser: (email: string) => Promise<UserOutput | undefined>;
@@ -8,8 +8,10 @@ type InitRoutesOptions = {
8
8
  signingKey: string;
9
9
  refreshKey: string;
10
10
  turnstileKey?: string;
11
- onSignUp?: (user: UserOutput) => void;
12
- onLogout?: (body: string) => Promise<void>;
11
+ onSignUp?: (userId: number | null, req: NextRequest) => Promise<void>;
12
+ onLogin?: (userId: number | null, req: NextRequest) => Promise<void>;
13
+ onRefresh?: (userId: number | null, req: NextRequest) => Promise<void>;
14
+ onLogout?: (userId: number | null, req: NextRequest) => Promise<void>;
13
15
  };
14
16
 
15
17
  export type { InitRoutesOptions };