naystack 1.1.11 → 1.1.12-beta.10

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 (115) hide show
  1. package/dist/auth/email/index.cjs.js +226 -0
  2. package/dist/auth/email/index.d.mts +23 -0
  3. package/dist/auth/email/index.d.ts +23 -0
  4. package/dist/auth/email/index.esm.js +199 -0
  5. package/dist/auth/email/routes/delete.cjs.js +58 -0
  6. package/dist/auth/email/routes/delete.d.mts +8 -0
  7. package/dist/auth/email/routes/delete.d.ts +8 -0
  8. package/dist/auth/email/routes/delete.esm.js +31 -0
  9. package/dist/auth/email/routes/get.cjs.js +83 -0
  10. package/dist/auth/email/routes/get.d.mts +11 -0
  11. package/dist/auth/email/routes/get.d.ts +11 -0
  12. package/dist/auth/email/routes/get.esm.js +56 -0
  13. package/dist/auth/email/routes/post.cjs.js +150 -0
  14. package/dist/auth/email/routes/post.d.mts +8 -0
  15. package/dist/auth/email/routes/post.d.ts +8 -0
  16. package/dist/auth/email/routes/post.esm.js +125 -0
  17. package/dist/auth/email/routes/put.cjs.js +136 -0
  18. package/dist/auth/email/routes/put.d.mts +8 -0
  19. package/dist/auth/email/routes/put.d.ts +8 -0
  20. package/dist/auth/email/routes/put.esm.js +109 -0
  21. package/dist/auth/email/token.cjs.js +85 -0
  22. package/dist/auth/email/token.d.mts +13 -0
  23. package/dist/auth/email/token.d.ts +13 -0
  24. package/dist/auth/email/token.esm.js +56 -0
  25. package/dist/auth/email/types.cjs.js +18 -0
  26. package/dist/auth/email/types.d.mts +14 -0
  27. package/dist/auth/email/types.d.ts +14 -0
  28. package/dist/auth/email/types.esm.js +0 -0
  29. package/dist/auth/email/utils.cjs.js +124 -0
  30. package/dist/auth/email/utils.d.mts +20 -0
  31. package/dist/auth/email/utils.d.ts +20 -0
  32. package/dist/auth/email/utils.esm.js +97 -0
  33. package/dist/auth/google/index.cjs.js +31 -0
  34. package/dist/auth/google/index.d.mts +3 -0
  35. package/dist/auth/google/index.d.ts +3 -0
  36. package/dist/auth/google/index.esm.js +6 -0
  37. package/dist/auth/google/oauth.cjs.js +35 -0
  38. package/dist/auth/google/oauth.d.mts +5 -0
  39. package/dist/auth/google/oauth.d.ts +5 -0
  40. package/dist/auth/google/oauth.esm.js +10 -0
  41. package/dist/auth/index.cjs.js +41 -18
  42. package/dist/auth/index.d.mts +4 -45
  43. package/dist/auth/index.d.ts +4 -45
  44. package/dist/auth/index.esm.js +41 -18
  45. package/dist/auth/types.cjs.js +18 -0
  46. package/dist/auth/types.d.mts +21 -0
  47. package/dist/auth/types.d.ts +21 -0
  48. package/dist/auth/types.esm.js +0 -0
  49. package/dist/auth/utils/errors.cjs.js +35 -0
  50. package/dist/auth/utils/errors.d.mts +6 -0
  51. package/dist/auth/utils/errors.d.ts +6 -0
  52. package/dist/auth/utils/errors.esm.js +10 -0
  53. package/dist/graphql/index.cjs.js +117 -59
  54. package/dist/graphql/index.d.mts +6 -23
  55. package/dist/graphql/index.d.ts +6 -23
  56. package/dist/graphql/index.esm.js +122 -56
  57. package/dist/graphql/init.cjs.js +73 -0
  58. package/dist/graphql/init.d.mts +16 -0
  59. package/dist/graphql/init.d.ts +16 -0
  60. package/dist/graphql/init.esm.js +53 -0
  61. package/dist/graphql/types.cjs.js +18 -0
  62. package/dist/graphql/types.d.mts +8 -0
  63. package/dist/graphql/types.d.ts +8 -0
  64. package/dist/graphql/types.esm.js +0 -0
  65. package/dist/graphql/utils.cjs.js +134 -0
  66. package/dist/graphql/utils.d.mts +29 -0
  67. package/dist/graphql/utils.d.ts +29 -0
  68. package/dist/graphql/utils.esm.js +118 -0
  69. package/dist/socials/index.d.mts +9 -130
  70. package/dist/socials/index.d.ts +9 -130
  71. package/dist/socials/instagram/getters.cjs.js +119 -0
  72. package/dist/socials/instagram/getters.d.mts +39 -0
  73. package/dist/socials/instagram/getters.d.ts +39 -0
  74. package/dist/socials/instagram/getters.esm.js +86 -0
  75. package/dist/socials/instagram/setters.cjs.js +54 -0
  76. package/dist/socials/instagram/setters.d.mts +8 -0
  77. package/dist/socials/instagram/setters.d.ts +8 -0
  78. package/dist/socials/instagram/setters.esm.js +27 -0
  79. package/dist/socials/instagram/types.cjs.js +18 -0
  80. package/dist/socials/instagram/types.d.mts +57 -0
  81. package/dist/socials/instagram/types.d.ts +57 -0
  82. package/dist/socials/instagram/types.esm.js +0 -0
  83. package/dist/socials/instagram/utils.cjs.js +44 -0
  84. package/dist/socials/instagram/utils.d.mts +6 -0
  85. package/dist/socials/instagram/utils.d.ts +6 -0
  86. package/dist/socials/instagram/utils.esm.js +18 -0
  87. package/dist/socials/instagram/webhook.cjs.js +57 -0
  88. package/dist/socials/instagram/webhook.d.mts +12 -0
  89. package/dist/socials/instagram/webhook.d.ts +12 -0
  90. package/dist/socials/instagram/webhook.esm.js +30 -0
  91. package/dist/socials/meta-webhook.cjs.js +36 -0
  92. package/dist/socials/meta-webhook.d.mts +5 -0
  93. package/dist/socials/meta-webhook.d.ts +5 -0
  94. package/dist/socials/meta-webhook.esm.js +11 -0
  95. package/dist/socials/threads/getters.cjs.js +60 -0
  96. package/dist/socials/threads/getters.d.mts +7 -0
  97. package/dist/socials/threads/getters.d.ts +7 -0
  98. package/dist/socials/threads/getters.esm.js +31 -0
  99. package/dist/socials/threads/setters.cjs.js +87 -0
  100. package/dist/socials/threads/setters.d.mts +6 -0
  101. package/dist/socials/threads/setters.d.ts +6 -0
  102. package/dist/socials/threads/setters.esm.js +57 -0
  103. package/dist/socials/threads/types.cjs.js +18 -0
  104. package/dist/socials/threads/types.d.mts +7 -0
  105. package/dist/socials/threads/types.d.ts +7 -0
  106. package/dist/socials/threads/types.esm.js +0 -0
  107. package/dist/socials/threads/utils.cjs.js +39 -0
  108. package/dist/socials/threads/utils.d.mts +4 -0
  109. package/dist/socials/threads/utils.d.ts +4 -0
  110. package/dist/socials/threads/utils.esm.js +13 -0
  111. package/dist/socials/threads/webhook.cjs.js +54 -0
  112. package/dist/socials/threads/webhook.d.mts +12 -0
  113. package/dist/socials/threads/webhook.d.ts +12 -0
  114. package/dist/socials/threads/webhook.esm.js +27 -0
  115. package/package.json +6 -3
