Skip to content

Commit 82df4b5

Browse files
committed
fix issue where cookieName isn't always used, fix types
1 parent f4c2de3 commit 82df4b5

File tree

4 files changed

+25
-19
lines changed

4 files changed

+25
-19
lines changed

src/interfaces.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,19 @@ export interface GetAuthURLOptions {
4040
returnPathname?: string;
4141
}
4242

43-
export interface AuthKitLoaderOptions {
43+
export type AuthKitLoaderOptions = {
4444
ensureSignedIn?: boolean;
4545
debug?: boolean;
46-
storage?: SessionStorage;
47-
cookie?: SessionIdStorageStrategy['cookie'];
48-
}
46+
} & (
47+
| {
48+
storage?: never;
49+
cookie?: SessionIdStorageStrategy['cookie'];
50+
}
51+
| {
52+
storage: SessionStorage;
53+
cookie: SessionIdStorageStrategy['cookie'];
54+
}
55+
);
4956

5057
export interface AuthorizedData {
5158
user: User;

src/session.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { LoaderFunctionArgs, SessionData, TypedResponse } from '@remix-run/node';
22
import { json, redirect } from '@remix-run/node';
3-
import { WORKOS_CLIENT_ID, WORKOS_COOKIE_PASSWORD } from './env-variables.js';
3+
import { WORKOS_CLIENT_ID, WORKOS_COOKIE_NAME, WORKOS_COOKIE_PASSWORD } from './env-variables.js';
44
import { getAuthorizationUrl } from './get-authorization-url.js';
55
import type { AccessToken, AuthKitLoaderOptions, AuthorizedData, Session, UnauthorizedData } from './interfaces.js';
66
import { workos } from './workos.js';
@@ -123,7 +123,8 @@ async function authkitLoader<Data = unknown>(
123123
cookie,
124124
} = typeof loaderOrOptions === 'object' ? loaderOrOptions : options;
125125

126-
const { getSession, destroySession } = await configureSessionStorage({ storage, cookieName: cookie?.name });
126+
const cookieName = cookie?.name ?? WORKOS_COOKIE_NAME ?? 'wos-session';
127+
const { getSession, destroySession } = await configureSessionStorage({ storage, cookieName });
127128

128129
const { request } = loaderArgs;
129130
const session = await updateSession(request, debug);

src/sessionStorage.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ describe('SessionStorageManager', () => {
6767
storage: createMemorySessionStorage({ cookie }),
6868
cookieName: '_cookie',
6969
});
70-
expect(cookieName).toBe('wos-session');
70+
expect(cookieName).toBe('_cookie');
7171
expect(getSession).toBeDefined();
7272
expect(commitSession).toBeDefined();
7373
expect(destroySession).toBeDefined();

src/sessionStorage.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import {
66
WORKOS_COOKIE_NAME,
77
} from './env-variables.js';
88

9-
interface SessionStorageConfig {
10-
storage?: SessionStorage;
11-
cookieName?: string;
12-
}
9+
type SessionStorageConfig = { storage?: never; cookieName?: string } | { storage: SessionStorage; cookieName: string };
10+
11+
const DEFAULT_COOKIE_NAME = WORKOS_COOKIE_NAME || 'wos-session';
1312

1413
export const errors = {
1514
configureSessionStorage:
@@ -25,11 +24,10 @@ export class SessionStorageManager {
2524
/**
2625
* The default cookie name used for storing the session id.
2726
*/
28-
static readonly DEFAULT_COOKIE_NAME = 'wos-session';
2927

3028
private storage: SessionStorage | null = null;
3129
private configPromise: Promise<void> | null = null;
32-
private cookieName: string = SessionStorageManager.DEFAULT_COOKIE_NAME;
30+
private cookieName: string = DEFAULT_COOKIE_NAME;
3331

3432
async configure(config: SessionStorageConfig = {}) {
3533
if (!this.configPromise) {
@@ -58,15 +56,15 @@ export class SessionStorageManager {
5856
return { ...storage, cookieName };
5957
}
6058

61-
private createSessionStorage({ storage, cookieName }: SessionStorageConfig = {}): SessionStorage {
62-
if (storage) {
63-
return storage;
64-
}
65-
59+
private createSessionStorage({ storage, cookieName }: SessionStorageConfig): SessionStorage {
6660
if (cookieName) {
6761
this.cookieName = cookieName;
6862
}
6963

64+
if (storage) {
65+
return storage;
66+
}
67+
7068
const cookieOptions = {
7169
...this.getDefaultCookieOptions(),
7270
...(cookieName ? { name: cookieName } : {}),
@@ -81,7 +79,7 @@ export class SessionStorageManager {
8179
const redirectUrl = new URL(WORKOS_REDIRECT_URI);
8280
const isSecureProtocol = redirectUrl.protocol === 'https:';
8381
return {
84-
name: WORKOS_COOKIE_NAME || SessionStorageManager.DEFAULT_COOKIE_NAME,
82+
name: this.cookieName,
8583
path: '/',
8684
httpOnly: true,
8785
secure: isSecureProtocol,

0 commit comments

Comments
 (0)