naystack 1.7.6 → 1.7.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -123,7 +123,7 @@ function AuthChildComponent({ getRefreshToken }) {
123
123
  useAuthFetch({ getRefreshToken });
124
124
  return null;
125
125
  }
126
- function useAuthFetch({ getRefreshToken, skip }) {
126
+ function useAuthFetch({ getRefreshToken, skip } = {}) {
127
127
  const setToken = useSetToken();
128
128
  const fetchToken = async () => {
129
129
  const token = getRefreshToken ? await getRefreshToken() : null;
@@ -85,7 +85,7 @@ function AuthChildComponent({ getRefreshToken }) {
85
85
  useAuthFetch({ getRefreshToken });
86
86
  return null;
87
87
  }
88
- function useAuthFetch({ getRefreshToken, skip }) {
88
+ function useAuthFetch({ getRefreshToken, skip } = {}) {
89
89
  const setToken = useSetToken();
90
90
  const fetchToken = async () => {
91
91
  const token = getRefreshToken ? await getRefreshToken() : null;
@@ -120,7 +120,7 @@ function AuthChildComponent({ getRefreshToken }) {
120
120
  useAuthFetch({ getRefreshToken });
121
121
  return null;
122
122
  }
123
- function useAuthFetch({ getRefreshToken, skip }) {
123
+ function useAuthFetch({ getRefreshToken, skip } = {}) {
124
124
  const setToken = useSetToken();
125
125
  const fetchToken = async () => {
126
126
  const token = getRefreshToken ? await getRefreshToken() : null;
@@ -54,7 +54,7 @@ declare const AuthWrapper: ({ children, onTokenUpdate, getRefreshToken, skipInit
54
54
  *
55
55
  * @category Auth
56
56
  */
57
- declare function useAuthFetch({ getRefreshToken, skip }: {
57
+ declare function useAuthFetch({ getRefreshToken, skip }?: {
58
58
  getRefreshToken?: () => Promise<string | null>;
59
59
  skip?: boolean;
60
60
  }): void;
@@ -54,7 +54,7 @@ declare const AuthWrapper: ({ children, onTokenUpdate, getRefreshToken, skipInit
54
54
  *
55
55
  * @category Auth
56
56
  */
57
- declare function useAuthFetch({ getRefreshToken, skip }: {
57
+ declare function useAuthFetch({ getRefreshToken, skip }?: {
58
58
  getRefreshToken?: () => Promise<string | null>;
59
59
  skip?: boolean;
60
60
  }): void;
@@ -85,7 +85,7 @@ function AuthChildComponent({ getRefreshToken }) {
85
85
  useAuthFetch({ getRefreshToken });
86
86
  return null;
87
87
  }
88
- function useAuthFetch({ getRefreshToken, skip }) {
88
+ function useAuthFetch({ getRefreshToken, skip } = {}) {
89
89
  const setToken = useSetToken();
90
90
  const fetchToken = async () => {
91
91
  const token = getRefreshToken ? await getRefreshToken() : null;
@@ -70,6 +70,15 @@ function withCors(handler, allowedOrigins) {
70
70
  Object.entries(corsHeaders).forEach(([key, value]) => {
71
71
  response.headers.set(key, value);
72
72
  });
73
+ if (response instanceof import_server.NextResponse) {
74
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
75
+ if (refreshCookie) {
76
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
77
+ ...refreshCookie,
78
+ sameSite: "none"
79
+ });
80
+ }
81
+ }
73
82
  return response;
74
83
  });
75
84
  }
@@ -147,14 +156,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
147
156
  });
148
157
  if (!accessToken) {
149
158
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
150
- secure: false,
159
+ secure: true,
151
160
  httpOnly: true,
152
161
  expires: 0
153
162
  });
154
163
  }
155
164
  if (refreshToken !== void 0) {
156
165
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
157
- secure: false,
166
+ secure: true,
158
167
  httpOnly: true,
159
168
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
160
169
  });
@@ -32,6 +32,15 @@ function withCors(handler, allowedOrigins) {
32
32
  Object.entries(corsHeaders).forEach(([key, value]) => {
33
33
  response.headers.set(key, value);
34
34
  });
35
+ if (response instanceof NextResponse) {
36
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
37
+ if (refreshCookie) {
38
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
39
+ ...refreshCookie,
40
+ sameSite: "none"
41
+ });
42
+ }
43
+ }
35
44
  return response;
36
45
  });
37
46
  }
@@ -109,14 +118,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
109
118
  });
110
119
  if (!accessToken) {
111
120
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
112
- secure: false,
121
+ secure: true,
113
122
  httpOnly: true,
114
123
  expires: 0
115
124
  });
116
125
  }
117
126
  if (refreshToken !== void 0) {
118
127
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
119
- secure: false,
128
+ secure: true,
120
129
  httpOnly: true,
121
130
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
122
131
  });
@@ -92,14 +92,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
92
92
  });
