Skip to content

Commit 521e294

Browse files
authored
Add feature flags to parsed access-token results (#1295)
## Description This change pulls the `feature_flags` claim from the JWT if it exists. This claim is exposed as `featureFlags` to the developer. ## Documentation Does this require changes to the WorkOS Docs? E.g. the [API Reference](https://workos.com/docs/reference) or code snippets need updates. ``` [X] Yes - workos/workos#40562 ```
1 parent a6bafaf commit 521e294

File tree

5 files changed

+12
-2
lines changed

5 files changed

+12
-2
lines changed

src/user-management/interfaces/authenticate-with-session-cookie.interface.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ export interface AccessToken {
1313
role?: string;
1414
permissions?: string[];
1515
entitlements?: string[];
16+
feature_flags?: string[];
1617
}
1718

1819
export type SessionCookieData = Pick<
@@ -38,6 +39,7 @@ export type AuthenticateWithSessionCookieSuccessResponse = {
3839
role?: string;
3940
permissions?: string[];
4041
entitlements?: string[];
42+
featureFlags?: string[];
4143
user: User;
4244
impersonator?: Impersonator;
4345
accessToken: string;

src/user-management/session.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ describe('Session', () => {
106106
const cookiePassword = 'alongcookiesecretmadefortestingsessions';
107107

108108
const accessToken =
109-
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJpbXBlcnNvbmF0b3IiOnsiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJlYXNvbiI6InRlc3QifSwic2lkIjoic2Vzc2lvbl8xMjMiLCJvcmdfaWQiOiJvcmdfMTIzIiwicm9sZSI6Im1lbWJlciIsInBlcm1pc3Npb25zIjpbInBvc3RzOmNyZWF0ZSIsInBvc3RzOmRlbGV0ZSJdLCJlbnRpdGxlbWVudHMiOlsiYXVkaXQtbG9ncyJdLCJ1c2VyIjp7Im9iamVjdCI6InVzZXIiLCJpZCI6InVzZXJfMDFINUpRRFY3UjdBVEVZWkRFRzBXNVBSWVMiLCJlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20ifX0.A8mDST4wtq_0vId6ALg7k2Ukr7FXrszZtdJ_6dfXeAc';
109+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJpbXBlcnNvbmF0b3IiOnsiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJlYXNvbiI6InRlc3QifSwic2lkIjoic2Vzc2lvbl8xMjMiLCJvcmdfaWQiOiJvcmdfMTIzIiwicm9sZSI6Im1lbWJlciIsInBlcm1pc3Npb25zIjpbInBvc3RzOmNyZWF0ZSIsInBvc3RzOmRlbGV0ZSJdLCJlbnRpdGxlbWVudHMiOlsiYXVkaXQtbG9ncyJdLCJmZWF0dXJlX2ZsYWdzIjpbImRhcmstbW9kZSIsImJldGEtZmVhdHVyZXMiXSwidXNlciI6eyJvYmplY3QiOiJ1c2VyIiwiaWQiOiJ1c2VyXzAxSDVKUURWN1I3QVRFWVpERUcwVzVQUllTIiwiZW1haWwiOiJ0ZXN0QGV4YW1wbGUuY29tIn19.YVNjR8S2xGn2jAoLuEcBQNJ1_xY3OzjRE1-BK0zjfQE';
110110

111111
const sessionData = await sealData(
112112
{
@@ -141,6 +141,7 @@ describe('Session', () => {
141141
role: 'member',
142142
permissions: ['posts:create', 'posts:delete'],
143143
entitlements: ['audit-logs'],
144+
featureFlags: ['dark-mode', 'beta-features'],
144145
user: {
145146
object: 'user',
146147
id: 'user_01H5JQDV7R7ATEYZDEG0W5PRYS',

src/user-management/session.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ export class Session {
9797
role,
9898
permissions,
9999
entitlements,
100+
feature_flags: featureFlags,
100101
} = decodeJwt<AccessToken>(session.accessToken);
101102

102103
return {
@@ -106,6 +107,7 @@ export class Session {
106107
role,
107108
permissions,
108109
entitlements,
110+
featureFlags,
109111
user: session.user,
110112
impersonator: session.impersonator,
111113
accessToken: session.accessToken,
@@ -169,6 +171,7 @@ export class Session {
169171
role,
170172
permissions,
171173
entitlements,
174+
feature_flags: featureFlags,
172175
} = decodeJwt<AccessToken>(authenticationResponse.accessToken);
173176

174177
// TODO: Returning `session` here means there's some duplicated data.
@@ -182,6 +185,7 @@ export class Session {
182185
role,
183186
permissions,
184187
entitlements,
188+
featureFlags,
185189
user: session.user,
186190
impersonator: session.impersonator,
187191
};

src/user-management/user-management.spec.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ describe('UserManagement', () => {
894894

895895
const cookiePassword = 'alongcookiesecretmadefortestingsessions';
896896
const accessToken =
897-
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJpbXBlcnNvbmF0b3IiOnsiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJlYXNvbiI6InRlc3QifSwic2lkIjoic2Vzc2lvbl8xMjMiLCJvcmdfaWQiOiJvcmdfMTIzIiwicm9sZSI6Im1lbWJlciIsInBlcm1pc3Npb25zIjpbInBvc3RzOmNyZWF0ZSIsInBvc3RzOmRlbGV0ZSJdLCJlbnRpdGxlbWVudHMiOlsiYXVkaXQtbG9ncyJdLCJ1c2VyIjp7Im9iamVjdCI6InVzZXIiLCJpZCI6InVzZXJfMDFINUpRRFY3UjdBVEVZWkRFRzBXNVBSWVMiLCJlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20ifX0.A8mDST4wtq_0vId6ALg7k2Ukr7FXrszZtdJ_6dfXeAc';
897+
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoZW50aWNhdGVkIjp0cnVlLCJpbXBlcnNvbmF0b3IiOnsiZW1haWwiOiJhZG1pbkBleGFtcGxlLmNvbSIsInJlYXNvbiI6InRlc3QifSwic2lkIjoic2Vzc2lvbl8xMjMiLCJvcmdfaWQiOiJvcmdfMTIzIiwicm9sZSI6Im1lbWJlciIsInBlcm1pc3Npb25zIjpbInBvc3RzOmNyZWF0ZSIsInBvc3RzOmRlbGV0ZSJdLCJlbnRpdGxlbWVudHMiOlsiYXVkaXQtbG9ncyJdLCJmZWF0dXJlX2ZsYWdzIjpbImRhcmstbW9kZSIsImJldGEtZmVhdHVyZXMiXSwidXNlciI6eyJvYmplY3QiOiJ1c2VyIiwiaWQiOiJ1c2VyXzAxSDVKUURWN1I3QVRFWVpERUcwVzVQUllTIiwiZW1haWwiOiJ0ZXN0QGV4YW1wbGUuY29tIn19.YVNjR8S2xGn2jAoLuEcBQNJ1_xY3OzjRE1-BK0zjfQE';
898898

899899
const sessionData = await sealData(
900900
{
@@ -921,6 +921,7 @@ describe('UserManagement', () => {
921921
role: 'member',
922922
permissions: ['posts:create', 'posts:delete'],
923923
entitlements: ['audit-logs'],
924+
featureFlags: ['dark-mode', 'beta-features'],
924925
user: expect.objectContaining({
925926
926927
}),

src/user-management/user-management.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,7 @@ export class UserManagement {
455455
role,
456456
permissions,
457457
entitlements,
458+
feature_flags: featureFlags,
458459
} = decodeJwt<AccessToken>(session.accessToken);
459460

460461
return {
@@ -465,6 +466,7 @@ export class UserManagement {
465466
user: session.user,
466467
permissions,
467468
entitlements,
469+
featureFlags,
468470
accessToken: session.accessToken,
469471
};
470472
}

0 commit comments

Comments
 (0)