naystack 1.4.16 → 1.4.20
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/auth/email/client.cjs.js +27 -12
- package/dist/auth/email/client.esm.js +27 -12
- package/dist/auth/email/index.cjs.js +32 -15
- package/dist/auth/email/index.esm.js +32 -15
- package/dist/auth/email/routes/delete.cjs.js +14 -4
- package/dist/auth/email/routes/delete.esm.js +14 -4
- package/dist/auth/email/routes/get.cjs.js +12 -2
- package/dist/auth/email/routes/get.esm.js +12 -2
- package/dist/auth/email/routes/post.cjs.js +17 -6
- package/dist/auth/email/routes/post.esm.js +17 -6
- package/dist/auth/email/routes/put.cjs.js +12 -4
- package/dist/auth/email/routes/put.esm.js +12 -4
- package/dist/auth/email/token.cjs.js +9 -2
- package/dist/auth/email/token.esm.js +9 -2
- package/dist/auth/email/types.d.mts +1 -7
- package/dist/auth/email/types.d.ts +1 -7
- package/dist/auth/email/utils.cjs.js +16 -5
- package/dist/auth/email/utils.d.mts +2 -2
- package/dist/auth/email/utils.d.ts +2 -2
- package/dist/auth/email/utils.esm.js +16 -5
- package/dist/auth/google/get.cjs.js +15 -7
- package/dist/auth/google/get.d.mts +1 -3
- package/dist/auth/google/get.d.ts +1 -3
- package/dist/auth/google/get.esm.js +15 -7
- package/dist/auth/google/index.cjs.js +15 -7
- package/dist/auth/google/index.d.mts +0 -5
- package/dist/auth/google/index.d.ts +0 -5
- package/dist/auth/google/index.esm.js +15 -7
- package/dist/auth/index.cjs.js +47 -31
- package/dist/auth/index.esm.js +47 -31
- package/dist/auth/instagram/client.cjs.js +12 -1
- package/dist/auth/instagram/client.d.mts +1 -1
- package/dist/auth/instagram/client.d.ts +1 -1
- package/dist/auth/instagram/client.esm.js +10 -1
- package/dist/auth/instagram/index.cjs.js +16 -9
- package/dist/auth/instagram/index.d.mts +0 -2
- package/dist/auth/instagram/index.d.ts +0 -2
- package/dist/auth/instagram/index.esm.js +16 -9
- package/dist/auth/instagram/route.cjs.js +16 -9
- package/dist/auth/instagram/route.d.mts +1 -1
- package/dist/auth/instagram/route.d.ts +1 -1
- package/dist/auth/instagram/route.esm.js +16 -9
- package/dist/auth/instagram/utils.cjs.js +10 -1
- package/dist/auth/instagram/utils.esm.js +8 -1
- package/dist/client/index.cjs.js +8 -1
- package/dist/client/index.esm.js +8 -1
- package/dist/client/seo.cjs.js +10 -1
- package/dist/client/seo.esm.js +8 -1
- package/dist/env.cjs.js +57 -0
- package/dist/env.d.mts +23 -0
- package/dist/env.d.ts +23 -0
- package/dist/env.esm.js +31 -0
- package/dist/file/client.cjs.js +10 -1
- package/dist/file/client.esm.js +10 -1
- package/dist/file/index.cjs.js +40 -28
- package/dist/file/index.d.mts +0 -2
- package/dist/file/index.d.ts +0 -2
- package/dist/file/index.esm.js +40 -28
- package/dist/file/put.cjs.js +23 -11
- package/dist/file/put.d.mts +0 -2
- package/dist/file/put.d.ts +0 -2
- package/dist/file/put.esm.js +23 -11
- package/dist/file/setup.cjs.js +40 -28
- package/dist/file/setup.d.mts +0 -7
- package/dist/file/setup.d.ts +0 -7
- package/dist/file/setup.esm.js +40 -28
- package/dist/file/utils.cjs.js +28 -17
- package/dist/file/utils.d.mts +6 -10
- package/dist/file/utils.d.ts +6 -10
- package/dist/file/utils.esm.js +28 -17
- package/dist/graphql/client.cjs.js +15 -3
- package/dist/graphql/client.d.mts +1 -1
- package/dist/graphql/client.d.ts +1 -1
- package/dist/graphql/client.esm.js +15 -3
- package/dist/graphql/index.cjs.js +65 -3
- package/dist/graphql/index.d.mts +1 -0
- package/dist/graphql/index.d.ts +1 -0
- package/dist/graphql/index.esm.js +65 -3
- package/dist/graphql/init.cjs.js +11 -2
- package/dist/graphql/init.esm.js +11 -2
- package/dist/graphql/server.cjs.js +10 -1
- package/dist/graphql/server.esm.js +10 -1
- package/dist/graphql/utils.cjs.js +54 -1
- package/dist/graphql/utils.d.mts +10 -3
- package/dist/graphql/utils.d.ts +10 -3
- package/dist/graphql/utils.esm.js +54 -1
- package/package.json +1 -1
package/dist/auth/index.cjs.js
CHANGED
|
@@ -37,6 +37,13 @@ var import_headers = require("next/headers");
|
|
|
37
37
|
var import_navigation = require("next/navigation");
|
|
38
38
|
var import_server = require("next/server");
|
|
39
39
|
|
|
40
|
+
// src/env.ts
|
|
41
|
+
function getEnv(key, skipCheck) {
|
|
42
|
+
const value = process.env[key];
|
|
43
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
|
|
40
47
|
// src/auth/constants.ts
|
|
41
48
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
42
49
|
|
|
@@ -83,9 +90,9 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
83
90
|
return null;
|
|
84
91
|
}
|
|
85
92
|
function getUserIdFromAccessToken(refreshToken) {
|
|
86
|
-
if (refreshToken
|
|
93
|
+
if (refreshToken)
|
|
87
94
|
try {
|
|
88
|
-
const decoded = (0, import_jsonwebtoken.verify)(refreshToken,
|
|
95
|
+
const decoded = (0, import_jsonwebtoken.verify)(refreshToken, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
89
96
|
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
90
97
|
return decoded.id;
|
|
91
98
|
} catch (e) {
|
|
@@ -121,12 +128,13 @@ async function massageRequest(req, options) {
|
|
|
121
128
|
return {
|
|
122
129
|
error: handleError(400, "Missing password", options.onError)
|
|
123
130
|
};
|
|
124
|
-
|
|
131
|
+
const turnstileKey = getEnv("TURNSTILE_KEY" /* TURNSTILE_KEY */, true);
|
|
132
|
+
if (turnstileKey) {
|
|
125
133
|
if (!data.captchaToken)
|
|
126
134
|
return {
|
|
127
135
|
error: handleError(400, "Missing captchaToken", options.onError)
|
|
128
136
|
};
|
|
129
|
-
if (!await verifyCaptcha(data.captchaToken,
|
|
137
|
+
if (!await verifyCaptcha(data.captchaToken, turnstileKey))
|
|
130
138
|
return {
|
|
131
139
|
error: handleError(400, "Invalid captcha", options.onError)
|
|
132
140
|
};
|
|
@@ -159,17 +167,20 @@ async function verifyCaptcha(token, secret) {
|
|
|
159
167
|
}
|
|
160
168
|
return false;
|
|
161
169
|
}
|
|
162
|
-
var getContext = (
|
|
170
|
+
var getContext = (req) => {
|
|
163
171
|
const bearer = req.headers.get("authorization");
|
|
164
172
|
if (!bearer) {
|
|
165
173
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
166
|
-
const userId = getUserIdFromRefreshToken(
|
|
174
|
+
const userId = getUserIdFromRefreshToken(
|
|
175
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
176
|
+
refresh
|
|
177
|
+
);
|
|
167
178
|
if (userId) return { userId, isRefreshID: true };
|
|
168
179
|
return { userId: null };
|
|
169
180
|
}
|
|
170
181
|
const token = bearer.slice(7);
|
|
171
182
|
try {
|
|
172
|
-
const res = (0, import_jsonwebtoken2.verify)(token,
|
|
183
|
+
const res = (0, import_jsonwebtoken2.verify)(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
173
184
|
if (typeof res === "string") {
|
|
174
185
|
return { userId: null };
|
|
175
186
|
}
|
|
@@ -184,7 +195,7 @@ var getContext = (keys, req) => {
|
|
|
184
195
|
// src/auth/email/routes/delete.ts
|
|
185
196
|
var getDeleteRoute = (options) => async (req) => {
|
|
186
197
|
if (options.onLogout) {
|
|
187
|
-
const ctx = await getContext(
|
|
198
|
+
const ctx = await getContext(req);
|
|
188
199
|
const body = await req.json();
|
|
189
200
|
await options.onLogout?.(ctx.userId, body);
|
|
190
201
|
}
|
|
@@ -194,14 +205,17 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
194
205
|
// src/auth/email/routes/get.ts
|
|
195
206
|
var getGetRoute = (options) => async (req) => {
|
|
196
207
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
197
|
-
const userID = getUserIdFromRefreshToken(
|
|
208
|
+
const userID = getUserIdFromRefreshToken(
|
|
209
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
210
|
+
refresh
|
|
211
|
+
);
|
|
198
212
|
if (userID) {
|
|
199
213
|
if (options.onRefresh) {
|
|
200
214
|
const body = await req.json();
|
|
201
215
|
await options.onRefresh?.(userID, body);
|
|
202
216
|
}
|
|
203
217
|
return getTokenizedResponse(
|
|
204
|
-
generateAccessToken(userID,
|
|
218
|
+
generateAccessToken(userID, getEnv("SIGNING_KEY" /* SIGNING_KEY */))
|
|
205
219
|
);
|
|
206
220
|
}
|
|
207
221
|
return getTokenizedResponse();
|
|
@@ -216,8 +230,11 @@ var getPostRoute = (options) => async (req) => {
|
|
|
216
230
|
if (existingUser) {
|
|
217
231
|
if (await verifyUser(existingUser, data.password)) {
|
|
218
232
|
return getTokenizedResponse(
|
|
219
|
-
generateAccessToken(existingUser.id,
|
|
220
|
-
generateRefreshToken(
|
|
233
|
+
generateAccessToken(existingUser.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
234
|
+
generateRefreshToken(
|
|
235
|
+
existingUser.id,
|
|
236
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */)
|
|
237
|
+
)
|
|
221
238
|
);
|
|
222
239
|
}
|
|
223
240
|
return handleError(400, "A user already exists", options.onError);
|
|
@@ -232,8 +249,8 @@ var getPostRoute = (options) => async (req) => {
|
|
|
232
249
|
await options.onSignUp?.(newUser.id, data);
|
|
233
250
|
}
|
|
234
251
|
return getTokenizedResponse(
|
|
235
|
-
generateAccessToken(newUser.id,
|
|
236
|
-
generateRefreshToken(newUser.id,
|
|
252
|
+
generateAccessToken(newUser.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
253
|
+
generateRefreshToken(newUser.id, getEnv("REFRESH_KEY" /* REFRESH_KEY */))
|
|
237
254
|
);
|
|
238
255
|
}
|
|
239
256
|
return getTokenizedResponse();
|
|
@@ -251,8 +268,8 @@ var getPutRoute = (options) => async (req) => {
|
|
|
251
268
|
await options.onLogin?.(user.id, data);
|
|
252
269
|
}
|
|
253
270
|
return getTokenizedResponse(
|
|
254
|
-
generateAccessToken(user.id,
|
|
255
|
-
generateRefreshToken(user.id,
|
|
271
|
+
generateAccessToken(user.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
272
|
+
generateRefreshToken(user.id, getEnv("REFRESH_KEY" /* REFRESH_KEY */))
|
|
256
273
|
);
|
|
257
274
|
}
|
|
258
275
|
return handleError(403, "Invalid password", options.onError);
|
|
@@ -265,7 +282,7 @@ function getEmailAuthRoutes(options) {
|
|
|
265
282
|
POST: getPostRoute(options),
|
|
266
283
|
PUT: getPutRoute(options),
|
|
267
284
|
DELETE: getDeleteRoute(options),
|
|
268
|
-
getContext
|
|
285
|
+
getContext
|
|
269
286
|
};
|
|
270
287
|
}
|
|
271
288
|
|
|
@@ -276,13 +293,14 @@ var import_uuid = require("uuid");
|
|
|
276
293
|
var getGoogleGetRoute = ({
|
|
277
294
|
getUserIdFromEmail,
|
|
278
295
|
redirectURL,
|
|
279
|
-
errorRedirectURL
|
|
280
|
-
clientId,
|
|
281
|
-
clientSecret,
|
|
282
|
-
keys
|
|
296
|
+
errorRedirectURL
|
|
283
297
|
}) => {
|
|
284
|
-
const url =
|
|
285
|
-
const oauth2Client = new import_googleapis.google.auth.OAuth2(
|
|
298
|
+
const url = getEnv("NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT" /* NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT */);
|
|
299
|
+
const oauth2Client = new import_googleapis.google.auth.OAuth2(
|
|
300
|
+
getEnv("GOOGLE_CLIENT_ID" /* GOOGLE_CLIENT_ID */),
|
|
301
|
+
getEnv("GOOGLE_CLIENT_SECRET" /* GOOGLE_CLIENT_SECRET */),
|
|
302
|
+
url
|
|
303
|
+
);
|
|
286
304
|
return async (req) => {
|
|
287
305
|
const code = req.nextUrl.searchParams.get("code");
|
|
288
306
|
const error = req.nextUrl.searchParams.get("error");
|
|
@@ -326,7 +344,7 @@ var getGoogleGetRoute = ({
|
|
|
326
344
|
if (id) {
|
|
327
345
|
res.cookies.set(
|
|
328
346
|
REFRESH_COOKIE_NAME,
|
|
329
|
-
generateRefreshToken(id,
|
|
347
|
+
generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
|
|
330
348
|
{
|
|
331
349
|
httpOnly: true,
|
|
332
350
|
secure: true
|
|
@@ -379,7 +397,7 @@ async function getLongLivedToken(code, redirectURL, clientId, clientSecret) {
|
|
|
379
397
|
if (shortResData.access_token) {
|
|
380
398
|
const shortLivedToken = shortResData.access_token;
|
|
381
399
|
const longRes = await fetch(
|
|
382
|
-
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${
|
|
400
|
+
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)}`
|
|
383
401
|
);
|
|
384
402
|
if (longRes.ok) {
|
|
385
403
|
const longResData = await longRes.json();
|
|
@@ -421,9 +439,7 @@ var import_server4 = require("next/server");
|
|
|
421
439
|
var getInstagramRoute = ({
|
|
422
440
|
successRedirectURL,
|
|
423
441
|
errorRedirectURL,
|
|
424
|
-
onUser
|
|
425
|
-
clientSecret,
|
|
426
|
-
clientId
|
|
442
|
+
onUser
|
|
427
443
|
}) => {
|
|
428
444
|
const handleError2 = (message) => import_server5.NextResponse.redirect(`${errorRedirectURL}?error=${message}`);
|
|
429
445
|
return async (req) => {
|
|
@@ -434,9 +450,9 @@ var getInstagramRoute = ({
|
|
|
434
450
|
if (!stateToken || !accessCode) return handleError2("Invalid request");
|
|
435
451
|
const instagramData = await getLongLivedToken(
|
|
436
452
|
accessCode,
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
453
|
+
getEnv("NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */),
|
|
454
|
+
getEnv("INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */),
|
|
455
|
+
getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)
|
|
440
456
|
);
|
|
441
457
|
if (!instagramData?.accessToken)
|
|
442
458
|
return handleError2("Unable to reach Instagram");
|
package/dist/auth/index.esm.js
CHANGED
|
@@ -8,6 +8,13 @@ import { cookies } from "next/headers";
|
|
|
8
8
|
import { redirect } from "next/navigation";
|
|
9
9
|
import { NextResponse } from "next/server";
|
|
10
10
|
|
|
11
|
+
// src/env.ts
|
|
12
|
+
function getEnv(key, skipCheck) {
|
|
13
|
+
const value = process.env[key];
|
|
14
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
// src/auth/constants.ts
|
|
12
19
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
13
20
|
|
|
@@ -54,9 +61,9 @@ function getUserIdFromRefreshToken(refreshKey, refreshToken) {
|
|
|
54
61
|
return null;
|
|
55
62
|
}
|
|
56
63
|
function getUserIdFromAccessToken(refreshToken) {
|
|
57
|
-
if (refreshToken
|
|
64
|
+
if (refreshToken)
|
|
58
65
|
try {
|
|
59
|
-
const decoded = verify(refreshToken,
|
|
66
|
+
const decoded = verify(refreshToken, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
60
67
|
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
61
68
|
return decoded.id;
|
|
62
69
|
} catch (e) {
|
|
@@ -92,12 +99,13 @@ async function massageRequest(req, options) {
|
|
|
92
99
|
return {
|
|
93
100
|
error: handleError(400, "Missing password", options.onError)
|
|
94
101
|
};
|
|
95
|
-
|
|
102
|
+
const turnstileKey = getEnv("TURNSTILE_KEY" /* TURNSTILE_KEY */, true);
|
|
103
|
+
if (turnstileKey) {
|
|
96
104
|
if (!data.captchaToken)
|
|
97
105
|
return {
|
|
98
106
|
error: handleError(400, "Missing captchaToken", options.onError)
|
|
99
107
|
};
|
|
100
|
-
if (!await verifyCaptcha(data.captchaToken,
|
|
108
|
+
if (!await verifyCaptcha(data.captchaToken, turnstileKey))
|
|
101
109
|
return {
|
|
102
110
|
error: handleError(400, "Invalid captcha", options.onError)
|
|
103
111
|
};
|
|
@@ -130,17 +138,20 @@ async function verifyCaptcha(token, secret) {
|
|
|
130
138
|
}
|
|
131
139
|
return false;
|
|
132
140
|
}
|
|
133
|
-
var getContext = (
|
|
141
|
+
var getContext = (req) => {
|
|
134
142
|
const bearer = req.headers.get("authorization");
|
|
135
143
|
if (!bearer) {
|
|
136
144
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
137
|
-
const userId = getUserIdFromRefreshToken(
|
|
145
|
+
const userId = getUserIdFromRefreshToken(
|
|
146
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
147
|
+
refresh
|
|
148
|
+
);
|
|
138
149
|
if (userId) return { userId, isRefreshID: true };
|
|
139
150
|
return { userId: null };
|
|
140
151
|
}
|
|
141
152
|
const token = bearer.slice(7);
|
|
142
153
|
try {
|
|
143
|
-
const res = verify2(token,
|
|
154
|
+
const res = verify2(token, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
144
155
|
if (typeof res === "string") {
|
|
145
156
|
return { userId: null };
|
|
146
157
|
}
|
|
@@ -155,7 +166,7 @@ var getContext = (keys, req) => {
|
|
|
155
166
|
// src/auth/email/routes/delete.ts
|
|
156
167
|
var getDeleteRoute = (options) => async (req) => {
|
|
157
168
|
if (options.onLogout) {
|
|
158
|
-
const ctx = await getContext(
|
|
169
|
+
const ctx = await getContext(req);
|
|
159
170
|
const body = await req.json();
|
|
160
171
|
await options.onLogout?.(ctx.userId, body);
|
|
161
172
|
}
|
|
@@ -165,14 +176,17 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
165
176
|
// src/auth/email/routes/get.ts
|
|
166
177
|
var getGetRoute = (options) => async (req) => {
|
|
167
178
|
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
|
|
168
|
-
const userID = getUserIdFromRefreshToken(
|
|
179
|
+
const userID = getUserIdFromRefreshToken(
|
|
180
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */),
|
|
181
|
+
refresh
|
|
182
|
+
);
|
|
169
183
|
if (userID) {
|
|
170
184
|
if (options.onRefresh) {
|
|
171
185
|
const body = await req.json();
|
|
172
186
|
await options.onRefresh?.(userID, body);
|
|
173
187
|
}
|
|
174
188
|
return getTokenizedResponse(
|
|
175
|
-
generateAccessToken(userID,
|
|
189
|
+
generateAccessToken(userID, getEnv("SIGNING_KEY" /* SIGNING_KEY */))
|
|
176
190
|
);
|
|
177
191
|
}
|
|
178
192
|
return getTokenizedResponse();
|
|
@@ -187,8 +201,11 @@ var getPostRoute = (options) => async (req) => {
|
|
|
187
201
|
if (existingUser) {
|
|
188
202
|
if (await verifyUser(existingUser, data.password)) {
|
|
189
203
|
return getTokenizedResponse(
|
|
190
|
-
generateAccessToken(existingUser.id,
|
|
191
|
-
generateRefreshToken(
|
|
204
|
+
generateAccessToken(existingUser.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
205
|
+
generateRefreshToken(
|
|
206
|
+
existingUser.id,
|
|
207
|
+
getEnv("REFRESH_KEY" /* REFRESH_KEY */)
|
|
208
|
+
)
|
|
192
209
|
);
|
|
193
210
|
}
|
|
194
211
|
return handleError(400, "A user already exists", options.onError);
|
|
@@ -203,8 +220,8 @@ var getPostRoute = (options) => async (req) => {
|
|
|
203
220
|
await options.onSignUp?.(newUser.id, data);
|
|
204
221
|
}
|
|
205
222
|
return getTokenizedResponse(
|
|
206
|
-
generateAccessToken(newUser.id,
|
|
207
|
-
generateRefreshToken(newUser.id,
|
|
223
|
+
generateAccessToken(newUser.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
224
|
+
generateRefreshToken(newUser.id, getEnv("REFRESH_KEY" /* REFRESH_KEY */))
|
|
208
225
|
);
|
|
209
226
|
}
|
|
210
227
|
return getTokenizedResponse();
|
|
@@ -222,8 +239,8 @@ var getPutRoute = (options) => async (req) => {
|
|
|
222
239
|
await options.onLogin?.(user.id, data);
|
|
223
240
|
}
|
|
224
241
|
return getTokenizedResponse(
|
|
225
|
-
generateAccessToken(user.id,
|
|
226
|
-
generateRefreshToken(user.id,
|
|
242
|
+
generateAccessToken(user.id, getEnv("SIGNING_KEY" /* SIGNING_KEY */)),
|
|
243
|
+
generateRefreshToken(user.id, getEnv("REFRESH_KEY" /* REFRESH_KEY */))
|
|
227
244
|
);
|
|
228
245
|
}
|
|
229
246
|
return handleError(403, "Invalid password", options.onError);
|
|
@@ -236,7 +253,7 @@ function getEmailAuthRoutes(options) {
|
|
|
236
253
|
POST: getPostRoute(options),
|
|
237
254
|
PUT: getPutRoute(options),
|
|
238
255
|
DELETE: getDeleteRoute(options),
|
|
239
|
-
getContext
|
|
256
|
+
getContext
|
|
240
257
|
};
|
|
241
258
|
}
|
|
242
259
|
|
|
@@ -247,13 +264,14 @@ import { v4 } from "uuid";
|
|
|
247
264
|
var getGoogleGetRoute = ({
|
|
248
265
|
getUserIdFromEmail,
|
|
249
266
|
redirectURL,
|
|
250
|
-
errorRedirectURL
|
|
251
|
-
clientId,
|
|
252
|
-
clientSecret,
|
|
253
|
-
keys
|
|
267
|
+
errorRedirectURL
|
|
254
268
|
}) => {
|
|
255
|
-
const url =
|
|
256
|
-
const oauth2Client = new google.auth.OAuth2(
|
|
269
|
+
const url = getEnv("NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT" /* NEXT_PUBLIC_GOOGLE_AUTH_ENDPOINT */);
|
|
270
|
+
const oauth2Client = new google.auth.OAuth2(
|
|
271
|
+
getEnv("GOOGLE_CLIENT_ID" /* GOOGLE_CLIENT_ID */),
|
|
272
|
+
getEnv("GOOGLE_CLIENT_SECRET" /* GOOGLE_CLIENT_SECRET */),
|
|
273
|
+
url
|
|
274
|
+
);
|
|
257
275
|
return async (req) => {
|
|
258
276
|
const code = req.nextUrl.searchParams.get("code");
|
|
259
277
|
const error = req.nextUrl.searchParams.get("error");
|
|
@@ -297,7 +315,7 @@ var getGoogleGetRoute = ({
|
|
|
297
315
|
if (id) {
|
|
298
316
|
res.cookies.set(
|
|
299
317
|
REFRESH_COOKIE_NAME,
|
|
300
|
-
generateRefreshToken(id,
|
|
318
|
+
generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
|
|
301
319
|
{
|
|
302
320
|
httpOnly: true,
|
|
303
321
|
secure: true
|
|
@@ -350,7 +368,7 @@ async function getLongLivedToken(code, redirectURL, clientId, clientSecret) {
|
|
|
350
368
|
if (shortResData.access_token) {
|
|
351
369
|
const shortLivedToken = shortResData.access_token;
|
|
352
370
|
const longRes = await fetch(
|
|
353
|
-
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${
|
|
371
|
+
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)}`
|
|
354
372
|
);
|
|
355
373
|
if (longRes.ok) {
|
|
356
374
|
const longResData = await longRes.json();
|
|
@@ -392,9 +410,7 @@ import { NextResponse as NextResponse4 } from "next/server";
|
|
|
392
410
|
var getInstagramRoute = ({
|
|
393
411
|
successRedirectURL,
|
|
394
412
|
errorRedirectURL,
|
|
395
|
-
onUser
|
|
396
|
-
clientSecret,
|
|
397
|
-
clientId
|
|
413
|
+
onUser
|
|
398
414
|
}) => {
|
|
399
415
|
const handleError2 = (message) => NextResponse5.redirect(`${errorRedirectURL}?error=${message}`);
|
|
400
416
|
return async (req) => {
|
|
@@ -405,9 +421,9 @@ var getInstagramRoute = ({
|
|
|
405
421
|
if (!stateToken || !accessCode) return handleError2("Invalid request");
|
|
406
422
|
const instagramData = await getLongLivedToken(
|
|
407
423
|
accessCode,
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
424
|
+
getEnv("NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */),
|
|
425
|
+
getEnv("INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */),
|
|
426
|
+
getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)
|
|
411
427
|
);
|
|
412
428
|
if (!instagramData?.accessToken)
|
|
413
429
|
return handleError2("Unable to reach Instagram");
|
|
@@ -23,7 +23,18 @@ __export(client_exports, {
|
|
|
23
23
|
getInstagramAuthorizationURLSetup: () => getInstagramAuthorizationURLSetup
|
|
24
24
|
});
|
|
25
25
|
module.exports = __toCommonJS(client_exports);
|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
// src/env.ts
|
|
28
|
+
function getEnv(key, skipCheck) {
|
|
29
|
+
const value = process.env[key];
|
|
30
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// src/auth/instagram/client.ts
|
|
35
|
+
var getInstagramAuthorizationURLSetup = (redirectURL) => (token) => `https://www.instagram.com/oauth/authorize?client_id=${getEnv(
|
|
36
|
+
"INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */
|
|
37
|
+
)}&response_type=code&enable_fb_login=0&force_authentication=1&scope=instagram_business_basic&state=${token}&redirect_uri=${redirectURL}`;
|
|
27
38
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
39
|
0 && (module.exports = {
|
|
29
40
|
getInstagramAuthorizationURLSetup
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
+
// src/env.ts
|
|
2
|
+
function getEnv(key, skipCheck) {
|
|
3
|
+
const value = process.env[key];
|
|
4
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
5
|
+
return value;
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
// src/auth/instagram/client.ts
|
|
2
|
-
var getInstagramAuthorizationURLSetup = (
|
|
9
|
+
var getInstagramAuthorizationURLSetup = (redirectURL) => (token) => `https://www.instagram.com/oauth/authorize?client_id=${getEnv(
|
|
10
|
+
"INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */
|
|
11
|
+
)}&response_type=code&enable_fb_login=0&force_authentication=1&scope=instagram_business_basic&state=${token}&redirect_uri=${redirectURL}`;
|
|
3
12
|
export {
|
|
4
13
|
getInstagramAuthorizationURLSetup
|
|
5
14
|
};
|
|
@@ -33,10 +33,19 @@ var import_jsonwebtoken = require("jsonwebtoken");
|
|
|
33
33
|
var import_headers = require("next/headers");
|
|
34
34
|
var import_navigation = require("next/navigation");
|
|
35
35
|
var import_server = require("next/server");
|
|
36
|
+
|
|
37
|
+
// src/env.ts
|
|
38
|
+
function getEnv(key, skipCheck) {
|
|
39
|
+
const value = process.env[key];
|
|
40
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
41
|
+
return value;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// src/auth/email/token.ts
|
|
36
45
|
function getUserIdFromAccessToken(refreshToken) {
|
|
37
|
-
if (refreshToken
|
|
46
|
+
if (refreshToken)
|
|
38
47
|
try {
|
|
39
|
-
const decoded = (0, import_jsonwebtoken.verify)(refreshToken,
|
|
48
|
+
const decoded = (0, import_jsonwebtoken.verify)(refreshToken, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
40
49
|
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
41
50
|
return decoded.id;
|
|
42
51
|
} catch (e) {
|
|
@@ -70,7 +79,7 @@ async function getLongLivedToken(code, redirectURL, clientId, clientSecret) {
|
|
|
70
79
|
if (shortResData.access_token) {
|
|
71
80
|
const shortLivedToken = shortResData.access_token;
|
|
72
81
|
const longRes = await fetch(
|
|
73
|
-
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${
|
|
82
|
+
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)}`
|
|
74
83
|
);
|
|
75
84
|
if (longRes.ok) {
|
|
76
85
|
const longResData = await longRes.json();
|
|
@@ -112,9 +121,7 @@ var import_server2 = require("next/server");
|
|
|
112
121
|
var getInstagramRoute = ({
|
|
113
122
|
successRedirectURL,
|
|
114
123
|
errorRedirectURL,
|
|
115
|
-
onUser
|
|
116
|
-
clientSecret,
|
|
117
|
-
clientId
|
|
124
|
+
onUser
|
|
118
125
|
}) => {
|
|
119
126
|
const handleError = (message) => import_server3.NextResponse.redirect(`${errorRedirectURL}?error=${message}`);
|
|
120
127
|
return async (req) => {
|
|
@@ -125,9 +132,9 @@ var getInstagramRoute = ({
|
|
|
125
132
|
if (!stateToken || !accessCode) return handleError("Invalid request");
|
|
126
133
|
const instagramData = await getLongLivedToken(
|
|
127
134
|
accessCode,
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
135
|
+
getEnv("NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */),
|
|
136
|
+
getEnv("INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */),
|
|
137
|
+
getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)
|
|
131
138
|
);
|
|
132
139
|
if (!instagramData?.accessToken)
|
|
133
140
|
return handleError("Unable to reach Instagram");
|
|
@@ -6,8 +6,6 @@ interface InitInstagramAuthOptions {
|
|
|
6
6
|
onUser: (data: InstagramUser, id: number | null, accessToken: string) => Promise<string | void>;
|
|
7
7
|
successRedirectURL: string;
|
|
8
8
|
errorRedirectURL: string;
|
|
9
|
-
clientId: string;
|
|
10
|
-
clientSecret: string;
|
|
11
9
|
refreshKey: string;
|
|
12
10
|
}
|
|
13
11
|
declare function initInstagramAuth(props: InitInstagramAuthOptions): {
|
|
@@ -6,8 +6,6 @@ interface InitInstagramAuthOptions {
|
|
|
6
6
|
onUser: (data: InstagramUser, id: number | null, accessToken: string) => Promise<string | void>;
|
|
7
7
|
successRedirectURL: string;
|
|
8
8
|
errorRedirectURL: string;
|
|
9
|
-
clientId: string;
|
|
10
|
-
clientSecret: string;
|
|
11
9
|
refreshKey: string;
|
|
12
10
|
}
|
|
13
11
|
declare function initInstagramAuth(props: InitInstagramAuthOptions): {
|
|
@@ -7,10 +7,19 @@ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
|
7
7
|
import { cookies } from "next/headers";
|
|
8
8
|
import { redirect } from "next/navigation";
|
|
9
9
|
import { NextResponse } from "next/server";
|
|
10
|
+
|
|
11
|
+
// src/env.ts
|
|
12
|
+
function getEnv(key, skipCheck) {
|
|
13
|
+
const value = process.env[key];
|
|
14
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
15
|
+
return value;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// src/auth/email/token.ts
|
|
10
19
|
function getUserIdFromAccessToken(refreshToken) {
|
|
11
|
-
if (refreshToken
|
|
20
|
+
if (refreshToken)
|
|
12
21
|
try {
|
|
13
|
-
const decoded = verify(refreshToken,
|
|
22
|
+
const decoded = verify(refreshToken, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
14
23
|
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
15
24
|
return decoded.id;
|
|
16
25
|
} catch (e) {
|
|
@@ -44,7 +53,7 @@ async function getLongLivedToken(code, redirectURL, clientId, clientSecret) {
|
|
|
44
53
|
if (shortResData.access_token) {
|
|
45
54
|
const shortLivedToken = shortResData.access_token;
|
|
46
55
|
const longRes = await fetch(
|
|
47
|
-
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${
|
|
56
|
+
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)}`
|
|
48
57
|
);
|
|
49
58
|
if (longRes.ok) {
|
|
50
59
|
const longResData = await longRes.json();
|
|
@@ -86,9 +95,7 @@ import { NextResponse as NextResponse2 } from "next/server";
|
|
|
86
95
|
var getInstagramRoute = ({
|
|
87
96
|
successRedirectURL,
|
|
88
97
|
errorRedirectURL,
|
|
89
|
-
onUser
|
|
90
|
-
clientSecret,
|
|
91
|
-
clientId
|
|
98
|
+
onUser
|
|
92
99
|
}) => {
|
|
93
100
|
const handleError = (message) => NextResponse3.redirect(`${errorRedirectURL}?error=${message}`);
|
|
94
101
|
return async (req) => {
|
|
@@ -99,9 +106,9 @@ var getInstagramRoute = ({
|
|
|
99
106
|
if (!stateToken || !accessCode) return handleError("Invalid request");
|
|
100
107
|
const instagramData = await getLongLivedToken(
|
|
101
108
|
accessCode,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
109
|
+
getEnv("NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */),
|
|
110
|
+
getEnv("INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */),
|
|
111
|
+
getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)
|
|
105
112
|
);
|
|
106
113
|
if (!instagramData?.accessToken)
|
|
107
114
|
return handleError("Unable to reach Instagram");
|
|
@@ -31,10 +31,19 @@ var import_jsonwebtoken = require("jsonwebtoken");
|
|
|
31
31
|
var import_headers = require("next/headers");
|
|
32
32
|
var import_navigation = require("next/navigation");
|
|
33
33
|
var import_server = require("next/server");
|
|
34
|
+
|
|
35
|
+
// src/env.ts
|
|
36
|
+
function getEnv(key, skipCheck) {
|
|
37
|
+
const value = process.env[key];
|
|
38
|
+
if (!skipCheck && !value) throw new Error(`${key} is not defined`);
|
|
39
|
+
return value;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// src/auth/email/token.ts
|
|
34
43
|
function getUserIdFromAccessToken(refreshToken) {
|
|
35
|
-
if (refreshToken
|
|
44
|
+
if (refreshToken)
|
|
36
45
|
try {
|
|
37
|
-
const decoded = (0, import_jsonwebtoken.verify)(refreshToken,
|
|
46
|
+
const decoded = (0, import_jsonwebtoken.verify)(refreshToken, getEnv("SIGNING_KEY" /* SIGNING_KEY */));
|
|
38
47
|
if (typeof decoded !== "string" && typeof decoded.id === "number")
|
|
39
48
|
return decoded.id;
|
|
40
49
|
} catch (e) {
|
|
@@ -61,7 +70,7 @@ async function getLongLivedToken(code, redirectURL, clientId, clientSecret) {
|
|
|
61
70
|
if (shortResData.access_token) {
|
|
62
71
|
const shortLivedToken = shortResData.access_token;
|
|
63
72
|
const longRes = await fetch(
|
|
64
|
-
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${
|
|
73
|
+
`https://graph.instagram.com/access_token?grant_type=ig_exchange_token&access_token=${shortLivedToken}&client_secret=${getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)}`
|
|
65
74
|
);
|
|
66
75
|
if (longRes.ok) {
|
|
67
76
|
const longResData = await longRes.json();
|
|
@@ -103,9 +112,7 @@ var import_server2 = require("next/server");
|
|
|
103
112
|
var getInstagramRoute = ({
|
|
104
113
|
successRedirectURL,
|
|
105
114
|
errorRedirectURL,
|
|
106
|
-
onUser
|
|
107
|
-
clientSecret,
|
|
108
|
-
clientId
|
|
115
|
+
onUser
|
|
109
116
|
}) => {
|
|
110
117
|
const handleError = (message) => import_server3.NextResponse.redirect(`${errorRedirectURL}?error=${message}`);
|
|
111
118
|
return async (req) => {
|
|
@@ -116,9 +123,9 @@ var getInstagramRoute = ({
|
|
|
116
123
|
if (!stateToken || !accessCode) return handleError("Invalid request");
|
|
117
124
|
const instagramData = await getLongLivedToken(
|
|
118
125
|
accessCode,
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
126
|
+
getEnv("NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT" /* NEXT_PUBLIC_INSTAGRAM_AUTH_ENDPOINT */),
|
|
127
|
+
getEnv("INSTAGRAM_CLIENT_ID" /* INSTAGRAM_CLIENT_ID */),
|
|
128
|
+
getEnv("INSTAGRAM_CLIENT_SECRET" /* INSTAGRAM_CLIENT_SECRET */)
|
|
122
129
|
);
|
|
123
130
|
if (!instagramData?.accessToken)
|
|
124
131
|
return handleError("Unable to reach Instagram");
|
|
@@ -3,6 +3,6 @@ import { InitInstagramAuthOptions } from './index.mjs';
|
|
|
3
3
|
import './utils.mjs';
|
|
4
4
|
import '../../socials/instagram/types.mjs';
|
|
5
5
|
|
|
6
|
-
declare const getInstagramRoute: ({ successRedirectURL, errorRedirectURL, onUser,
|
|
6
|
+
declare const getInstagramRoute: ({ successRedirectURL, errorRedirectURL, onUser, }: InitInstagramAuthOptions) => (req: NextRequest) => Promise<NextResponse<unknown>>;
|
|
7
7
|
|
|
8
8
|
export { getInstagramRoute };
|
|
@@ -3,6 +3,6 @@ import { InitInstagramAuthOptions } from './index.js';
|
|
|
3
3
|
import './utils.js';
|
|
4
4
|
import '../../socials/instagram/types.js';
|
|
5
5
|
|
|
6
|
-
declare const getInstagramRoute: ({ successRedirectURL, errorRedirectURL, onUser,
|
|
6
|
+
declare const getInstagramRoute: ({ successRedirectURL, errorRedirectURL, onUser, }: InitInstagramAuthOptions) => (req: NextRequest) => Promise<NextResponse<unknown>>;
|
|
7
7
|
|
|
8
8
|
export { getInstagramRoute };
|