Skip to content

Commit 226f03f

Browse files
authored
Merge pull request #417 from ForgeRock/SDKS-4361-storage-client-type
SDKS-4361: Improve storage client type
2 parents 96c7d4a + 93595d2 commit 226f03f

9 files changed

Lines changed: 198 additions & 139 deletions

File tree

.changeset/slow-teeth-melt.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@forgerock/storage': minor
3+
'@forgerock/oidc-client': minor
4+
---
5+
6+
- Standardizes return types on storage client and updates tests
7+
- Improves OIDC client where storage client methods are used

packages/oidc-client/src/lib/client.store.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import { oidc } from './client.store.js';
1313

1414
import type { OidcConfig } from './config.types.js';
1515

16+
Object.defineProperty(global, 'localStorage', { value: null });
17+
1618
vi.stubGlobal(
1719
'sessionStorage',
1820
(() => {

packages/oidc-client/src/lib/client.store.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -372,14 +372,10 @@ export async function oidc<ActionType extends ActionTypes = ActionTypes>({
372372
// Delete local token and return combined results
373373
Micro.flatMap((revokeResponse) =>
374374
Micro.promise(() => storageClient.remove()).pipe(
375-
Micro.flatMap((deleteRes) => {
376-
const deleteResponse = typeof deleteRes === 'undefined' ? null : deleteRes;
377-
375+
Micro.flatMap((deleteResponse) => {
378376
const isInnerRequestError =
379377
(revokeResponse && 'error' in revokeResponse) ||
380-
(deleteResponse &&
381-
typeof deleteResponse === 'object' &&
382-
'error' in deleteResponse);
378+
(deleteResponse && 'error' in deleteResponse);
383379

384380
if (isInnerRequestError) {
385381
const result: RevokeErrorResult = {

packages/oidc-client/src/lib/client.types.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,25 @@ export interface GetTokensOptions {
99
}
1010

1111
export type RevokeSuccessResult = {
12-
revokeResponse: GenericError | null;
13-
deleteResponse: GenericError | null;
12+
revokeResponse: null;
13+
deleteResponse: null;
1414
};
1515

16-
export type RevokeErrorResult = RevokeSuccessResult & {
16+
export type RevokeErrorResult = {
1717
error: string;
18+
revokeResponse: GenericError | null;
19+
deleteResponse: GenericError | null;
1820
};
1921

2022
export type LogoutSuccessResult = RevokeSuccessResult & {
21-
sessionResponse: GenericError | null;
23+
sessionResponse: null;
2224
};
2325

24-
export type LogoutErrorResult = LogoutSuccessResult & {
26+
export type LogoutErrorResult = {
2527
error: string;
28+
sessionResponse: GenericError | null;
29+
revokeResponse: GenericError | null;
30+
deleteResponse: GenericError | null;
2631
};
2732

2833
export type UserInfoResponse = {

packages/oidc-client/src/lib/logout.request.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ const config: OidcConfig = {
6666
responseType: 'code',
6767
};
6868

69+
Object.defineProperty(global, 'sessionStorage', { value: null });
70+
Object.defineProperty(global, 'localStorage', { value: null });
71+
6972
const customStorage: Record<string, string> = {};
7073
const storageClient = createStorage<OauthTokens>({
7174
type: 'custom',

packages/oidc-client/src/lib/logout.request.ts

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@
77
import { Micro } from 'effect';
88
import { oidcApi } from './oidc.api.js';
99
import { createClientStore, createLogoutError } from './client.store.utils.js';
10-
import { OauthTokens, OidcConfig } from './config.types.js';
11-
import { WellKnownResponse } from '@forgerock/sdk-types';
12-
import { createStorage } from '@forgerock/storage';
13-
import { LogoutErrorResult, LogoutSuccessResult } from './client.types.js';
10+
import type { OauthTokens, OidcConfig } from './config.types.js';
11+
import type { WellKnownResponse } from '@forgerock/sdk-types';
12+
import type { StorageClient } from '@forgerock/storage';
13+
import type { LogoutErrorResult, LogoutSuccessResult } from './client.types.js';
1414

1515
export function logoutµ({
1616
tokens,
@@ -23,7 +23,7 @@ export function logoutµ({
2323
config: OidcConfig;
2424
wellknown: WellKnownResponse;
2525
store: ReturnType<typeof createClientStore>;
26-
storageClient: ReturnType<typeof createStorage<OauthTokens>>;
26+
storageClient: StorageClient<OauthTokens>;
2727
}) {
2828
return Micro.zip(
2929
// End session with the ID token
@@ -50,13 +50,11 @@ export function logoutµ({
5050
// Delete local token and return combined results
5151
Micro.flatMap(([sessionResponse, revokeResponse]) =>
5252
Micro.promise(() => storageClient.remove()).pipe(
53-
Micro.flatMap((deleteRes) => {
54-
const deleteResponse = typeof deleteRes === 'undefined' ? null : deleteRes;
55-
53+
Micro.flatMap((deleteResponse) => {
5654
const isInnerRequestError =
5755
(sessionResponse && 'error' in sessionResponse) ||
5856
(revokeResponse && 'error' in revokeResponse) ||
59-
(deleteResponse && typeof deleteResponse === 'object' && 'error' in deleteResponse);
57+
(deleteResponse && 'error' in deleteResponse);
6058

6159
if (isInnerRequestError) {
6260
const result: LogoutErrorResult = {

0 commit comments

Comments
 (0)