naystack 1.5.30 → 1.5.32

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.
@@ -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
  });
@@ -3,5 +3,6 @@
3
3
  * @category Auth
4
4
  */
5
5
  declare const REFRESH_COOKIE_NAME = "refresh";
6
+ declare const REFRESH_HEADER_NAME = "X-Refresh-Token";
6
7
 
7
- export { REFRESH_COOKIE_NAME };
8
+ export { REFRESH_COOKIE_NAME, REFRESH_HEADER_NAME };
@@ -3,5 +3,6 @@
3
3
  * @category Auth
4
4
  */
5
5
  declare const REFRESH_COOKIE_NAME = "refresh";
6
+ declare const REFRESH_HEADER_NAME = "X-Refresh-Token";
6
7
 
7
- export { REFRESH_COOKIE_NAME };
8
+ export { REFRESH_COOKIE_NAME, REFRESH_HEADER_NAME };
@@ -1,5 +1,7 @@
1
1
  // src/auth/constants.ts
2
2
  var REFRESH_COOKIE_NAME = "refresh";
3
+ var REFRESH_HEADER_NAME = "X-Refresh-Token";
3
4
  export {
4
- REFRESH_COOKIE_NAME
5
+ REFRESH_COOKIE_NAME,
6
+ REFRESH_HEADER_NAME
5
7
  };
@@ -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 REFRESH_COOKIE_NAME = "refresh";
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 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"
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 REFRESH_COOKIE_NAME = "refresh";
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 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"
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,13 +38,17 @@ __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
+
41
45
  // src/utils/route.ts
42
46
  function getCorsHeaders(origin, allowedOrigins) {
43
47
  if (!origin || !allowedOrigins.includes(origin)) return null;
44
48
  return {
45
49
  "Access-Control-Allow-Origin": origin,
46
50
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
47
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
51
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
48
52
  "Access-Control-Allow-Credentials": "true"
49
53
  };
50
54
  }
@@ -123,9 +127,6 @@ function getEnv(key, skipCheck) {
123
127
  return value;
124
128
  }
125
129
 
126
- // src/auth/constants.ts
127
- var REFRESH_COOKIE_NAME = "refresh";
128
-
129
130
  // src/auth/email/token.ts