93
93
  if (!accessToken) {
94
94
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
95
- secure: false,
95
+ secure: true,
96
96
  httpOnly: true,
97
97
  expires: 0
98
98
  });
99
99
  }
100
100
  if (refreshToken !== void 0) {
101
101
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
102
- secure: false,
102
+ secure: true,
103
103
  httpOnly: true,
104
104
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
105
105
  });
@@ -66,14 +66,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
66
66
  });
67
67
  if (!accessToken) {
68
68
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
69
- secure: false,
69
+ secure: true,
70
70
  httpOnly: true,
71
71
  expires: 0
72
72
  });
73
73
  }
74
74
  if (refreshToken !== void 0) {
75
75
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
76
- secure: false,
76
+ secure: true,
77
77
  httpOnly: true,
78
78
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
79
79
  });
@@ -96,14 +96,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
96
96
  });
97
97
  if (!accessToken) {
98
98
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
99
- secure: false,
99
+ secure: true,
100
100
  httpOnly: true,
101
101
  expires: 0
102
102
  });
103
103
  }
104
104
  if (refreshToken !== void 0) {
105
105
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
106
- secure: false,
106
+ secure: true,
107
107
  httpOnly: true,
108
108
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
109
109
  });
@@ -70,14 +70,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
70
70
  });
71
71
  if (!accessToken) {
72
72
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
73
- secure: false,
73
+ secure: true,
74
74
  httpOnly: true,
75
75
  expires: 0
76
76
  });
77
77
  }
78
78
  if (refreshToken !== void 0) {
79
79
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
80
- secure: false,
80
+ secure: true,
81
81
  httpOnly: true,
82
82
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
83
83
  });
@@ -109,14 +109,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
109
109
  });
110
110
  if (!accessToken) {
111
111
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
112
- secure: false,
112
+ secure: true,
113
113
  httpOnly: true,
114
114
  expires: 0
115
115
  });
116
116
  }
117
117
  if (refreshToken !== void 0) {
118
118
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
119
- secure: false,
119
+ secure: true,
120
120
  httpOnly: true,
121
121
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
122
122
  });
@@ -85,14 +85,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
85
85
  });
86
86
  if (!accessToken) {
87
87
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
88
- secure: false,
88
+ secure: true,
89
89
  httpOnly: true,
90
90
  expires: 0
91
91
  });
92
92
  }
93
93
  if (refreshToken !== void 0) {
94
94
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
95
- secure: false,
95
+ secure: true,
96
96
  httpOnly: true,
97
97
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
98
98
  });
@@ -108,14 +108,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
108
108
  });
109
109
  if (!accessToken) {
110
110
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
111
- secure: false,
111
+ secure: true,
112
112
  httpOnly: true,
113
113
  expires: 0
114
114
  });
115
115
  }
116
116
  if (refreshToken !== void 0) {
117
117
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
118
- secure: false,
118
+ secure: true,
119
119
  httpOnly: true,
120
120
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
121
121
  });
@@ -82,14 +82,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
82
82
  });
83
83
  if (!accessToken) {
84
84
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
85
- secure: false,
85
+ secure: true,
86
86
  httpOnly: true,
87
87
  expires: 0
88
88
  });
89
89
  }
90
90
  if (refreshToken !== void 0) {
91
91
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
92
- secure: false,
92
+ secure: true,
93
93
  httpOnly: true,
94
94
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
95
95
  });
@@ -104,14 +104,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
104
104
  });
105
105
  if (!accessToken) {
106
106
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
107
- secure: false,
107
+ secure: true,
108
108
  httpOnly: true,
109
109
  expires: 0
110
110
  });
111
111
  }
112
112
  if (refreshToken !== void 0) {
113
113
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
114
- secure: false,
114
+ secure: true,
115
115
  httpOnly: true,
116
116
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
117
117
  });
@@ -74,14 +74,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
74
74
  });
75
75
  if (!accessToken) {
76
76
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
77
- secure: false,
77
+ secure: true,
78
78
  httpOnly: true,
79
79
  expires: 0
80
80
  });
81
81
  }
