@gauts/auth 0.10.0 → 0.10.1
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 +3 -2
- package/dist/adapters/next/index.d.ts +1 -6
- package/dist/adapters/next/index.d.ts.map +1 -1
- package/dist/adapters/next/index.js +2 -36
- package/dist/adapters/next/index.js.map +1 -1
- package/dist/headers/index.d.ts +7 -0
- package/dist/headers/index.d.ts.map +1 -0
- package/dist/headers/index.js +37 -0
- package/dist/headers/index.js.map +1 -0
- package/package.json +5 -1
package/README.md
CHANGED
|
@@ -306,6 +306,7 @@ The application owns the redirect URL. When `unauthorizedUrl` is provided, the a
|
|
|
306
306
|
| `@gauts/auth/express` | Express cookies, methods, and middleware. |
|
|
307
307
|
| `@gauts/auth/fastify` | Fastify cookies, methods, decorators, and hooks. |
|
|
308
308
|
| `@gauts/auth/next` | Next.js renewal scheduling and `Set-Cookie` forwarding. |
|
|
309
|
+
| `@gauts/auth/headers` | Browser-safe controlled header forwarding helpers. |
|
|
309
310
|
| `@gauts/auth/providers` | Google, GitHub, and X OAuth providers. |
|
|
310
311
|
|
|
311
312
|
## Configuration reference
|
|
@@ -1237,10 +1238,10 @@ Result values:
|
|
|
1237
1238
|
|
|
1238
1239
|
The adapter forwards only the session cookie and controlled client/origin headers required by the private API. `__ctx` is not forwarded because the API renewal endpoint always validates the opaque token through the database and returns a new signed context. Other cookies, authorization headers, and arbitrary headers are not forwarded.
|
|
1239
1240
|
|
|
1240
|
-
`buildForwardHeaders()` and `FORWARD_HEADERS` are exported from `@gauts/auth/
|
|
1241
|
+
`buildForwardHeaders()` and `FORWARD_HEADERS` are exported from the browser-safe `@gauts/auth/headers` entrypoint for application fetchers that need the same controlled forwarding rules:
|
|
1241
1242
|
|
|
1242
1243
|
```ts
|
|
1243
|
-
import { buildForwardHeaders } from "@gauts/auth/
|
|
1244
|
+
import { buildForwardHeaders } from "@gauts/auth/headers";
|
|
1244
1245
|
|
|
1245
1246
|
const headers = buildForwardHeaders({
|
|
1246
1247
|
headers: incoming,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NextResponse, type NextRequest } from "next/server.js";
|
|
2
|
+
export { buildForwardHeaders, FORWARD_HEADERS, type BuildForwardHeadersInput, } from "../../headers/index.js";
|
|
2
3
|
export type NextCookieConfig = {
|
|
3
4
|
contextName?: string;
|
|
4
5
|
sessionName?: string;
|
|
@@ -20,11 +21,5 @@ export type NextRenewResult = {
|
|
|
20
21
|
export type NextAuth = {
|
|
21
22
|
renew(input: NextRenewInput): Promise<NextRenewResult>;
|
|
22
23
|
};
|
|
23
|
-
export type BuildForwardHeadersInput = {
|
|
24
|
-
extra?: readonly string[];
|
|
25
|
-
headers: Headers;
|
|
26
|
-
};
|
|
27
|
-
export declare const FORWARD_HEADERS: readonly ["accept-language", "cf-connecting-ip", "origin", "referer", "sec-ch-ua", "sec-ch-ua-mobile", "sec-ch-ua-platform", "sec-fetch-dest", "sec-fetch-mode", "sec-fetch-site", "sec-fetch-user", "true-client-ip", "user-agent", "x-forwarded-for", "x-forwarded-host", "x-forwarded-port", "x-forwarded-proto", "x-real-ip"];
|
|
28
|
-
export declare const buildForwardHeaders: ({ extra, headers: incoming, }: BuildForwardHeadersInput) => Headers;
|
|
29
24
|
export declare const createNextAuth: ({ cookie, renewUrl }: NextAuthConfig) => NextAuth;
|
|
30
25
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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;AAOhE,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,KAAK,wBAAwB,GAChC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,MAAM,gBAAgB,GAAG;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,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;AA2CF,eAAO,MAAM,cAAc,GAAI,sBAAsB,cAAc,KAAG,QAsErE,CAAC"}
|
|
@@ -1,44 +1,10 @@
|
|
|
1
1
|
import { NextResponse } from "next/server.js";
|
|
2
2
|
import { createError } from "../../errors.js";
|
|
3
|
+
import { buildForwardHeaders } from "../../headers/index.js";
|
|
3
4
|
import { parseSessionToken, resolveSessionCookieNames } from "../../session/cookie.js";
|
|
4
5
|
import { parseSessionState } from "../../session/state.js";
|
|
6
|
+
export { buildForwardHeaders, FORWARD_HEADERS, } from "../../headers/index.js";
|
|
5
7
|
const RENEW_TIMEOUT = 5_000;
|
|
6
|
-
export const FORWARD_HEADERS = [
|
|
7
|
-
"accept-language",
|
|
8
|
-
"cf-connecting-ip",
|
|
9
|
-
"origin",
|
|
10
|
-
"referer",
|
|
11
|
-
"sec-ch-ua",
|
|
12
|
-
"sec-ch-ua-mobile",
|
|
13
|
-
"sec-ch-ua-platform",
|
|
14
|
-
"sec-fetch-dest",
|
|
15
|
-
"sec-fetch-mode",
|
|
16
|
-
"sec-fetch-site",
|
|
17
|
-
"sec-fetch-user",
|
|
18
|
-
"true-client-ip",
|
|
19
|
-
"user-agent",
|
|
20
|
-
"x-forwarded-for",
|
|
21
|
-
"x-forwarded-host",
|
|
22
|
-
"x-forwarded-port",
|
|
23
|
-
"x-forwarded-proto",
|
|
24
|
-
"x-real-ip",
|
|
25
|
-
];
|
|
26
|
-
export const buildForwardHeaders = ({ extra = [], headers: incoming, }) => {
|
|
27
|
-
const headers = new Headers();
|
|
28
|
-
for (const name of [...FORWARD_HEADERS, ...extra]) {
|
|
29
|
-
const value = incoming.get(name);
|
|
30
|
-
if (value?.trim()) {
|
|
31
|
-
headers.set(name, value);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const origin = headers.get("origin")?.trim();
|
|
35
|
-
const host = headers.get("x-forwarded-host")?.trim();
|
|
36
|
-
const proto = headers.get("x-forwarded-proto")?.trim();
|
|
37
|
-
if (!origin && host && proto) {
|
|
38
|
-
headers.set("origin", `${proto}://${host}`);
|
|
39
|
-
}
|
|
40
|
-
return headers;
|
|
41
|
-
};
|
|
42
8
|
const getSetCookies = (headers) => {
|
|
43
9
|
const cookieHeaders = headers;
|
|
44
10
|
if (typeof cookieHeaders.getSetCookie === "function") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/next/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type BuildForwardHeadersInput = {
|
|
2
|
+
extra?: readonly string[];
|
|
3
|
+
headers: Headers;
|
|
4
|
+
};
|
|
5
|
+
export declare const FORWARD_HEADERS: readonly ["accept-language", "cf-connecting-ip", "origin", "referer", "sec-ch-ua", "sec-ch-ua-mobile", "sec-ch-ua-platform", "sec-fetch-dest", "sec-fetch-mode", "sec-fetch-site", "sec-fetch-user", "true-client-ip", "user-agent", "x-forwarded-for", "x-forwarded-host", "x-forwarded-port", "x-forwarded-proto", "x-real-ip"];
|
|
6
|
+
export declare const buildForwardHeaders: ({ extra, headers: incoming, }: BuildForwardHeadersInput) => Headers;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/headers/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACnC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,eAAe,mUAmBlB,CAAC;AAEX,eAAO,MAAM,mBAAmB,GAAI,+BAGjC,wBAAwB,KAAG,OAoB7B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export const FORWARD_HEADERS = [
|
|
2
|
+
"accept-language",
|
|
3
|
+
"cf-connecting-ip",
|
|
4
|
+
"origin",
|
|
5
|
+
"referer",
|
|
6
|
+
"sec-ch-ua",
|
|
7
|
+
"sec-ch-ua-mobile",
|
|
8
|
+
"sec-ch-ua-platform",
|
|
9
|
+
"sec-fetch-dest",
|
|
10
|
+
"sec-fetch-mode",
|
|
11
|
+
"sec-fetch-site",
|
|
12
|
+
"sec-fetch-user",
|
|
13
|
+
"true-client-ip",
|
|
14
|
+
"user-agent",
|
|
15
|
+
"x-forwarded-for",
|
|
16
|
+
"x-forwarded-host",
|
|
17
|
+
"x-forwarded-port",
|
|
18
|
+
"x-forwarded-proto",
|
|
19
|
+
"x-real-ip",
|
|
20
|
+
];
|
|
21
|
+
export const buildForwardHeaders = ({ extra = [], headers: incoming, }) => {
|
|
22
|
+
const headers = new Headers();
|
|
23
|
+
for (const name of [...FORWARD_HEADERS, ...extra]) {
|
|
24
|
+
const value = incoming.get(name);
|
|
25
|
+
if (value?.trim()) {
|
|
26
|
+
headers.set(name, value);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const origin = headers.get("origin")?.trim();
|
|
30
|
+
const host = headers.get("x-forwarded-host")?.trim();
|
|
31
|
+
const proto = headers.get("x-forwarded-proto")?.trim();
|
|
32
|
+
if (!origin && host && proto) {
|
|
33
|
+
headers.set("origin", `${proto}://${host}`);
|
|
34
|
+
}
|
|
35
|
+
return headers;
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/headers/index.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC3B,iBAAiB;IACjB,kBAAkB;IAClB,QAAQ;IACR,SAAS;IACT,WAAW;IACX,kBAAkB;IAClB,oBAAoB;IACpB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,kBAAkB;IAClB,mBAAmB;IACnB,WAAW;CACL,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAChC,KAAK,GAAG,EAAE,EACV,OAAO,EAAE,QAAQ,GACM,EAAW,EAAE;IACpC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,eAAe,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;QAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC;IAEvD,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,MAAM,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gauts/auth",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Database-backed password, session, and social authentication for Node.js.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "GVALFER",
|
|
@@ -68,6 +68,10 @@
|
|
|
68
68
|
"types": "./dist/adapters/next/index.d.ts",
|
|
69
69
|
"import": "./dist/adapters/next/index.js"
|
|
70
70
|
},
|
|
71
|
+
"./headers": {
|
|
72
|
+
"types": "./dist/headers/index.d.ts",
|
|
73
|
+
"import": "./dist/headers/index.js"
|
|
74
|
+
},
|
|
71
75
|
"./providers": {
|
|
72
76
|
"types": "./dist/providers/index.d.ts",
|
|
73
77
|
"import": "./dist/providers/index.js"
|