130
131
  function generateAccessToken(id, signingKey) {
131
132
  return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
@@ -271,11 +272,11 @@ var getDeleteRoute = (options) => async (req) => {
271
272
 
272
273
  // src/auth/email/routes/get.ts
273
274
  var getGetRoute = (options) => async (req) => {
274
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
275
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
275
276
  const userID = getUserIdFromRefreshToken(refresh);
276
277
  if (userID) {
277
278
  if (options.onRefresh) {
278
- const body = await req.json();
279
+ const body = await req.json().catch(() => null);
279
280
  await options.onRefresh?.(userID, body);
280
281
  }
281
282
  return getTokenizedResponse(
@@ -1,13 +1,17 @@
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
+
4
8
  // src/utils/route.ts
5
9
  function getCorsHeaders(origin, allowedOrigins) {
6
10
  if (!origin || !allowedOrigins.includes(origin)) return null;
7
11
  return {
8
12
  "Access-Control-Allow-Origin": origin,
9
13
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
10
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
14
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
11
15
  "Access-Control-Allow-Credentials": "true"
12
16
  };
13
17
  }
@@ -86,9 +90,6 @@ function getEnv(key, skipCheck) {
86
90
  return value;
87
91
  }
88
92
 
89
- // src/auth/constants.ts
90
- var REFRESH_COOKIE_NAME = "refresh";
91
-
92
93
  // src/auth/email/token.ts
93
94
  function generateAccessToken(id, signingKey) {
94
95
  return sign({ id }, signingKey, {
@@ -234,11 +235,11 @@ var getDeleteRoute = (options) => async (req) => {
234
235
 
235
236
  // src/auth/email/routes/get.ts
236
237
  var getGetRoute = (options) => async (req) => {
237
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
238
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
238
239
  const userID = getUserIdFromRefreshToken(refresh);
239
240
  if (userID) {
240
241
  if (options.onRefresh) {
241
- const body = await req.json();
242
+ const body = await req.json().catch(() => null);
242
243
  await options.onRefresh?.(userID, body);
243
244
  }
244
245
  return getTokenizedResponse(
@@ -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.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
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.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
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(
@@ -44,13 +44,17 @@ 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
+
47
51
  // src/utils/route.ts
48
52
  function getCorsHeaders(origin, allowedOrigins) {
49
53
  if (!origin || !allowedOrigins.includes(origin)) return null;
50
54
  return {
51
55
  "Access-Control-Allow-Origin": origin,
52
56
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
53
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
57
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
54
58
  "Access-Control-Allow-Credentials": "true"
55
59
  };
56
60
  }
@@ -129,9 +133,6 @@ function getEnv(key, skipCheck) {
129
133
  return value;
130
134
  }
131
135
 
132
- // src/auth/constants.ts
133
- var REFRESH_COOKIE_NAME = "refresh";
134
-
135
136
  // src/auth/email/token.ts
136
137
  function generateAccessToken(id, signingKey) {
137
138
  return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
@@ -289,11 +290,11 @@ var getDeleteRoute = (options) => async (req) => {
289
290
 
290
291
  // src/auth/email/routes/get.ts
291
292
  var getGetRoute = (options) => async (req) => {
292
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
293
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
293
294
  const userID = getUserIdFromRefreshToken(refresh);
294
295
  if (userID) {
295
296
  if (options.onRefresh) {
296
- const body = await req.json();
297
+ const body = await req.json().catch(() => null);
297
298
  await options.onRefresh?.(userID, body);
298
299
  }
299
300
  return getTokenizedResponse(
@@ -1,13 +1,17 @@
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
+
4
8
  // src/utils/route.ts
5
9
  function getCorsHeaders(origin, allowedOrigins) {
6
10
  if (!origin || !allowedOrigins.includes(origin)) return null;
7
11
  return {
8
12
  "Access-Control-Allow-Origin": origin,
9
13
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
10
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
14
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
11
15
  "Access-Control-Allow-Credentials": "true"
12
16
  };
13
17
  }
@@ -86,9 +90,6 @@ function getEnv(key, skipCheck) {
86
90
  return value;
87
91
  }
88
92
 
89
- // src/auth/constants.ts
90
- var REFRESH_COOKIE_NAME = "refresh";
91
-
92
93
  // src/auth/email/token.ts
93
94
  function generateAccessToken(id, signingKey) {
94
95
  return sign({ id }, signingKey, {
@@ -246,11 +247,11 @@ var getDeleteRoute = (options) => async (req) => {
246
247
 
247
248
  // src/auth/email/routes/get.ts
248
249
  var getGetRoute = (options) => async (req) => {
249
- const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.nextUrl.searchParams.get(REFRESH_COOKIE_NAME) || void 0;
250
+ const refresh = req.cookies.get(REFRESH_COOKIE_NAME)?.value || req.headers.get(REFRESH_HEADER_NAME) || void 0;
250
251
  const userID = getUserIdFromRefreshToken(refresh);
251
252
  if (userID) {
252
253
  if (options.onRefresh) {
253
- const body = await req.json();
254
+ const body = await req.json().catch(() => null);
254
255
  await options.onRefresh?.(userID, body);
255
256
  }
256
257
  return getTokenizedResponse(
@@ -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,13 +626,17 @@ 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
+
628
633
  // src/utils/route.ts
629
634
  function getCorsHeaders(origin, allowedOrigins) {
630
635
  if (!origin || !allowedOrigins.includes(origin)) return null;
631
636
  return {
632
637
  "Access-Control-Allow-Origin": origin,
633
638
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
634
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
639
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
635
640
  "Access-Control-Allow-Credentials": "true"
636
641
  };
637
642
  }
@@ -663,11 +668,6 @@ var import_jsonwebtoken = require("jsonwebtoken");
663
668
  var import_headers = require("next/headers");
664
669
  var import_navigation = require("next/navigation");
665
670
  var import_server = require("next/server");
666
-
667
- // src/auth/constants.ts
668
- var REFRESH_COOKIE_NAME = "refresh";
669
-
670
- // src/auth/email/token.ts
671
671
  function getUserIdFromRefreshToken(refreshToken) {
672
672
  if (refreshToken)
673
673
  try {
@@ -741,7 +741,19 @@ async function initGraphQLServer({
741
741
  });
742
742
  return {
743
743
  GET: withCors((request) => handler(request), allowedOrigins),
744
- POST: withCors((request) => handler(request), allowedOrigins)
744
+ POST: withCors((request) => handler(request), allowedOrigins),
745
+ ...allowedOrigins?.length ? {
746
+ OPTIONS: (req) => {
747
+ const corsHeaders = getCorsHeaders(
748
+ req.headers.get("origin"),
749
+ allowedOrigins
750
+ );
751
+ return new import_server4.NextResponse(null, {
752
+ status: 204,
753
+ headers: corsHeaders ?? void 0
754
+ });
755
+ }
756
+ } : {}
745
757
  };
746
758
  }
747
759
 
@@ -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,13 +613,17 @@ 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
+
615
620
  // src/utils/route.ts
616
621
  function getCorsHeaders(origin, allowedOrigins) {
617
622
  if (!origin || !allowedOrigins.includes(origin)) return null;
618
623
  return {
619
624
  "Access-Control-Allow-Origin": origin,
620
625
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
621
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
626
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
622
627
  "Access-Control-Allow-Credentials": "true"
623
628
  };
624
629
  }
@@ -650,11 +655,6 @@ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
650
655
  import { cookies } from "next/headers";
651
656
  import { redirect } from "next/navigation";
652
657
  import { NextResponse } from "next/server";
653
-
654
- // src/auth/constants.ts
655
- var REFRESH_COOKIE_NAME = "refresh";
656
-
657
- // src/auth/email/token.ts
658
658
  function getUserIdFromRefreshToken(refreshToken) {
659
659
  if (refreshToken)
660
660
  try {
@@ -728,7 +728,19 @@ async function initGraphQLServer({
728
728
  });
729
729
  return {
730
730
  GET: withCors((request) => handler(request), allowedOrigins),
731
- POST: withCors((request) => handler(request), allowedOrigins)
731
+ POST: withCors((request) => handler(request), allowedOrigins),
732
+ ...allowedOrigins?.length ? {
733
+ OPTIONS: (req) => {
734
+ const corsHeaders = getCorsHeaders(
735
+ req.headers.get("origin"),
736
+ allowedOrigins
737
+ );
738
+ return new NextResponse3(null, {
739
+ status: 204,
740
+ headers: corsHeaders ?? void 0
741
+ });
742
+ }
743
+ } : {}
732
744
  };
733
745
  }
734
746
 
@@ -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,13 +79,17 @@ 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
+
81
86
  // src/utils/route.ts
82
87
  function getCorsHeaders(origin, allowedOrigins) {
83
88
  if (!origin || !allowedOrigins.includes(origin)) return null;
84
89
  return {
85
90
  "Access-Control-Allow-Origin": origin,
86
91
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
87
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
92
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
88
93
  "Access-Control-Allow-Credentials": "true"
89
94
  };
90
95
  }
@@ -116,11 +121,6 @@ var import_jsonwebtoken = require("jsonwebtoken");
116
121
  var import_headers = require("next/headers");
117
122
  var import_navigation = require("next/navigation");
118
123
  var import_server = require("next/server");
119
-
120
- // src/auth/constants.ts
121
- var REFRESH_COOKIE_NAME = "refresh";
122
-
123
- // src/auth/email/token.ts
124
124
  function getUserIdFromRefreshToken(refreshToken) {
125
125
  if (refreshToken)
126
126
  try {
@@ -194,7 +194,19 @@ async function initGraphQLServer({
194
194
  });
195
195
  return {
196
196
  GET: withCors((request) => handler(request), allowedOrigins),
197
- POST: withCors((request) => handler(request), allowedOrigins)
197
+ POST: withCors((request) => handler(request), allowedOrigins),
198
+ ...allowedOrigins?.length ? {
199
+ OPTIONS: (req) => {
200
+ const corsHeaders = getCorsHeaders(
201
+ req.headers.get("origin"),
202
+ allowedOrigins
203
+ );
204
+ return new import_server4.NextResponse(null, {
205
+ status: 204,
206
+ headers: corsHeaders ?? void 0
207
+ });
208
+ }
209
+ } : {}
198
210
  };
199
211
  }
200
212
  // Annotate the CommonJS export names for ESM import in node:
@@ -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
  /**
@@ -42,6 +42,7 @@ declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext
42
42
  getContext?: (req: NextRequest) => Promise<any> | any;
43
43
  allowedOrigins?: string[];
44
44
  }): Promise<{
45
+ OPTIONS?: ((req: NextRequest) => NextResponse<unknown>) | undefined;
45
46
  GET: (request: NextRequest) => Promise<Response>;
46
47
  POST: (request: NextRequest) => Promise<Response>;
47
48
  }>;
@@ -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
  /**
@@ -42,6 +42,7 @@ declare function initGraphQLServer({ authChecker, resolvers, plugins, getContext
42
42
  getContext?: (req: NextRequest) => Promise<any> | any;
43
43
  allowedOrigins?: string[];
44
44
  }): Promise<{
45
+ OPTIONS?: ((req: NextRequest) => NextResponse<unknown>) | undefined;
45
46
  GET: (request: NextRequest) => Promise<Response>;
46
47
  POST: (request: NextRequest) => Promise<Response>;
47
48
  }>;
@@ -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,13 +60,17 @@ 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
+
62
67
  // src/utils/route.ts
63
68
  function getCorsHeaders(origin, allowedOrigins) {
64
69
  if (!origin || !allowedOrigins.includes(origin)) return null;
65
70
  return {
66
71
  "Access-Control-Allow-Origin": origin,
67
72
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
68
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
73
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
69
74
  "Access-Control-Allow-Credentials": "true"
70
75
  };
71
76
  }
@@ -97,11 +102,6 @@ import { JsonWebTokenError, sign, verify } from "jsonwebtoken";
97
102
  import { cookies } from "next/headers";
98
103
  import { redirect } from "next/navigation";
99
104
  import { NextResponse } from "next/server";
100
-
101
- // src/auth/constants.ts
102
- var REFRESH_COOKIE_NAME = "refresh";
103
-
104
- // src/auth/email/token.ts
105
105
  function getUserIdFromRefreshToken(refreshToken) {
106
106
  if (refreshToken)
107
107
  try {
@@ -175,7 +175,19 @@ async function initGraphQLServer({
175
175
  });
176
176
  return {
177
177
  GET: withCors((request) => handler(request), allowedOrigins),
178
- POST: withCors((request) => handler(request), allowedOrigins)
178
+ POST: withCors((request) => handler(request), allowedOrigins),
179
+ ...allowedOrigins?.length ? {
180
+ OPTIONS: (req) => {
181
+ const corsHeaders = getCorsHeaders(
182
+ req.headers.get("origin"),
183
+ allowedOrigins
184
+ );
185
+ return new NextResponse3(null, {
186
+ status: 204,
187
+ headers: corsHeaders ?? void 0
188
+ });
189
+ }
190
+ } : {}
179
191
  };
180
192
  }
181
193
  export {
@@ -24,12 +24,17 @@ __export(route_exports, {
24
24
  withCors: () => withCors
25
25
  });
26
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
27
32
  function getCorsHeaders(origin, allowedOrigins) {
28
33
  if (!origin || !allowedOrigins.includes(origin)) return null;
29
34
  return {
30
35
  "Access-Control-Allow-Origin": origin,
31
36
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
32
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
37
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
33
38
  "Access-Control-Allow-Credentials": "true"
34
39
  };
35
40
  }
@@ -1,10 +1,13 @@
1
+ // src/auth/constants.ts
2
+ var REFRESH_HEADER_NAME = "X-Refresh-Token";
3
+
1
4
  // src/utils/route.ts
2
5
  function getCorsHeaders(origin, allowedOrigins) {
3
6
  if (!origin || !allowedOrigins.includes(origin)) return null;
4
7
  return {
5
8
  "Access-Control-Allow-Origin": origin,
6
9
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
7
- "Access-Control-Allow-Headers": "Content-Type, Authorization",
10
+ "Access-Control-Allow-Headers": `Content-Type, Authorization, ${REFRESH_HEADER_NAME}`,
8
11
  "Access-Control-Allow-Credentials": "true"
9
12
  };
10
13
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.5.30",
3
+ "version": "1.5.32",
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",