82
82
  if (refreshToken !== void 0) {
83
83
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
84
- secure: false,
84
+ secure: true,
85
85
  httpOnly: true,
86
86
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
87
87
  });
@@ -88,6 +88,11 @@ function getEnv(key, skipCheck) {
88
88
  var REFRESH_COOKIE_NAME = "refresh";
89
89
 
90
90
  // src/auth/email/token.ts
91
+ function generateAccessToken(id, signingKey) {
92
+ return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
93
+ expiresIn: "2h"
94
+ });
95
+ }
91
96
  function generateRefreshToken(id, refreshKey) {
92
97
  return (0, import_jsonwebtoken.sign)({ id }, refreshKey);
93
98
  }
@@ -109,7 +114,14 @@ var getGoogleGetRoute = ({
109
114
  const error = req.nextUrl.searchParams.get("error");
110
115
  if (!code && !error) {
111
116
  const data = req.nextUrl.searchParams.get("data");
112
- const stateData = { data, id: (0, import_uuid.v4)() };
117
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
118
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
119
+ const stateData = {
120
+ data,
121
+ id: (0, import_uuid.v4)(),
122
+ redirectURL: requestRedirectURL,
123
+ errorRedirectURL: requestErrorRedirectURL
124
+ };
113
125
  const state2 = JSON.stringify(stateData);
114
126
  const authorizationUrl = oauth2Client.generateAuthUrl({
115
127
  scope: [
@@ -128,14 +140,25 @@ var getGoogleGetRoute = ({
128
140
  });
129
141
  return res;
130
142
  }
131
- const errorURL = errorRedirectURL || redirectURL;
143
+ const localState = req.cookies.get("state")?.value;
144
+ let stateRedirectURL;
145
+ let stateErrorRedirectURL;
146
+ if (localState) {
147
+ try {
148
+ const parsed = JSON.parse(localState);
149
+ stateRedirectURL = parsed.redirectURL || void 0;
150
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
151
+ } catch {
152
+ }
153
+ }
154
+ const finalRedirectURL = stateRedirectURL || redirectURL;
155
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
132
156
  if (error) {
133
- return import_server2.NextResponse.redirect(errorURL);
157
+ return import_server2.NextResponse.redirect(finalErrorURL);
134
158
  }
135
159
  const state = req.nextUrl.searchParams.get("state") || void 0;
136
160
  if (code && state) {
137
- const localState = req.cookies.get("state")?.value;
138
- if (localState !== state) return import_server2.NextResponse.redirect(errorURL);
161
+ if (localState !== state) return import_server2.NextResponse.redirect(finalErrorURL);
139
162
  const { tokens } = await oauth2Client.getToken(code);
140
163
  oauth2Client.setCredentials(tokens);
141
164
  const userInfoRequest = await import_googleapis.google.oauth2({
@@ -147,7 +170,13 @@ var getGoogleGetRoute = ({
147
170
  const { data } = JSON.parse(localState);
148
171
  const id = await getUserIdFromEmail(user, data);
149
172
  if (id) {
150
- const res = import_server2.NextResponse.redirect(redirectURL);
173
+ const accessToken = generateAccessToken(
174
+ id,
175
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
176
+ );
177
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
178
+ targetUrl.searchParams.set("accessToken", accessToken);
179
+ const res = import_server2.NextResponse.redirect(targetUrl);
151
180
  res.cookies.set(
152
181
  REFRESH_COOKIE_NAME,
153
182
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -165,7 +194,7 @@ var getGoogleGetRoute = ({
165
194
  }
166
195
  }
167
196
  }
168
- return import_server2.NextResponse.redirect(errorURL);
197
+ return import_server2.NextResponse.redirect(finalErrorURL);
169
198
  };
170
199
  };
171
200
  // Annotate the CommonJS export names for ESM import in node:
@@ -64,6 +64,11 @@ function getEnv(key, skipCheck) {
64
64
  var REFRESH_COOKIE_NAME = "refresh";
65
65
 
66
66
  // src/auth/email/token.ts
67
+ function generateAccessToken(id, signingKey) {
68
+ return sign({ id }, signingKey, {
69
+ expiresIn: "2h"
70
+ });
71
+ }
67
72
  function generateRefreshToken(id, refreshKey) {
68
73
  return sign({ id }, refreshKey);
69
74
  }
@@ -85,7 +90,14 @@ var getGoogleGetRoute = ({
85
90
  const error = req.nextUrl.searchParams.get("error");
86
91
  if (!code && !error) {
87
92
  const data = req.nextUrl.searchParams.get("data");
88
- const stateData = { data, id: v4() };
93
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
94
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
95
+ const stateData = {
96
+ data,
97
+ id: v4(),
98
+ redirectURL: requestRedirectURL,
99
+ errorRedirectURL: requestErrorRedirectURL
100
+ };
89
101
  const state2 = JSON.stringify(stateData);
90
102
  const authorizationUrl = oauth2Client.generateAuthUrl({
91
103
  scope: [
@@ -104,14 +116,25 @@ var getGoogleGetRoute = ({
104
116
  });
105
117
  return res;
106
118
  }
107
- const errorURL = errorRedirectURL || redirectURL;
119
+ const localState = req.cookies.get("state")?.value;
120
+ let stateRedirectURL;
121
+ let stateErrorRedirectURL;
122
+ if (localState) {
123
+ try {
124
+ const parsed = JSON.parse(localState);
125
+ stateRedirectURL = parsed.redirectURL || void 0;
126
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
127
+ } catch {
128
+ }
129
+ }
130
+ const finalRedirectURL = stateRedirectURL || redirectURL;
131
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
108
132
  if (error) {
109
- return NextResponse2.redirect(errorURL);
133
+ return NextResponse2.redirect(finalErrorURL);
110
134
  }
111
135
  const state = req.nextUrl.searchParams.get("state") || void 0;
112
136
  if (code && state) {
113
- const localState = req.cookies.get("state")?.value;
114
- if (localState !== state) return NextResponse2.redirect(errorURL);
137
+ if (localState !== state) return NextResponse2.redirect(finalErrorURL);
115
138
  const { tokens } = await oauth2Client.getToken(code);
116
139
  oauth2Client.setCredentials(tokens);
117
140
  const userInfoRequest = await google.oauth2({
@@ -123,7 +146,13 @@ var getGoogleGetRoute = ({
123
146
  const { data } = JSON.parse(localState);
124
147
  const id = await getUserIdFromEmail(user, data);
125
148
  if (id) {
126
- const res = NextResponse2.redirect(redirectURL);
149
+ const accessToken = generateAccessToken(
150
+ id,
151
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
152
+ );
153
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
154
+ targetUrl.searchParams.set("accessToken", accessToken);
155
+ const res = NextResponse2.redirect(targetUrl);
127
156
  res.cookies.set(
128
157
  REFRESH_COOKIE_NAME,
129
158
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -141,7 +170,7 @@ var getGoogleGetRoute = ({
141
170
  }
142
171
  }
143
172
  }
144
- return NextResponse2.redirect(errorURL);
173
+ return NextResponse2.redirect(finalErrorURL);
145
174
  };
146
175
  };
147
176
  export {
@@ -90,6 +90,11 @@ function getEnv(key, skipCheck) {
90
90
  var REFRESH_COOKIE_NAME = "refresh";
91
91
 
92
92
  // src/auth/email/token.ts
93
+ function generateAccessToken(id, signingKey) {
94
+ return (0, import_jsonwebtoken.sign)({ id }, signingKey, {
95
+ expiresIn: "2h"
96
+ });
97
+ }
93
98
  function generateRefreshToken(id, refreshKey) {
94
99
  return (0, import_jsonwebtoken.sign)({ id }, refreshKey);
95
100
  }
@@ -111,7 +116,14 @@ var getGoogleGetRoute = ({
111
116
  const error = req.nextUrl.searchParams.get("error");
112
117
  if (!code && !error) {
113
118
  const data = req.nextUrl.searchParams.get("data");
114
- const stateData = { data, id: (0, import_uuid.v4)() };
119
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
120
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
121
+ const stateData = {
122
+ data,
123
+ id: (0, import_uuid.v4)(),
124
+ redirectURL: requestRedirectURL,
125
+ errorRedirectURL: requestErrorRedirectURL
126
+ };
115
127
  const state2 = JSON.stringify(stateData);
116
128
  const authorizationUrl = oauth2Client.generateAuthUrl({
117
129
  scope: [
@@ -130,14 +142,25 @@ var getGoogleGetRoute = ({
130
142
  });
131
143
  return res;
132
144
  }
133
- const errorURL = errorRedirectURL || redirectURL;
145
+ const localState = req.cookies.get("state")?.value;
146
+ let stateRedirectURL;
147
+ let stateErrorRedirectURL;
148
+ if (localState) {
149
+ try {
150
+ const parsed = JSON.parse(localState);
151
+ stateRedirectURL = parsed.redirectURL || void 0;
152
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
153
+ } catch {
154
+ }
155
+ }
156
+ const finalRedirectURL = stateRedirectURL || redirectURL;
157
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
134
158
  if (error) {
135
- return import_server2.NextResponse.redirect(errorURL);
159
+ return import_server2.NextResponse.redirect(finalErrorURL);
136
160
  }
137
161
  const state = req.nextUrl.searchParams.get("state") || void 0;
138
162
  if (code && state) {
139
- const localState = req.cookies.get("state")?.value;
140
- if (localState !== state) return import_server2.NextResponse.redirect(errorURL);
163
+ if (localState !== state) return import_server2.NextResponse.redirect(finalErrorURL);
141
164
  const { tokens } = await oauth2Client.getToken(code);
142
165
  oauth2Client.setCredentials(tokens);
143
166
  const userInfoRequest = await import_googleapis.google.oauth2({
@@ -149,7 +172,13 @@ var getGoogleGetRoute = ({
149
172
  const { data } = JSON.parse(localState);
150
173
  const id = await getUserIdFromEmail(user, data);
151
174
  if (id) {
152
- const res = import_server2.NextResponse.redirect(redirectURL);
175
+ const accessToken = generateAccessToken(
176
+ id,
177
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
178
+ );
179
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
180
+ targetUrl.searchParams.set("accessToken", accessToken);
181
+ const res = import_server2.NextResponse.redirect(targetUrl);
153
182
  res.cookies.set(
154
183
  REFRESH_COOKIE_NAME,
155
184
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -167,7 +196,7 @@ var getGoogleGetRoute = ({
167
196
  }
168
197
  }
169
198
  }
170
- return import_server2.NextResponse.redirect(errorURL);
199
+ return import_server2.NextResponse.redirect(finalErrorURL);
171
200
  };
172
201
  };
173
202
 
@@ -64,6 +64,11 @@ function getEnv(key, skipCheck) {
64
64
  var REFRESH_COOKIE_NAME = "refresh";
65
65
 
66
66
  // src/auth/email/token.ts
67
+ function generateAccessToken(id, signingKey) {
68
+ return sign({ id }, signingKey, {
69
+ expiresIn: "2h"
70
+ });
71
+ }
67
72
  function generateRefreshToken(id, refreshKey) {
68
73
  return sign({ id }, refreshKey);
69
74
  }
@@ -85,7 +90,14 @@ var getGoogleGetRoute = ({
85
90
  const error = req.nextUrl.searchParams.get("error");
86
91
  if (!code && !error) {
87
92
  const data = req.nextUrl.searchParams.get("data");
88
- const stateData = { data, id: v4() };
93
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
94
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
95
+ const stateData = {
96
+ data,
97
+ id: v4(),
98
+ redirectURL: requestRedirectURL,
99
+ errorRedirectURL: requestErrorRedirectURL
100
+ };
89
101
  const state2 = JSON.stringify(stateData);
90
102
  const authorizationUrl = oauth2Client.generateAuthUrl({
91
103
  scope: [
@@ -104,14 +116,25 @@ var getGoogleGetRoute = ({
104
116
  });
105
117
  return res;
106
118
  }
107
- const errorURL = errorRedirectURL || redirectURL;
119
+ const localState = req.cookies.get("state")?.value;
120
+ let stateRedirectURL;
121
+ let stateErrorRedirectURL;
122
+ if (localState) {
123
+ try {
124
+ const parsed = JSON.parse(localState);
125
+ stateRedirectURL = parsed.redirectURL || void 0;
126
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
127
+ } catch {
128
+ }
129
+ }
130
+ const finalRedirectURL = stateRedirectURL || redirectURL;
131
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
108
132
  if (error) {
109
- return NextResponse2.redirect(errorURL);
133
+ return NextResponse2.redirect(finalErrorURL);
110
134
  }
111
135
  const state = req.nextUrl.searchParams.get("state") || void 0;
112
136
  if (code && state) {
113
- const localState = req.cookies.get("state")?.value;
114
- if (localState !== state) return NextResponse2.redirect(errorURL);
137
+ if (localState !== state) return NextResponse2.redirect(finalErrorURL);
115
138
  const { tokens } = await oauth2Client.getToken(code);
116
139
  oauth2Client.setCredentials(tokens);
117
140
  const userInfoRequest = await google.oauth2({
@@ -123,7 +146,13 @@ var getGoogleGetRoute = ({
123
146
  const { data } = JSON.parse(localState);
124
147
  const id = await getUserIdFromEmail(user, data);
125
148
  if (id) {
126
- const res = NextResponse2.redirect(redirectURL);
149
+ const accessToken = generateAccessToken(
150
+ id,
151
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
152
+ );
153
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
154
+ targetUrl.searchParams.set("accessToken", accessToken);
155
+ const res = NextResponse2.redirect(targetUrl);
127
156
  res.cookies.set(
128
157
  REFRESH_COOKIE_NAME,
129
158
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -141,7 +170,7 @@ var getGoogleGetRoute = ({
141
170
  }
142
171
  }
143
172
  }
144
- return NextResponse2.redirect(errorURL);
173
+ return NextResponse2.redirect(finalErrorURL);
145
174
  };
146
175
  };
147
176
 
@@ -76,6 +76,15 @@ function withCors(handler, allowedOrigins) {
76
76
  Object.entries(corsHeaders).forEach(([key, value]) => {
77
77
  response.headers.set(key, value);
78
78
  });
79
+ if (response instanceof import_server.NextResponse) {
80
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
81
+ if (refreshCookie) {
82
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
83
+ ...refreshCookie,
84
+ sameSite: "none"
85
+ });
86
+ }
87
+ }
79
88
  return response;
80
89
  });
81
90
  }
@@ -153,14 +162,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
153
162
  });
154
163
  if (!accessToken) {
155
164
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
156
- secure: false,
165
+ secure: true,
157
166
  httpOnly: true,
158
167
  expires: 0
159
168
  });
160
169
  }
161
170
  if (refreshToken !== void 0) {
162
171
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
163
- secure: false,
172
+ secure: true,
164
173
  httpOnly: true,
165
174
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
166
175
  });
@@ -464,7 +473,14 @@ var getGoogleGetRoute = ({
464
473
  const error = req.nextUrl.searchParams.get("error");
465
474
  if (!code && !error) {
466
475
  const data = req.nextUrl.searchParams.get("data");
467
- const stateData = { data, id: (0, import_uuid.v4)() };
476
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
477
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
478
+ const stateData = {
479
+ data,
480
+ id: (0, import_uuid.v4)(),
481
+ redirectURL: requestRedirectURL,
482
+ errorRedirectURL: requestErrorRedirectURL
483
+ };
468
484
  const state2 = JSON.stringify(stateData);
469
485
  const authorizationUrl = oauth2Client.generateAuthUrl({
470
486
  scope: [
@@ -483,14 +499,25 @@ var getGoogleGetRoute = ({
483
499
  });
484
500
  return res;
485
501
  }
486
- const errorURL = errorRedirectURL || redirectURL;
502
+ const localState = req.cookies.get("state")?.value;
503
+ let stateRedirectURL;
504
+ let stateErrorRedirectURL;
505
+ if (localState) {
506
+ try {
507
+ const parsed = JSON.parse(localState);
508
+ stateRedirectURL = parsed.redirectURL || void 0;
509
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
510
+ } catch {
511
+ }
512
+ }
513
+ const finalRedirectURL = stateRedirectURL || redirectURL;
514
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
487
515
  if (error) {
488
- return import_server6.NextResponse.redirect(errorURL);
516
+ return import_server6.NextResponse.redirect(finalErrorURL);
489
517
  }
490
518
  const state = req.nextUrl.searchParams.get("state") || void 0;
491
519
  if (code && state) {
492
- const localState = req.cookies.get("state")?.value;
493
- if (localState !== state) return import_server6.NextResponse.redirect(errorURL);
520
+ if (localState !== state) return import_server6.NextResponse.redirect(finalErrorURL);
494
521
  const { tokens } = await oauth2Client.getToken(code);
495
522
  oauth2Client.setCredentials(tokens);
496
523
  const userInfoRequest = await import_googleapis.google.oauth2({
@@ -502,7 +529,13 @@ var getGoogleGetRoute = ({
502
529
  const { data } = JSON.parse(localState);
503
530
  const id = await getUserIdFromEmail(user, data);
504
531
  if (id) {
505
- const res = import_server6.NextResponse.redirect(redirectURL);
532
+ const accessToken = generateAccessToken(
533
+ id,
534
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
535
+ );
536
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
537
+ targetUrl.searchParams.set("accessToken", accessToken);
538
+ const res = import_server6.NextResponse.redirect(targetUrl);
506
539
  res.cookies.set(
507
540
  REFRESH_COOKIE_NAME,
508
541
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -520,7 +553,7 @@ var getGoogleGetRoute = ({
520
553
  }
521
554
  }
522
555
  }
523
- return import_server6.NextResponse.redirect(errorURL);
556
+ return import_server6.NextResponse.redirect(finalErrorURL);
524
557
  };
525
558
  };
526
559
 
@@ -32,6 +32,15 @@ function withCors(handler, allowedOrigins) {
32
32
  Object.entries(corsHeaders).forEach(([key, value]) => {
33
33
  response.headers.set(key, value);
34
34
  });
35
+ if (response instanceof NextResponse) {
36
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
37
+ if (refreshCookie) {
38
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
39
+ ...refreshCookie,
40
+ sameSite: "none"
41
+ });
42
+ }
43
+ }
35
44
  return response;
36
45
  });
37
46
  }
@@ -109,14 +118,14 @@ function getTokenizedResponse(accessToken, refreshToken) {
109
118
  });
110
119
  if (!accessToken) {
111
120
  response.cookies.set(REFRESH_COOKIE_NAME, "", {
112
- secure: false,
121
+ secure: true,
113
122
  httpOnly: true,
114
123
  expires: 0
115
124
  });
116
125
  }
117
126
  if (refreshToken !== void 0) {
118
127
  response.cookies.set(REFRESH_COOKIE_NAME, refreshToken, {
119
- secure: false,
128
+ secure: true,
120
129
  httpOnly: true,
121
130
  expires: refreshToken === "" ? 0 : new Date(Date.now() + 60 * 60 * 24 * 365 * 1e3)
122
131
  });
@@ -424,7 +433,14 @@ var getGoogleGetRoute = ({
424
433
  const error = req.nextUrl.searchParams.get("error");
425
434
  if (!code && !error) {
426
435
  const data = req.nextUrl.searchParams.get("data");
427
- const stateData = { data, id: v4() };
436
+ const requestRedirectURL = req.nextUrl.searchParams.get("redirectURL") || void 0;
437
+ const requestErrorRedirectURL = req.nextUrl.searchParams.get("errorRedirectURL") || void 0;
438
+ const stateData = {
439
+ data,
440
+ id: v4(),
441
+ redirectURL: requestRedirectURL,
442
+ errorRedirectURL: requestErrorRedirectURL
443
+ };
428
444
  const state2 = JSON.stringify(stateData);
429
445
  const authorizationUrl = oauth2Client.generateAuthUrl({
430
446
  scope: [
@@ -443,14 +459,25 @@ var getGoogleGetRoute = ({
443
459
  });
444
460
  return res;
445
461
  }
446
- const errorURL = errorRedirectURL || redirectURL;
462
+ const localState = req.cookies.get("state")?.value;
463
+ let stateRedirectURL;
464
+ let stateErrorRedirectURL;
465
+ if (localState) {
466
+ try {
467
+ const parsed = JSON.parse(localState);
468
+ stateRedirectURL = parsed.redirectURL || void 0;
469
+ stateErrorRedirectURL = parsed.errorRedirectURL || void 0;
470
+ } catch {
471
+ }
472
+ }
473
+ const finalRedirectURL = stateRedirectURL || redirectURL;
474
+ const finalErrorURL = stateErrorRedirectURL || errorRedirectURL || finalRedirectURL;
447
475
  if (error) {
448
- return NextResponse5.redirect(errorURL);
476
+ return NextResponse5.redirect(finalErrorURL);
449
477
  }
450
478
  const state = req.nextUrl.searchParams.get("state") || void 0;
451
479
  if (code && state) {
452
- const localState = req.cookies.get("state")?.value;
453
- if (localState !== state) return NextResponse5.redirect(errorURL);
480
+ if (localState !== state) return NextResponse5.redirect(finalErrorURL);
454
481
  const { tokens } = await oauth2Client.getToken(code);
455
482
  oauth2Client.setCredentials(tokens);
456
483
  const userInfoRequest = await google.oauth2({
@@ -462,7 +489,13 @@ var getGoogleGetRoute = ({
462
489
  const { data } = JSON.parse(localState);
463
490
  const id = await getUserIdFromEmail(user, data);
464
491
  if (id) {
465
- const res = NextResponse5.redirect(redirectURL);
492
+ const accessToken = generateAccessToken(
493
+ id,
494
+ getEnv("SIGNING_KEY" /* SIGNING_KEY */)
495
+ );
496
+ const targetUrl = new URL(finalRedirectURL, req.nextUrl.origin);
497
+ targetUrl.searchParams.set("accessToken", accessToken);
498
+ const res = NextResponse5.redirect(targetUrl);
466
499
  res.cookies.set(
467
500
  REFRESH_COOKIE_NAME,
468
501
  generateRefreshToken(id, getEnv("REFRESH_KEY" /* REFRESH_KEY */)),
@@ -480,7 +513,7 @@ var getGoogleGetRoute = ({
480
513
  }
481
514
  }
482
515
  }
483
- return NextResponse5.redirect(errorURL);
516
+ return NextResponse5.redirect(finalErrorURL);
484
517
  };
485
518
  };
486
519
 
@@ -660,6 +660,15 @@ function withCors(handler, allowedOrigins) {
660
660
  Object.entries(corsHeaders).forEach(([key, value]) => {
661
661
  response.headers.set(key, value);
662
662
  });
663
+ if (response instanceof import_server.NextResponse) {
664
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
665
+ if (refreshCookie) {
666
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
667
+ ...refreshCookie,
668
+ sameSite: "none"
669
+ });
670
+ }
671
+ }
663
672
  return response;
664
673
  });
665
674
  }
@@ -645,6 +645,15 @@ function withCors(handler, allowedOrigins) {
645
645
  Object.entries(corsHeaders).forEach(([key, value]) => {
646
646
  response.headers.set(key, value);
647
647
  });
648
+ if (response instanceof NextResponse) {
649
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
650
+ if (refreshCookie) {
651
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
652
+ ...refreshCookie,
653
+ sameSite: "none"
654
+ });
655
+ }
656
+ }
648
657
  return response;
649
658
  });
650
659
  }
@@ -111,6 +111,15 @@ function withCors(handler, allowedOrigins) {
111
111
  Object.entries(corsHeaders).forEach(([key, value]) => {
112
112
  response.headers.set(key, value);
113
113
  });
114
+ if (response instanceof import_server.NextResponse) {
115
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
116
+ if (refreshCookie) {
117
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
118
+ ...refreshCookie,
119
+ sameSite: "none"
120
+ });
121
+ }
122
+ }
114
123
  return response;
115
124
  });
116
125
  }
@@ -92,6 +92,15 @@ function withCors(handler, allowedOrigins) {
92
92
  Object.entries(corsHeaders).forEach(([key, value]) => {
93
93
  response.headers.set(key, value);
94
94
  });
95
+ if (response instanceof NextResponse) {
96
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
97
+ if (refreshCookie) {
98
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
99
+ ...refreshCookie,
100
+ sameSite: "none"
101
+ });
102
+ }
103
+ }
95
104
  return response;
96
105
  });
97
106
  }
@@ -27,6 +27,7 @@ module.exports = __toCommonJS(route_exports);
27
27
  var import_server = require("next/server");
28
28
 
29
29
  // src/auth/constants.ts
30
+ var REFRESH_COOKIE_NAME = "refresh";
30
31
  var REFRESH_HEADER_NAME = "X-Refresh-Token";
31
32
 
32
33
  // src/utils/route.ts
@@ -53,6 +54,15 @@ function withCors(handler, allowedOrigins) {
53
54
  Object.entries(corsHeaders).forEach(([key, value]) => {
54
55
  response.headers.set(key, value);
55
56
  });
57
+ if (response instanceof import_server.NextResponse) {
58
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
59
+ if (refreshCookie) {
60
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
61
+ ...refreshCookie,
62
+ sameSite: "none"
63
+ });
64
+ }
65
+ }
56
66
  return response;
57
67
  });
58
68
  }
@@ -2,6 +2,7 @@
2
2
  import { NextResponse } from "next/server";
3
3
 
4
4
  // src/auth/constants.ts
5
+ var REFRESH_COOKIE_NAME = "refresh";
5
6
  var REFRESH_HEADER_NAME = "X-Refresh-Token";
6
7
 
7
8
  // src/utils/route.ts
@@ -28,6 +29,15 @@ function withCors(handler, allowedOrigins) {
28
29
  Object.entries(corsHeaders).forEach(([key, value]) => {
29
30
  response.headers.set(key, value);
30
31
  });
32
+ if (response instanceof NextResponse) {
33
+ const refreshCookie = response.cookies.get(REFRESH_COOKIE_NAME);
34
+ if (refreshCookie) {
35
+ response.cookies.set(refreshCookie.name, refreshCookie.value, {
36
+ ...refreshCookie,
37
+ sameSite: "none"
38
+ });
39
+ }
40
+ }
31
41
  return response;
32
42
  });
33
43
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "naystack",
3
- "version": "1.7.6",
3
+ "version": "1.7.10",
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",