@@ -0,0 +1,226 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/auth/email/index.ts
21
+ var email_exports = {};
22
+ __export(email_exports, {
23
+ getEmailAuthRoutes: () => getEmailAuthRoutes
24
+ });
25
+ module.exports = __toCommonJS(email_exports);
26
+
27
+ // src/auth/email/utils.ts
28
+ var import_jsonwebtoken2 = require("jsonwebtoken");
29
+
30
+ // src/auth/email/token.ts
31
+ var import_bcryptjs = require("bcryptjs");
32
+ var import_jsonwebtoken = require("jsonwebtoken");
33
+ var import_server = require("next/server");
34
+ function generateAccessToken(id, signingKey) {
35
+ return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
36
+ expiresIn: "2h"
37
+ });
38
+ }
39
+ function generateRefreshToken(id, refreshKey) {
40
+ return (0, import_jsonwebtoken.sign)({ id }, refreshKey);
41
+ }
42
+ function getTokenizedResponse(accessToken, refreshToken) {
43
+ const body = { accessToken, refreshToken };
44
+ const response = import_server.NextResponse.json(body, {
45
+ status: 200
46
+ });
47
+ if (!accessToken) {
48
+ response.cookies.set("refresh", "", {
49
+ secure: false,
50
+ httpOnly: true,
51
+ expires: 0
52
+ });
53
+ }
54
+ if (refreshToken !== void 0) {
55
+ response.cookies.set("refresh", refreshToken, {
56
+ secure: false,
57
+ httpOnly: true,
58
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
59
+ });
60
+ }
61
+ return response;
62
+ }
63
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
64
+ if (refreshToken)
65
+ try {
66
+ const decoded = (0, import_jsonwebtoken.verify)(refreshToken, refreshKey);
67
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
68
+ return decoded.id;
69
+ } catch (e) {
70
+ if (!(e instanceof import_jsonwebtoken.JsonWebTokenError)) console.error(e, "errors");
71
+ return null;
72
+ }
73
+ return null;
74
+ }
75
+ function verifyUser(user, password) {
76
+ if (!user.password) return false;
77
+ return (0, import_bcryptjs.compare)(password, user.password);
78
+ }
79
+
80
+ // src/auth/utils/errors.ts
81
+ var import_server2 = require("next/server");
82
+ function handleError(status, message, onError) {
83
+ const res = onError?.({ status, message });
84
+ if (res) return res;
85
+ return new import_server2.NextResponse(message, { status });
86
+ }
87
+
88
+ // src/auth/email/utils.ts
89
+ async function massageRequest(req, options) {
90
+ const data = await req.json();
91
+ if (!data.email || !data.password)
92
+ return {
93
+ error: handleError(400, "Missing email or password", options.onError)
94
+ };
95
+ if (options.turnstileKey) {
96
+ if (!data.captchaToken)
97
+ return { error: handleError(400, "Missing captcha", options.onError) };
98
+ if (!await verifyCaptcha(data.captchaToken, options.turnstileKey))
99
+ return {
100
+ error: handleError(400, "Invalid captcha", options.onError)
101
+ };
102
+ }
103
+ return {
104
+ data: {
105
+ email: data.email,
106
+ password: data.password,
107
+ ...data
108
+ }
109
+ };
110
+ }
111
+ async function verifyCaptcha(token, secret) {
112
+ const res = await fetch(
113
+ "https://challenges.cloudflare.com/turnstile/v0/siteverify",
114
+ {
115
+ method: "POST",
116
+ headers: {
117
+ "Content-Type": "application/json"
118
+ },
119
+ body: JSON.stringify({
120
+ secret,
121
+ response: token
122
+ })
123
+ }
124
+ );
125
+ if (res.ok) {
126
+ const data = await res.json();
127
+ return data.success;
128
+ }
129
+ return false;
130
+ }
131
+ var getUserContext = (refreshKey, signingKey, req) => {
132
+ const bearer = req.headers.get("authorization");
133
+ if (!bearer) {
134
+ const refresh = req.cookies.get("refresh")?.value;
135
+ const userId = getUserIdFromRefreshToken(refreshKey, refresh);
136
+ if (userId) return { refreshUserID: userId };
137
+ return null;
138
+ }
139
+ const token = bearer.slice(7);
140
+ try {
141
+ const res = (0, import_jsonwebtoken2.verify)(token, signingKey);
142
+ if (typeof res === "string") {
143
+ return null;
144
+ }
145
+ return {
146
+ accessUserId: res.id
147
+ };
148
+ } catch {
149
+ }
150
+ return null;
151
+ };
152
+
153
+ // src/auth/email/routes/delete.ts
154
+ var getDeleteRoute = () => () => getTokenizedResponse(void 0, "");
155
+
156
+ // src/auth/email/routes/get.ts
157
+ var getGetRoute = (options) => (req) => {
158
+ const refresh = req.cookies.get("refresh")?.value;
159
+ const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
160
+ if (userID)
161
+ return getTokenizedResponse(
162
+ generateAccessToken(userID, options.signingKey)
163
+ );
164
+ return getTokenizedResponse();
165
+ };
166
+
167
+ // src/auth/email/routes/post.ts
168
+ var import_bcryptjs2 = require("bcryptjs");
169
+ var getPostRoute = (options) => async (req) => {
170
+ const { data, error } = await massageRequest(req, options);
171
+ if (error || !data) return error;
172
+ const existingUser = await options.getUser(data.email);
173
+ if (existingUser) {
174
+ if (await verifyUser(existingUser, data.password)) {
175
+ return getTokenizedResponse(
176
+ generateAccessToken(existingUser.id, options.signingKey),
177
+ generateRefreshToken(existingUser.id, options.refreshKey)
178
+ );
179
+ }
180
+ return handleError(400, "A user already exists", options.onError);
181
+ }
182
+ const encryptedPassword = await (0, import_bcryptjs2.hash)(data.password, 10);
183
+ const newUser = await options.createUser({
184
+ ...data,
185
+ password: encryptedPassword
186
+ });
187
+ if (newUser) {
188
+ options.onSignUp?.(newUser);
189
+ return getTokenizedResponse(
190
+ generateAccessToken(newUser.id, options.signingKey),
191
+ generateRefreshToken(newUser.id, options.refreshKey)
192
+ );
193
+ }
194
+ return getTokenizedResponse();
195
+ };
196
+
197
+ // src/auth/email/routes/put.ts
198
+ var getPutRoute = (options) => async (req) => {
199
+ const { data, error } = await massageRequest(req, options);
200
+ if (error || !data) return error;
201
+ const user = await options.getUser(data.email);
202
+ if (!user)
203
+ return handleError(400, "A user does not exist", options.onError);
204
+ if (await verifyUser(user, data.password)) {
205
+ return getTokenizedResponse(
206
+ generateAccessToken(user.id, options.signingKey),
207
+ generateRefreshToken(user.id, options.refreshKey)
208
+ );
209
+ }
210
+ return handleError(403, "Invalid password", options.onError);
211
+ };
212
+
213
+ // src/auth/email/index.ts
214
+ function getEmailAuthRoutes(options) {
215
+ return {
216
+ GET: getGetRoute(options),
217
+ POST: getPostRoute(options),
218
+ PUT: getPutRoute(options),
219
+ DELETE: getDeleteRoute(),
220
+ getUserIdFromRequest: (req) => getUserContext(options.refreshKey, options.signingKey, req)
221
+ };
222
+ }
223
+ // Annotate the CommonJS export names for ESM import in node:
224
+ 0 && (module.exports = {
225
+ getEmailAuthRoutes
226
+ });
@@ -0,0 +1,23 @@
1
+ import * as next_server from 'next/server';
2
+ import { NextRequest } from 'next/server';
3
+ import { InitRoutesOptions } from './types.mjs';
4
+ import '../types.mjs';
5
+
6
+ declare function getEmailAuthRoutes(options: InitRoutesOptions): {
7
+ GET: (req: NextRequest) => next_server.NextResponse<{
8
+ accessToken: string | undefined;
9
+ refreshToken: string | undefined;
10
+ }>;
11
+ POST: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
12
+ PUT: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
13
+ DELETE: () => next_server.NextResponse<{
14
+ accessToken: string | undefined;
15
+ refreshToken: string | undefined;
16
+ }>;
17
+ getUserIdFromRequest: (req: NextRequest) => {
18
+ refreshUserID?: number;
19
+ accessUserId?: number;
20
+ } | null;
21
+ };
22
+
23
+ export { getEmailAuthRoutes };
@@ -0,0 +1,23 @@
1
+ import * as next_server from 'next/server';
2
+ import { NextRequest } from 'next/server';
3
+ import { InitRoutesOptions } from './types.js';
4
+ import '../types.js';
5
+
6
+ declare function getEmailAuthRoutes(options: InitRoutesOptions): {
7
+ GET: (req: NextRequest) => next_server.NextResponse<{
8
+ accessToken: string | undefined;
9
+ refreshToken: string | undefined;
10
+ }>;
11
+ POST: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
12
+ PUT: (req: NextRequest) => Promise<next_server.NextResponse<unknown> | undefined>;
13
+ DELETE: () => next_server.NextResponse<{
14
+ accessToken: string | undefined;
15
+ refreshToken: string | undefined;
16
+ }>;
17
+ getUserIdFromRequest: (req: NextRequest) => {
18
+ refreshUserID?: number;
19
+ accessUserId?: number;
20
+ } | null;
21
+ };
22
+
23
+ export { getEmailAuthRoutes };
@@ -0,0 +1,199 @@
1
+ // src/auth/email/utils.ts
2
+ import { verify as verify2 } from "jsonwebtoken";
3
+
4
+ // src/auth/email/token.ts
5
+ import { compare } from "bcryptjs";
6
+ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
7
+ import { NextResponse } from "next/server";
8
+ function generateAccessToken(id, signingKey) {
9
+ return sign({ id }, signingKey, {
10
+ expiresIn: "2h"
11
+ });
12
+ }
13
+ function generateRefreshToken(id, refreshKey) {
14
+ return sign({ id }, refreshKey);
15
+ }
16
+ function getTokenizedResponse(accessToken, refreshToken) {
17
+ const body = { accessToken, refreshToken };
18
+ const response = NextResponse.json(body, {
19
+ status: 200
20
+ });
21
+ if (!accessToken) {
22
+ response.cookies.set("refresh", "", {
23
+ secure: false,
24
+ httpOnly: true,
25
+ expires: 0
26
+ });
27
+ }
28
+ if (refreshToken !== void 0) {
29
+ response.cookies.set("refresh", refreshToken, {
30
+ secure: false,
31
+ httpOnly: true,
32
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
33
+ });
34
+ }
35
+ return response;
36
+ }
37
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
38
+ if (refreshToken)
39
+ try {
40
+ const decoded = verify(refreshToken, refreshKey);
41
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
42
+ return decoded.id;
43
+ } catch (e) {
44
+ if (!(e instanceof JsonWebTokenError)) console.error(e, "errors");
45
+ return null;
46
+ }
47
+ return null;
48
+ }
49
+ function verifyUser(user, password) {
50
+ if (!user.password) return false;
51
+ return compare(password, user.password);
52
+ }
53
+
54
+ // src/auth/utils/errors.ts
55
+ import { NextResponse as NextResponse2 } from "next/server";
56
+ function handleError(status, message, onError) {
57
+ const res = onError?.({ status, message });
58
+ if (res) return res;
59
+ return new NextResponse2(message, { status });
60
+ }
61
+
62
+ // src/auth/email/utils.ts
63
+ async function massageRequest(req, options) {
64
+ const data = await req.json();
65
+ if (!data.email || !data.password)
66
+ return {
67
+ error: handleError(400, "Missing email or password", options.onError)
68
+ };
69
+ if (options.turnstileKey) {
70
+ if (!data.captchaToken)
71
+ return { error: handleError(400, "Missing captcha", options.onError) };
72
+ if (!await verifyCaptcha(data.captchaToken, options.turnstileKey))
73
+ return {
74
+ error: handleError(400, "Invalid captcha", options.onError)
75
+ };
76
+ }
77
+ return {
78
+ data: {
79
+ email: data.email,
80
+ password: data.password,
81
+ ...data
82
+ }
83
+ };
84
+ }
85
+ async function verifyCaptcha(token, secret) {
86
+ const res = await fetch(
87
+ "https://challenges.cloudflare.com/turnstile/v0/siteverify",
88
+ {
89
+ method: "POST",
90
+ headers: {
91
+ "Content-Type": "application/json"
92
+ },
93
+ body: JSON.stringify({
94
+ secret,
95
+ response: token
96
+ })
97
+ }
98
+ );
99
+ if (res.ok) {
100
+ const data = await res.json();
101
+ return data.success;
102
+ }
103
+ return false;
104
+ }
105
+ var getUserContext = (refreshKey, signingKey, req) => {
106
+ const bearer = req.headers.get("authorization");
107
+ if (!bearer) {
108
+ const refresh = req.cookies.get("refresh")?.value;
109
+ const userId = getUserIdFromRefreshToken(refreshKey, refresh);
110
+ if (userId) return { refreshUserID: userId };
111
+ return null;
112
+ }
113
+ const token = bearer.slice(7);
114
+ try {
115
+ const res = verify2(token, signingKey);
116
+ if (typeof res === "string") {
117
+ return null;
118
+ }
119
+ return {
120
+ accessUserId: res.id
121
+ };
122
+ } catch {
123
+ }
124
+ return null;
125
+ };
126
+
127
+ // src/auth/email/routes/delete.ts
128
+ var getDeleteRoute = () => () => getTokenizedResponse(void 0, "");
129
+
130
+ // src/auth/email/routes/get.ts
131
+ var getGetRoute = (options) => (req) => {
132
+ const refresh = req.cookies.get("refresh")?.value;
133
+ const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
134
+ if (userID)
135
+ return getTokenizedResponse(
136
+ generateAccessToken(userID, options.signingKey)
137
+ );
138
+ return getTokenizedResponse();
139
+ };
140
+
141
+ // src/auth/email/routes/post.ts
142
+ import { hash } from "bcryptjs";
143
+ var getPostRoute = (options) => async (req) => {
144
+ const { data, error } = await massageRequest(req, options);
145
+ if (error || !data) return error;
146
+ const existingUser = await options.getUser(data.email);
147
+ if (existingUser) {
148
+ if (await verifyUser(existingUser, data.password)) {
149
+ return getTokenizedResponse(
150
+ generateAccessToken(existingUser.id, options.signingKey),
151
+ generateRefreshToken(existingUser.id, options.refreshKey)
152
+ );
153
+ }
154
+ return handleError(400, "A user already exists", options.onError);
155
+ }
156
+ const encryptedPassword = await hash(data.password, 10);
157
+ const newUser = await options.createUser({
158
+ ...data,
159
+ password: encryptedPassword
160
+ });
161
+ if (newUser) {
162
+ options.onSignUp?.(newUser);
163
+ return getTokenizedResponse(
164
+ generateAccessToken(newUser.id, options.signingKey),
165
+ generateRefreshToken(newUser.id, options.refreshKey)
166
+ );
167
+ }
168
+ return getTokenizedResponse();
169
+ };
170
+
171
+ // src/auth/email/routes/put.ts
172
+ var getPutRoute = (options) => async (req) => {
173
+ const { data, error } = await massageRequest(req, options);
174
+ if (error || !data) return error;
175
+ const user = await options.getUser(data.email);
176
+ if (!user)
177
+ return handleError(400, "A user does not exist", options.onError);
178
+ if (await verifyUser(user, data.password)) {
179
+ return getTokenizedResponse(
180
+ generateAccessToken(user.id, options.signingKey),
181
+ generateRefreshToken(user.id, options.refreshKey)
182
+ );
183
+ }
184
+ return handleError(403, "Invalid password", options.onError);
185
+ };
186
+
187
+ // src/auth/email/index.ts
188
+ function getEmailAuthRoutes(options) {
189
+ return {
190
+ GET: getGetRoute(options),
191
+ POST: getPostRoute(options),
192
+ PUT: getPutRoute(options),
193
+ DELETE: getDeleteRoute(),
194
+ getUserIdFromRequest: (req) => getUserContext(options.refreshKey, options.signingKey, req)
195
+ };
196
+ }
197
+ export {
198
+ getEmailAuthRoutes
199
+ };
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/auth/email/routes/delete.ts
21
+ var delete_exports = {};
22
+ __export(delete_exports, {
23
+ getDeleteRoute: () => getDeleteRoute
24
+ });
25
+ module.exports = __toCommonJS(delete_exports);
26
+
27
+ // src/auth/email/token.ts
28
+ var import_bcryptjs = require("bcryptjs");
29
+ var import_jsonwebtoken = require("jsonwebtoken");
30
+ var import_server = require("next/server");
31
+ function getTokenizedResponse(accessToken, refreshToken) {
32
+ const body = { accessToken, refreshToken };
33
+ const response = import_server.NextResponse.json(body, {
34
+ status: 200
35
+ });
36
+ if (!accessToken) {
37
+ response.cookies.set("refresh", "", {
38
+ secure: false,
39
+ httpOnly: true,
40
+ expires: 0
41
+ });
42
+ }
43
+ if (refreshToken !== void 0) {
44
+ response.cookies.set("refresh", refreshToken, {
45
+ secure: false,
46
+ httpOnly: true,
47
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
48
+ });
49
+ }
50
+ return response;
51
+ }
52
+
53
+ // src/auth/email/routes/delete.ts
54
+ var getDeleteRoute = () => () => getTokenizedResponse(void 0, "");
55
+ // Annotate the CommonJS export names for ESM import in node:
56
+ 0 && (module.exports = {
57
+ getDeleteRoute
58
+ });
@@ -0,0 +1,8 @@
1
+ import * as next_server from 'next/server';
2
+
3
+ declare const getDeleteRoute: () => () => next_server.NextResponse<{
4
+ accessToken: string | undefined;
5
+ refreshToken: string | undefined;
6
+ }>;
7
+
8
+ export { getDeleteRoute };
@@ -0,0 +1,8 @@
1
+ import * as next_server from 'next/server';
2
+
3
+ declare const getDeleteRoute: () => () => next_server.NextResponse<{
4
+ accessToken: string | undefined;
5
+ refreshToken: string | undefined;
6
+ }>;
7
+
8
+ export { getDeleteRoute };
@@ -0,0 +1,31 @@
1
+ // src/auth/email/token.ts
2
+ import { compare } from "bcryptjs";
3
+ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
4
+ import { NextResponse } from "next/server";
5
+ function getTokenizedResponse(accessToken, refreshToken) {
6
+ const body = { accessToken, refreshToken };
7
+ const response = NextResponse.json(body, {
8
+ status: 200
9
+ });
10
+ if (!accessToken) {
11
+ response.cookies.set("refresh", "", {
12
+ secure: false,
13
+ httpOnly: true,
14
+ expires: 0
15
+ });
16
+ }
17
+ if (refreshToken !== void 0) {
18
+ response.cookies.set("refresh", refreshToken, {
19
+ secure: false,
20
+ httpOnly: true,
21
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
22
+ });
23
+ }
24
+ return response;
25
+ }
26
+
27
+ // src/auth/email/routes/delete.ts
28
+ var getDeleteRoute = () => () => getTokenizedResponse(void 0, "");
29
+ export {
30
+ getDeleteRoute
31
+ };
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/auth/email/routes/get.ts
21
+ var get_exports = {};
22
+ __export(get_exports, {
23
+ getGetRoute: () => getGetRoute
24
+ });
25
+ module.exports = __toCommonJS(get_exports);
26
+
27
+ // src/auth/email/token.ts
28
+ var import_bcryptjs = require("bcryptjs");
29
+ var import_jsonwebtoken = require("jsonwebtoken");
30
+ var import_server = require("next/server");
31
+ function generateAccessToken(id, signingKey) {
32
+ return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
33
+ expiresIn: "2h"
34
+ });
35
+ }
36
+ function getTokenizedResponse(accessToken, refreshToken) {
37
+ const body = { accessToken, refreshToken };
38
+ const response = import_server.NextResponse.json(body, {
39
+ status: 200
40
+ });
41
+ if (!accessToken) {
42
+ response.cookies.set("refresh", "", {
43
+ secure: false,
44
+ httpOnly: true,
45
+ expires: 0
46
+ });
47
+ }
48
+ if (refreshToken !== void 0) {
49
+ response.cookies.set("refresh", refreshToken, {
50
+ secure: false,
51
+ httpOnly: true,
52
+ expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
53
+ });
54
+ }
55
+ return response;
56
+ }
57
+ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
58
+ if (refreshToken)
59
+ try {
60
+ const decoded = (0, import_jsonwebtoken.verify)(refreshToken, refreshKey);
61
+ if (typeof decoded !== "string" && typeof decoded.id === "number")
62
+ return decoded.id;
63
+ } catch (e) {
64
+ if (!(e instanceof import_jsonwebtoken.JsonWebTokenError)) console.error(e, "errors");
65
+ return null;
66
+ }
67
+ return null;
68
+ }
69
+
70
+ // src/auth/email/routes/get.ts
71
+ var getGetRoute = (options) => (req) => {
72
+ const refresh = req.cookies.get("refresh")?.value;
73
+ const userID = getUserIdFromRefreshToken(options.refreshKey, refresh);
74
+ if (userID)
75
+ return getTokenizedResponse(
76
+ generateAccessToken(userID, options.signingKey)
77
+ );
78
+ return getTokenizedResponse();
79
+ };
80
+ // Annotate the CommonJS export names for ESM import in node:
81
+ 0 && (module.exports = {
82
+ getGetRoute
83
+ });
@@ -0,0 +1,11 @@
1
+ import * as next_server from 'next/server';
2
+ import { NextRequest } from 'next/server';
3
+ import { InitRoutesOptions } from '../types.mjs';
4
+ import '../../types.mjs';
5
+
6
+ declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => next_server.NextResponse<{
7
+ accessToken: string | undefined;
8
+ refreshToken: string | undefined;
9
+ }>;
10
+
11
+ export { getGetRoute };
@@ -0,0 +1,11 @@
1
+ import * as next_server from 'next/server';
2
+ import { NextRequest } from 'next/server';
3
+ import { InitRoutesOptions } from '../types.js';
4
+ import '../../types.js';
5
+
6
+ declare const getGetRoute: (options: InitRoutesOptions) => (req: NextRequest) => next_server.NextResponse<{
7
+ accessToken: string | undefined;
8
+ refreshToken: string | undefined;
9
+ }>;
10
+
11
+ export { getGetRoute };