@auth/core
Advanced tools
Comparing version 0.2.3 to 0.2.4
@@ -29,3 +29,3 @@ /** | ||
* | ||
* - [Gettint started](https://authjs.dev/getting-started/introduction) | ||
* - [Getting started](https://authjs.dev/getting-started/introduction) | ||
* - [Most common use case guides](https://authjs.dev/guides/overview) | ||
@@ -32,0 +32,0 @@ * |
@@ -29,3 +29,3 @@ /** | ||
* | ||
* - [Gettint started](https://authjs.dev/getting-started/introduction) | ||
* - [Getting started](https://authjs.dev/getting-started/introduction) | ||
* - [Most common use case guides](https://authjs.dev/guides/overview) | ||
@@ -32,0 +32,0 @@ * |
@@ -72,3 +72,3 @@ /** | ||
/** | ||
* Takes a Auth.js request (`req`) and returns either the Auth.js issued JWT's payload, | ||
* Takes an Auth.js request (`req`) and returns either the Auth.js issued JWT's payload, | ||
* or the raw JWT string. We look for the JWT in the either the cookies, or the `Authorization` header. | ||
@@ -75,0 +75,0 @@ * [Documentation](https://authjs.dev/guides/basics/securing-pages-and-api-routes#using-gettoken) |
12
jwt.js
@@ -41,2 +41,3 @@ /** | ||
import { SessionStore } from "./lib/cookie.js"; | ||
import { MissingSecret } from "./errors.js"; | ||
const DEFAULT_MAX_AGE = 30 * 24 * 60 * 60; // 30 days | ||
@@ -66,7 +67,2 @@ const now = () => (Date.now() / 1000) | 0; | ||
} | ||
/** | ||
* Takes a Auth.js request (`req`) and returns either the Auth.js issued JWT's payload, | ||
* or the raw JWT string. We look for the JWT in the either the cookies, or the `Authorization` header. | ||
* [Documentation](https://authjs.dev/guides/basics/securing-pages-and-api-routes#using-gettoken) | ||
*/ | ||
export async function getToken(params) { | ||
@@ -79,2 +75,4 @@ const { req, secureCookie = process.env.NEXTAUTH_URL?.startsWith("https://") ?? | ||
throw new Error("Must pass `req` to JWT getToken()"); | ||
if (!secret) | ||
throw new MissingSecret("Must pass `secret` if not set to JWT getToken()"); | ||
const sessionStore = new SessionStore({ name: cookieName, options: { secure: secureCookie } }, | ||
@@ -91,14 +89,10 @@ // @ts-expect-error | ||
} | ||
// @ts-expect-error | ||
if (!token) | ||
return null; | ||
// @ts-expect-error | ||
if (raw) | ||
return token; | ||
try { | ||
// @ts-expect-error | ||
return await _decode({ token, secret }); | ||
} | ||
catch { | ||
// @ts-expect-error | ||
return null; | ||
@@ -105,0 +99,0 @@ } |
@@ -117,3 +117,3 @@ import * as o from "oauth4webapi"; | ||
} | ||
catch (error) { | ||
catch (e) { | ||
// If we didn't get a response either there was a problem with the provider | ||
@@ -127,4 +127,4 @@ // response *or* the user cancelled the action with the provider. | ||
logger.debug("getProfile error details", OAuthProfile); | ||
logger.error(new OAuthProfileParseError(error)); | ||
logger.error(new OAuthProfileParseError(e)); | ||
} | ||
} |
@@ -14,5 +14,5 @@ import type { ErrorPageParam, Theme } from "../../types.js"; | ||
export default function ErrorPage(props: ErrorProps): { | ||
status: any; | ||
status: number; | ||
html: import("preact").JSX.Element; | ||
}; | ||
//# sourceMappingURL=error.d.ts.map |
@@ -20,3 +20,5 @@ import { jsx as _jsx, jsxs as _jsxs } from "preact/jsx-runtime"; | ||
} | ||
const error = errorType && (signinErrors[errorType.toLowerCase()] ?? signinErrors.default); | ||
const error = errorType && | ||
(signinErrors[errorType.toLowerCase()] ?? | ||
signinErrors.default); | ||
// TODO: move logos | ||
@@ -23,0 +25,0 @@ const logos = "https://raw.githubusercontent.com/nextauthjs/next-auth/main/packages/next-auth/provider-logos"; |
@@ -1,3 +0,3 @@ | ||
declare const _default: ":root{--border-width:1px;--border-radius:0.5rem;--color-error:#c94b4b;--color-info:#157efb;--color-info-text:#fff}.__next-auth-theme-auto,.__next-auth-theme-light{--color-background:#fff;--color-text:#000;--color-primary:#444;--color-control-border:#bbb;--color-button-active-background:#f9f9f9;--color-button-active-border:#aaa;--color-seperator:#ccc}.__next-auth-theme-dark{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}@media (prefers-color-scheme:dark){.__next-auth-theme-auto{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}}body{background-color:var(--color-background);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin:0;padding:0}h1{font-weight:400;margin-bottom:1.5rem;padding:0 1rem}h1,p{color:var(--color-text)}form{margin:0;padding:0}label{font-weight:500;margin-bottom:.25rem;text-align:left}input[type],label{color:var(--color-text);display:block}input[type]{background:var(--color-background);border:var(--border-width) solid var(--color-control-border);border-radius:var(--border-radius);box-shadow:inset 0 .1rem .2rem rgba(0,0,0,.2);box-sizing:border-box;font-size:1rem;padding:.5rem 1rem;width:100%}input[type]:focus{box-shadow:none}p{font-size:1.1rem;line-height:2rem;margin:0 0 1.5rem;padding:0 1rem}a.button{line-height:1rem;text-decoration:none}a.button:link,a.button:visited{background-color:var(--color-background);color:var(--color-primary)}a.button,button{align-items:center;background-color:var(--provider-bg,var(--color-background));border-color:rgba(0,0,0,.1);border-radius:var(--border-radius);box-shadow:0 0 0 0 #000,0 0 0 0 #000,0 10px 15px -3px rgba(0,0,0,.2),0 4px 6px -4px rgba(0,0,0,.1);color:var(--provider-color,var(--color-primary));display:flex;font-size:1.1rem;font-weight:500;justify-content:center;margin:0 0 .75rem;min-height:62px;padding:.75rem 1rem;position:relative;transition:all .1s ease-in-out}a.button:has(img),button:has(img){justify-content:unset}a.button:has(img) span,button:has(img) span{flex-grow:1}a.button:hover,button:hover{cursor:pointer}a.button:active,button:active{box-shadow:0 .15rem .3rem rgba(0,0,0,.15),inset 0 .1rem .2rem var(--color-background),inset 0 -.1rem .1rem rgba(0,0,0,.1);cursor:pointer}a.button #provider-logo,button #provider-logo{display:block}a.button #provider-logo-dark,button #provider-logo-dark{display:none}@media (prefers-color-scheme:dark){a.button,button{background-color:var(--provider-dark-bg,var(--color-background));border:1px solid #0d0d0d;box-shadow:0 0 0 0 #000,0 0 0 0 #ccc,0 5px 5px -3px hsla(0,0%,100%,.01),0 4px 6px -4px hsla(0,0%,100%,.05);color:var(--provider-dark-color,var(--color-primary))}#provider-logo{display:none!important}#provider-logo-dark{display:block!important}}a.site{color:var(--color-primary);font-size:1rem;line-height:2rem;text-decoration:none}a.site:hover{text-decoration:underline}.page{display:grid;height:100%;margin:0;padding:0;place-items:center;position:absolute;width:100%}.page>div{padding:.5rem;text-align:center}.error a.button{display:inline-block;margin-top:.5rem;padding-left:2rem;padding-right:2rem}.error .message{margin-bottom:1.5rem}.signin input[type=text]{display:block;margin-left:auto;margin-right:auto}.signin hr{border:0;border-top:1px solid var(--color-seperator);display:block;margin:1.5em auto 0;overflow:visible}.signin hr:before{background:var(--color-background);color:#888;content:\"or\";padding:0 .4rem;position:relative;top:-.6rem}.signin .error{background:#f5f5f5;background:var(--color-info);border-radius:.3rem;font-weight:500}.signin .error p{color:var(--color-info-text);font-size:.9rem;line-height:1.2rem;padding:.5rem 1rem;text-align:left}.signin form,.signin>div{display:block}.signin form input[type],.signin>div input[type]{margin-bottom:.5rem}.signin form button,.signin>div button{width:100%}.signin form,.signin>div{max-width:300px}.signout .message{margin-bottom:1.5rem}.logo{display:inline-block;margin-top:100px;max-height:150px;max-width:300px}.card{border:1px solid var(--color-control-border);border-radius:5px;margin:50px auto;max-width:-moz-max-content;max-width:max-content;padding:20px 50px}.card .header{color:var(--color-primary)}.section-header{color:var(--brand-color,var(--color-text))}"; | ||
declare const _default: ":root {\n --border-width: 1px;\n --border-radius: 0.5rem;\n --color-error: #c94b4b;\n --color-info: #157efb;\n --color-info-text: #fff;\n}\n\n.__next-auth-theme-auto,\n.__next-auth-theme-light {\n --color-background: #fff;\n --color-text: #000;\n --color-primary: #444;\n --color-control-border: #bbb;\n --color-button-active-background: #f9f9f9;\n --color-button-active-border: #aaa;\n --color-seperator: #ccc;\n}\n\n.__next-auth-theme-dark {\n --color-background: #000;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-seperator: #444;\n}\n\n@media (prefers-color-scheme: dark) {\n .__next-auth-theme-auto {\n --color-background: #000;\n --color-text: #fff;\n --color-primary: #ccc;\n --color-control-border: #555;\n --color-button-active-background: #060606;\n --color-button-active-border: #666;\n --color-seperator: #444;\n }\n}\n\nbody {\n background-color: var(--color-background);\n margin: 0;\n padding: 0;\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont,\n \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif,\n \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}\n\nh1 {\n font-weight: 400;\n margin-bottom: 1.5rem;\n padding: 0 1rem;\n color: var(--color-text);\n}\n\np {\n color: var(--color-text);\n}\n\nform {\n margin: 0;\n padding: 0;\n}\n\nlabel {\n font-weight: 500;\n text-align: left;\n margin-bottom: 0.25rem;\n display: block;\n color: var(--color-text);\n}\n\ninput[type] {\n box-sizing: border-box;\n display: block;\n width: 100%;\n padding: 0.5rem 1rem;\n border: var(--border-width) solid var(--color-control-border);\n background: var(--color-background);\n font-size: 1rem;\n border-radius: var(--border-radius);\n box-shadow: inset 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2);\n color: var(--color-text);\n}\n\ninput[type]:focus {\n box-shadow: none;\n }\n\np {\n margin: 0 0 1.5rem 0;\n padding: 0 1rem;\n font-size: 1.1rem;\n line-height: 2rem;\n}\n\na.button {\n text-decoration: none;\n line-height: 1rem;\n}\n\na.button:link,\n a.button:visited {\n background-color: var(--color-background);\n color: var(--color-primary);\n }\n\nbutton,\na.button {\n margin: 0 0 0.75rem 0;\n padding: 0.75rem 1rem;\n color: var(--provider-color, var(--color-primary));\n background-color: var(--provider-bg, var(--color-background));\n font-size: 1.1rem;\n min-height: 62px;\n border-color: rgba(0, 0, 0, 0.1);\n border-radius: var(--border-radius);\n transition: all 0.1s ease-in-out;\n box-shadow: #000 0px 0px 0px 0px, #000 0px 0px 0px 0px,\n rgba(0, 0, 0, 0.2) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4px;\n font-weight: 500;\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\nbutton:has(img), a.button:has(img) {\n justify-content: unset;\n }\n\nbutton:has(img) span, a.button:has(img) span {\n flex-grow: 1;\n }\n\nbutton:hover, a.button:hover {\n cursor: pointer;\n }\n\nbutton:active, a.button:active {\n box-shadow: 0 0.15rem 0.3rem rgba(0, 0, 0, 0.15),\n inset 0 0.1rem 0.2rem var(--color-background),\n inset 0 -0.1rem 0.1rem rgba(0, 0, 0, 0.1);\n cursor: pointer;\n }\n\nbutton #provider-logo, a.button #provider-logo {\n display: block;\n }\n\nbutton #provider-logo-dark, a.button #provider-logo-dark {\n display: none;\n }\n\n@media (prefers-color-scheme: dark) {\n button,\n a.button {\n color: var(--provider-dark-color, var(--color-primary));\n background-color: var(--provider-dark-bg, var(--color-background));\n border: 1px solid #0d0d0d;\n box-shadow: #000 0px 0px 0px 0px, #ccc 0px 0px 0px 0px,\n rgba(255, 255, 255, 0.01) 0px 5px 5px -3px,\n rgba(255, 255, 255, 0.05) 0px 4px 6px -4px;\n }\n #provider-logo {\n display: none !important;\n }\n #provider-logo-dark {\n display: block !important;\n }\n}\n\na.site {\n color: var(--color-primary);\n text-decoration: none;\n font-size: 1rem;\n line-height: 2rem;\n}\n\na.site:hover {\n text-decoration: underline;\n }\n\n.page {\n position: absolute;\n width: 100%;\n height: 100%;\n display: grid;\n place-items: center;\n margin: 0;\n padding: 0;\n}\n\n.page > div {\n text-align: center;\n padding: 0.5rem;\n }\n\n.error a.button {\n display: inline-block;\n padding-left: 2rem;\n padding-right: 2rem;\n margin-top: 0.5rem;\n }\n\n.error .message {\n margin-bottom: 1.5rem;\n }\n\n.signin input[type=\"text\"] {\n margin-left: auto;\n margin-right: auto;\n display: block;\n }\n\n.signin hr {\n display: block;\n border: 0;\n border-top: 1px solid var(--color-seperator);\n margin: 1.5em auto 0 auto;\n overflow: visible;\n }\n\n.signin hr::before {\n content: \"or\";\n background: var(--color-background);\n color: #888;\n padding: 0 0.4rem;\n position: relative;\n top: -0.6rem;\n }\n\n.signin .error {\n background: #f5f5f5;\n font-weight: 500;\n border-radius: 0.3rem;\n background: var(--color-info);\n }\n\n.signin .error p {\n text-align: left;\n padding: 0.5rem 1rem;\n font-size: 0.9rem;\n line-height: 1.2rem;\n color: var(--color-info-text);\n }\n\n.signin > div,\n .signin form {\n display: block;\n }\n\n.signin > div input[type], .signin form input[type] {\n margin-bottom: 0.5rem;\n }\n\n.signin > div button, .signin form button {\n width: 100%;\n }\n\n.signin > div,\n .signin form {\n\n max-width: 300px;\n}\n.signout .message {\n margin-bottom: 1.5rem;\n }\n\n.logo {\n display: inline-block;\n margin-top: 100px;\n max-width: 300px;\n max-height: 150px;\n}\n\n.card {\n max-width: -moz-max-content;\n max-width: max-content;\n border: 1px solid var(--color-control-border);\n border-radius: 5px;\n padding: 20px 50px;\n margin: 50px auto;\n}\n\n.card .header {\n color: var(--color-primary);\n }\n\n.section-header {\n color: var(--brand-color, var(--color-text));\n}\n"; | ||
export default _default; | ||
//# sourceMappingURL=styles.d.ts.map |
@@ -1,2 +0,296 @@ | ||
export default `:root{--border-width:1px;--border-radius:0.5rem;--color-error:#c94b4b;--color-info:#157efb;--color-info-text:#fff}.__next-auth-theme-auto,.__next-auth-theme-light{--color-background:#fff;--color-text:#000;--color-primary:#444;--color-control-border:#bbb;--color-button-active-background:#f9f9f9;--color-button-active-border:#aaa;--color-seperator:#ccc}.__next-auth-theme-dark{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}@media (prefers-color-scheme:dark){.__next-auth-theme-auto{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}}body{background-color:var(--color-background);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin:0;padding:0}h1{font-weight:400;margin-bottom:1.5rem;padding:0 1rem}h1,p{color:var(--color-text)}form{margin:0;padding:0}label{font-weight:500;margin-bottom:.25rem;text-align:left}input[type],label{color:var(--color-text);display:block}input[type]{background:var(--color-background);border:var(--border-width) solid var(--color-control-border);border-radius:var(--border-radius);box-shadow:inset 0 .1rem .2rem rgba(0,0,0,.2);box-sizing:border-box;font-size:1rem;padding:.5rem 1rem;width:100%}input[type]:focus{box-shadow:none}p{font-size:1.1rem;line-height:2rem;margin:0 0 1.5rem;padding:0 1rem}a.button{line-height:1rem;text-decoration:none}a.button:link,a.button:visited{background-color:var(--color-background);color:var(--color-primary)}a.button,button{align-items:center;background-color:var(--provider-bg,var(--color-background));border-color:rgba(0,0,0,.1);border-radius:var(--border-radius);box-shadow:0 0 0 0 #000,0 0 0 0 #000,0 10px 15px -3px rgba(0,0,0,.2),0 4px 6px -4px rgba(0,0,0,.1);color:var(--provider-color,var(--color-primary));display:flex;font-size:1.1rem;font-weight:500;justify-content:center;margin:0 0 .75rem;min-height:62px;padding:.75rem 1rem;position:relative;transition:all .1s ease-in-out}a.button:has(img),button:has(img){justify-content:unset}a.button:has(img) span,button:has(img) span{flex-grow:1}a.button:hover,button:hover{cursor:pointer}a.button:active,button:active{box-shadow:0 .15rem .3rem rgba(0,0,0,.15),inset 0 .1rem .2rem var(--color-background),inset 0 -.1rem .1rem rgba(0,0,0,.1);cursor:pointer}a.button #provider-logo,button #provider-logo{display:block}a.button #provider-logo-dark,button #provider-logo-dark{display:none}@media (prefers-color-scheme:dark){a.button,button{background-color:var(--provider-dark-bg,var(--color-background));border:1px solid #0d0d0d;box-shadow:0 0 0 0 #000,0 0 0 0 #ccc,0 5px 5px -3px hsla(0,0%,100%,.01),0 4px 6px -4px hsla(0,0%,100%,.05);color:var(--provider-dark-color,var(--color-primary))}#provider-logo{display:none!important}#provider-logo-dark{display:block!important}}a.site{color:var(--color-primary);font-size:1rem;line-height:2rem;text-decoration:none}a.site:hover{text-decoration:underline}.page{display:grid;height:100%;margin:0;padding:0;place-items:center;position:absolute;width:100%}.page>div{padding:.5rem;text-align:center}.error a.button{display:inline-block;margin-top:.5rem;padding-left:2rem;padding-right:2rem}.error .message{margin-bottom:1.5rem}.signin input[type=text]{display:block;margin-left:auto;margin-right:auto}.signin hr{border:0;border-top:1px solid var(--color-seperator);display:block;margin:1.5em auto 0;overflow:visible}.signin hr:before{background:var(--color-background);color:#888;content:"or";padding:0 .4rem;position:relative;top:-.6rem}.signin .error{background:#f5f5f5;background:var(--color-info);border-radius:.3rem;font-weight:500}.signin .error p{color:var(--color-info-text);font-size:.9rem;line-height:1.2rem;padding:.5rem 1rem;text-align:left}.signin form,.signin>div{display:block}.signin form input[type],.signin>div input[type]{margin-bottom:.5rem}.signin form button,.signin>div button{width:100%}.signin form,.signin>div{max-width:300px}.signout .message{margin-bottom:1.5rem}.logo{display:inline-block;margin-top:100px;max-height:150px;max-width:300px}.card{border:1px solid var(--color-control-border);border-radius:5px;margin:50px auto;max-width:-moz-max-content;max-width:max-content;padding:20px 50px}.card .header{color:var(--color-primary)}.section-header{color:var(--brand-color,var(--color-text))}`; | ||
export default `:root { | ||
--border-width: 1px; | ||
--border-radius: 0.5rem; | ||
--color-error: #c94b4b; | ||
--color-info: #157efb; | ||
--color-info-text: #fff; | ||
} | ||
.__next-auth-theme-auto, | ||
.__next-auth-theme-light { | ||
--color-background: #fff; | ||
--color-text: #000; | ||
--color-primary: #444; | ||
--color-control-border: #bbb; | ||
--color-button-active-background: #f9f9f9; | ||
--color-button-active-border: #aaa; | ||
--color-seperator: #ccc; | ||
} | ||
.__next-auth-theme-dark { | ||
--color-background: #000; | ||
--color-text: #fff; | ||
--color-primary: #ccc; | ||
--color-control-border: #555; | ||
--color-button-active-background: #060606; | ||
--color-button-active-border: #666; | ||
--color-seperator: #444; | ||
} | ||
@media (prefers-color-scheme: dark) { | ||
.__next-auth-theme-auto { | ||
--color-background: #000; | ||
--color-text: #fff; | ||
--color-primary: #ccc; | ||
--color-control-border: #555; | ||
--color-button-active-background: #060606; | ||
--color-button-active-border: #666; | ||
--color-seperator: #444; | ||
} | ||
} | ||
body { | ||
background-color: var(--color-background); | ||
margin: 0; | ||
padding: 0; | ||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, | ||
"Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, | ||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; | ||
} | ||
h1 { | ||
font-weight: 400; | ||
margin-bottom: 1.5rem; | ||
padding: 0 1rem; | ||
color: var(--color-text); | ||
} | ||
p { | ||
color: var(--color-text); | ||
} | ||
form { | ||
margin: 0; | ||
padding: 0; | ||
} | ||
label { | ||
font-weight: 500; | ||
text-align: left; | ||
margin-bottom: 0.25rem; | ||
display: block; | ||
color: var(--color-text); | ||
} | ||
input[type] { | ||
box-sizing: border-box; | ||
display: block; | ||
width: 100%; | ||
padding: 0.5rem 1rem; | ||
border: var(--border-width) solid var(--color-control-border); | ||
background: var(--color-background); | ||
font-size: 1rem; | ||
border-radius: var(--border-radius); | ||
box-shadow: inset 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2); | ||
color: var(--color-text); | ||
} | ||
input[type]:focus { | ||
box-shadow: none; | ||
} | ||
p { | ||
margin: 0 0 1.5rem 0; | ||
padding: 0 1rem; | ||
font-size: 1.1rem; | ||
line-height: 2rem; | ||
} | ||
a.button { | ||
text-decoration: none; | ||
line-height: 1rem; | ||
} | ||
a.button:link, | ||
a.button:visited { | ||
background-color: var(--color-background); | ||
color: var(--color-primary); | ||
} | ||
button, | ||
a.button { | ||
margin: 0 0 0.75rem 0; | ||
padding: 0.75rem 1rem; | ||
color: var(--provider-color, var(--color-primary)); | ||
background-color: var(--provider-bg, var(--color-background)); | ||
font-size: 1.1rem; | ||
min-height: 62px; | ||
border-color: rgba(0, 0, 0, 0.1); | ||
border-radius: var(--border-radius); | ||
transition: all 0.1s ease-in-out; | ||
box-shadow: #000 0px 0px 0px 0px, #000 0px 0px 0px 0px, | ||
rgba(0, 0, 0, 0.2) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4px; | ||
font-weight: 500; | ||
position: relative; | ||
display: flex; | ||
align-items: center; | ||
justify-content: center; | ||
} | ||
button:has(img), a.button:has(img) { | ||
justify-content: unset; | ||
} | ||
button:has(img) span, a.button:has(img) span { | ||
flex-grow: 1; | ||
} | ||
button:hover, a.button:hover { | ||
cursor: pointer; | ||
} | ||
button:active, a.button:active { | ||
box-shadow: 0 0.15rem 0.3rem rgba(0, 0, 0, 0.15), | ||
inset 0 0.1rem 0.2rem var(--color-background), | ||
inset 0 -0.1rem 0.1rem rgba(0, 0, 0, 0.1); | ||
cursor: pointer; | ||
} | ||
button #provider-logo, a.button #provider-logo { | ||
display: block; | ||
} | ||
button #provider-logo-dark, a.button #provider-logo-dark { | ||
display: none; | ||
} | ||
@media (prefers-color-scheme: dark) { | ||
button, | ||
a.button { | ||
color: var(--provider-dark-color, var(--color-primary)); | ||
background-color: var(--provider-dark-bg, var(--color-background)); | ||
border: 1px solid #0d0d0d; | ||
box-shadow: #000 0px 0px 0px 0px, #ccc 0px 0px 0px 0px, | ||
rgba(255, 255, 255, 0.01) 0px 5px 5px -3px, | ||
rgba(255, 255, 255, 0.05) 0px 4px 6px -4px; | ||
} | ||
#provider-logo { | ||
display: none !important; | ||
} | ||
#provider-logo-dark { | ||
display: block !important; | ||
} | ||
} | ||
a.site { | ||
color: var(--color-primary); | ||
text-decoration: none; | ||
font-size: 1rem; | ||
line-height: 2rem; | ||
} | ||
a.site:hover { | ||
text-decoration: underline; | ||
} | ||
.page { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
display: grid; | ||
place-items: center; | ||
margin: 0; | ||
padding: 0; | ||
} | ||
.page > div { | ||
text-align: center; | ||
padding: 0.5rem; | ||
} | ||
.error a.button { | ||
display: inline-block; | ||
padding-left: 2rem; | ||
padding-right: 2rem; | ||
margin-top: 0.5rem; | ||
} | ||
.error .message { | ||
margin-bottom: 1.5rem; | ||
} | ||
.signin input[type="text"] { | ||
margin-left: auto; | ||
margin-right: auto; | ||
display: block; | ||
} | ||
.signin hr { | ||
display: block; | ||
border: 0; | ||
border-top: 1px solid var(--color-seperator); | ||
margin: 1.5em auto 0 auto; | ||
overflow: visible; | ||
} | ||
.signin hr::before { | ||
content: "or"; | ||
background: var(--color-background); | ||
color: #888; | ||
padding: 0 0.4rem; | ||
position: relative; | ||
top: -0.6rem; | ||
} | ||
.signin .error { | ||
background: #f5f5f5; | ||
font-weight: 500; | ||
border-radius: 0.3rem; | ||
background: var(--color-info); | ||
} | ||
.signin .error p { | ||
text-align: left; | ||
padding: 0.5rem 1rem; | ||
font-size: 0.9rem; | ||
line-height: 1.2rem; | ||
color: var(--color-info-text); | ||
} | ||
.signin > div, | ||
.signin form { | ||
display: block; | ||
} | ||
.signin > div input[type], .signin form input[type] { | ||
margin-bottom: 0.5rem; | ||
} | ||
.signin > div button, .signin form button { | ||
width: 100%; | ||
} | ||
.signin > div, | ||
.signin form { | ||
max-width: 300px; | ||
} | ||
.signout .message { | ||
margin-bottom: 1.5rem; | ||
} | ||
.logo { | ||
display: inline-block; | ||
margin-top: 100px; | ||
max-width: 300px; | ||
max-height: 150px; | ||
} | ||
.card { | ||
max-width: -moz-max-content; | ||
max-width: max-content; | ||
border: 1px solid var(--color-control-border); | ||
border-radius: 5px; | ||
padding: 20px 50px; | ||
margin: 50px auto; | ||
} | ||
.card .header { | ||
color: var(--color-primary); | ||
} | ||
.section-header { | ||
color: var(--brand-color, var(--color-text)); | ||
} | ||
`; | ||
// Generated by `pnpm css` |
@@ -193,6 +193,6 @@ import { handleLogin } from "../callback-handler.js"; | ||
} | ||
catch (error) { | ||
catch (e) { | ||
return { | ||
status: 401, | ||
redirect: `${url}/error?error=${encodeURIComponent(error.message)}`, | ||
redirect: `${url}/error?error=${encodeURIComponent(e.message)}`, | ||
cookies, | ||
@@ -199,0 +199,0 @@ }; |
@@ -47,4 +47,4 @@ import { JWTSessionError, SessionTokenError } from "../../errors.js"; | ||
} | ||
catch (error) { | ||
logger.error(new JWTSessionError(error)); | ||
catch (e) { | ||
logger.error(new JWTSessionError(e)); | ||
// If the JWT is not verifiable remove the broken session cookie(s). | ||
@@ -118,6 +118,6 @@ response.cookies?.push(...sessionStore.clean()); | ||
} | ||
catch (error) { | ||
logger.error(new SessionTokenError(error)); | ||
catch (e) { | ||
logger.error(new SessionTokenError(e)); | ||
} | ||
return response; | ||
} |
@@ -24,6 +24,6 @@ import { SignOutError } from "../../errors.js"; | ||
} | ||
catch (error) { | ||
logger.error(new SignOutError(error)); | ||
catch (e) { | ||
logger.error(new SignOutError(e)); | ||
} | ||
return { redirect, cookies: sessionStore.clean() }; | ||
} |
@@ -6,5 +6,5 @@ import { AuthError } from "../errors.js"; | ||
/** Web compatible method to create a hash, using SHA256 */ | ||
export declare function createHash(message: any): Promise<string>; | ||
export declare function createHash(message: string): Promise<string>; | ||
/** Web compatible method to create a random string of a given length */ | ||
export declare function randomString(size: number): string; | ||
//# sourceMappingURL=web.d.ts.map |
@@ -57,4 +57,4 @@ import { parse as parseCookie, serialize } from "cookie"; | ||
} | ||
catch (error) { | ||
return error; | ||
catch (e) { | ||
return e; | ||
} | ||
@@ -61,0 +61,0 @@ } |
{ | ||
"name": "@auth/core", | ||
"version": "0.2.3", | ||
"version": "0.2.4", | ||
"description": "Authentication for the Web.", | ||
@@ -64,6 +64,6 @@ "keywords": [ | ||
"dependencies": { | ||
"@panva/hkdf": "1.0.2", | ||
"@panva/hkdf": "^1.0.2", | ||
"cookie": "0.5.0", | ||
"jose": "4.11.1", | ||
"oauth4webapi": "2.0.5", | ||
"jose": "^4.11.1", | ||
"oauth4webapi": "^2.0.6", | ||
"preact": "10.11.3", | ||
@@ -81,2 +81,3 @@ "preact-render-to-string": "5.2.3" | ||
"devDependencies": { | ||
"@types/cookie": "0.5.1", | ||
"@types/node": "18.11.10", | ||
@@ -86,3 +87,2 @@ "@types/nodemailer": "6.4.6", | ||
"autoprefixer": "10.4.13", | ||
"cssnano": "5.1.14", | ||
"postcss": "8.4.19", | ||
@@ -93,7 +93,7 @@ "postcss-nested": "6.0.0", | ||
"scripts": { | ||
"build": "pnpm clean && pnpm css && tsc", | ||
"clean": "rm -rf *.js *.d.ts lib providers", | ||
"css": "node ./scripts/generate-css.js", | ||
"build": "pnpm css && tsc", | ||
"clean": "rm -rf *.js *.d.ts* lib providers", | ||
"css": "node scripts/generate-css", | ||
"dev": "pnpm css && tsc -w" | ||
} | ||
} |
import type { OAuthConfig, OAuthUserConfig } from "./index.js"; | ||
export type DateTime = string; | ||
export type Gender = "female" | "male"; | ||
export type Birthday = "SOLAR" | "LUNAR"; | ||
export type AgeRange = "1-9" | "10-14" | "15-19" | "20-29" | "30-39" | "40-49" | "50-59" | "60-69" | "70-79" | "80-89" | "90-"; | ||
@@ -45,3 +46,3 @@ /** | ||
birthday?: string; | ||
birthday_type?: string; | ||
birthday_type?: Birthday; | ||
gender_needs_agreement?: boolean; | ||
@@ -48,0 +49,0 @@ gender?: Gender; |
@@ -10,3 +10,2 @@ import type { Client } from "oauth4webapi"; | ||
export type { OAuthProviderType } from "./oauth-types.js"; | ||
type ChecksType = "pkce" | "state" | "none" | "nonce"; | ||
export type OAuthChecks = OpenIDCallbackChecks | OAuthCallbackChecks; | ||
@@ -111,3 +110,3 @@ type PartialIssuer = Partial<Pick<IssuerMetadata, "jwks_endpoint" | "issuer">>; | ||
* The CSRF protection performed on the callback endpoint. | ||
* Defaults to `["pkce"]` if undefined. | ||
* @default ["pkce"] | ||
* | ||
@@ -118,3 +117,3 @@ * [RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients (PKCE)](https://www.rfc-editor.org/rfc/rfc7636.html#section-4) | | ||
*/ | ||
checks?: ChecksType[]; | ||
checks?: Array<"pkce" | "state" | "none" | "nonce">; | ||
clientId?: string; | ||
@@ -139,4 +138,3 @@ clientSecret?: string; | ||
*/ | ||
export type OAuthConfigInternal<P> = Omit<OAuthConfig<P>, OAuthEndpointType | "clientId" | "checks" | "profile"> & { | ||
clientId: string; | ||
export type OAuthConfigInternal<P> = Omit<OAuthConfig<P>, OAuthEndpointType> & { | ||
authorization?: { | ||
@@ -153,6 +151,4 @@ url: URL; | ||
}; | ||
checks: ChecksType[]; | ||
profile: ProfileCallback<P>; | ||
}; | ||
} & Pick<Required<OAuthConfig<P>>, "clientId" | "checks" | "profile">; | ||
export type OAuthUserConfig<P> = Omit<Partial<OAuthConfig<P>>, "options" | "type"> & Required<Pick<OAuthConfig<P>, "clientId" | "clientSecret">>; | ||
//# sourceMappingURL=oauth.d.ts.map |
@@ -29,3 +29,3 @@ /** | ||
* | ||
* - [Gettint started](https://authjs.dev/getting-started/introduction) | ||
* - [Getting started](https://authjs.dev/getting-started/introduction) | ||
* - [Most common use case guides](https://authjs.dev/guides/overview) | ||
@@ -32,0 +32,0 @@ * |
@@ -44,2 +44,3 @@ /** | ||
import type { LoggerInstance } from "./lib/utils/logger.js" | ||
import { MissingSecret } from "./errors.js" | ||
@@ -101,3 +102,3 @@ const DEFAULT_MAX_AGE = 30 * 24 * 60 * 60 // 30 days | ||
/** | ||
* Takes a Auth.js request (`req`) and returns either the Auth.js issued JWT's payload, | ||
* Takes an Auth.js request (`req`) and returns either the Auth.js issued JWT's payload, | ||
* or the raw JWT string. We look for the JWT in the either the cookies, or the `Authorization` header. | ||
@@ -108,3 +109,6 @@ * [Documentation](https://authjs.dev/guides/basics/securing-pages-and-api-routes#using-gettoken) | ||
params: GetTokenParams<R> | ||
): Promise<R extends true ? string : JWT | null> { | ||
): Promise<R extends true ? string : JWT | null> | ||
export async function getToken( | ||
params: GetTokenParams | ||
): Promise<string | JWT | null> { | ||
const { | ||
@@ -124,2 +128,4 @@ req, | ||
if (!req) throw new Error("Must pass `req` to JWT getToken()") | ||
if (!secret) | ||
throw new MissingSecret("Must pass `secret` if not set to JWT getToken()") | ||
@@ -145,13 +151,9 @@ const sessionStore = new SessionStore( | ||
// @ts-expect-error | ||
if (!token) return null | ||
// @ts-expect-error | ||
if (raw) return token | ||
try { | ||
// @ts-expect-error | ||
return await _decode({ token, secret }) | ||
} catch { | ||
// @ts-expect-error | ||
return null | ||
@@ -158,0 +160,0 @@ } |
@@ -132,7 +132,9 @@ import { defaultCookies } from "./cookie.js" | ||
const missingMethods = [ | ||
"createVerificationToken", | ||
"useVerificationToken", | ||
"getUserByEmail", | ||
].filter((method) => !adapter[method]) | ||
const missingMethods = ( | ||
[ | ||
"createVerificationToken", | ||
"useVerificationToken", | ||
"getUserByEmail", | ||
] as const | ||
).filter((method) => !adapter[method]) | ||
@@ -139,0 +141,0 @@ if (missingMethods.length) { |
@@ -172,3 +172,3 @@ import * as jwt from "../jwt.js" | ||
} catch (e) { | ||
logger.error(new EventError(e)) | ||
logger.error(new EventError(e as Error)) | ||
} | ||
@@ -194,3 +194,3 @@ } | ||
} catch (e) { | ||
const error = new AdapterError(e) | ||
const error = new AdapterError(e as Error) | ||
logger.error(error) | ||
@@ -197,0 +197,0 @@ throw error |
@@ -190,3 +190,3 @@ import * as o from "oauth4webapi" | ||
} | ||
} catch (error) { | ||
} catch (e) { | ||
// If we didn't get a response either there was a problem with the provider | ||
@@ -200,4 +200,4 @@ // response *or* the user cancelled the action with the provider. | ||
logger.debug("getProfile error details", OAuthProfile) | ||
logger.error(new OAuthProfileParseError(error)) | ||
logger.error(new OAuthProfileParseError(e as Error)) | ||
} | ||
} |
@@ -1,2 +0,296 @@ | ||
export default `:root{--border-width:1px;--border-radius:0.5rem;--color-error:#c94b4b;--color-info:#157efb;--color-info-text:#fff}.__next-auth-theme-auto,.__next-auth-theme-light{--color-background:#fff;--color-text:#000;--color-primary:#444;--color-control-border:#bbb;--color-button-active-background:#f9f9f9;--color-button-active-border:#aaa;--color-seperator:#ccc}.__next-auth-theme-dark{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}@media (prefers-color-scheme:dark){.__next-auth-theme-auto{--color-background:#000;--color-text:#fff;--color-primary:#ccc;--color-control-border:#555;--color-button-active-background:#060606;--color-button-active-border:#666;--color-seperator:#444}}body{background-color:var(--color-background);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;margin:0;padding:0}h1{font-weight:400;margin-bottom:1.5rem;padding:0 1rem}h1,p{color:var(--color-text)}form{margin:0;padding:0}label{font-weight:500;margin-bottom:.25rem;text-align:left}input[type],label{color:var(--color-text);display:block}input[type]{background:var(--color-background);border:var(--border-width) solid var(--color-control-border);border-radius:var(--border-radius);box-shadow:inset 0 .1rem .2rem rgba(0,0,0,.2);box-sizing:border-box;font-size:1rem;padding:.5rem 1rem;width:100%}input[type]:focus{box-shadow:none}p{font-size:1.1rem;line-height:2rem;margin:0 0 1.5rem;padding:0 1rem}a.button{line-height:1rem;text-decoration:none}a.button:link,a.button:visited{background-color:var(--color-background);color:var(--color-primary)}a.button,button{align-items:center;background-color:var(--provider-bg,var(--color-background));border-color:rgba(0,0,0,.1);border-radius:var(--border-radius);box-shadow:0 0 0 0 #000,0 0 0 0 #000,0 10px 15px -3px rgba(0,0,0,.2),0 4px 6px -4px rgba(0,0,0,.1);color:var(--provider-color,var(--color-primary));display:flex;font-size:1.1rem;font-weight:500;justify-content:center;margin:0 0 .75rem;min-height:62px;padding:.75rem 1rem;position:relative;transition:all .1s ease-in-out}a.button:has(img),button:has(img){justify-content:unset}a.button:has(img) span,button:has(img) span{flex-grow:1}a.button:hover,button:hover{cursor:pointer}a.button:active,button:active{box-shadow:0 .15rem .3rem rgba(0,0,0,.15),inset 0 .1rem .2rem var(--color-background),inset 0 -.1rem .1rem rgba(0,0,0,.1);cursor:pointer}a.button #provider-logo,button #provider-logo{display:block}a.button #provider-logo-dark,button #provider-logo-dark{display:none}@media (prefers-color-scheme:dark){a.button,button{background-color:var(--provider-dark-bg,var(--color-background));border:1px solid #0d0d0d;box-shadow:0 0 0 0 #000,0 0 0 0 #ccc,0 5px 5px -3px hsla(0,0%,100%,.01),0 4px 6px -4px hsla(0,0%,100%,.05);color:var(--provider-dark-color,var(--color-primary))}#provider-logo{display:none!important}#provider-logo-dark{display:block!important}}a.site{color:var(--color-primary);font-size:1rem;line-height:2rem;text-decoration:none}a.site:hover{text-decoration:underline}.page{display:grid;height:100%;margin:0;padding:0;place-items:center;position:absolute;width:100%}.page>div{padding:.5rem;text-align:center}.error a.button{display:inline-block;margin-top:.5rem;padding-left:2rem;padding-right:2rem}.error .message{margin-bottom:1.5rem}.signin input[type=text]{display:block;margin-left:auto;margin-right:auto}.signin hr{border:0;border-top:1px solid var(--color-seperator);display:block;margin:1.5em auto 0;overflow:visible}.signin hr:before{background:var(--color-background);color:#888;content:"or";padding:0 .4rem;position:relative;top:-.6rem}.signin .error{background:#f5f5f5;background:var(--color-info);border-radius:.3rem;font-weight:500}.signin .error p{color:var(--color-info-text);font-size:.9rem;line-height:1.2rem;padding:.5rem 1rem;text-align:left}.signin form,.signin>div{display:block}.signin form input[type],.signin>div input[type]{margin-bottom:.5rem}.signin form button,.signin>div button{width:100%}.signin form,.signin>div{max-width:300px}.signout .message{margin-bottom:1.5rem}.logo{display:inline-block;margin-top:100px;max-height:150px;max-width:300px}.card{border:1px solid var(--color-control-border);border-radius:5px;margin:50px auto;max-width:-moz-max-content;max-width:max-content;padding:20px 50px}.card .header{color:var(--color-primary)}.section-header{color:var(--brand-color,var(--color-text))}` | ||
export default `:root { | ||
--border-width: 1px; | ||
--border-radius: 0.5rem; | ||
--color-error: #c94b4b; | ||
--color-info: #157efb; | ||
--color-info-text: #fff; | ||
} | ||
.__next-auth-theme-auto, | ||
.__next-auth-theme-light { | ||
--color-background: #fff; | ||
--color-text: #000; | ||
--color-primary: #444; | ||
--color-control-border: #bbb; | ||
--color-button-active-background: #f9f9f9; | ||
--color-button-active-border: #aaa; | ||
--color-seperator: #ccc; | ||
} | ||
.__next-auth-theme-dark { | ||
--color-background: #000; | ||
--color-text: #fff; | ||
--color-primary: #ccc; | ||
--color-control-border: #555; | ||
--color-button-active-background: #060606; | ||
--color-button-active-border: #666; | ||
--color-seperator: #444; | ||
} | ||
@media (prefers-color-scheme: dark) { | ||
.__next-auth-theme-auto { | ||
--color-background: #000; | ||
--color-text: #fff; | ||
--color-primary: #ccc; | ||
--color-control-border: #555; | ||
--color-button-active-background: #060606; | ||
--color-button-active-border: #666; | ||
--color-seperator: #444; | ||
} | ||
} | ||
body { | ||
background-color: var(--color-background); | ||
margin: 0; | ||
padding: 0; | ||
font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, | ||
"Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, | ||
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; | ||
} | ||
h1 { | ||
font-weight: 400; | ||
margin-bottom: 1.5rem; | ||
padding: 0 1rem; | ||
color: var(--color-text); | ||
} | ||
p { | ||
color: var(--color-text); | ||
} | ||
form { | ||
margin: 0; | ||
padding: 0; | ||
} | ||
label { | ||
font-weight: 500; | ||
text-align: left; | ||
margin-bottom: 0.25rem; | ||
display: block; | ||
color: var(--color-text); | ||
} | ||
input[type] { | ||
box-sizing: border-box; | ||
display: block; | ||
width: 100%; | ||
padding: 0.5rem 1rem; | ||
border: var(--border-width) solid var(--color-control-border); | ||
background: var(--color-background); | ||
font-size: 1rem; | ||
border-radius: var(--border-radius); | ||
box-shadow: inset 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2); | ||
color: var(--color-text); | ||
} | ||
input[type]:focus { | ||
box-shadow: none; | ||
} | ||
p { | ||
margin: 0 0 1.5rem 0; | ||
padding: 0 1rem; | ||
font-size: 1.1rem; | ||
line-height: 2rem; | ||
} | ||
a.button { | ||
text-decoration: none; | ||
line-height: 1rem; | ||
} | ||
a.button:link, | ||
a.button:visited { | ||
background-color: var(--color-background); | ||
color: var(--color-primary); | ||
} | ||
button, | ||
a.button { | ||
margin: 0 0 0.75rem 0; | ||
padding: 0.75rem 1rem; | ||
color: var(--provider-color, var(--color-primary)); | ||
background-color: var(--provider-bg, var(--color-background)); | ||
font-size: 1.1rem; | ||
min-height: 62px; | ||
border-color: rgba(0, 0, 0, 0.1); | ||
border-radius: var(--border-radius); | ||
transition: all 0.1s ease-in-out; | ||
box-shadow: #000 0px 0px 0px 0px, #000 0px 0px 0px 0px, | ||
rgba(0, 0, 0, 0.2) 0px 10px 15px -3px, rgba(0, 0, 0, 0.1) 0px 4px 6px -4px; | ||
font-weight: 500; | ||
position: relative; | ||
display: flex; | ||
align-items: center; | ||
justify-content: center; | ||
} | ||
button:has(img), a.button:has(img) { | ||
justify-content: unset; | ||
} | ||
button:has(img) span, a.button:has(img) span { | ||
flex-grow: 1; | ||
} | ||
button:hover, a.button:hover { | ||
cursor: pointer; | ||
} | ||
button:active, a.button:active { | ||
box-shadow: 0 0.15rem 0.3rem rgba(0, 0, 0, 0.15), | ||
inset 0 0.1rem 0.2rem var(--color-background), | ||
inset 0 -0.1rem 0.1rem rgba(0, 0, 0, 0.1); | ||
cursor: pointer; | ||
} | ||
button #provider-logo, a.button #provider-logo { | ||
display: block; | ||
} | ||
button #provider-logo-dark, a.button #provider-logo-dark { | ||
display: none; | ||
} | ||
@media (prefers-color-scheme: dark) { | ||
button, | ||
a.button { | ||
color: var(--provider-dark-color, var(--color-primary)); | ||
background-color: var(--provider-dark-bg, var(--color-background)); | ||
border: 1px solid #0d0d0d; | ||
box-shadow: #000 0px 0px 0px 0px, #ccc 0px 0px 0px 0px, | ||
rgba(255, 255, 255, 0.01) 0px 5px 5px -3px, | ||
rgba(255, 255, 255, 0.05) 0px 4px 6px -4px; | ||
} | ||
#provider-logo { | ||
display: none !important; | ||
} | ||
#provider-logo-dark { | ||
display: block !important; | ||
} | ||
} | ||
a.site { | ||
color: var(--color-primary); | ||
text-decoration: none; | ||
font-size: 1rem; | ||
line-height: 2rem; | ||
} | ||
a.site:hover { | ||
text-decoration: underline; | ||
} | ||
.page { | ||
position: absolute; | ||
width: 100%; | ||
height: 100%; | ||
display: grid; | ||
place-items: center; | ||
margin: 0; | ||
padding: 0; | ||
} | ||
.page > div { | ||
text-align: center; | ||
padding: 0.5rem; | ||
} | ||
.error a.button { | ||
display: inline-block; | ||
padding-left: 2rem; | ||
padding-right: 2rem; | ||
margin-top: 0.5rem; | ||
} | ||
.error .message { | ||
margin-bottom: 1.5rem; | ||
} | ||
.signin input[type="text"] { | ||
margin-left: auto; | ||
margin-right: auto; | ||
display: block; | ||
} | ||
.signin hr { | ||
display: block; | ||
border: 0; | ||
border-top: 1px solid var(--color-seperator); | ||
margin: 1.5em auto 0 auto; | ||
overflow: visible; | ||
} | ||
.signin hr::before { | ||
content: "or"; | ||
background: var(--color-background); | ||
color: #888; | ||
padding: 0 0.4rem; | ||
position: relative; | ||
top: -0.6rem; | ||
} | ||
.signin .error { | ||
background: #f5f5f5; | ||
font-weight: 500; | ||
border-radius: 0.3rem; | ||
background: var(--color-info); | ||
} | ||
.signin .error p { | ||
text-align: left; | ||
padding: 0.5rem 1rem; | ||
font-size: 0.9rem; | ||
line-height: 1.2rem; | ||
color: var(--color-info-text); | ||
} | ||
.signin > div, | ||
.signin form { | ||
display: block; | ||
} | ||
.signin > div input[type], .signin form input[type] { | ||
margin-bottom: 0.5rem; | ||
} | ||
.signin > div button, .signin form button { | ||
width: 100%; | ||
} | ||
.signin > div, | ||
.signin form { | ||
max-width: 300px; | ||
} | ||
.signout .message { | ||
margin-bottom: 1.5rem; | ||
} | ||
.logo { | ||
display: inline-block; | ||
margin-top: 100px; | ||
max-width: 300px; | ||
max-height: 150px; | ||
} | ||
.card { | ||
max-width: -moz-max-content; | ||
max-width: max-content; | ||
border: 1px solid var(--color-control-border); | ||
border-radius: 5px; | ||
padding: 20px 50px; | ||
margin: 50px auto; | ||
} | ||
.card .header { | ||
color: var(--color-primary); | ||
} | ||
.section-header { | ||
color: var(--brand-color, var(--color-text)); | ||
} | ||
` | ||
// Generated by `pnpm css` |
@@ -276,7 +276,7 @@ import { handleLogin } from "../callback-handler.js" | ||
} | ||
} catch (error) { | ||
} catch (e) { | ||
return { | ||
status: 401, | ||
redirect: `${url}/error?error=${encodeURIComponent( | ||
(error as Error).message | ||
(e as Error).message | ||
)}`, | ||
@@ -341,3 +341,3 @@ cookies, | ||
} catch (e) { | ||
const error = new CallbackRouteError(e, { provider: provider.id }) | ||
const error = new CallbackRouteError(e as Error, { provider: provider.id }) | ||
@@ -344,0 +344,0 @@ logger.error(error) |
@@ -72,4 +72,4 @@ import { JWTSessionError, SessionTokenError } from "../../errors.js" | ||
await events.session?.({ session: newSession, token }) | ||
} catch (error) { | ||
logger.error(new JWTSessionError(error)) | ||
} catch (e) { | ||
logger.error(new JWTSessionError(e as Error)) | ||
// If the JWT is not verifiable remove the broken session cookie(s). | ||
@@ -155,4 +155,4 @@ response.cookies?.push(...sessionStore.clean()) | ||
} | ||
} catch (error) { | ||
logger.error(new SessionTokenError(error)) | ||
} catch (e) { | ||
logger.error(new SessionTokenError(e as Error)) | ||
} | ||
@@ -159,0 +159,0 @@ |
@@ -19,3 +19,3 @@ import { AuthorizedCallbackError } from "../../errors.js" | ||
} catch (e) { | ||
const error = new AuthorizedCallbackError(e) | ||
const error = new AuthorizedCallbackError(e as Error) | ||
logger.error(error) | ||
@@ -22,0 +22,0 @@ url.searchParams.set("error", "Configuration") |
@@ -53,3 +53,3 @@ import emailSignin from "../email/signin.js" | ||
} catch (e) { | ||
const error = new SignInError(e, { provider: provider.id }) | ||
const error = new SignInError(e as Error, { provider: provider.id }) | ||
logger.error(error) | ||
@@ -56,0 +56,0 @@ url.searchParams.set("error", error.name) |
@@ -30,4 +30,4 @@ import { SignOutError } from "../../errors.js" | ||
} | ||
} catch (error) { | ||
logger.error(new SignOutError(error)) | ||
} catch (e) { | ||
logger.error(new SignOutError(e as Error)) | ||
} | ||
@@ -34,0 +34,0 @@ |
@@ -68,4 +68,4 @@ import { parse as parseCookie, serialize } from "cookie" | ||
} | ||
} catch (error) { | ||
return error | ||
} catch (e) { | ||
return e as Error | ||
} | ||
@@ -106,3 +106,3 @@ } | ||
/** Web compatible method to create a hash, using SHA256 */ | ||
export async function createHash(message) { | ||
export async function createHash(message: string) { | ||
const data = new TextEncoder().encode(message) | ||
@@ -109,0 +109,0 @@ const hash = await crypto.subtle.digest("SHA-256", data) |
@@ -5,2 +5,3 @@ import type { OAuthConfig, OAuthUserConfig } from "./index.js" | ||
export type Gender = "female" | "male" | ||
export type Birthday = "SOLAR" | "LUNAR" | ||
export type AgeRange = | ||
@@ -59,3 +60,3 @@ | "1-9" | ||
birthday?: string | ||
birthday_type?: string | ||
birthday_type?: Birthday | ||
gender_needs_agreement?: boolean | ||
@@ -62,0 +63,0 @@ gender?: Gender |
@@ -14,4 +14,2 @@ import type { Client } from "oauth4webapi" | ||
type ChecksType = "pkce" | "state" | "none" | "nonce" | ||
export type OAuthChecks = OpenIDCallbackChecks | OAuthCallbackChecks | ||
@@ -143,3 +141,3 @@ | ||
* The CSRF protection performed on the callback endpoint. | ||
* Defaults to `["pkce"]` if undefined. | ||
* @default ["pkce"] | ||
* | ||
@@ -150,3 +148,3 @@ * [RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients (PKCE)](https://www.rfc-editor.org/rfc/rfc7636.html#section-4) | | ||
*/ | ||
checks?: ChecksType[] | ||
checks?: Array<"pkce" | "state" | "none" | "nonce"> | ||
clientId?: string | ||
@@ -183,13 +181,7 @@ clientSecret?: string | ||
*/ | ||
export type OAuthConfigInternal<P> = Omit< | ||
OAuthConfig<P>, | ||
OAuthEndpointType | "clientId" | "checks" | "profile" | ||
> & { | ||
clientId: string | ||
export type OAuthConfigInternal<P> = Omit<OAuthConfig<P>, OAuthEndpointType> & { | ||
authorization?: { url: URL } | ||
token?: { url: URL; request?: TokenEndpointHandler["request"] } | ||
userinfo?: { url: URL; request?: UserinfoEndpointHandler["request"] } | ||
checks: ChecksType[] | ||
profile: ProfileCallback<P> | ||
} | ||
} & Pick<Required<OAuthConfig<P>>, "clientId" | "checks" | "profile"> | ||
@@ -196,0 +188,0 @@ export type OAuthUserConfig<P> = Omit< |
@@ -205,5 +205,5 @@ /** | ||
* where you can control what should be returned to the client. | ||
* Anything else will be kept from your front-end. | ||
* Anything else will be kept inaccessible from the client. | ||
* | ||
* ⚠ By default the JWT is signed, but not encrypted. | ||
* By default the JWT is encrypted. | ||
* | ||
@@ -210,0 +210,0 @@ * [Documentation](https://authjs.dev/guides/basics/callbacks#jwt-callback) | |
@@ -186,5 +186,5 @@ /** | ||
* where you can control what should be returned to the client. | ||
* Anything else will be kept from your front-end. | ||
* Anything else will be kept inaccessible from the client. | ||
* | ||
* ⚠ By default the JWT is signed, but not encrypted. | ||
* By default the JWT is encrypted. | ||
* | ||
@@ -191,0 +191,0 @@ * [Documentation](https://authjs.dev/guides/basics/callbacks#jwt-callback) | |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
652508
16926
+ Added@panva/hkdf@1.2.1(transitive)
+ Addedjose@4.15.9(transitive)
+ Addedoauth4webapi@2.16.0(transitive)
- Removed@panva/hkdf@1.0.2(transitive)
- Removedjose@4.11.1(transitive)
- Removedoauth4webapi@2.0.5(transitive)
Updated@panva/hkdf@^1.0.2
Updatedjose@^4.11.1
Updatedoauth4webapi@^2.0.6