naystack 1.5.29 → 1.5.31
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/constants.cjs.js +5 -2
- package/dist/auth/constants.d.mts +2 -1
- package/dist/auth/constants.d.ts +2 -1
- package/dist/auth/constants.esm.js +3 -1
- package/dist/auth/email/client.cjs.js +7 -8
- package/dist/auth/email/client.esm.js +7 -8
- package/dist/auth/email/index.cjs.js +35 -32
- package/dist/auth/email/index.esm.js +35 -32
- package/dist/auth/email/routes/get.cjs.js +3 -2
- package/dist/auth/email/routes/get.esm.js +3 -2
- package/dist/auth/index.cjs.js +35 -32
- package/dist/auth/index.esm.js +35 -32
- package/dist/graphql/index.cjs.js +42 -8
- package/dist/graphql/index.esm.js +42 -8
- package/dist/graphql/init.cjs.js +42 -8
- package/dist/graphql/init.d.mts +4 -2
- package/dist/graphql/init.d.ts +4 -2
- package/dist/graphql/init.esm.js +42 -8
- package/dist/utils/route.cjs.js +63 -0
- package/dist/utils/route.d.mts +11 -0
- package/dist/utils/route.d.ts +11 -0
- package/dist/utils/route.esm.js +35 -0
- package/package.json +1 -1
|
@@ -20,11 +20,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/auth/constants.ts
|
|
21
21
|
var constants_exports = {};
|
|
22
22
|
__export(constants_exports, {
|
|
23
|
-
REFRESH_COOKIE_NAME: () => REFRESH_COOKIE_NAME
|
|
23
|
+
REFRESH_COOKIE_NAME: () => REFRESH_COOKIE_NAME,
|
|
24
|
+
REFRESH_HEADER_NAME: () => REFRESH_HEADER_NAME
|
|
24
25
|
});
|
|
25
26
|
module.exports = __toCommonJS(constants_exports);
|
|
26
27
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
28
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
27
29
|
// Annotate the CommonJS export names for ESM import in node:
|
|
28
30
|
0 && (module.exports = {
|
|
29
|
-
REFRESH_COOKIE_NAME
|
|
31
|
+
REFRESH_COOKIE_NAME,
|
|
32
|
+
REFRESH_HEADER_NAME
|
|
30
33
|
});
|
package/dist/auth/constants.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ module.exports = __toCommonJS(client_exports);
|
|
|
45
45
|
var import_react = __toESM(require("react"));
|
|
46
46
|
|
|
47
47
|
// src/auth/constants.ts
|
|
48
|
-
var
|
|
48
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
49
49
|
|
|
50
50
|
// src/env.ts
|
|
51
51
|
var getEnvValue = (key) => {
|
|
@@ -116,13 +116,12 @@ var AuthWrapper = ({
|
|
|
116
116
|
function useAuthFetch(getRefreshToken) {
|
|
117
117
|
const setToken = useSetToken();
|
|
118
118
|
const fetchToken = async () => {
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
credentials: "include"
|
|
119
|
+
const token = getRefreshToken ? await getRefreshToken() : null;
|
|
120
|
+
fetch(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */), {
|
|
121
|
+
credentials: "include",
|
|
122
|
+
headers: token ? {
|
|
123
|
+
[REFRESH_HEADER_NAME]: token
|
|
124
|
+
} : void 0
|
|
126
125
|
}).then((res) => res.json()).then((data) => setToken(data.accessToken));
|
|
127
126
|
};
|
|
128
127
|
(0, import_react.useEffect)(() => {
|
|
@@ -10,7 +10,7 @@ import React, {
|
|
|
10
10
|
} from "react";
|
|
11
11
|
|
|
12
12
|
// src/auth/constants.ts
|
|
13
|
-
var
|
|
13
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
14
14
|
|
|
15
15
|
// src/env.ts
|
|
16
16
|
var getEnvValue = (key) => {
|
|
@@ -81,13 +81,12 @@ var AuthWrapper = ({
|
|
|
81
81
|
function useAuthFetch(getRefreshToken) {
|
|
82
82
|
const setToken = useSetToken();
|
|
83
83
|
const fetchToken = async () => {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
credentials: "include"
|
|
84
|
+
const token = getRefreshToken ? await getRefreshToken() : null;
|
|
85
|
+
fetch(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */), {
|
|
86
|
+
credentials: "include",
|
|
87
|
+
headers: token ? {
|
|
88
|
+
[REFRESH_HEADER_NAME]: token
|
|
89
|
+
} : void 0
|
|
91
90
|
}).then((res) => res.json()).then((data) => setToken(data.accessToken));
|
|
92
91
|
};
|
|
93
92
|
useEffect(() => {
|
|
@@ -38,6 +38,39 @@ __export(email_exports, {
|
|
|
38
38
|
module.exports = __toCommonJS(email_exports);
|
|
39
39
|
var import_server4 = require("next/server");
|
|
40
40
|
|
|
41
|
+
// src/auth/constants.ts
|
|
42
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
43
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
44
|
+
|
|
45
|
+
// src/utils/route.ts
|
|
46
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
47
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
48
|
+
return {
|
|
49
|
+
"Access-Control-Allow-Origin": origin,
|
|
50
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
51
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
52
|
+
"Access-Control-Allow-Credentials": "true"
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function withCors(handler, allowedOrigins) {
|
|
56
|
+
if (!allowedOrigins?.length) return handler;
|
|
57
|
+
return ((req) => {
|
|
58
|
+
return handler(req).then((response) => {
|
|
59
|
+
if (!response) return response;
|
|
60
|
+
const corsHeaders = getCorsHeaders(
|
|
61
|
+
req.headers.get("origin"),
|
|
62
|
+
allowedOrigins
|
|
63
|
+
);
|
|
64
|
+
if (corsHeaders) {
|
|
65
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
66
|
+
response.headers.set(key, value);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return response;
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
41
74
|
// src/auth/email/token.ts
|
|
42
75
|
var import_bcryptjs = require("bcryptjs");
|
|
43
76
|
var import_jsonwebtoken = require("jsonwebtoken");
|
|
@@ -94,9 +127,6 @@ function getEnv(key, skipCheck) {
|
|
|
94
127
|
return value;
|
|
95
128
|
}
|
|
96
129
|
|
|
97
|
-
// src/auth/constants.ts
|
|
98
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
99
|
-
|
|
100
130
|
// src/auth/email/token.ts
|
|
101
131
|
function generateAccessToken(id, signingKey) {
|
|
102
132
|
return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
|
|
@@ -242,11 +272,11 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
242
272
|
|
|
243
273
|
// src/auth/email/routes/get.ts
|
|
244
274
|
var getGetRoute = (options) => async (req) => {
|
|
245
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
275
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
246
276
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
247
277
|
if (userID) {
|
|
248
278
|
if (options.onRefresh) {
|
|
249
|
-
const body = await req.json();
|
|
279
|
+
const body = await req.json().catch(() => null);
|
|
250
280
|
await options.onRefresh?.(userID, body);
|
|
251
281
|
}
|
|
252
282
|
return getTokenizedResponse(
|
|
@@ -367,33 +397,6 @@ function AuthFetch() {
|
|
|
367
397
|
}
|
|
368
398
|
|
|
369
399
|
// src/auth/email/index.ts
|
|
370
|
-
function getCorsHeaders(origin, allowedOrigins) {
|
|
371
|
-
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
372
|
-
return {
|
|
373
|
-
"Access-Control-Allow-Origin": origin,
|
|
374
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
375
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
376
|
-
"Access-Control-Allow-Credentials": "true"
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
function withCors(handler, allowedOrigins) {
|
|
380
|
-
if (!allowedOrigins?.length) return handler;
|
|
381
|
-
return ((req) => {
|
|
382
|
-
return handler(req).then((response) => {
|
|
383
|
-
if (!response) return response;
|
|
384
|
-
const corsHeaders = getCorsHeaders(
|
|
385
|
-
req.headers.get("origin"),
|
|
386
|
-
allowedOrigins
|
|
387
|
-
);
|
|
388
|
-
if (corsHeaders) {
|
|
389
|
-
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
390
|
-
response.headers.set(key, value);
|
|
391
|
-
});
|
|
392
|
-
}
|
|
393
|
-
return response;
|
|
394
|
-
});
|
|
395
|
-
});
|
|
396
|
-
}
|
|
397
400
|
function getEmailAuthRoutes(options) {
|
|
398
401
|
const { allowedOrigins } = options;
|
|
399
402
|
return {
|
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
// src/auth/email/index.ts
|
|
2
2
|
import { NextResponse as NextResponse3 } from "next/server";
|
|
3
3
|
|
|
4
|
+
// src/auth/constants.ts
|
|
5
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
6
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
7
|
+
|
|
8
|
+
// src/utils/route.ts
|
|
9
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
10
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
11
|
+
return {
|
|
12
|
+
"Access-Control-Allow-Origin": origin,
|
|
13
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
14
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
15
|
+
"Access-Control-Allow-Credentials": "true"
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function withCors(handler, allowedOrigins) {
|
|
19
|
+
if (!allowedOrigins?.length) return handler;
|
|
20
|
+
return ((req) => {
|
|
21
|
+
return handler(req).then((response) => {
|
|
22
|
+
if (!response) return response;
|
|
23
|
+
const corsHeaders = getCorsHeaders(
|
|
24
|
+
req.headers.get("origin"),
|
|
25
|
+
allowedOrigins
|
|
26
|
+
);
|
|
27
|
+
if (corsHeaders) {
|
|
28
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
29
|
+
response.headers.set(key, value);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return response;
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
4
37
|
// src/auth/email/token.ts
|
|
5
38
|
import { compare } from "bcryptjs";
|
|
6
39
|
import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
@@ -57,9 +90,6 @@ function getEnv(key, skipCheck) {
|
|
|
57
90
|
return value;
|
|
58
91
|
}
|
|
59
92
|
|
|
60
|
-
// src/auth/constants.ts
|
|
61
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
62
|
-
|
|
63
93
|
// src/auth/email/token.ts
|
|
64
94
|
function generateAccessToken(id, signingKey) {
|
|
65
95
|
return sign({ id }, signingKey, {
|
|
@@ -205,11 +235,11 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
205
235
|
|
|
206
236
|
// src/auth/email/routes/get.ts
|
|
207
237
|
var getGetRoute = (options) => async (req) => {
|
|
208
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
238
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
209
239
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
210
240
|
if (userID) {
|
|
211
241
|
if (options.onRefresh) {
|
|
212
|
-
const body = await req.json();
|
|
242
|
+
const body = await req.json().catch(() => null);
|
|
213
243
|
await options.onRefresh?.(userID, body);
|
|
214
244
|
}
|
|
215
245
|
return getTokenizedResponse(
|
|
@@ -334,33 +364,6 @@ function AuthFetch() {
|
|
|
334
364
|
}
|
|
335
365
|
|
|
336
366
|
// src/auth/email/index.ts
|
|
337
|
-
function getCorsHeaders(origin, allowedOrigins) {
|
|
338
|
-
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
339
|
-
return {
|
|
340
|
-
"Access-Control-Allow-Origin": origin,
|
|
341
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
342
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
343
|
-
"Access-Control-Allow-Credentials": "true"
|
|
344
|
-
};
|
|
345
|
-
}
|
|
346
|
-
function withCors(handler, allowedOrigins) {
|
|
347
|
-
if (!allowedOrigins?.length) return handler;
|
|
348
|
-
return ((req) => {
|
|
349
|
-
return handler(req).then((response) => {
|
|
350
|
-
if (!response) return response;
|
|
351
|
-
const corsHeaders = getCorsHeaders(
|
|
352
|
-
req.headers.get("origin"),
|
|
353
|
-
allowedOrigins
|
|
354
|
-
);
|
|
355
|
-
if (corsHeaders) {
|
|
356
|
-
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
357
|
-
response.headers.set(key, value);
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
return response;
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
367
|
function getEmailAuthRoutes(options) {
|
|
365
368
|
const { allowedOrigins } = options;
|
|
366
369
|
return {
|
|
@@ -75,6 +75,7 @@ function getEnv(key, skipCheck) {
|
|
|
75
75
|
|
|
76
76
|
// src/auth/constants.ts
|
|
77
77
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
78
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
78
79
|
|
|
79
80
|
// src/auth/email/token.ts
|
|
80
81
|
var import_bcryptjs = require("bcryptjs");
|
|
@@ -123,11 +124,11 @@ function getUserIdFromRefreshToken(refreshToken) {
|
|
|
123
124
|
|
|
124
125
|
// src/auth/email/routes/get.ts
|
|
125
126
|
var getGetRoute = (options) => async (req) => {
|
|
126
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
127
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
127
128
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
128
129
|
if (userID) {
|
|
129
130
|
if (options.onRefresh) {
|
|
130
|
-
const body = await req.json();
|
|
131
|
+
const body = await req.json().catch(() => null);
|
|
131
132
|
await options.onRefresh?.(userID, body);
|
|
132
133
|
}
|
|
133
134
|
return getTokenizedResponse(
|
|
@@ -49,6 +49,7 @@ function getEnv(key, skipCheck) {
|
|
|
49
49
|
|
|
50
50
|
// src/auth/constants.ts
|
|
51
51
|
var REFRESH_COOKIE_NAME = "refresh";
|
|
52
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
52
53
|
|
|
53
54
|
// src/auth/email/token.ts
|
|
54
55
|
import { compare } from "bcryptjs";
|
|
@@ -97,11 +98,11 @@ function getUserIdFromRefreshToken(refreshToken) {
|
|
|
97
98
|
|
|
98
99
|
// src/auth/email/routes/get.ts
|
|
99
100
|
var getGetRoute = (options) => async (req) => {
|
|
100
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
101
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
101
102
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
102
103
|
if (userID) {
|
|
103
104
|
if (options.onRefresh) {
|
|
104
|
-
const body = await req.json();
|
|
105
|
+
const body = await req.json().catch(() => null);
|
|
105
106
|
await options.onRefresh?.(userID, body);
|
|
106
107
|
}
|
|
107
108
|
return getTokenizedResponse(
|
package/dist/auth/index.cjs.js
CHANGED
|
@@ -44,6 +44,39 @@ module.exports = __toCommonJS(auth_exports);
|
|
|
44
44
|
// src/auth/email/index.ts
|
|
45
45
|
var import_server4 = require("next/server");
|
|
46
46
|
|
|
47
|
+
// src/auth/constants.ts
|
|
48
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
49
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
50
|
+
|
|
51
|
+
// src/utils/route.ts
|
|
52
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
53
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
54
|
+
return {
|
|
55
|
+
"Access-Control-Allow-Origin": origin,
|
|
56
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
57
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
58
|
+
"Access-Control-Allow-Credentials": "true"
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
function withCors(handler, allowedOrigins) {
|
|
62
|
+
if (!allowedOrigins?.length) return handler;
|
|
63
|
+
return ((req) => {
|
|
64
|
+
return handler(req).then((response) => {
|
|
65
|
+
if (!response) return response;
|
|
66
|
+
const corsHeaders = getCorsHeaders(
|
|
67
|
+
req.headers.get("origin"),
|
|
68
|
+
allowedOrigins
|
|
69
|
+
);
|
|
70
|
+
if (corsHeaders) {
|
|
71
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
72
|
+
response.headers.set(key, value);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return response;
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
47
80
|
// src/auth/email/token.ts
|
|
48
81
|
var import_bcryptjs = require("bcryptjs");
|
|
49
82
|
var import_jsonwebtoken = require("jsonwebtoken");
|
|
@@ -100,9 +133,6 @@ function getEnv(key, skipCheck) {
|
|
|
100
133
|
return value;
|
|
101
134
|
}
|
|
102
135
|
|
|
103
|
-
// src/auth/constants.ts
|
|
104
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
105
|
-
|
|
106
136
|
// src/auth/email/token.ts
|
|
107
137
|
function generateAccessToken(id, signingKey) {
|
|
108
138
|
return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
|
|
@@ -260,11 +290,11 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
260
290
|
|
|
261
291
|
// src/auth/email/routes/get.ts
|
|
262
292
|
var getGetRoute = (options) => async (req) => {
|
|
263
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
293
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
264
294
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
265
295
|
if (userID) {
|
|
266
296
|
if (options.onRefresh) {
|
|
267
|
-
const body = await req.json();
|
|
297
|
+
const body = await req.json().catch(() => null);
|
|
268
298
|
await options.onRefresh?.(userID, body);
|
|
269
299
|
}
|
|
270
300
|
return getTokenizedResponse(
|
|
@@ -385,33 +415,6 @@ function AuthFetch() {
|
|
|
385
415
|
}
|
|
386
416
|
|
|
387
417
|
// src/auth/email/index.ts
|
|
388
|
-
function getCorsHeaders(origin, allowedOrigins) {
|
|
389
|
-
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
390
|
-
return {
|
|
391
|
-
"Access-Control-Allow-Origin": origin,
|
|
392
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
393
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
394
|
-
"Access-Control-Allow-Credentials": "true"
|
|
395
|
-
};
|
|
396
|
-
}
|
|
397
|
-
function withCors(handler, allowedOrigins) {
|
|
398
|
-
if (!allowedOrigins?.length) return handler;
|
|
399
|
-
return ((req) => {
|
|
400
|
-
return handler(req).then((response) => {
|
|
401
|
-
if (!response) return response;
|
|
402
|
-
const corsHeaders = getCorsHeaders(
|
|
403
|
-
req.headers.get("origin"),
|
|
404
|
-
allowedOrigins
|
|
405
|
-
);
|
|
406
|
-
if (corsHeaders) {
|
|
407
|
-
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
408
|
-
response.headers.set(key, value);
|
|
409
|
-
});
|
|
410
|
-
}
|
|
411
|
-
return response;
|
|
412
|
-
});
|
|
413
|
-
});
|
|
414
|
-
}
|
|
415
418
|
function getEmailAuthRoutes(options) {
|
|
416
419
|
const { allowedOrigins } = options;
|
|
417
420
|
return {
|
package/dist/auth/index.esm.js
CHANGED
|
@@ -1,6 +1,39 @@
|
|
|
1
1
|
// src/auth/email/index.ts
|
|
2
2
|
import { NextResponse as NextResponse3 } from "next/server";
|
|
3
3
|
|
|
4
|
+
// src/auth/constants.ts
|
|
5
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
6
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
7
|
+
|
|
8
|
+
// src/utils/route.ts
|
|
9
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
10
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
11
|
+
return {
|
|
12
|
+
"Access-Control-Allow-Origin": origin,
|
|
13
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
14
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
15
|
+
"Access-Control-Allow-Credentials": "true"
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function withCors(handler, allowedOrigins) {
|
|
19
|
+
if (!allowedOrigins?.length) return handler;
|
|
20
|
+
return ((req) => {
|
|
21
|
+
return handler(req).then((response) => {
|
|
22
|
+
if (!response) return response;
|
|
23
|
+
const corsHeaders = getCorsHeaders(
|
|
24
|
+
req.headers.get("origin"),
|
|
25
|
+
allowedOrigins
|
|
26
|
+
);
|
|
27
|
+
if (corsHeaders) {
|
|
28
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
29
|
+
response.headers.set(key, value);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return response;
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
4
37
|
// src/auth/email/token.ts
|
|
5
38
|
import { compare } from "bcryptjs";
|
|
6
39
|
import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
@@ -57,9 +90,6 @@ function getEnv(key, skipCheck) {
|
|
|
57
90
|
return value;
|
|
58
91
|
}
|
|
59
92
|
|
|
60
|
-
// src/auth/constants.ts
|
|
61
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
62
|
-
|
|
63
93
|
// src/auth/email/token.ts
|
|
64
94
|
function generateAccessToken(id, signingKey) {
|
|
65
95
|
return sign({ id }, signingKey, {
|
|
@@ -217,11 +247,11 @@ var getDeleteRoute = (options) => async (req) => {
|
|
|
217
247
|
|
|
218
248
|
// src/auth/email/routes/get.ts
|
|
219
249
|
var getGetRoute = (options) => async (req) => {
|
|
220
|
-
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.
|
|
250
|
+
const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
|
|
221
251
|
const userID = getUserIdFromRefreshToken(refresh);
|
|
222
252
|
if (userID) {
|
|
223
253
|
if (options.onRefresh) {
|
|
224
|
-
const body = await req.json();
|
|
254
|
+
const body = await req.json().catch(() => null);
|
|
225
255
|
await options.onRefresh?.(userID, body);
|
|
226
256
|
}
|
|
227
257
|
return getTokenizedResponse(
|
|
@@ -346,33 +376,6 @@ function AuthFetch() {
|
|
|
346
376
|
}
|
|
347
377
|
|
|
348
378
|
// src/auth/email/index.ts
|
|
349
|
-
function getCorsHeaders(origin, allowedOrigins) {
|
|
350
|
-
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
351
|
-
return {
|
|
352
|
-
"Access-Control-Allow-Origin": origin,
|
|
353
|
-
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
354
|
-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
|
|
355
|
-
"Access-Control-Allow-Credentials": "true"
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
function withCors(handler, allowedOrigins) {
|
|
359
|
-
if (!allowedOrigins?.length) return handler;
|
|
360
|
-
return ((req) => {
|
|
361
|
-
return handler(req).then((response) => {
|
|
362
|
-
if (!response) return response;
|
|
363
|
-
const corsHeaders = getCorsHeaders(
|
|
364
|
-
req.headers.get("origin"),
|
|
365
|
-
allowedOrigins
|
|
366
|
-
);
|
|
367
|
-
if (corsHeaders) {
|
|
368
|
-
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
369
|
-
response.headers.set(key, value);
|
|
370
|
-
});
|
|
371
|
-
}
|
|
372
|
-
return response;
|
|
373
|
-
});
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
379
|
function getEmailAuthRoutes(options) {
|
|
377
380
|
const { allowedOrigins } = options;
|
|
378
381
|
return {
|
|
@@ -574,6 +574,7 @@ var import_reflect_metadata = require("reflect-metadata");
|
|
|
574
574
|
var import_server3 = require("@apollo/server");
|
|
575
575
|
var import_default = require("@apollo/server/plugin/landingPage/default");
|
|
576
576
|
var import_next = require("@as-integrations/next");
|
|
577
|
+
var import_server4 = require("next/server");
|
|
577
578
|
var import_type_graphql = require("type-graphql");
|
|
578
579
|
|
|
579
580
|
// src/env.ts
|
|
@@ -625,6 +626,39 @@ function getEnv(key, skipCheck) {
|
|
|
625
626
|
return value;
|
|
626
627
|
}
|
|
627
628
|
|
|
629
|
+
// src/auth/constants.ts
|
|
630
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
631
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
632
|
+
|
|
633
|
+
// src/utils/route.ts
|
|
634
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
635
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
636
|
+
return {
|
|
637
|
+
"Access-Control-Allow-Origin": origin,
|
|
638
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
639
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
640
|
+
"Access-Control-Allow-Credentials": "true"
|
|
641
|
+
};
|
|
642
|
+
}
|
|
643
|
+
function withCors(handler, allowedOrigins) {
|
|
644
|
+
if (!allowedOrigins?.length) return handler;
|
|
645
|
+
return ((req) => {
|
|
646
|
+
return handler(req).then((response) => {
|
|
647
|
+
if (!response) return response;
|
|
648
|
+
const corsHeaders = getCorsHeaders(
|
|
649
|
+
req.headers.get("origin"),
|
|
650
|
+
allowedOrigins
|
|
651
|
+
);
|
|
652
|
+
if (corsHeaders) {
|
|
653
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
654
|
+
response.headers.set(key, value);
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
return response;
|
|
658
|
+
});
|
|
659
|
+
});
|
|
660
|
+
}
|
|
661
|
+
|
|
628
662
|
// src/auth/email/utils.ts
|
|
629
663
|
var import_jsonwebtoken2 = require("jsonwebtoken");
|
|
630
664
|
|
|
@@ -634,11 +668,6 @@ var import_jsonwebtoken = require("jsonwebtoken");
|
|
|
634
668
|
var import_headers = require("next/headers");
|
|
635
669
|
var import_navigation = require("next/navigation");
|
|
636
670
|
var import_server = require("next/server");
|
|
637
|
-
|
|
638
|
-
// src/auth/constants.ts
|
|
639
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
640
|
-
|
|
641
|
-
// src/auth/email/token.ts
|
|
642
671
|
function getUserIdFromRefreshToken(refreshToken) {
|
|
643
672
|
if (refreshToken)
|
|
644
673
|
try {
|
|
@@ -683,7 +712,8 @@ async function initGraphQLServer({
|
|
|
683
712
|
authChecker,
|
|
684
713
|
resolvers,
|
|
685
714
|
plugins,
|
|
686
|
-
getContext: overrideGetContext
|
|
715
|
+
getContext: overrideGetContext,
|
|
716
|
+
allowedOrigins
|
|
687
717
|
}) {
|
|
688
718
|
const { typeDefs, resolvers: builtResolvers } = await (0, import_type_graphql.buildTypeDefsAndResolvers)({
|
|
689
719
|
validate: true,
|
|
@@ -710,8 +740,12 @@ async function initGraphQLServer({
|
|
|
710
740
|
context: overrideGetContext || getContext
|
|
711
741
|
});
|
|
712
742
|
return {
|
|
713
|
-
GET: (request) => handler(request),
|
|
714
|
-
POST: (request) => handler(request)
|
|
743
|
+
GET: withCors((request) => handler(request), allowedOrigins),
|
|
744
|
+
POST: withCors((request) => handler(request), allowedOrigins),
|
|
745
|
+
OPTIONS: withCors(
|
|
746
|
+
(_request) => Promise.resolve(new import_server4.NextResponse(null, { status: 204 })),
|
|
747
|
+
allowedOrigins
|
|
748
|
+
)
|
|
715
749
|
};
|
|
716
750
|
}
|
|
717
751
|
|
|
@@ -559,6 +559,7 @@ import {
|
|
|
559
559
|
ApolloServerPluginLandingPageProductionDefault
|
|
560
560
|
} from "@apollo/server/plugin/landingPage/default";
|
|
561
561
|
import { startServerAndCreateNextHandler } from "@as-integrations/next";
|
|
562
|
+
import { NextResponse as NextResponse3 } from "next/server";
|
|
562
563
|
import {
|
|
563
564
|
buildTypeDefsAndResolvers
|
|
564
565
|
} from "type-graphql";
|
|
@@ -612,6 +613,39 @@ function getEnv(key, skipCheck) {
|
|
|
612
613
|
return value;
|
|
613
614
|
}
|
|
614
615
|
|
|
616
|
+
// src/auth/constants.ts
|
|
617
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
618
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
619
|
+
|
|
620
|
+
// src/utils/route.ts
|
|
621
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
622
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
623
|
+
return {
|
|
624
|
+
"Access-Control-Allow-Origin": origin,
|
|
625
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
626
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
627
|
+
"Access-Control-Allow-Credentials": "true"
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
function withCors(handler, allowedOrigins) {
|
|
631
|
+
if (!allowedOrigins?.length) return handler;
|
|
632
|
+
return ((req) => {
|
|
633
|
+
return handler(req).then((response) => {
|
|
634
|
+
if (!response) return response;
|
|
635
|
+
const corsHeaders = getCorsHeaders(
|
|
636
|
+
req.headers.get("origin"),
|
|
637
|
+
allowedOrigins
|
|
638
|
+
);
|
|
639
|
+
if (corsHeaders) {
|
|
640
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
641
|
+
response.headers.set(key, value);
|
|
642
|
+
});
|
|
643
|
+
}
|
|
644
|
+
return response;
|
|
645
|
+
});
|
|
646
|
+
});
|
|
647
|
+
}
|
|
648
|
+
|
|
615
649
|
// src/auth/email/utils.ts
|
|
616
650
|
import { verify as verify2 } from "jsonwebtoken";
|
|
617
651
|
|
|
@@ -621,11 +655,6 @@ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
|
621
655
|
import { cookies } from "next/headers";
|
|
622
656
|
import { redirect } from "next/navigation";
|
|
623
657
|
import { NextResponse } from "next/server";
|
|
624
|
-
|
|
625
|
-
// src/auth/constants.ts
|
|
626
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
627
|
-
|
|
628
|
-
// src/auth/email/token.ts
|
|
629
658
|
function getUserIdFromRefreshToken(refreshToken) {
|
|
630
659
|
if (refreshToken)
|
|
631
660
|
try {
|
|
@@ -670,7 +699,8 @@ async function initGraphQLServer({
|
|
|
670
699
|
authChecker,
|
|
671
700
|
resolvers,
|
|
672
701
|
plugins,
|
|
673
|
-
getContext: overrideGetContext
|
|
702
|
+
getContext: overrideGetContext,
|
|
703
|
+
allowedOrigins
|
|
674
704
|
}) {
|
|
675
705
|
const { typeDefs, resolvers: builtResolvers } = await buildTypeDefsAndResolvers({
|
|
676
706
|
validate: true,
|
|
@@ -697,8 +727,12 @@ async function initGraphQLServer({
|
|
|
697
727
|
context: overrideGetContext || getContext
|
|
698
728
|
});
|
|
699
729
|
return {
|
|
700
|
-
GET: (request) => handler(request),
|
|
701
|
-
POST: (request) => handler(request)
|
|
730
|
+
GET: withCors((request) => handler(request), allowedOrigins),
|
|
731
|
+
POST: withCors((request) => handler(request), allowedOrigins),
|
|
732
|
+
OPTIONS: withCors(
|
|
733
|
+
(_request) => Promise.resolve(new NextResponse3(null, { status: 204 })),
|
|
734
|
+
allowedOrigins
|
|
735
|
+
)
|
|
702
736
|
};
|
|
703
737
|
}
|
|
704
738
|
|
package/dist/graphql/init.cjs.js
CHANGED
|
@@ -27,6 +27,7 @@ var import_reflect_metadata = require("reflect-metadata");
|
|
|
27
27
|
var import_server3 = require("@apollo/server");
|
|
28
28
|
var import_default = require("@apollo/server/plugin/landingPage/default");
|
|
29
29
|
var import_next = require("@as-integrations/next");
|
|
30
|
+
var import_server4 = require("next/server");
|
|
30
31
|
var import_type_graphql = require("type-graphql");
|
|
31
32
|
|
|
32
33
|
// src/env.ts
|
|
@@ -78,6 +79,39 @@ function getEnv(key, skipCheck) {
|
|
|
78
79
|
return value;
|
|
79
80
|
}
|
|
80
81
|
|
|
82
|
+
// src/auth/constants.ts
|
|
83
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
84
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
85
|
+
|
|
86
|
+
// src/utils/route.ts
|
|
87
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
88
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
89
|
+
return {
|
|
90
|
+
"Access-Control-Allow-Origin": origin,
|
|
91
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
92
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
93
|
+
"Access-Control-Allow-Credentials": "true"
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function withCors(handler, allowedOrigins) {
|
|
97
|
+
if (!allowedOrigins?.length) return handler;
|
|
98
|
+
return ((req) => {
|
|
99
|
+
return handler(req).then((response) => {
|
|
100
|
+
if (!response) return response;
|
|
101
|
+
const corsHeaders = getCorsHeaders(
|
|
102
|
+
req.headers.get("origin"),
|
|
103
|
+
allowedOrigins
|
|
104
|
+
);
|
|
105
|
+
if (corsHeaders) {
|
|
106
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
107
|
+
response.headers.set(key, value);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return response;
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
81
115
|
// src/auth/email/utils.ts
|
|
82
116
|
var import_jsonwebtoken2 = require("jsonwebtoken");
|
|
83
117
|
|
|
@@ -87,11 +121,6 @@ var import_jsonwebtoken = require("jsonwebtoken");
|
|
|
87
121
|
var import_headers = require("next/headers");
|
|
88
122
|
var import_navigation = require("next/navigation");
|
|
89
123
|
var import_server = require("next/server");
|
|
90
|
-
|
|
91
|
-
// src/auth/constants.ts
|
|
92
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
93
|
-
|
|
94
|
-
// src/auth/email/token.ts
|
|
95
124
|
function getUserIdFromRefreshToken(refreshToken) {
|
|
96
125
|
if (refreshToken)
|
|
97
126
|
try {
|
|
@@ -136,7 +165,8 @@ async function initGraphQLServer({
|
|
|
136
165
|
authChecker,
|
|
137
166
|
resolvers,
|
|
138
167
|
plugins,
|
|
139
|
-
getContext: overrideGetContext
|
|
168
|
+
getContext: overrideGetContext,
|
|
169
|
+
allowedOrigins
|
|
140
170
|
}) {
|
|
141
171
|
const { typeDefs, resolvers: builtResolvers } = await (0, import_type_graphql.buildTypeDefsAndResolvers)({
|
|
142
172
|
validate: true,
|
|
@@ -163,8 +193,12 @@ async function initGraphQLServer({
|
|
|
163
193
|
context: overrideGetContext || getContext
|
|
164
194
|
});
|
|
165
195
|
return {
|
|
166
|
-
GET: (request) => handler(request),
|
|
167
|
-
POST: (request) => handler(request)
|
|
196
|
+
GET: withCors((request) => handler(request), allowedOrigins),
|
|
197
|
+
POST: withCors((request) => handler(request), allowedOrigins),
|
|
198
|
+
OPTIONS: withCors(
|
|
199
|
+
(_request) => Promise.resolve(new import_server4.NextResponse(null, { status: 204 })),
|
|
200
|
+
allowedOrigins
|
|
201
|
+
)
|
|
168
202
|
};
|
|
169
203
|
}
|
|
170
204
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/graphql/init.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApolloServerPlugin } from '@apollo/server';
|
|
2
|
-
import { NextRequest } from 'next/server';
|
|
2
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { AuthChecker, NonEmptyArray } from 'type-graphql';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -35,14 +35,16 @@ import { AuthChecker, NonEmptyArray } from 'type-graphql';
|
|
|
35
35
|
*
|
|
36
36
|
* @category GraphQL
|
|
37
37
|
*/
|
|
38
|
-
declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext: overrideGetContext, }: {
|
|
38
|
+
declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext: overrideGetContext, allowedOrigins, }: {
|
|
39
39
|
authChecker?: AuthChecker<any>;
|
|
40
40
|
resolvers: NonEmptyArray<Function>;
|
|
41
41
|
plugins?: ApolloServerPlugin[];
|
|
42
42
|
getContext?: (req: NextRequest) => Promise<any> | any;
|
|
43
|
+
allowedOrigins?: string[];
|
|
43
44
|
}): Promise<{
|
|
44
45
|
GET: (request: NextRequest) => Promise<Response>;
|
|
45
46
|
POST: (request: NextRequest) => Promise<Response>;
|
|
47
|
+
OPTIONS: (_request: NextRequest) => Promise<NextResponse<unknown>>;
|
|
46
48
|
}>;
|
|
47
49
|
|
|
48
50
|
export { initGraphQLServer };
|
package/dist/graphql/init.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApolloServerPlugin } from '@apollo/server';
|
|
2
|
-
import { NextRequest } from 'next/server';
|
|
2
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
3
3
|
import { AuthChecker, NonEmptyArray } from 'type-graphql';
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -35,14 +35,16 @@ import { AuthChecker, NonEmptyArray } from 'type-graphql';
|
|
|
35
35
|
*
|
|
36
36
|
* @category GraphQL
|
|
37
37
|
*/
|
|
38
|
-
declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext: overrideGetContext, }: {
|
|
38
|
+
declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext: overrideGetContext, allowedOrigins, }: {
|
|
39
39
|
authChecker?: AuthChecker<any>;
|
|
40
40
|
resolvers: NonEmptyArray<Function>;
|
|
41
41
|
plugins?: ApolloServerPlugin[];
|
|
42
42
|
getContext?: (req: NextRequest) => Promise<any> | any;
|
|
43
|
+
allowedOrigins?: string[];
|
|
43
44
|
}): Promise<{
|
|
44
45
|
GET: (request: NextRequest) => Promise<Response>;
|
|
45
46
|
POST: (request: NextRequest) => Promise<Response>;
|
|
47
|
+
OPTIONS: (_request: NextRequest) => Promise<NextResponse<unknown>>;
|
|
46
48
|
}>;
|
|
47
49
|
|
|
48
50
|
export { initGraphQLServer };
|
package/dist/graphql/init.esm.js
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
ApolloServerPluginLandingPageProductionDefault
|
|
7
7
|
} from "@apollo/server/plugin/landingPage/default";
|
|
8
8
|
import { startServerAndCreateNextHandler } from "@as-integrations/next";
|
|
9
|
+
import { NextResponse as NextResponse3 } from "next/server";
|
|
9
10
|
import {
|
|
10
11
|
buildTypeDefsAndResolvers
|
|
11
12
|
} from "type-graphql";
|
|
@@ -59,6 +60,39 @@ function getEnv(key, skipCheck) {
|
|
|
59
60
|
return value;
|
|
60
61
|
}
|
|
61
62
|
|
|
63
|
+
// src/auth/constants.ts
|
|
64
|
+
var REFRESH_COOKIE_NAME = "refresh";
|
|
65
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
66
|
+
|
|
67
|
+
// src/utils/route.ts
|
|
68
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
69
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
70
|
+
return {
|
|
71
|
+
"Access-Control-Allow-Origin": origin,
|
|
72
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
73
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
74
|
+
"Access-Control-Allow-Credentials": "true"
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function withCors(handler, allowedOrigins) {
|
|
78
|
+
if (!allowedOrigins?.length) return handler;
|
|
79
|
+
return ((req) => {
|
|
80
|
+
return handler(req).then((response) => {
|
|
81
|
+
if (!response) return response;
|
|
82
|
+
const corsHeaders = getCorsHeaders(
|
|
83
|
+
req.headers.get("origin"),
|
|
84
|
+
allowedOrigins
|
|
85
|
+
);
|
|
86
|
+
if (corsHeaders) {
|
|
87
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
88
|
+
response.headers.set(key, value);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return response;
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
62
96
|
// src/auth/email/utils.ts
|
|
63
97
|
import { verify as verify2 } from "jsonwebtoken";
|
|
64
98
|
|
|
@@ -68,11 +102,6 @@ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
|
|
|
68
102
|
import { cookies } from "next/headers";
|
|
69
103
|
import { redirect } from "next/navigation";
|
|
70
104
|
import { NextResponse } from "next/server";
|
|
71
|
-
|
|
72
|
-
// src/auth/constants.ts
|
|
73
|
-
var REFRESH_COOKIE_NAME = "refresh";
|
|
74
|
-
|
|
75
|
-
// src/auth/email/token.ts
|
|
76
105
|
function getUserIdFromRefreshToken(refreshToken) {
|
|
77
106
|
if (refreshToken)
|
|
78
107
|
try {
|
|
@@ -117,7 +146,8 @@ async function initGraphQLServer({
|
|
|
117
146
|
authChecker,
|
|
118
147
|
resolvers,
|
|
119
148
|
plugins,
|
|
120
|
-
getContext: overrideGetContext
|
|
149
|
+
getContext: overrideGetContext,
|
|
150
|
+
allowedOrigins
|
|
121
151
|
}) {
|
|
122
152
|
const { typeDefs, resolvers: builtResolvers } = await buildTypeDefsAndResolvers({
|
|
123
153
|
validate: true,
|
|
@@ -144,8 +174,12 @@ async function initGraphQLServer({
|
|
|
144
174
|
context: overrideGetContext || getContext
|
|
145
175
|
});
|
|
146
176
|
return {
|
|
147
|
-
GET: (request) => handler(request),
|
|
148
|
-
POST: (request) => handler(request)
|
|
177
|
+
GET: withCors((request) => handler(request), allowedOrigins),
|
|
178
|
+
POST: withCors((request) => handler(request), allowedOrigins),
|
|
179
|
+
OPTIONS: withCors(
|
|
180
|
+
(_request) => Promise.resolve(new NextResponse3(null, { status: 204 })),
|
|
181
|
+
allowedOrigins
|
|
182
|
+
)
|
|
149
183
|
};
|
|
150
184
|
}
|
|
151
185
|
export {
|
|
@@ -0,0 +1,63 @@
|
|
|
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/utils/route.ts
|
|
21
|
+
var route_exports = {};
|
|
22
|
+
__export(route_exports, {
|
|
23
|
+
getCorsHeaders: () => getCorsHeaders,
|
|
24
|
+
withCors: () => withCors
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(route_exports);
|
|
27
|
+
|
|
28
|
+
// src/auth/constants.ts
|
|
29
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
30
|
+
|
|
31
|
+
// src/utils/route.ts
|
|
32
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
33
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
34
|
+
return {
|
|
35
|
+
"Access-Control-Allow-Origin": origin,
|
|
36
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
37
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
38
|
+
"Access-Control-Allow-Credentials": "true"
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function withCors(handler, allowedOrigins) {
|
|
42
|
+
if (!allowedOrigins?.length) return handler;
|
|
43
|
+
return ((req) => {
|
|
44
|
+
return handler(req).then((response) => {
|
|
45
|
+
if (!response) return response;
|
|
46
|
+
const corsHeaders = getCorsHeaders(
|
|
47
|
+
req.headers.get("origin"),
|
|
48
|
+
allowedOrigins
|
|
49
|
+
);
|
|
50
|
+
if (corsHeaders) {
|
|
51
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
52
|
+
response.headers.set(key, value);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return response;
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
60
|
+
0 && (module.exports = {
|
|
61
|
+
getCorsHeaders,
|
|
62
|
+
withCors
|
|
63
|
+
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
declare function getCorsHeaders(origin: string | null, allowedOrigins: string[]): {
|
|
4
|
+
"Access-Control-Allow-Origin": string;
|
|
5
|
+
"Access-Control-Allow-Methods": string;
|
|
6
|
+
"Access-Control-Allow-Headers": string;
|
|
7
|
+
"Access-Control-Allow-Credentials": string;
|
|
8
|
+
} | null;
|
|
9
|
+
declare function withCors<T extends (req: NextRequest) => Promise<NextResponse | Response | undefined>>(handler: T, allowedOrigins?: string[]): T;
|
|
10
|
+
|
|
11
|
+
export { getCorsHeaders, withCors };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
declare function getCorsHeaders(origin: string | null, allowedOrigins: string[]): {
|
|
4
|
+
"Access-Control-Allow-Origin": string;
|
|
5
|
+
"Access-Control-Allow-Methods": string;
|
|
6
|
+
"Access-Control-Allow-Headers": string;
|
|
7
|
+
"Access-Control-Allow-Credentials": string;
|
|
8
|
+
} | null;
|
|
9
|
+
declare function withCors<T extends (req: NextRequest) => Promise<NextResponse | Response | undefined>>(handler: T, allowedOrigins?: string[]): T;
|
|
10
|
+
|
|
11
|
+
export { getCorsHeaders, withCors };
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// src/auth/constants.ts
|
|
2
|
+
var REFRESH_HEADER_NAME = "X-Refresh-Token";
|
|
3
|
+
|
|
4
|
+
// src/utils/route.ts
|
|
5
|
+
function getCorsHeaders(origin, allowedOrigins) {
|
|
6
|
+
if (!origin || !allowedOrigins.includes(origin)) return null;
|
|
7
|
+
return {
|
|
8
|
+
"Access-Control-Allow-Origin": origin,
|
|
9
|
+
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
|
|
10
|
+
"Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
|
|
11
|
+
"Access-Control-Allow-Credentials": "true"
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function withCors(handler, allowedOrigins) {
|
|
15
|
+
if (!allowedOrigins?.length) return handler;
|
|
16
|
+
return ((req) => {
|
|
17
|
+
return handler(req).then((response) => {
|
|
18
|
+
if (!response) return response;
|
|
19
|
+
const corsHeaders = getCorsHeaders(
|
|
20
|
+
req.headers.get("origin"),
|
|
21
|
+
allowedOrigins
|
|
22
|
+
);
|
|
23
|
+
if (corsHeaders) {
|
|
24
|
+
Object.entries(corsHeaders).forEach(([key, value]) => {
|
|
25
|
+
response.headers.set(key, value);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
return response;
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
export {
|
|
33
|
+
getCorsHeaders,
|
|
34
|
+
withCors
|
|
35
|
+
};
|