naystack 1.5.28 → 1.5.30

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.
@@ -116,11 +116,13 @@ var AuthWrapper = ({
116
116
  function useAuthFetch(getRefreshToken) {
117
117
  const setToken = useSetToken();
118
118
  const fetchToken = async () => {
119
- fetch(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */), {
120
- credentials: "include",
121
- body: getRefreshToken ? JSON.stringify({
122
- [REFRESH_COOKIE_NAME]: await getRefreshToken()
123
- }) : void 0
119
+ const url = new URL(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */));
120
+ if (getRefreshToken) {
121
+ const token = await getRefreshToken();
122
+ if (token) url.searchParams.set(REFRESH_COOKIE_NAME, token);
123
+ }
124
+ fetch(url, {
125
+ credentials: "include"
124
126
  }).then((res) => res.json()).then((data) => setToken(data.accessToken));
125
127
  };
126
128
  (0, import_react.useEffect)(() => {
@@ -43,7 +43,7 @@ declare const AuthWrapper: ({ children, onTokenUpdate, }: {
43
43
  children: React__default.ReactNode;
44
44
  onTokenUpdate?: (token: string | null) => void;
45
45
  }) => React__default.JSX.Element;
46
- declare function useAuthFetch(getRefreshToken?: () => Promise<string>): void;
46
+ declare function useAuthFetch(getRefreshToken?: () => Promise<string | null>): void;
47
47
  declare function AuthApply({ data }: {
48
48
  data?: string | null;
49
49
  }): null;
@@ -43,7 +43,7 @@ declare const AuthWrapper: ({ children, onTokenUpdate, }: {
43
43
  children: React__default.ReactNode;
44
44
  onTokenUpdate?: (token: string | null) => void;
45
45
  }) => React__default.JSX.Element;
46
- declare function useAuthFetch(getRefreshToken?: () => Promise<string>): void;
46
+ declare function useAuthFetch(getRefreshToken?: () => Promise<string | null>): void;
47
47
  declare function AuthApply({ data }: {
48
48
  data?: string | null;
49
49
  }): null;
@@ -81,11 +81,13 @@ var AuthWrapper = ({
81
81
  function useAuthFetch(getRefreshToken) {
82
82
  const setToken = useSetToken();
83
83
  const fetchToken = async () => {
84
- fetch(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */), {
85
- credentials: "include",
86
- body: getRefreshToken ? JSON.stringify({
87
- [REFRESH_COOKIE_NAME]: await getRefreshToken()
88
- }) : void 0
84
+ const url = new URL(getEnv("NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT" /* NEXT_PUBLIC_EMAIL_AUTH_ENDPOINT */));
85
+ if (getRefreshToken) {
86
+ const token = await getRefreshToken();
87
+ if (token) url.searchParams.set(REFRESH_COOKIE_NAME, token);
88
+ }
89
+ fetch(url, {
90
+ credentials: "include"
89
91
  }).then((res) => res.json()).then((data) => setToken(data.accessToken));
90
92
  };
91
93
  useEffect(() => {
@@ -38,6 +38,35 @@ __export(email_exports, {
38
38
  module.exports = __toCommonJS(email_exports);
39
39
  var import_server4 = require("next/server");
40
40
 
41
+ // src/utils/route.ts
42
+ function getCorsHeaders(origin, allowedOrigins) {
43
+ if (!origin || !allowedOrigins.includes(origin)) return null;
44
+ return {
45
+ "Access-Control-Allow-Origin": origin,
46
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
47
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
48
+ "Access-Control-Allow-Credentials": "true"
49
+ };
50
+ }
51
+ function withCors(handler, allowedOrigins) {
52
+ if (!allowedOrigins?.length) return handler;
53
+ return ((req) => {
54
+ return handler(req).then((response) => {
55
+ if (!response) return response;
56
+ const corsHeaders = getCorsHeaders(
57
+ req.headers.get("origin"),
58
+ allowedOrigins
59
+ );
60
+ if (corsHeaders) {
61
+ Object.entries(corsHeaders).forEach(([key, value]) => {
62
+ response.headers.set(key, value);
63
+ });
64
+ }
65
+ return response;
66
+ });
67
+ });
68
+ }
69
+
41
70
  // src/auth/email/token.ts
42
71
  var import_bcryptjs = require("bcryptjs");
43
72
  var import_jsonwebtoken = require("jsonwebtoken");
@@ -242,10 +271,8 @@ var getDeleteRoute = (options) => async (req) => {
242
271
 
243
272
  // src/auth/email/routes/get.ts
244
273
  var getGetRoute = (options) => async (req) => {
245
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
246
- const requestBody = refresh ? null : await req.json();
247
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
248
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
274
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
275
+ const userID = getUserIdFromRefreshToken(refresh);
249
276
  if (userID) {
250
277
  if (options.onRefresh) {
251
278
  const body = await req.json();
@@ -369,33 +396,6 @@ function AuthFetch() {
369
396
  }
370
397
 
371
398
  // src/auth/email/index.ts
372
- function getCorsHeaders(origin, allowedOrigins) {
373
- if (!origin || !allowedOrigins.includes(origin)) return null;
374
- return {
375
- "Access-Control-Allow-Origin": origin,
376
- "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
377
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
378
- "Access-Control-Allow-Credentials": "true"
379
- };
380
- }
381
- function withCors(handler, allowedOrigins) {
382
- if (!allowedOrigins?.length) return handler;
383
- return ((req) => {
384
- return handler(req).then((response) => {
385
- if (!response) return response;
386
- const corsHeaders = getCorsHeaders(
387
- req.headers.get("origin"),
388
- allowedOrigins
389
- );
390
- if (corsHeaders) {
391
- Object.entries(corsHeaders).forEach(([key, value]) => {
392
- response.headers.set(key, value);
393
- });
394
- }
395
- return response;
396
- });
397
- });
398
- }
399
399
  function getEmailAuthRoutes(options) {
400
400
  const { allowedOrigins } = options;
401
401
  return {
@@ -1,6 +1,35 @@
1
1
  // src/auth/email/index.ts
2
2
  import { NextResponse as NextResponse3 } from "next/server";
3
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",
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
+
4
33
  // src/auth/email/token.ts
5
34
  import { compare } from "bcryptjs";
6
35
  import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
@@ -205,10 +234,8 @@ var getDeleteRoute = (options) => async (req) => {
205
234
 
206
235
  // src/auth/email/routes/get.ts
207
236
  var getGetRoute = (options) => async (req) => {
208
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
209
- const requestBody = refresh ? null : await req.json();
210
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
211
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
237
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
238
+ const userID = getUserIdFromRefreshToken(refresh);
212
239
  if (userID) {
213
240
  if (options.onRefresh) {
214
241
  const body = await req.json();
@@ -336,33 +363,6 @@ function AuthFetch() {
336
363
  }
337
364
 
338
365
  // src/auth/email/index.ts
339
- function getCorsHeaders(origin, allowedOrigins) {
340
- if (!origin || !allowedOrigins.includes(origin)) return null;
341
- return {
342
- "Access-Control-Allow-Origin": origin,
343
- "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
344
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
345
- "Access-Control-Allow-Credentials": "true"
346
- };
347
- }
348
- function withCors(handler, allowedOrigins) {
349
- if (!allowedOrigins?.length) return handler;
350
- return ((req) => {
351
- return handler(req).then((response) => {
352
- if (!response) return response;
353
- const corsHeaders = getCorsHeaders(
354
- req.headers.get("origin"),
355
- allowedOrigins
356
- );
357
- if (corsHeaders) {
358
- Object.entries(corsHeaders).forEach(([key, value]) => {
359
- response.headers.set(key, value);
360
- });
361
- }
362
- return response;
363
- });
364
- });
365
- }
366
366
  function getEmailAuthRoutes(options) {
367
367
  const { allowedOrigins } = options;
368
368
  return {
@@ -123,10 +123,8 @@ function getUserIdFromRefreshToken(refreshToken) {
123
123
 
124
124
  // src/auth/email/routes/get.ts
125
125
  var getGetRoute = (options) => async (req) => {
126
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
127
- const requestBody = refresh ? null : await req.json();
128
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
129
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
126
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
127
+ const userID = getUserIdFromRefreshToken(refresh);
130
128
  if (userID) {
131
129
  if (options.onRefresh) {
132
130
  const body = await req.json();
@@ -97,10 +97,8 @@ function getUserIdFromRefreshToken(refreshToken) {
97
97
 
98
98
  // src/auth/email/routes/get.ts
99
99
  var getGetRoute = (options) => async (req) => {
100
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
101
- const requestBody = refresh ? null : await req.json();
102
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
103
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
100
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
101
+ const userID = getUserIdFromRefreshToken(refresh);
104
102
  if (userID) {
105
103
  if (options.onRefresh) {
106
104
  const body = await req.json();
@@ -44,6 +44,35 @@ module.exports = __toCommonJS(auth_exports);
44
44
  // src/auth/email/index.ts
45
45
  var import_server4 = require("next/server");
46
46
 
47
+ // src/utils/route.ts
48
+ function getCorsHeaders(origin, allowedOrigins) {
49
+ if (!origin || !allowedOrigins.includes(origin)) return null;
50
+ return {
51
+ "Access-Control-Allow-Origin": origin,
52
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
53
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
54
+ "Access-Control-Allow-Credentials": "true"
55
+ };
56
+ }
57
+ function withCors(handler, allowedOrigins) {
58
+ if (!allowedOrigins?.length) return handler;
59
+ return ((req) => {
60
+ return handler(req).then((response) => {
61
+ if (!response) return response;
62
+ const corsHeaders = getCorsHeaders(
63
+ req.headers.get("origin"),
64
+ allowedOrigins
65
+ );
66
+ if (corsHeaders) {
67
+ Object.entries(corsHeaders).forEach(([key, value]) => {
68
+ response.headers.set(key, value);
69
+ });
70
+ }
71
+ return response;
72
+ });
73
+ });
74
+ }
75
+
47
76
  // src/auth/email/token.ts
48
77
  var import_bcryptjs = require("bcryptjs");
49
78
  var import_jsonwebtoken = require("jsonwebtoken");
@@ -260,10 +289,8 @@ var getDeleteRoute = (options) => async (req) => {
260
289
 
261
290
  // src/auth/email/routes/get.ts
262
291
  var getGetRoute = (options) => async (req) => {
263
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
264
- const requestBody = refresh ? null : await req.json();
265
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
266
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
292
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
293
+ const userID = getUserIdFromRefreshToken(refresh);
267
294
  if (userID) {
268
295
  if (options.onRefresh) {
269
296
  const body = await req.json();
@@ -387,33 +414,6 @@ function AuthFetch() {
387
414
  }
388
415
 
389
416
  // src/auth/email/index.ts
390
- function getCorsHeaders(origin, allowedOrigins) {
391
- if (!origin || !allowedOrigins.includes(origin)) return null;
392
- return {
393
- "Access-Control-Allow-Origin": origin,
394
- "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
395
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
396
- "Access-Control-Allow-Credentials": "true"
397
- };
398
- }
399
- function withCors(handler, allowedOrigins) {
400
- if (!allowedOrigins?.length) return handler;
401
- return ((req) => {
402
- return handler(req).then((response) => {
403
- if (!response) return response;
404
- const corsHeaders = getCorsHeaders(
405
- req.headers.get("origin"),
406
- allowedOrigins
407
- );
408
- if (corsHeaders) {
409
- Object.entries(corsHeaders).forEach(([key, value]) => {
410
- response.headers.set(key, value);
411
- });
412
- }
413
- return response;
414
- });
415
- });
416
- }
417
417
  function getEmailAuthRoutes(options) {
418
418
  const { allowedOrigins } = options;
419
419
  return {
@@ -1,6 +1,35 @@
1
1
  // src/auth/email/index.ts
2
2
  import { NextResponse as NextResponse3 } from "next/server";
3
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",
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
+
4
33
  // src/auth/email/token.ts
5
34
  import { compare } from "bcryptjs";
6
35
  import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
@@ -217,10 +246,8 @@ var getDeleteRoute = (options) => async (req) => {
217
246
 
218
247
  // src/auth/email/routes/get.ts
219
248
  var getGetRoute = (options) => async (req) => {
220
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value;
221
- const requestBody = refresh ? null : await req.json();
222
- const bodyRefresh = requestBody?.[REFRESH_COOKIE_NAME];
223
- const userID = getUserIdFromRefreshToken(refresh || bodyRefresh);
249
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
250
+ const userID = getUserIdFromRefreshToken(refresh);
224
251
  if (userID) {
225
252
  if (options.onRefresh) {
226
253
  const body = await req.json();
@@ -348,33 +375,6 @@ function AuthFetch() {
348
375
  }
349
376
 
350
377
  // src/auth/email/index.ts
351
- function getCorsHeaders(origin, allowedOrigins) {
352
- if (!origin || !allowedOrigins.includes(origin)) return null;
353
- return {
354
- "Access-Control-Allow-Origin": origin,
355
- "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
356
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
357
- "Access-Control-Allow-Credentials": "true"
358
- };
359
- }
360
- function withCors(handler, allowedOrigins) {
361
- if (!allowedOrigins?.length) return handler;
362
- return ((req) => {
363
- return handler(req).then((response) => {
364
- if (!response) return response;
365
- const corsHeaders = getCorsHeaders(
366
- req.headers.get("origin"),
367
- allowedOrigins
368
- );
369
- if (corsHeaders) {
370
- Object.entries(corsHeaders).forEach(([key, value]) => {
371
- response.headers.set(key, value);
372
- });
373
- }
374
- return response;
375
- });
376
- });
377
- }
378
378
  function getEmailAuthRoutes(options) {
379
379
  const { allowedOrigins } = options;
380
380
  return {
@@ -625,6 +625,35 @@ function getEnv(key, skipCheck) {
625
625
  return value;
626
626
  }
627
627
 
628
+ // src/utils/route.ts
629
+ function getCorsHeaders(origin, allowedOrigins) {
630
+ if (!origin || !allowedOrigins.includes(origin)) return null;
631
+ return {
632
+ "Access-Control-Allow-Origin": origin,
633
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
634
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
635
+ "Access-Control-Allow-Credentials": "true"
636
+ };
637
+ }
638
+ function withCors(handler, allowedOrigins) {
639
+ if (!allowedOrigins?.length) return handler;
640
+ return ((req) => {
641
+ return handler(req).then((response) => {
642
+ if (!response) return response;
643
+ const corsHeaders = getCorsHeaders(
644
+ req.headers.get("origin"),
645
+ allowedOrigins
646
+ );
647
+ if (corsHeaders) {
648
+ Object.entries(corsHeaders).forEach(([key, value]) => {
649
+ response.headers.set(key, value);
650
+ });
651
+ }
652
+ return response;
653
+ });
654
+ });
655
+ }
656
+
628
657
  // src/auth/email/utils.ts
629
658
  var import_jsonwebtoken2 = require("jsonwebtoken");
630
659
 
@@ -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,8 @@ 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)
715
745
  };
716
746
  }
717
747
 
@@ -612,6 +612,35 @@ function getEnv(key, skipCheck) {
612
612
  return value;
613
613
  }
614
614
 
615
+ // src/utils/route.ts
616
+ function getCorsHeaders(origin, allowedOrigins) {
617
+ if (!origin || !allowedOrigins.includes(origin)) return null;
618
+ return {
619
+ "Access-Control-Allow-Origin": origin,
620
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
621
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
622
+ "Access-Control-Allow-Credentials": "true"
623
+ };
624
+ }
625
+ function withCors(handler, allowedOrigins) {
626
+ if (!allowedOrigins?.length) return handler;
627
+ return ((req) => {
628
+ return handler(req).then((response) => {
629
+ if (!response) return response;
630
+ const corsHeaders = getCorsHeaders(
631
+ req.headers.get("origin"),
632
+ allowedOrigins
633
+ );
634
+ if (corsHeaders) {
635
+ Object.entries(corsHeaders).forEach(([key, value]) => {
636
+ response.headers.set(key, value);
637
+ });
638
+ }
639
+ return response;
640
+ });
641
+ });
642
+ }
643
+
615
644
  // src/auth/email/utils.ts
616
645
  import { verify as verify2 } from "jsonwebtoken";
617
646
 
@@ -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,8 @@ 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)
702
732
  };
703
733
  }
704
734
 
@@ -78,6 +78,35 @@ function getEnv(key, skipCheck) {
78
78
  return value;
79
79
  }
80
80
 
81
+ // src/utils/route.ts
82
+ function getCorsHeaders(origin, allowedOrigins) {
83
+ if (!origin || !allowedOrigins.includes(origin)) return null;
84
+ return {
85
+ "Access-Control-Allow-Origin": origin,
86
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
87
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
88
+ "Access-Control-Allow-Credentials": "true"
89
+ };
90
+ }
91
+ function withCors(handler, allowedOrigins) {
92
+ if (!allowedOrigins?.length) return handler;
93
+ return ((req) => {
94
+ return handler(req).then((response) => {
95
+ if (!response) return response;
96
+ const corsHeaders = getCorsHeaders(
97
+ req.headers.get("origin"),
98
+ allowedOrigins
99
+ );
100
+ if (corsHeaders) {
101
+ Object.entries(corsHeaders).forEach(([key, value]) => {
102
+ response.headers.set(key, value);
103
+ });
104
+ }
105
+ return response;
106
+ });
107
+ });
108
+ }
109
+
81
110
  // src/auth/email/utils.ts
82
111
  var import_jsonwebtoken2 = require("jsonwebtoken");
83
112
 
@@ -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,8 @@ 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)
168
198
  };
169
199
  }
170
200
  // Annotate the CommonJS export names for ESM import in node:
@@ -35,11 +35,12 @@ 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>;
@@ -35,11 +35,12 @@ 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>;
@@ -59,6 +59,35 @@ function getEnv(key, skipCheck) {
59
59
  return value;
60
60
  }
61
61
 
62
+ // src/utils/route.ts
63
+ function getCorsHeaders(origin, allowedOrigins) {
64
+ if (!origin || !allowedOrigins.includes(origin)) return null;
65
+ return {
66
+ "Access-Control-Allow-Origin": origin,
67
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
68
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
69
+ "Access-Control-Allow-Credentials": "true"
70
+ };
71
+ }
72
+ function withCors(handler, allowedOrigins) {
73
+ if (!allowedOrigins?.length) return handler;
74
+ return ((req) => {
75
+ return handler(req).then((response) => {
76
+ if (!response) return response;
77
+ const corsHeaders = getCorsHeaders(
78
+ req.headers.get("origin"),
79
+ allowedOrigins
80
+ );
81
+ if (corsHeaders) {
82
+ Object.entries(corsHeaders).forEach(([key, value]) => {
83
+ response.headers.set(key, value);
84
+ });
85
+ }
86
+ return response;
87
+ });
88
+ });
89
+ }
90
+
62
91
  // src/auth/email/utils.ts
63
92
  import { verify as verify2 } from "jsonwebtoken";
64
93
 
@@ -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,8 @@ 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)
149
179
  };
150
180
  }
151
181
  export {
@@ -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/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
+ function getCorsHeaders(origin, allowedOrigins) {
28
+ if (!origin || !allowedOrigins.includes(origin)) return null;
29
+ return {
30
+ "Access-Control-Allow-Origin": origin,
31
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
32
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
33
+ "Access-Control-Allow-Credentials": "true"
34
+ };
35
+ }
36
+ function withCors(handler, allowedOrigins) {
37
+ if (!allowedOrigins?.length) return handler;
38
+ return ((req) => {
39
+ return handler(req).then((response) => {
40
+ if (!response) return response;
41
+ const corsHeaders = getCorsHeaders(
42
+ req.headers.get("origin"),
43
+ allowedOrigins
44
+ );
45
+ if (corsHeaders) {
46
+ Object.entries(corsHeaders).forEach(([key, value]) => {
47
+ response.headers.set(key, value);
48
+ });
49
+ }
50
+ return response;
51
+ });
52
+ });
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ getCorsHeaders,
57
+ withCors
58
+ });
@@ -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,32 @@
1
+ // src/utils/route.ts
2
+ function getCorsHeaders(origin, allowedOrigins) {
3
+ if (!origin || !allowedOrigins.includes(origin)) return null;
4
+ return {
5
+ "Access-Control-Allow-Origin": origin,
6
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
7
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
8
+ "Access-Control-Allow-Credentials": "true"
9
+ };
10
+ }
11
+ function withCors(handler, allowedOrigins) {
12
+ if (!allowedOrigins?.length) return handler;
13
+ return ((req) => {
14
+ return handler(req).then((response) => {
15
+ if (!response) return response;
16
+ const corsHeaders = getCorsHeaders(
17
+ req.headers.get("origin"),
18
+ allowedOrigins
19
+ );
20
+ if (corsHeaders) {
21
+ Object.entries(corsHeaders).forEach(([key, value]) => {
22
+ response.headers.set(key, value);
23
+ });
24
+ }
25
+ return response;
26
+ });
27
+ });
28
+ }
29
+ export {
30
+ getCorsHeaders,
31
+ withCors
32
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.5.28",
3
+ "version": "1.5.30",
4
4
  "description": "A stack built with Next + GraphQL + S3 + Auth",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",