@gauts/auth 0.7.2 → 0.7.3
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/README.md
CHANGED
|
@@ -246,11 +246,11 @@ import { nextAuth } from "./lib/auth.js";
|
|
|
246
246
|
|
|
247
247
|
export const proxy = async (request: NextRequest) => {
|
|
248
248
|
const response = NextResponse.next();
|
|
249
|
-
const renewal = await nextAuth.renew({
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
}
|
|
249
|
+
const renewal = await nextAuth.renew({
|
|
250
|
+
request,
|
|
251
|
+
response,
|
|
252
|
+
unauthorizedUrl: "/auth/login",
|
|
253
|
+
});
|
|
254
254
|
|
|
255
255
|
if (renewal.status !== null && renewal.status >= 500) {
|
|
256
256
|
return NextResponse.redirect(new URL("/maintenance", request.url));
|
|
@@ -260,7 +260,7 @@ export const proxy = async (request: NextRequest) => {
|
|
|
260
260
|
};
|
|
261
261
|
```
|
|
262
262
|
|
|
263
|
-
The
|
|
263
|
+
The application owns the redirect URL. When `unauthorizedUrl` is provided, the adapter creates the redirect and copies every API `Set-Cookie` header to it before returning the final response. The frontend does not receive `AUTH_SECRET`; the API remains responsible for session validation.
|
|
264
264
|
|
|
265
265
|
## Requirements and package entry points
|
|
266
266
|
|
|
@@ -920,11 +920,11 @@ import { NextResponse } from "next/server";
|
|
|
920
920
|
|
|
921
921
|
export const proxy = async (request: NextRequest) => {
|
|
922
922
|
const response = NextResponse.next();
|
|
923
|
-
const renewal = await nextAuth.renew({
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
}
|
|
923
|
+
const renewal = await nextAuth.renew({
|
|
924
|
+
request,
|
|
925
|
+
response,
|
|
926
|
+
unauthorizedUrl: "/auth/login",
|
|
927
|
+
});
|
|
928
928
|
|
|
929
929
|
if (renewal.status !== null && renewal.status >= 500) {
|
|
930
930
|
return NextResponse.redirect(new URL("/maintenance", request.url));
|
|
@@ -942,7 +942,9 @@ Result values:
|
|
|
942
942
|
| `false` | `401` | Session token is missing or malformed; no API request occurred. |
|
|
943
943
|
| `true` | HTTP status | The renewal endpoint was called and returned this status. |
|
|
944
944
|
|
|
945
|
-
|
|
945
|
+
`unauthorizedUrl` is optional. When provided, the adapter redirects a `401` to that relative or absolute URL and transfers every returned `Set-Cookie` header to the redirect. Without it, the original response is returned with `status: 401` as before.
|
|
946
|
+
|
|
947
|
+
The adapter forwards only the session cookie and controlled client/origin headers required by the private API. Other cookies, authorization headers, and arbitrary headers are not forwarded.
|
|
946
948
|
|
|
947
949
|
`buildForwardHeaders()` and `FORWARD_HEADERS` are exported from `@gauts/auth/next` for application fetchers that need the same controlled forwarding rules:
|
|
948
950
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { NextResponse, type NextRequest } from "next/server.js";
|
|
2
2
|
export type NextCookieConfig = {
|
|
3
3
|
renewName?: string;
|
|
4
4
|
sessionName?: string;
|
|
@@ -10,6 +10,7 @@ export type NextAuthConfig = {
|
|
|
10
10
|
export type NextRenewInput = {
|
|
11
11
|
request: NextRequest;
|
|
12
12
|
response: NextResponse;
|
|
13
|
+
unauthorizedUrl?: string;
|
|
13
14
|
};
|
|
14
15
|
export type NextRenewResult = {
|
|
15
16
|
attempted: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAShE,MAAM,MAAM,gBAAgB,GAAG;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACnB,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1D,CAAC;AAaF,MAAM,MAAM,wBAAwB,GAAG;IACnC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAIF,eAAO,MAAM,eAAe,mUAmBlB,CAAC;AAEX,eAAO,MAAM,mBAAmB,GAAI,+BAGjC,wBAAwB,KAAG,OAoB7B,CAAC;AA8BF,eAAO,MAAM,cAAc,GAAI,sBAAsB,cAAc,KAAG,QAiErE,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { NextResponse } from "next/server.js";
|
|
1
2
|
import { createError } from "../../errors.js";
|
|
2
3
|
import { parseRenewAt, parseSessionToken, resolveSessionCookieNames, } from "../../session/cookie.js";
|
|
3
4
|
const RENEW_TIMEOUT = 5_000;
|
|
@@ -45,6 +46,12 @@ const getSetCookies = (headers) => {
|
|
|
45
46
|
const cookie = headers.get("set-cookie");
|
|
46
47
|
return cookie ? [cookie] : [];
|
|
47
48
|
};
|
|
49
|
+
const copyCookies = ({ source, target }) => {
|
|
50
|
+
for (const value of getSetCookies(source.headers)) {
|
|
51
|
+
target.headers.append("set-cookie", value);
|
|
52
|
+
}
|
|
53
|
+
return target;
|
|
54
|
+
};
|
|
48
55
|
const getRenewHeaders = ({ request, sessionName, token }) => {
|
|
49
56
|
const headers = buildForwardHeaders({ headers: request.headers });
|
|
50
57
|
headers.set("cookie", `${sessionName}=${token}`);
|
|
@@ -70,12 +77,15 @@ export const createNextAuth = ({ cookie, renewUrl }) => {
|
|
|
70
77
|
});
|
|
71
78
|
}
|
|
72
79
|
return {
|
|
73
|
-
renew: async ({ request, response }) => {
|
|
80
|
+
renew: async ({ request, response, unauthorizedUrl }) => {
|
|
81
|
+
const unauthorized = () => unauthorizedUrl
|
|
82
|
+
? NextResponse.redirect(new URL(unauthorizedUrl, request.url))
|
|
83
|
+
: response;
|
|
74
84
|
const token = parseSessionToken(request.cookies.get(names.sessionName)?.value);
|
|
75
85
|
if (!token) {
|
|
76
86
|
return {
|
|
77
87
|
attempted: false,
|
|
78
|
-
response,
|
|
88
|
+
response: unauthorized(),
|
|
79
89
|
status: 401,
|
|
80
90
|
};
|
|
81
91
|
}
|
|
@@ -94,12 +104,10 @@ export const createNextAuth = ({ cookie, renewUrl }) => {
|
|
|
94
104
|
redirect: "error",
|
|
95
105
|
signal: AbortSignal.timeout(RENEW_TIMEOUT),
|
|
96
106
|
});
|
|
97
|
-
|
|
98
|
-
response.headers.append("set-cookie", value);
|
|
99
|
-
}
|
|
107
|
+
const target = renewal.status === 401 ? unauthorized() : response;
|
|
100
108
|
return {
|
|
101
109
|
attempted: true,
|
|
102
|
-
response,
|
|
110
|
+
response: copyCookies({ source: renewal, target }),
|
|
103
111
|
status: renewal.status,
|
|
104
112
|
};
|
|
105
113
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"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"}
|