@workos-inc/authkit-nextjs 0.16.2 → 0.17.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 +12 -1
- package/dist/esm/actions.js +4 -0
- package/dist/esm/actions.js.map +1 -1
- package/dist/esm/auth.js.map +1 -1
- package/dist/esm/authkit-callback-route.js +9 -21
- package/dist/esm/authkit-callback-route.js.map +1 -1
- package/dist/esm/impersonation.js +2 -5
- package/dist/esm/impersonation.js.map +1 -1
- package/dist/esm/session.js +22 -33
- package/dist/esm/session.js.map +1 -1
- package/dist/esm/{actions.d.ts → types/actions.d.ts} +1 -0
- package/dist/esm/{interfaces.d.ts → types/interfaces.d.ts} +4 -3
- package/dist/esm/types/utils.d.ts +7 -0
- package/dist/esm/{workos.d.ts → types/workos.d.ts} +1 -1
- package/dist/esm/utils.js +19 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/workos.js +1 -1
- package/package.json +12 -2
- package/src/actions.ts +6 -0
- package/src/auth.ts +1 -0
- package/src/authkit-callback-route.ts +16 -26
- package/src/impersonation.tsx +2 -5
- package/src/interfaces.ts +5 -3
- package/src/session.ts +24 -34
- package/src/utils.ts +20 -0
- package/src/workos.ts +1 -1
- /package/dist/esm/{auth.d.ts → types/auth.d.ts} +0 -0
- /package/dist/esm/{authkit-callback-route.d.ts → types/authkit-callback-route.d.ts} +0 -0
- /package/dist/esm/{authkit-provider.d.ts → types/authkit-provider.d.ts} +0 -0
- /package/dist/esm/{button.d.ts → types/button.d.ts} +0 -0
- /package/dist/esm/{cookie.d.ts → types/cookie.d.ts} +0 -0
- /package/dist/esm/{env-variables.d.ts → types/env-variables.d.ts} +0 -0
- /package/dist/esm/{get-authorization-url.d.ts → types/get-authorization-url.d.ts} +0 -0
- /package/dist/esm/{impersonation.d.ts → types/impersonation.d.ts} +0 -0
- /package/dist/esm/{index.d.ts → types/index.d.ts} +0 -0
- /package/dist/esm/{middleware.d.ts → types/middleware.d.ts} +0 -0
- /package/dist/esm/{min-max-button.d.ts → types/min-max-button.d.ts} +0 -0
- /package/dist/esm/{session.d.ts → types/session.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -80,12 +80,23 @@ You can also control the pathname the user will be sent to after signing-in by p
|
|
|
80
80
|
export const GET = handleAuth({ returnPathname: '/dashboard' });
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
`
|
|
83
|
+
If your application needs to persist data upon a successful authentication, like the `oauthTokens` from an upstream provider, you can pass in a `onSuccess` function that will get called after the user has successfully authenticated:
|
|
84
|
+
|
|
85
|
+
```ts
|
|
86
|
+
export const GET = handleAUth({
|
|
87
|
+
onSuccess: async ({ oauthTokens }) => {
|
|
88
|
+
await saveTokens(oauthTokens);
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`handleAuth` can be used with the following options.
|
|
84
94
|
|
|
85
95
|
| Option | Default | Description |
|
|
86
96
|
| ---------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
87
97
|
| `returnPathname` | `/` | The pathname to redirect the user to after signing in |
|
|
88
98
|
| `baseURL` | `undefined` | The base URL to use for the redirect URI instead of the one in the request. Useful if the app is being run in a container like docker where the hostname can be different from the one in the request |
|
|
99
|
+
| `onSuccess` | `undefined` | A function that receives successful authentication data and can be used for side-effects like persisting tokens |
|
|
89
100
|
|
|
90
101
|
### Middleware
|
|
91
102
|
|
package/dist/esm/actions.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use server';
|
|
2
|
+
import { signOut } from './auth.js';
|
|
2
3
|
/**
|
|
3
4
|
* This action is only accessible to authenticated users,
|
|
4
5
|
* there is no need to check the session here as the middleware will
|
|
@@ -7,4 +8,7 @@
|
|
|
7
8
|
export const checkSessionAction = async () => {
|
|
8
9
|
return true;
|
|
9
10
|
};
|
|
11
|
+
export const handleSignOutAction = async () => {
|
|
12
|
+
await signOut();
|
|
13
|
+
};
|
|
10
14
|
//# sourceMappingURL=actions.js.map
|
package/dist/esm/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/actions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,IAAI,EAAE;IAC3C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;IAC5C,MAAM,OAAO,EAAE,CAAC;AAClB,CAAC,CAAC"}
|
package/dist/esm/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,KAAK,UAAU,YAAY,CAAC,EAAE,cAAc,KAAkC,EAAE;IAC9E,OAAO,mBAAmB,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,OAAO,mBAAmB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,MAAM,GAAsC;QAChD,IAAI,EAAE,kBAAkB,IAAI,aAAa;KAC1C,CAAC;IACF,IAAI,oBAAoB;QAAE,MAAM,CAAC,MAAM,GAAG,oBAAoB,CAAC;IAE/D,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,KAAK,UAAU,YAAY,CAAC,EAAE,cAAc,KAAkC,EAAE;IAC9E,OAAO,mBAAmB,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,YAAY;IACzB,OAAO,mBAAmB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,OAAO;IACpB,MAAM,MAAM,GAAsC;QAChD,IAAI,EAAE,kBAAkB,IAAI,aAAa;KAC1C,CAAC;IACF,IAAI,oBAAoB;QAAE,MAAM,CAAC,MAAM,GAAG,oBAAoB,CAAC;IAE/D,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IAEpC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3B,MAAM,gBAAgB,EAAE,CAAC;AAC3B,CAAC;AAED,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { NextResponse } from 'next/server';
|
|
2
1
|
import { cookies } from 'next/headers';
|
|
3
2
|
import { workos } from './workos.js';
|
|
4
3
|
import { WORKOS_CLIENT_ID, WORKOS_COOKIE_NAME } from './env-variables.js';
|
|
5
4
|
import { encryptSession } from './session.js';
|
|
5
|
+
import { errorResponseWithFallback, redirectWithFallback } from './utils.js';
|
|
6
6
|
import { getCookieOptions } from './cookie.js';
|
|
7
7
|
export function handleAuth(options = {}) {
|
|
8
|
-
const { returnPathname: returnPathnameOption = '/', baseURL } = options;
|
|
8
|
+
const { returnPathname: returnPathnameOption = '/', baseURL, onSuccess } = options;
|
|
9
9
|
// Throw early if baseURL is provided but invalid
|
|
10
10
|
if (baseURL) {
|
|
11
11
|
try {
|
|
@@ -48,19 +48,15 @@ export function handleAuth(options = {}) {
|
|
|
48
48
|
}
|
|
49
49
|
// Fall back to standard Response if NextResponse is not available.
|
|
50
50
|
// This is to support Next.js 13.
|
|
51
|
-
const response = (
|
|
52
|
-
? NextResponse.redirect(url)
|
|
53
|
-
: new Response(null, {
|
|
54
|
-
status: 302,
|
|
55
|
-
headers: {
|
|
56
|
-
Location: url.toString(),
|
|
57
|
-
},
|
|
58
|
-
});
|
|
51
|
+
const response = redirectWithFallback(url.toString());
|
|
59
52
|
if (!accessToken || !refreshToken)
|
|
60
53
|
throw new Error('response is missing tokens');
|
|
54
|
+
if (onSuccess) {
|
|
55
|
+
await onSuccess({ accessToken, refreshToken, user, impersonator, oauthTokens });
|
|
56
|
+
}
|
|
61
57
|
// The refreshToken should never be accesible publicly, hence why we encrypt it in the cookie session
|
|
62
58
|
// Alternatively you could persist the refresh token in a backend database
|
|
63
|
-
const session = await encryptSession({ accessToken, refreshToken, user, impersonator
|
|
59
|
+
const session = await encryptSession({ accessToken, refreshToken, user, impersonator });
|
|
64
60
|
const cookieName = WORKOS_COOKIE_NAME || 'wos-session';
|
|
65
61
|
const nextCookies = await cookies();
|
|
66
62
|
nextCookies.set(cookieName, session, getCookieOptions(request.url));
|
|
@@ -77,20 +73,12 @@ export function handleAuth(options = {}) {
|
|
|
77
73
|
return errorResponse();
|
|
78
74
|
};
|
|
79
75
|
function errorResponse() {
|
|
80
|
-
|
|
76
|
+
return errorResponseWithFallback({
|
|
81
77
|
error: {
|
|
82
78
|
message: 'Something went wrong',
|
|
83
79
|
description: "Couldn't sign in. If you are not sure what happened, please contact your organization admin.",
|
|
84
80
|
},
|
|
85
|
-
};
|
|
86
|
-
// Use NextResponse if available, fallback to standard Response
|
|
87
|
-
// This is to support Next.js 13.
|
|
88
|
-
return (NextResponse === null || NextResponse === void 0 ? void 0 : NextResponse.json)
|
|
89
|
-
? NextResponse.json(errorBody, { status: 500 })
|
|
90
|
-
: new Response(JSON.stringify(errorBody), {
|
|
91
|
-
status: 500,
|
|
92
|
-
headers: { 'Content-Type': 'application/json' },
|
|
93
|
-
});
|
|
81
|
+
});
|
|
94
82
|
}
|
|
95
83
|
}
|
|
96
84
|
//# sourceMappingURL=authkit-callback-route.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authkit-callback-route.js","sourceRoot":"","sources":["../../src/authkit-callback-route.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authkit-callback-route.js","sourceRoot":"","sources":["../../src/authkit-callback-route.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { withAuth } from './session.js';
|
|
3
|
-
import { signOut } from './auth.js';
|
|
4
3
|
import { workos } from './workos.js';
|
|
5
4
|
import { Button } from './button.js';
|
|
6
5
|
import { MinMaxButton } from './min-max-button.js';
|
|
6
|
+
import { handleSignOutAction } from './actions.js';
|
|
7
7
|
export async function Impersonation({ side = 'bottom', ...props }) {
|
|
8
8
|
const { impersonator, user, organizationId } = await withAuth();
|
|
9
9
|
if (!impersonator)
|
|
@@ -46,10 +46,7 @@ export async function Impersonation({ side = 'bottom', ...props }) {
|
|
|
46
46
|
fontSize: 'calc(12px + var(--wi-s) * 0.5)',
|
|
47
47
|
lineHeight: '1.4',
|
|
48
48
|
} },
|
|
49
|
-
React.createElement("form", {
|
|
50
|
-
'use server';
|
|
51
|
-
await signOut();
|
|
52
|
-
}, style: {
|
|
49
|
+
React.createElement("form", { onSubmit: handleSignOutAction, style: {
|
|
53
50
|
display: 'flex',
|
|
54
51
|
alignItems: 'baseline',
|
|
55
52
|
paddingLeft: 'var(--wi-s)',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"impersonation.js","sourceRoot":"","sources":["../../src/impersonation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"impersonation.js","sourceRoot":"","sources":["../../src/impersonation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMnD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,GAAG,KAAK,EAAsB;IACnF,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IAEhE,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExG,OAAO,CACL,gCACM,KAAK,oCACsB,EAAE,EACjC,KAAK,EAAE;YACL,UAAU,EAAE,OAAO;YACnB,OAAO,EAAE,CAAC;YACV,eAAe,EAAE,MAAM;YACvB,QAAQ,EAAE,IAAI;YAEd,2DAA2D;YAC3D,gBAAgB,EAAE,GAAG;YACrB,QAAQ,EAAE,4DAA4D;YACtE,UAAU,EAAE,uDAAuD;YACnE,QAAQ,EAAE,4CAA4C;YACtD,SAAS,EAAE,mDAAmD;YAC9D,SAAS,EAAE,+CAA+C;YAE1D,GAAG,KAAK,CAAC,KAAK;SACf;QAED,6BACE,KAAK,EAAE;gBACL,iBAAiB,EAAE,yFAAyF;gBAC5G,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,iCAAiC;gBAC1C,cAAc,EAAE,gCAAgC;gBAChD,WAAW,EAAE;;;MAGjB;gBACI,YAAY,EAAE,yCAAyC;aACxD,GACD;QAEF,6BACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,QAAQ;gBAExB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;gBACR,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;gBAC7C,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;gBAEnD,UAAU,EACR,wIAAwI;gBAC1I,QAAQ,EAAE,gCAAgC;gBAC1C,UAAU,EAAE,KAAK;aAClB;YAED,8BACE,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,UAAU;oBACtB,WAAW,EAAE,aAAa;oBAC1B,YAAY,EAAE,aAAa;oBAE3B,QAAQ,EAAE,UAAU;oBACpB,UAAU,EAAE,uBAAuB;oBACnC,WAAW,EAAE,uBAAuB;oBAEpC,aAAa,EAAE,MAAM;oBACrB,eAAe,EAAE,eAAe;oBAChC,WAAW,EAAE,OAAO;oBACpB,WAAW,EAAE,cAAc;oBAC3B,eAAe,EAAE,cAAc;oBAC/B,gBAAgB,EAAE,cAAc;oBAEhC,UAAU,EAAE,yCAAyC;oBACrD,SAAS,EAAE,iEAAiE;oBAC5E,OAAO,EAAE,+BAA+B;oBACxC,MAAM,EAAE,+BAA+B;oBAEvC,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI;wBACpB,UAAU,EAAE,CAAC;wBACb,aAAa,EAAE,aAAa;wBAC5B,cAAc,EAAE,CAAC;wBACjB,iBAAiB,EAAE,cAAc;wBACjC,sBAAsB,EAAE,aAAa;wBACrC,uBAAuB,EAAE,aAAa;qBACvC,CAAC;oBAEF,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI;wBACvB,UAAU,EAAE,aAAa;wBACzB,aAAa,EAAE,CAAC;wBAChB,cAAc,EAAE,cAAc;wBAC9B,iBAAiB,EAAE,CAAC;wBACpB,mBAAmB,EAAE,aAAa;wBAClC,oBAAoB,EAAE,aAAa;qBACpC,CAAC;iBACH;gBAED,2BAAG,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE;;oBACxE,+BAAI,IAAI,CAAC,KAAK,CAAK;oBAAC,GAAG;oBAC5C,YAAY,KAAK,IAAI,IAAI,CACxB;;wBACa,+BAAI,YAAY,CAAC,IAAI,CAAK;wCACpC,CACJ,CACC;gBACJ,oBAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,uBAAuB,EAAE,WAAW,EAAE,aAAa,EAAE,WAEvF;gBACT,oBAAC,YAAY,IAAC,cAAc,EAAC,GAAG,IAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAgB,CACvE;YAEP,6BACE,KAAK,EAAE;oBACL,OAAO,EAAE,aAAa;oBAEtB,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,aAAa;oBAEpB,aAAa,EAAE,MAAM;oBACrB,eAAe,EAAE,eAAe;oBAChC,MAAM,EAAE,iCAAiC;oBACzC,YAAY,EAAE,aAAa;oBAE3B,UAAU,EAAE,yCAAyC;oBACrD,SAAS,EAAE,gEAAgE;oBAC3E,OAAO,EAAE,qBAAqB;oBAC9B,MAAM,EAAE,qBAAqB;oBAE7B,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;oBAC7C,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;iBACpD;gBAED,oBAAC,YAAY,IAAC,cAAc,EAAC,GAAG,IAAE,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAgB,CACxE,CACF,CACF,CACP,CAAC;AACJ,CAAC"}
|
package/dist/esm/session.js
CHANGED
|
@@ -9,6 +9,7 @@ import { workos } from './workos.js';
|
|
|
9
9
|
import { WORKOS_CLIENT_ID, WORKOS_COOKIE_PASSWORD, WORKOS_COOKIE_NAME, WORKOS_REDIRECT_URI } from './env-variables.js';
|
|
10
10
|
import { getAuthorizationUrl } from './get-authorization-url.js';
|
|
11
11
|
import { parse, tokensToRegexp } from 'path-to-regexp';
|
|
12
|
+
import { redirectWithFallback } from './utils.js';
|
|
12
13
|
const sessionHeaderName = 'x-workos-session';
|
|
13
14
|
const middlewareHeaderName = 'x-workos-middleware';
|
|
14
15
|
const redirectUriHeaderName = 'x-redirect-uri';
|
|
@@ -24,6 +25,9 @@ async function updateSession(request, debug, middlewareAuth, redirectUri, signUp
|
|
|
24
25
|
if (!redirectUri && !WORKOS_REDIRECT_URI) {
|
|
25
26
|
throw new Error('You must provide a redirect URI in the AuthKit middleware or in the environment variables.');
|
|
26
27
|
}
|
|
28
|
+
if (!WORKOS_COOKIE_PASSWORD || WORKOS_COOKIE_PASSWORD.length < 32) {
|
|
29
|
+
throw new Error('You must provide a valid cookie password that is at least 32 characters in the environment variables.');
|
|
30
|
+
}
|
|
27
31
|
const session = await getSessionFromCookie();
|
|
28
32
|
const newRequestHeaders = new Headers(request.headers);
|
|
29
33
|
// We store the current request url in a custom header, so we can always have access to it
|
|
@@ -68,19 +72,10 @@ async function updateSession(request, debug, middlewareAuth, redirectUri, signUp
|
|
|
68
72
|
console.log(`Unauthenticated user on protected route ${request.url}, redirecting to AuthKit`);
|
|
69
73
|
const redirectTo = await getAuthorizationUrl({
|
|
70
74
|
returnPathname: getReturnPathname(request.url),
|
|
71
|
-
redirectUri: redirectUri
|
|
75
|
+
redirectUri: redirectUri,
|
|
72
76
|
screenHint: getScreenHint(signUpPaths, request.nextUrl.pathname),
|
|
73
77
|
});
|
|
74
|
-
|
|
75
|
-
// This is to support Next.js 13.
|
|
76
|
-
return (NextResponse === null || NextResponse === void 0 ? void 0 : NextResponse.redirect)
|
|
77
|
-
? NextResponse.redirect(redirectTo)
|
|
78
|
-
: new Response(null, {
|
|
79
|
-
status: 302,
|
|
80
|
-
headers: {
|
|
81
|
-
Location: redirectTo,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
78
|
+
return redirectWithFallback(redirectTo);
|
|
84
79
|
}
|
|
85
80
|
// If no session, just continue
|
|
86
81
|
if (!session) {
|
|
@@ -118,7 +113,6 @@ async function updateSession(request, debug, middlewareAuth, redirectUri, signUp
|
|
|
118
113
|
refreshToken,
|
|
119
114
|
user,
|
|
120
115
|
impersonator,
|
|
121
|
-
oauthTokens: session.oauthTokens,
|
|
122
116
|
});
|
|
123
117
|
newRequestHeaders.set(sessionHeaderName, encryptedSession);
|
|
124
118
|
const response = NextResponse.next({
|
|
@@ -137,15 +131,9 @@ async function updateSession(request, debug, middlewareAuth, redirectUri, signUp
|
|
|
137
131
|
// We redirect to the current URL which will trigger the middleware again.
|
|
138
132
|
// This is outside of the above block because you cannot redirect in Next.js
|
|
139
133
|
// from inside a try/catch block.
|
|
140
|
-
return (
|
|
141
|
-
? NextResponse.redirect(request.url)
|
|
142
|
-
: new Response(null, {
|
|
143
|
-
status: 307,
|
|
144
|
-
headers: {
|
|
145
|
-
Location: request.url,
|
|
146
|
-
},
|
|
147
|
-
});
|
|
134
|
+
return redirectWithFallback(request.url);
|
|
148
135
|
}
|
|
136
|
+
/* istanbul ignore next */
|
|
149
137
|
async function refreshSession({ organizationId: nextOrganizationId, ensureSignedIn = false, } = {}) {
|
|
150
138
|
const session = await getSessionFromCookie();
|
|
151
139
|
if (!session) {
|
|
@@ -185,28 +173,31 @@ async function refreshSession({ organizationId: nextOrganizationId, ensureSigned
|
|
|
185
173
|
};
|
|
186
174
|
}
|
|
187
175
|
function getMiddlewareAuthPathRegex(pathGlob) {
|
|
188
|
-
let regex;
|
|
189
176
|
try {
|
|
190
177
|
const url = new URL(pathGlob, 'https://example.com');
|
|
191
178
|
const path = `${url.pathname}${url.hash || ''}`;
|
|
192
179
|
const tokens = parse(path);
|
|
193
|
-
regex = tokensToRegexp(tokens).source;
|
|
180
|
+
const regex = tokensToRegexp(tokens).source;
|
|
194
181
|
return new RegExp(regex);
|
|
195
182
|
}
|
|
196
183
|
catch (err) {
|
|
184
|
+
console.log('err', err);
|
|
197
185
|
const message = err instanceof Error ? err.message : String(err);
|
|
198
186
|
throw new Error(`Error parsing routes for middleware auth. Reason: ${message}`);
|
|
199
187
|
}
|
|
200
188
|
}
|
|
201
189
|
async function redirectToSignIn() {
|
|
202
|
-
var _a
|
|
190
|
+
var _a;
|
|
203
191
|
const headersList = await headers();
|
|
204
|
-
const url =
|
|
192
|
+
const url = headersList.get('x-url');
|
|
193
|
+
if (!url) {
|
|
194
|
+
throw new Error('No URL found in the headers');
|
|
195
|
+
}
|
|
205
196
|
// Determine if the current route is in the sign up paths
|
|
206
|
-
const signUpPaths = (
|
|
197
|
+
const signUpPaths = (_a = headersList.get(signUpPathsHeaderName)) === null || _a === void 0 ? void 0 : _a.split(',');
|
|
207
198
|
const pathname = new URL(url).pathname;
|
|
208
199
|
const screenHint = getScreenHint(signUpPaths, pathname);
|
|
209
|
-
const returnPathname =
|
|
200
|
+
const returnPathname = getReturnPathname(url);
|
|
210
201
|
redirect(await getAuthorizationUrl({ returnPathname, screenHint }));
|
|
211
202
|
}
|
|
212
203
|
async function withAuth({ ensureSignedIn = false } = {}) {
|
|
@@ -226,7 +217,6 @@ async function withAuth({ ensureSignedIn = false } = {}) {
|
|
|
226
217
|
permissions,
|
|
227
218
|
entitlements,
|
|
228
219
|
impersonator: session.impersonator,
|
|
229
|
-
oauthTokens: session.oauthTokens,
|
|
230
220
|
accessToken: session.accessToken,
|
|
231
221
|
};
|
|
232
222
|
}
|
|
@@ -235,7 +225,9 @@ async function terminateSession() {
|
|
|
235
225
|
if (sessionId) {
|
|
236
226
|
redirect(workos.userManagement.getLogoutUrl({ sessionId }));
|
|
237
227
|
}
|
|
238
|
-
|
|
228
|
+
else {
|
|
229
|
+
redirect('/');
|
|
230
|
+
}
|
|
239
231
|
}
|
|
240
232
|
async function verifyAccessToken(accessToken) {
|
|
241
233
|
try {
|
|
@@ -247,11 +239,12 @@ async function verifyAccessToken(accessToken) {
|
|
|
247
239
|
}
|
|
248
240
|
}
|
|
249
241
|
async function getSessionFromCookie(response) {
|
|
242
|
+
var _a;
|
|
250
243
|
const cookieName = WORKOS_COOKIE_NAME || 'wos-session';
|
|
251
244
|
const nextCookies = await cookies();
|
|
252
245
|
const cookie = response ? response.cookies.get(cookieName) : nextCookies.get(cookieName);
|
|
253
246
|
if (cookie) {
|
|
254
|
-
return unsealData(cookie.value, {
|
|
247
|
+
return unsealData((_a = cookie.value) !== null && _a !== void 0 ? _a : cookie, {
|
|
255
248
|
password: WORKOS_COOKIE_PASSWORD,
|
|
256
249
|
});
|
|
257
250
|
}
|
|
@@ -298,10 +291,6 @@ function getReturnPathname(url) {
|
|
|
298
291
|
function getScreenHint(signUpPaths, pathname) {
|
|
299
292
|
if (!signUpPaths)
|
|
300
293
|
return 'sign-in';
|
|
301
|
-
if (!Array.isArray(signUpPaths)) {
|
|
302
|
-
const pathRegex = getMiddlewareAuthPathRegex(signUpPaths);
|
|
303
|
-
return pathRegex.exec(pathname) ? 'sign-up' : 'sign-in';
|
|
304
|
-
}
|
|
305
294
|
const screenHintPaths = signUpPaths.filter((pathGlob) => {
|
|
306
295
|
const pathRegex = getMiddlewareAuthPathRegex(pathGlob);
|
|
307
296
|
return pathRegex.exec(pathname);
|
package/dist/esm/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,iBAAiB,GAAG,kBAAkB,CAAC;AAC7C,MAAM,oBAAoB,GAAG,qBAAqB,CAAC;AACnD,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAC/C,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE7F,KAAK,UAAU,cAAc,CAAC,OAAgB;IAC5C,OAAO,QAAQ,CAAC,OAAO,EAAE;QACvB,QAAQ,EAAE,sBAAsB;QAChC,GAAG,EAAE,CAAC;KACP,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAoB,EACpB,KAAc,EACd,cAAqC,EACrC,WAAmB,EACnB,WAAqB;IAErB,IAAI,CAAC,WAAW,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC7C,MAAM,iBAAiB,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvD,0FAA0F;IAC1F,qGAAqG;IACrG,gFAAgF;IAChF,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IAE5C,kGAAkG;IAClG,iBAAiB,CAAC,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;IAEpD,kDAAkD;IAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,GAAG,CAAC;IAER,6EAA6E;IAC7E,IAAI,WAAW,EAAE,CAAC;QAChB,iBAAiB,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAC1D,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,IAAI,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACrC,CAAC;IAED,iBAAiB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE5C,IACE,cAAc,CAAC,OAAO;QACtB,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ;QACzC,CAAC,cAAc,CAAC,oBAAoB,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAC3D,CAAC;QACD,qBAAqB;QACrB,qCAAqC;QACrC,kDAAkD;QAClD,6DAA6D;QAC7D,EAAE;QACF,mGAAmG;QACnG,4GAA4G;QAC5G,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,YAAY,GAAa,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACrF,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAEvD,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,4GAA4G;IAC5G,IAAI,cAAc,CAAC,OAAO,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACpE,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,2CAA2C,OAAO,CAAC,GAAG,0BAA0B,CAAC,CAAC;QAEzG,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC;YAC3C,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC;YAC9C,WAAW,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,mBAAmB;YAC/C,UAAU,EAAE,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjE,CAAC,CAAC;QAEH,mEAAmE;QACnE,iCAAiC;QACjC,OAAO,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ;YAC3B,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC;YACnC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACjB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,QAAQ,EAAE,UAAU;iBACrB;aACF,CAAC,CAAC;IACT,CAAC;IAED,+BAA+B;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACrE,MAAM,UAAU,GAAG,kBAAkB,IAAI,aAAa,CAAC;IAEvD,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IAEpC,IAAI,eAAe,EAAE,CAAC;QACpB,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC3C,wEAAwE;QACxE,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,EAAE,WAAW,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,KAAK,CAAC,CAAC;QAC7E,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;SACxC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC;QACH,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,yDAAyD,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAElH,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,SAAS,CAAc,OAAO,CAAC,WAAW,CAAC,CAAC;QAE/E,kHAAkH;QAClH,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC;YACjH,QAAQ,EAAE,gBAAgB;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,cAAc;SACf,CAAC,CAAC;QAEH,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,gDAAgD,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAEjG,qDAAqD;QACrD,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC;YAC5C,WAAW;YACX,YAAY;YACZ,IAAI;YACJ,YAAY;YACZ,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC;YACjC,OAAO,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE;SACxC,CAAC,CAAC;QACH,oBAAoB;QACpB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC;QAClF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,qDAAqD,EAAE,CAAC,CAAC,CAAC;QAEjF,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,4EAA4E;IAC5E,iCAAiC;IACjC,OAAO,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ;QAC3B,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;QACpC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE;gBACP,QAAQ,EAAE,OAAO,CAAC,GAAG;aACtB;SACF,CAAC,CAAC;AACT,CAAC;AAMD,KAAK,UAAU,cAAc,CAAC,EAC5B,cAAc,EAAE,kBAAkB,EAClC,cAAc,GAAG,KAAK,MAIpB,EAAE;IACJ,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,6BAA6B,EAAE,GAAG,SAAS,CAAc,OAAO,CAAC,WAAW,CAAC,CAAC;IAE9F,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,4BAA4B,CAAC;QACjH,QAAQ,EAAE,gBAAgB;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,cAAc,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,6BAA6B;KACpE,CAAC,CAAC;IAEH,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAAC;QAC5C,WAAW;QACX,YAAY;QACZ,IAAI;QACJ,YAAY;KACb,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,kBAAkB,IAAI,aAAa,CAAC;IAEvD,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAErC,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,WAAW,CAAC,GAAG,CAAC,UAAU,EAAE,gBAAgB,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE,MAAM,EACJ,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,cAAc,EACtB,IAAI,EACJ,WAAW,EACX,YAAY,GACb,GAAG,SAAS,CAAc,WAAW,CAAC,CAAC;IAExC,OAAO;QACL,SAAS;QACT,IAAI;QACJ,cAAc;QACd,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,YAAY;QACZ,WAAW;KACZ,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB;IAClD,IAAI,KAAa,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,QAAS,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QAEjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAEtC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAEjE,MAAM,IAAI,KAAK,CAAC,qDAAqD,OAAO,EAAE,CAAC,CAAC;IAClF,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB;;IAC7B,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,mCAAI,EAAE,CAAC;IAE3C,yDAAyD;IACzD,MAAM,WAAW,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,qBAAqB,CAAC,0CAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;IACvC,MAAM,UAAU,GAAG,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAExD,MAAM,cAAc,GAAG,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAErD,QAAQ,CAAC,MAAM,mBAAmB,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAKD,KAAK,UAAU,QAAQ,CAAC,EAAE,cAAc,GAAG,KAAK,EAAE,GAAG,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAC;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,EACJ,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,cAAc,EACtB,IAAI,EACJ,WAAW,EACX,YAAY,GACb,GAAG,SAAS,CAAc,OAAO,CAAC,WAAW,CAAC,CAAC;IAEhD,OAAO;QACL,SAAS;QACT,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,cAAc;QACd,IAAI;QACJ,WAAW;QACX,YAAY;QACZ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,EAAE,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IAClD,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,WAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,QAAuB;IACzD,MAAM,UAAU,GAAG,kBAAkB,IAAI,aAAa,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAEzF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,UAAU,CAAU,MAAM,CAAC,KAAK,EAAE;YACvC,QAAQ,EAAE,sBAAsB;SACjC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,UAAU,CAAC,QAAuB;IAC/C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAErD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEpC,IAAI,MAAM,iBAAiB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACjD,MAAM,EACJ,GAAG,EAAE,SAAS,EACd,MAAM,EAAE,cAAc,EACtB,IAAI,EACJ,WAAW,EACX,YAAY,GACb,GAAG,SAAS,CAAc,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhD,OAAO;YACL,SAAS;YACT,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,cAAc;YACd,IAAI;YACJ,WAAW;YACX,YAAY;YACZ,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,MAAM,WAAW,GAAG,MAAM,OAAO,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAErE,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,iCAAiC,GAAG,iLAAiL,CACtN,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,OAAO,UAAU,CAAU,UAAU,EAAE,EAAE,QAAQ,EAAE,sBAAsB,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACzG,CAAC;AAED,SAAS,aAAa,CAAC,WAA0C,EAAE,QAAgB;IACjF,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,0BAA0B,CAAC,WAAW,CAAC,CAAC;QAC1D,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAED,MAAM,eAAe,GAAa,WAAW,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChE,MAAM,SAAS,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QACvD,OAAO,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,10 @@ import { OauthTokens, User } from '@workos-inc/node';
|
|
|
2
2
|
export interface HandleAuthOptions {
|
|
3
3
|
returnPathname?: string;
|
|
4
4
|
baseURL?: string;
|
|
5
|
+
onSuccess?: (data: HandleAuthSuccessData) => void | Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
export interface HandleAuthSuccessData extends Session {
|
|
8
|
+
oauthTokens?: OauthTokens;
|
|
5
9
|
}
|
|
6
10
|
export interface Impersonator {
|
|
7
11
|
email: string;
|
|
@@ -12,7 +16,6 @@ export interface Session {
|
|
|
12
16
|
refreshToken: string;
|
|
13
17
|
user: User;
|
|
14
18
|
impersonator?: Impersonator;
|
|
15
|
-
oauthTokens?: OauthTokens;
|
|
16
19
|
}
|
|
17
20
|
export interface UserInfo {
|
|
18
21
|
user: User;
|
|
@@ -22,7 +25,6 @@ export interface UserInfo {
|
|
|
22
25
|
permissions?: string[];
|
|
23
26
|
entitlements?: string[];
|
|
24
27
|
impersonator?: Impersonator;
|
|
25
|
-
oauthTokens?: OauthTokens;
|
|
26
28
|
accessToken: string;
|
|
27
29
|
}
|
|
28
30
|
export interface NoUserInfo {
|
|
@@ -32,7 +34,6 @@ export interface NoUserInfo {
|
|
|
32
34
|
role?: undefined;
|
|
33
35
|
permissions?: undefined;
|
|
34
36
|
impersonator?: undefined;
|
|
35
|
-
oauthTokens?: undefined;
|
|
36
37
|
accessToken?: undefined;
|
|
37
38
|
}
|
|
38
39
|
export interface AccessToken {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
export function redirectWithFallback(redirectUri) {
|
|
3
|
+
// Fall back to standard Response if NextResponse is not available.
|
|
4
|
+
// This is to support Next.js 13.
|
|
5
|
+
return (NextResponse === null || NextResponse === void 0 ? void 0 : NextResponse.redirect)
|
|
6
|
+
? NextResponse.redirect(redirectUri)
|
|
7
|
+
: new Response(null, { status: 307, headers: { Location: redirectUri } });
|
|
8
|
+
}
|
|
9
|
+
export function errorResponseWithFallback(errorBody) {
|
|
10
|
+
// Fall back to standard Response if NextResponse is not available.
|
|
11
|
+
// This is to support Next.js 13.
|
|
12
|
+
return (NextResponse === null || NextResponse === void 0 ? void 0 : NextResponse.json)
|
|
13
|
+
? NextResponse.json(errorBody, { status: 500 })
|
|
14
|
+
: new Response(JSON.stringify(errorBody), {
|
|
15
|
+
status: 500,
|
|
16
|
+
headers: { 'Content-Type': 'application/json' },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,UAAU,oBAAoB,CAAC,WAAmB;IACtD,mEAAmE;IACnE,iCAAiC;IACjC,OAAO,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ;QAC3B,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;QACpC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAA8D;IACtG,mEAAmE;IACnE,iCAAiC;IACjC,OAAO,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI;QACvB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;QAC/C,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YACtC,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;AACT,CAAC"}
|
package/dist/esm/workos.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { WorkOS } from '@workos-inc/node';
|
|
2
2
|
import { WORKOS_API_HOSTNAME, WORKOS_API_KEY, WORKOS_API_HTTPS, WORKOS_API_PORT } from './env-variables.js';
|
|
3
|
-
export const VERSION = '0.
|
|
3
|
+
export const VERSION = '0.17.1';
|
|
4
4
|
const options = {
|
|
5
5
|
apiHostname: WORKOS_API_HOSTNAME,
|
|
6
6
|
https: WORKOS_API_HTTPS ? WORKOS_API_HTTPS === 'true' : true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workos-inc/authkit-nextjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.17.1",
|
|
4
4
|
"description": "Authentication and session helpers for using WorkOS & AuthKit with Next.js",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,10 @@
|
|
|
18
18
|
"build": "tsc --project tsconfig.json",
|
|
19
19
|
"prepublishOnly": "npm run lint",
|
|
20
20
|
"lint": "eslint \"src/**/*.ts*\"",
|
|
21
|
-
"test": "
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test:watch": "jest --watch",
|
|
23
|
+
"prettier": "prettier \"{src,__tests__}/**/*.{js,ts,tsx}\" --check",
|
|
24
|
+
"format": "prettier \"{src,__tests__}/**/*.{js,ts,tsx}\" --write"
|
|
22
25
|
},
|
|
23
26
|
"dependencies": {
|
|
24
27
|
"@workos-inc/node": "^7.33.0",
|
|
@@ -32,14 +35,21 @@
|
|
|
32
35
|
"react-dom": "^18.0 || ^19.0.0"
|
|
33
36
|
},
|
|
34
37
|
"devDependencies": {
|
|
38
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
39
|
+
"@testing-library/react": "^16.0.1",
|
|
40
|
+
"@types/jest": "^29.5.14",
|
|
35
41
|
"@types/node": "^20.11.28",
|
|
36
42
|
"@types/react": "18.2.67",
|
|
37
43
|
"@types/react-dom": "18.2.22",
|
|
38
44
|
"eslint": "^8.29.0",
|
|
39
45
|
"eslint-config-prettier": "^9.1.0",
|
|
40
46
|
"eslint-plugin-require-extensions": "^0.1.3",
|
|
47
|
+
"jest": "^29.7.0",
|
|
48
|
+
"jest-environment-jsdom": "^29.7.0",
|
|
41
49
|
"next": "^15.0.1",
|
|
42
50
|
"prettier": "^3.3.3",
|
|
51
|
+
"ts-jest": "^29.2.5",
|
|
52
|
+
"ts-node": "^10.9.2",
|
|
43
53
|
"typescript": "5.4.2",
|
|
44
54
|
"typescript-eslint": "^7.2.0"
|
|
45
55
|
},
|
package/src/actions.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
'use server';
|
|
2
2
|
|
|
3
|
+
import { signOut } from './auth.js';
|
|
4
|
+
|
|
3
5
|
/**
|
|
4
6
|
* This action is only accessible to authenticated users,
|
|
5
7
|
* there is no need to check the session here as the middleware will
|
|
@@ -8,3 +10,7 @@
|
|
|
8
10
|
export const checkSessionAction = async () => {
|
|
9
11
|
return true;
|
|
10
12
|
};
|
|
13
|
+
|
|
14
|
+
export const handleSignOutAction = async () => {
|
|
15
|
+
await signOut();
|
|
16
|
+
};
|
package/src/auth.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { NextRequest
|
|
1
|
+
import { NextRequest } from 'next/server';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
import { workos } from './workos.js';
|
|
4
4
|
import { WORKOS_CLIENT_ID, WORKOS_COOKIE_NAME } from './env-variables.js';
|
|
5
5
|
import { encryptSession } from './session.js';
|
|
6
|
+
import { errorResponseWithFallback, redirectWithFallback } from './utils.js';
|
|
6
7
|
import { getCookieOptions } from './cookie.js';
|
|
7
8
|
import { HandleAuthOptions } from './interfaces.js';
|
|
8
9
|
|
|
9
10
|
export function handleAuth(options: HandleAuthOptions = {}) {
|
|
10
|
-
const { returnPathname: returnPathnameOption = '/', baseURL } = options;
|
|
11
|
+
const { returnPathname: returnPathnameOption = '/', baseURL, onSuccess } = options;
|
|
11
12
|
|
|
12
13
|
// Throw early if baseURL is provided but invalid
|
|
13
14
|
if (baseURL) {
|
|
@@ -26,10 +27,11 @@ export function handleAuth(options: HandleAuthOptions = {}) {
|
|
|
26
27
|
if (code) {
|
|
27
28
|
try {
|
|
28
29
|
// Use the code returned to us by AuthKit and authenticate the user with WorkOS
|
|
29
|
-
const { accessToken, refreshToken, user, impersonator, oauthTokens } =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
const { accessToken, refreshToken, user, impersonator, oauthTokens } =
|
|
31
|
+
await workos.userManagement.authenticateWithCode({
|
|
32
|
+
clientId: WORKOS_CLIENT_ID,
|
|
33
|
+
code,
|
|
34
|
+
});
|
|
33
35
|
|
|
34
36
|
// If baseURL is provided, use it instead of request.nextUrl
|
|
35
37
|
// This is useful if the app is being run in a container like docker where
|
|
@@ -57,20 +59,17 @@ export function handleAuth(options: HandleAuthOptions = {}) {
|
|
|
57
59
|
|
|
58
60
|
// Fall back to standard Response if NextResponse is not available.
|
|
59
61
|
// This is to support Next.js 13.
|
|
60
|
-
const response =
|
|
61
|
-
? NextResponse.redirect(url)
|
|
62
|
-
: new Response(null, {
|
|
63
|
-
status: 302,
|
|
64
|
-
headers: {
|
|
65
|
-
Location: url.toString(),
|
|
66
|
-
},
|
|
67
|
-
});
|
|
62
|
+
const response = redirectWithFallback(url.toString());
|
|
68
63
|
|
|
69
64
|
if (!accessToken || !refreshToken) throw new Error('response is missing tokens');
|
|
70
65
|
|
|
66
|
+
if (onSuccess) {
|
|
67
|
+
await onSuccess({ accessToken, refreshToken, user, impersonator, oauthTokens });
|
|
68
|
+
}
|
|
69
|
+
|
|
71
70
|
// The refreshToken should never be accesible publicly, hence why we encrypt it in the cookie session
|
|
72
71
|
// Alternatively you could persist the refresh token in a backend database
|
|
73
|
-
const session = await encryptSession({ accessToken, refreshToken, user, impersonator
|
|
72
|
+
const session = await encryptSession({ accessToken, refreshToken, user, impersonator });
|
|
74
73
|
const cookieName = WORKOS_COOKIE_NAME || 'wos-session';
|
|
75
74
|
const nextCookies = await cookies();
|
|
76
75
|
|
|
@@ -92,20 +91,11 @@ export function handleAuth(options: HandleAuthOptions = {}) {
|
|
|
92
91
|
};
|
|
93
92
|
|
|
94
93
|
function errorResponse() {
|
|
95
|
-
|
|
94
|
+
return errorResponseWithFallback({
|
|
96
95
|
error: {
|
|
97
96
|
message: 'Something went wrong',
|
|
98
97
|
description: "Couldn't sign in. If you are not sure what happened, please contact your organization admin.",
|
|
99
98
|
},
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
// Use NextResponse if available, fallback to standard Response
|
|
103
|
-
// This is to support Next.js 13.
|
|
104
|
-
return NextResponse?.json
|
|
105
|
-
? NextResponse.json(errorBody, { status: 500 })
|
|
106
|
-
: new Response(JSON.stringify(errorBody), {
|
|
107
|
-
status: 500,
|
|
108
|
-
headers: { 'Content-Type': 'application/json' },
|
|
109
|
-
});
|
|
99
|
+
});
|
|
110
100
|
}
|
|
111
101
|
}
|
package/src/impersonation.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { withAuth } from './session.js';
|
|
3
|
-
import { signOut } from './auth.js';
|
|
4
3
|
import { workos } from './workos.js';
|
|
5
4
|
import { Button } from './button.js';
|
|
6
5
|
import { MinMaxButton } from './min-max-button.js';
|
|
6
|
+
import { handleSignOutAction } from './actions.js';
|
|
7
7
|
|
|
8
8
|
interface ImpersonationProps extends React.ComponentPropsWithoutRef<'div'> {
|
|
9
9
|
side?: 'top' | 'bottom';
|
|
@@ -69,10 +69,7 @@ export async function Impersonation({ side = 'bottom', ...props }: Impersonation
|
|
|
69
69
|
}}
|
|
70
70
|
>
|
|
71
71
|
<form
|
|
72
|
-
|
|
73
|
-
'use server';
|
|
74
|
-
await signOut();
|
|
75
|
-
}}
|
|
72
|
+
onSubmit={handleSignOutAction}
|
|
76
73
|
style={{
|
|
77
74
|
display: 'flex',
|
|
78
75
|
alignItems: 'baseline',
|
package/src/interfaces.ts
CHANGED
|
@@ -3,6 +3,11 @@ import { OauthTokens, User } from '@workos-inc/node';
|
|
|
3
3
|
export interface HandleAuthOptions {
|
|
4
4
|
returnPathname?: string;
|
|
5
5
|
baseURL?: string;
|
|
6
|
+
onSuccess?: (data: HandleAuthSuccessData) => void | Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export interface HandleAuthSuccessData extends Session {
|
|
10
|
+
oauthTokens?: OauthTokens;
|
|
6
11
|
}
|
|
7
12
|
|
|
8
13
|
export interface Impersonator {
|
|
@@ -14,7 +19,6 @@ export interface Session {
|
|
|
14
19
|
refreshToken: string;
|
|
15
20
|
user: User;
|
|
16
21
|
impersonator?: Impersonator;
|
|
17
|
-
oauthTokens?: OauthTokens;
|
|
18
22
|
}
|
|
19
23
|
|
|
20
24
|
export interface UserInfo {
|
|
@@ -25,7 +29,6 @@ export interface UserInfo {
|
|
|
25
29
|
permissions?: string[];
|
|
26
30
|
entitlements?: string[];
|
|
27
31
|
impersonator?: Impersonator;
|
|
28
|
-
oauthTokens?: OauthTokens;
|
|
29
32
|
accessToken: string;
|
|
30
33
|
}
|
|
31
34
|
export interface NoUserInfo {
|
|
@@ -35,7 +38,6 @@ export interface NoUserInfo {
|
|
|
35
38
|
role?: undefined;
|
|
36
39
|
permissions?: undefined;
|
|
37
40
|
impersonator?: undefined;
|
|
38
|
-
oauthTokens?: undefined;
|
|
39
41
|
accessToken?: undefined;
|
|
40
42
|
}
|
|
41
43
|
|
package/src/session.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { getAuthorizationUrl } from './get-authorization-url.js';
|
|
|
12
12
|
import { AccessToken, AuthkitMiddlewareAuth, NoUserInfo, Session, UserInfo } from './interfaces.js';
|
|
13
13
|
|
|
14
14
|
import { parse, tokensToRegexp } from 'path-to-regexp';
|
|
15
|
+
import { redirectWithFallback } from './utils.js';
|
|
15
16
|
|
|
16
17
|
const sessionHeaderName = 'x-workos-session';
|
|
17
18
|
const middlewareHeaderName = 'x-workos-middleware';
|
|
@@ -38,6 +39,12 @@ async function updateSession(
|
|
|
38
39
|
throw new Error('You must provide a redirect URI in the AuthKit middleware or in the environment variables.');
|
|
39
40
|
}
|
|
40
41
|
|
|
42
|
+
if (!WORKOS_COOKIE_PASSWORD || WORKOS_COOKIE_PASSWORD.length < 32) {
|
|
43
|
+
throw new Error(
|
|
44
|
+
'You must provide a valid cookie password that is at least 32 characters in the environment variables.',
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
41
48
|
const session = await getSessionFromCookie();
|
|
42
49
|
const newRequestHeaders = new Headers(request.headers);
|
|
43
50
|
|
|
@@ -93,20 +100,11 @@ async function updateSession(
|
|
|
93
100
|
|
|
94
101
|
const redirectTo = await getAuthorizationUrl({
|
|
95
102
|
returnPathname: getReturnPathname(request.url),
|
|
96
|
-
redirectUri: redirectUri
|
|
103
|
+
redirectUri: redirectUri,
|
|
97
104
|
screenHint: getScreenHint(signUpPaths, request.nextUrl.pathname),
|
|
98
105
|
});
|
|
99
106
|
|
|
100
|
-
|
|
101
|
-
// This is to support Next.js 13.
|
|
102
|
-
return NextResponse?.redirect
|
|
103
|
-
? NextResponse.redirect(redirectTo)
|
|
104
|
-
: new Response(null, {
|
|
105
|
-
status: 302,
|
|
106
|
-
headers: {
|
|
107
|
-
Location: redirectTo,
|
|
108
|
-
},
|
|
109
|
-
});
|
|
107
|
+
return redirectWithFallback(redirectTo);
|
|
110
108
|
}
|
|
111
109
|
|
|
112
110
|
// If no session, just continue
|
|
@@ -150,7 +148,6 @@ async function updateSession(
|
|
|
150
148
|
refreshToken,
|
|
151
149
|
user,
|
|
152
150
|
impersonator,
|
|
153
|
-
oauthTokens: session.oauthTokens,
|
|
154
151
|
});
|
|
155
152
|
|
|
156
153
|
newRequestHeaders.set(sessionHeaderName, encryptedSession);
|
|
@@ -171,20 +168,15 @@ async function updateSession(
|
|
|
171
168
|
// We redirect to the current URL which will trigger the middleware again.
|
|
172
169
|
// This is outside of the above block because you cannot redirect in Next.js
|
|
173
170
|
// from inside a try/catch block.
|
|
174
|
-
return
|
|
175
|
-
? NextResponse.redirect(request.url)
|
|
176
|
-
: new Response(null, {
|
|
177
|
-
status: 307,
|
|
178
|
-
headers: {
|
|
179
|
-
Location: request.url,
|
|
180
|
-
},
|
|
181
|
-
});
|
|
171
|
+
return redirectWithFallback(request.url);
|
|
182
172
|
}
|
|
183
173
|
|
|
184
174
|
async function refreshSession(options: {
|
|
185
175
|
organizationId?: string;
|
|
186
176
|
ensureSignedIn?: boolean;
|
|
187
177
|
}): Promise<UserInfo | NoUserInfo>;
|
|
178
|
+
|
|
179
|
+
/* istanbul ignore next */
|
|
188
180
|
async function refreshSession({
|
|
189
181
|
organizationId: nextOrganizationId,
|
|
190
182
|
ensureSignedIn = false,
|
|
@@ -245,17 +237,16 @@ async function refreshSession({
|
|
|
245
237
|
}
|
|
246
238
|
|
|
247
239
|
function getMiddlewareAuthPathRegex(pathGlob: string) {
|
|
248
|
-
let regex: string;
|
|
249
|
-
|
|
250
240
|
try {
|
|
251
241
|
const url = new URL(pathGlob, 'https://example.com');
|
|
252
242
|
const path = `${url.pathname!}${url.hash || ''}`;
|
|
253
243
|
|
|
254
244
|
const tokens = parse(path);
|
|
255
|
-
regex = tokensToRegexp(tokens).source;
|
|
245
|
+
const regex = tokensToRegexp(tokens).source;
|
|
256
246
|
|
|
257
247
|
return new RegExp(regex);
|
|
258
248
|
} catch (err) {
|
|
249
|
+
console.log('err', err);
|
|
259
250
|
const message = err instanceof Error ? err.message : String(err);
|
|
260
251
|
|
|
261
252
|
throw new Error(`Error parsing routes for middleware auth. Reason: ${message}`);
|
|
@@ -264,7 +255,11 @@ function getMiddlewareAuthPathRegex(pathGlob: string) {
|
|
|
264
255
|
|
|
265
256
|
async function redirectToSignIn() {
|
|
266
257
|
const headersList = await headers();
|
|
267
|
-
const url = headersList.get('x-url')
|
|
258
|
+
const url = headersList.get('x-url');
|
|
259
|
+
|
|
260
|
+
if (!url) {
|
|
261
|
+
throw new Error('No URL found in the headers');
|
|
262
|
+
}
|
|
268
263
|
|
|
269
264
|
// Determine if the current route is in the sign up paths
|
|
270
265
|
const signUpPaths = headersList.get(signUpPathsHeaderName)?.split(',');
|
|
@@ -272,7 +267,7 @@ async function redirectToSignIn() {
|
|
|
272
267
|
const pathname = new URL(url).pathname;
|
|
273
268
|
const screenHint = getScreenHint(signUpPaths, pathname);
|
|
274
269
|
|
|
275
|
-
const returnPathname =
|
|
270
|
+
const returnPathname = getReturnPathname(url);
|
|
276
271
|
|
|
277
272
|
redirect(await getAuthorizationUrl({ returnPathname, screenHint }));
|
|
278
273
|
}
|
|
@@ -306,7 +301,6 @@ async function withAuth({ ensureSignedIn = false } = {}) {
|
|
|
306
301
|
permissions,
|
|
307
302
|
entitlements,
|
|
308
303
|
impersonator: session.impersonator,
|
|
309
|
-
oauthTokens: session.oauthTokens,
|
|
310
304
|
accessToken: session.accessToken,
|
|
311
305
|
};
|
|
312
306
|
}
|
|
@@ -315,8 +309,9 @@ async function terminateSession() {
|
|
|
315
309
|
const { sessionId } = await withAuth();
|
|
316
310
|
if (sessionId) {
|
|
317
311
|
redirect(workos.userManagement.getLogoutUrl({ sessionId }));
|
|
312
|
+
} else {
|
|
313
|
+
redirect('/');
|
|
318
314
|
}
|
|
319
|
-
redirect('/');
|
|
320
315
|
}
|
|
321
316
|
|
|
322
317
|
async function verifyAccessToken(accessToken: string) {
|
|
@@ -334,7 +329,7 @@ async function getSessionFromCookie(response?: NextResponse) {
|
|
|
334
329
|
const cookie = response ? response.cookies.get(cookieName) : nextCookies.get(cookieName);
|
|
335
330
|
|
|
336
331
|
if (cookie) {
|
|
337
|
-
return unsealData<Session>(cookie.value, {
|
|
332
|
+
return unsealData<Session>(cookie.value ?? cookie, {
|
|
338
333
|
password: WORKOS_COOKIE_PASSWORD,
|
|
339
334
|
});
|
|
340
335
|
}
|
|
@@ -395,14 +390,9 @@ function getReturnPathname(url: string): string {
|
|
|
395
390
|
return `${newUrl.pathname}${newUrl.searchParams.size > 0 ? '?' + newUrl.searchParams.toString() : ''}`;
|
|
396
391
|
}
|
|
397
392
|
|
|
398
|
-
function getScreenHint(signUpPaths: string[] |
|
|
393
|
+
function getScreenHint(signUpPaths: string[] | undefined, pathname: string) {
|
|
399
394
|
if (!signUpPaths) return 'sign-in';
|
|
400
395
|
|
|
401
|
-
if (!Array.isArray(signUpPaths)) {
|
|
402
|
-
const pathRegex = getMiddlewareAuthPathRegex(signUpPaths);
|
|
403
|
-
return pathRegex.exec(pathname) ? 'sign-up' : 'sign-in';
|
|
404
|
-
}
|
|
405
|
-
|
|
406
396
|
const screenHintPaths: string[] = signUpPaths.filter((pathGlob) => {
|
|
407
397
|
const pathRegex = getMiddlewareAuthPathRegex(pathGlob);
|
|
408
398
|
return pathRegex.exec(pathname);
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
|
|
3
|
+
export function redirectWithFallback(redirectUri: string) {
|
|
4
|
+
// Fall back to standard Response if NextResponse is not available.
|
|
5
|
+
// This is to support Next.js 13.
|
|
6
|
+
return NextResponse?.redirect
|
|
7
|
+
? NextResponse.redirect(redirectUri)
|
|
8
|
+
: new Response(null, { status: 307, headers: { Location: redirectUri } });
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function errorResponseWithFallback(errorBody: { error: { message: string; description: string } }) {
|
|
12
|
+
// Fall back to standard Response if NextResponse is not available.
|
|
13
|
+
// This is to support Next.js 13.
|
|
14
|
+
return NextResponse?.json
|
|
15
|
+
? NextResponse.json(errorBody, { status: 500 })
|
|
16
|
+
: new Response(JSON.stringify(errorBody), {
|
|
17
|
+
status: 500,
|
|
18
|
+
headers: { 'Content-Type': 'application/json' },
|
|
19
|
+
});
|
|
20
|
+
}
|
package/src/workos.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WorkOS } from '@workos-inc/node';
|
|
2
2
|
import { WORKOS_API_HOSTNAME, WORKOS_API_KEY, WORKOS_API_HTTPS, WORKOS_API_PORT } from './env-variables.js';
|
|
3
3
|
|
|
4
|
-
export const VERSION = '0.
|
|
4
|
+
export const VERSION = '0.17.1';
|
|
5
5
|
|
|
6
6
|
const options = {
|
|
7
7
|
apiHostname: WORKOS_API_HOSTNAME,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|