@forgerock/oidc-client 1.2.0 → 2.0.0

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.
Files changed (92) hide show
  1. package/README.md +294 -2
  2. package/dist/src/index.d.ts +1 -1
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +8 -1
  5. package/dist/src/index.js.map +1 -0
  6. package/dist/src/lib/authorize.request.d.ts +18 -0
  7. package/dist/src/lib/authorize.request.d.ts.map +1 -0
  8. package/dist/src/lib/authorize.request.js +125 -0
  9. package/dist/src/lib/authorize.request.js.map +1 -0
  10. package/dist/src/lib/authorize.request.types.d.ts +50 -0
  11. package/dist/src/lib/authorize.request.types.d.ts.map +1 -0
  12. package/dist/src/lib/authorize.request.types.js +2 -0
  13. package/dist/src/lib/authorize.request.types.js.map +1 -0
  14. package/dist/src/lib/authorize.request.utils.d.ts +35 -0
  15. package/dist/src/lib/authorize.request.utils.d.ts.map +1 -0
  16. package/dist/src/lib/authorize.request.utils.js +101 -0
  17. package/dist/src/lib/authorize.request.utils.js.map +1 -0
  18. package/dist/src/lib/authorize.slice.d.ts +5 -0
  19. package/dist/src/lib/authorize.slice.d.ts.map +1 -0
  20. package/dist/src/lib/authorize.slice.js +27 -0
  21. package/dist/src/lib/authorize.slice.js.map +1 -0
  22. package/dist/src/lib/client.store.d.ts +115 -0
  23. package/dist/src/lib/client.store.d.ts.map +1 -0
  24. package/dist/src/lib/client.store.js +435 -0
  25. package/dist/src/lib/client.store.js.map +1 -0
  26. package/dist/src/lib/client.store.utils.d.ts +104 -0
  27. package/dist/src/lib/client.store.utils.d.ts.map +1 -0
  28. package/dist/src/lib/client.store.utils.js +92 -0
  29. package/dist/src/lib/client.store.utils.js.map +1 -0
  30. package/dist/src/lib/client.types.d.ts +37 -0
  31. package/dist/src/lib/client.types.d.ts.map +1 -0
  32. package/dist/src/lib/client.types.js +2 -0
  33. package/dist/src/lib/client.types.js.map +1 -0
  34. package/dist/src/lib/config.types.d.ts +19 -0
  35. package/dist/src/lib/config.types.d.ts.map +1 -0
  36. package/dist/src/lib/config.types.js +2 -0
  37. package/dist/src/lib/config.types.js.map +1 -0
  38. package/dist/src/lib/exchange.request.d.ts +18 -0
  39. package/dist/src/lib/exchange.request.d.ts.map +1 -0
  40. package/dist/src/lib/exchange.request.js +22 -0
  41. package/dist/src/lib/exchange.request.js.map +1 -0
  42. package/dist/src/lib/exchange.types.d.ts +21 -0
  43. package/dist/src/lib/exchange.types.d.ts.map +1 -0
  44. package/dist/src/lib/exchange.types.js +2 -0
  45. package/dist/src/lib/exchange.types.js.map +1 -0
  46. package/dist/src/lib/exchange.utils.d.ts +28 -0
  47. package/dist/src/lib/exchange.utils.d.ts.map +1 -0
  48. package/dist/src/lib/exchange.utils.js +55 -0
  49. package/dist/src/lib/exchange.utils.js.map +1 -0
  50. package/dist/src/lib/logout.request.d.ts +13 -0
  51. package/dist/src/lib/logout.request.d.ts.map +1 -0
  52. package/dist/src/lib/logout.request.js +47 -0
  53. package/dist/src/lib/logout.request.js.map +1 -0
  54. package/dist/src/lib/oidc.api.d.ts +33 -0
  55. package/dist/src/lib/oidc.api.d.ts.map +1 -0
  56. package/dist/src/lib/oidc.api.js +295 -0
  57. package/dist/src/lib/oidc.api.js.map +1 -0
  58. package/dist/src/lib/oidc.api.utils.d.ts +3 -0
  59. package/dist/src/lib/oidc.api.utils.d.ts.map +1 -0
  60. package/dist/src/lib/oidc.api.utils.js +9 -0
  61. package/dist/src/lib/oidc.api.utils.js.map +1 -0
  62. package/dist/src/lib/token.utils.d.ts +2 -0
  63. package/dist/src/lib/token.utils.d.ts.map +1 -0
  64. package/dist/src/lib/token.utils.js +15 -0
  65. package/dist/src/lib/token.utils.js.map +1 -0
  66. package/dist/src/lib/wellknown.api.d.ts +236 -0
  67. package/dist/src/lib/wellknown.api.d.ts.map +1 -0
  68. package/dist/src/lib/wellknown.api.js +55 -0
  69. package/dist/src/lib/wellknown.api.js.map +1 -0
  70. package/dist/src/types.d.ts +9 -0
  71. package/dist/src/types.d.ts.map +1 -0
  72. package/dist/src/types.js +10 -0
  73. package/dist/src/types.js.map +1 -0
  74. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  75. package/package.json +35 -10
  76. package/CHANGELOG.md +0 -11
  77. package/dist/src/lib/token-store.d.ts +0 -12
  78. package/dist/src/lib/token-store.d.ts.map +0 -1
  79. package/dist/src/lib/token-store.js +0 -9
  80. package/dist/src/lib/token-store.test-d.d.ts +0 -2
  81. package/dist/src/lib/token-store.test-d.d.ts.map +0 -1
  82. package/dist/src/lib/token-store.test-d.js +0 -43
  83. package/eslint.config.mjs +0 -22
  84. package/src/index.ts +0 -1
  85. package/src/lib/token-store.test-d.ts +0 -52
  86. package/src/lib/token-store.test.ts +0 -38
  87. package/src/lib/token-store.ts +0 -10
  88. package/tsconfig.json +0 -22
  89. package/tsconfig.lib.json +0 -40
  90. package/tsconfig.spec.json +0 -41
  91. package/typedoc.json +0 -4
  92. package/vite.config.ts +0 -23
@@ -0,0 +1,295 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+ import { createApi, fetchBaseQuery, } from '@reduxjs/toolkit/query';
8
+ import { transformError } from './oidc.api.utils.js';
9
+ import { iFrameManager } from '@forgerock/iframe-manager';
10
+ import { initQuery, } from '@forgerock/sdk-request-middleware';
11
+ export const oidcApi = createApi({
12
+ reducerPath: 'oidc',
13
+ baseQuery: fetchBaseQuery(),
14
+ endpoints: (builder) => ({
15
+ authorizeFetch: builder.mutation({
16
+ queryFn: async ({ url }, api, _, baseQuery) => {
17
+ const { requestMiddleware, logger } = api.extra;
18
+ const request = {
19
+ url,
20
+ method: 'POST',
21
+ credentials: 'include',
22
+ headers: {
23
+ Accept: 'application/json',
24
+ },
25
+ };
26
+ logger.debug('OIDC authorize API request', request);
27
+ const response = await initQuery(request, 'authorize')
28
+ .applyMiddleware(requestMiddleware)
29
+ .applyQuery(async (req) => await baseQuery(req));
30
+ if (response.error) {
31
+ const responseError = response.error;
32
+ // If the details field is present in data, use it to create a more specific error response
33
+ if (responseError.data &&
34
+ typeof responseError.data === 'object' &&
35
+ 'details' in responseError.data &&
36
+ Array.isArray(responseError.data.details)) {
37
+ logger.debug('Error in authorize response', responseError);
38
+ const details = responseError.data.details[0];
39
+ response.error = {
40
+ status: responseError.status,
41
+ statusText: 'AUTHORIZE_ERROR',
42
+ data: {
43
+ error: details.code,
44
+ error_description: details.message,
45
+ type: 'auth_error',
46
+ },
47
+ };
48
+ return response;
49
+ }
50
+ logger.error('Error in OAuth configuration', responseError);
51
+ // Since this is likely a configuration issue, avoid providing a redirect URL
52
+ response.error = {
53
+ status: responseError.status,
54
+ statusText: 'CONFIGURATION_ERROR',
55
+ data: {
56
+ error: 'CONFIGURATION_ERROR',
57
+ error_description: 'Configuration error. Please check your OAuth configuration, like clientId or allowed redirect URLs.',
58
+ type: 'network_error',
59
+ },
60
+ };
61
+ return response;
62
+ }
63
+ logger.debug('OIDC Authorize fetch API response', response);
64
+ return response;
65
+ },
66
+ }),
67
+ authorizeIframe: builder.mutation({
68
+ queryFn: async ({ url }, api) => {
69
+ const { requestMiddleware, logger } = api.extra;
70
+ const request = {
71
+ url,
72
+ method: 'POST',
73
+ credentials: 'include',
74
+ headers: {
75
+ Accept: 'application/json',
76
+ },
77
+ };
78
+ logger.debug('OIDC authorize API request', request);
79
+ const response = await initQuery(request, 'authorize')
80
+ .applyMiddleware(requestMiddleware)
81
+ .applyQuery(async (req) => {
82
+ try {
83
+ const res = await iFrameManager().getParamsByRedirect({
84
+ url: req.url,
85
+ /***
86
+ * https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2
87
+ * The client MUST ignore unrecognized response parameters.
88
+ */
89
+ successParams: ['code', 'state'],
90
+ errorParams: ['error', 'error_description'],
91
+ timeout: req.timeout || 3000,
92
+ });
93
+ return { data: res };
94
+ }
95
+ catch (error) {
96
+ return {
97
+ error: {
98
+ status: 400,
99
+ message: 'Unknown error occurred calling authorize endpoint',
100
+ data: error,
101
+ },
102
+ };
103
+ }
104
+ });
105
+ if ('error' in response) {
106
+ logger.error('Received authorization code', response);
107
+ return {
108
+ error: {
109
+ status: 400,
110
+ statusText: 'CONFIGURATION_ERROR',
111
+ data: {
112
+ error: 'CONFIGURATION_ERROR',
113
+ error_description: 'Configuration error. Please check your OAuth configuration, like clientId or allowed redirect URLs.',
114
+ type: 'network_error',
115
+ },
116
+ },
117
+ };
118
+ }
119
+ const data = response.data;
120
+ // TODO: Consider refactoring iframe manager to reject when an error occurs
121
+ if ('error' in data) {
122
+ logger.debug('Error in authorize response', response);
123
+ return {
124
+ error: {
125
+ status: 400,
126
+ statusText: 'AUTHORIZE_ERROR',
127
+ data: {
128
+ error: data.error || 'Unknown_Error',
129
+ error_description: data.error_description || 'An unknown error occurred during authorization',
130
+ type: 'auth_error',
131
+ },
132
+ },
133
+ };
134
+ }
135
+ return { data: response.data };
136
+ },
137
+ }),
138
+ endSession: builder.mutation({
139
+ queryFn: async ({ idToken, endpoint }, api, _, baseQuery) => {
140
+ const { requestMiddleware, logger } = api.extra;
141
+ const url = new URL(endpoint);
142
+ url.searchParams.append('id_token_hint', idToken);
143
+ const request = {
144
+ url: url.toString(),
145
+ method: 'GET',
146
+ credentials: 'include',
147
+ headers: {
148
+ Accept: 'application/json',
149
+ },
150
+ };
151
+ logger.debug('OIDC endSession API request', request);
152
+ const response = await initQuery(request, 'endSession')
153
+ .applyMiddleware(requestMiddleware)
154
+ .applyQuery(async (req) => await baseQuery(req));
155
+ if (response.error) {
156
+ let message = 'An error occurred while trying to end the session';
157
+ if (response.error.status === 400) {
158
+ message = 'Bad request to end session endpoint';
159
+ }
160
+ else if (response.error.status === 401) {
161
+ message = 'Unauthorized request to end session endpoint';
162
+ }
163
+ else if (response.error.status === 403) {
164
+ message = 'Forbidden request to end session endpoint';
165
+ }
166
+ logger.error('End Session API error', message);
167
+ response.error.data = transformError('End Session Error', message, response.error.status);
168
+ return response;
169
+ }
170
+ logger.debug('OIDC endSession API response', response);
171
+ return response;
172
+ },
173
+ }),
174
+ exchange: builder.mutation({
175
+ queryFn: async ({ code, config, endpoint, verifier }, api, _, baseQuery) => {
176
+ const { requestMiddleware, logger } = api.extra;
177
+ const { clientId, redirectUri } = config;
178
+ const body = new URLSearchParams({
179
+ grant_type: 'authorization_code',
180
+ code,
181
+ client_id: clientId,
182
+ redirect_uri: redirectUri,
183
+ });
184
+ if (verifier) {
185
+ body.append('code_verifier', verifier);
186
+ }
187
+ const request = {
188
+ url: endpoint,
189
+ method: 'POST',
190
+ headers: {
191
+ Accept: 'application/json',
192
+ 'Content-Type': 'application/x-www-form-urlencoded',
193
+ },
194
+ body,
195
+ };
196
+ logger.debug('OIDC tokenExchange API request', request);
197
+ const response = await initQuery(request, 'tokenExchange')
198
+ .applyMiddleware(requestMiddleware)
199
+ .applyQuery(async (req) => await baseQuery(req));
200
+ if (response.error) {
201
+ let message = 'An error occurred while exchanging the authorization code';
202
+ if (response.error.status === 400) {
203
+ message = 'Bad request to token exchange endpoint';
204
+ }
205
+ else if (response.error.status === 401) {
206
+ message = 'Unauthorized request to token exchange endpoint';
207
+ }
208
+ else if (response.error.status === 403) {
209
+ message = 'Forbidden request to token exchange endpoint';
210
+ }
211
+ logger.error('Token Exchange API error', message);
212
+ response.error.data = transformError('Token Exchange Error', message, response.error.status);
213
+ return response;
214
+ }
215
+ logger.debug('OIDC tokenExchange API response', response);
216
+ return response;
217
+ },
218
+ }),
219
+ revoke: builder.mutation({
220
+ queryFn: async ({ accessToken, clientId, endpoint }, api, _, baseQuery) => {
221
+ const { requestMiddleware, logger } = api.extra;
222
+ const body = new URLSearchParams({
223
+ ...(clientId ? { client_id: clientId } : {}),
224
+ token: accessToken,
225
+ });
226
+ const request = {
227
+ url: endpoint,
228
+ method: 'POST',
229
+ credentials: 'include',
230
+ headers: {
231
+ 'Content-Type': 'application/x-www-form-urlencoded',
232
+ },
233
+ body,
234
+ };
235
+ logger.debug('OIDC revoke API request', request);
236
+ const response = await initQuery(request, 'revoke')
237
+ .applyMiddleware(requestMiddleware)
238
+ .applyQuery(async (req) => await baseQuery(req));
239
+ if (response.error) {
240
+ let message = 'An error occurred while revoking the token';
241
+ if (response.error.status === 400) {
242
+ message = 'Bad request to revoke endpoint';
243
+ }
244
+ else if (response.error.status === 401) {
245
+ message = 'Unauthorized request to revoke endpoint';
246
+ }
247
+ else if (response.error.status === 403) {
248
+ message = 'Forbidden request to revoke endpoint';
249
+ }
250
+ logger.error('Token Revoke API error', message);
251
+ response.error.data = transformError('Token Revoke Error', message, response.error.status);
252
+ return response;
253
+ }
254
+ logger.debug('OIDC revoke API response', response);
255
+ return response;
256
+ },
257
+ }),
258
+ userInfo: builder.mutation({
259
+ queryFn: async ({ accessToken, endpoint }, api, _, baseQuery) => {
260
+ const { requestMiddleware, logger } = api.extra;
261
+ const request = {
262
+ url: endpoint,
263
+ method: 'GET',
264
+ credentials: 'include',
265
+ headers: {
266
+ Accept: 'application/json',
267
+ Authorization: `Bearer ${accessToken}`,
268
+ },
269
+ };
270
+ logger.debug('OIDC userInfo API request', request);
271
+ const response = await initQuery(request, 'userInfo')
272
+ .applyMiddleware(requestMiddleware)
273
+ .applyQuery(async (req) => await baseQuery(req));
274
+ let message = 'An error occurred while fetching user info';
275
+ if (response.error) {
276
+ if (response.error.status === 400) {
277
+ message = 'Bad request to user info endpoint';
278
+ }
279
+ else if (response.error.status === 401) {
280
+ message = 'Unauthorized request to user info endpoint';
281
+ }
282
+ else if (response.error.status === 403) {
283
+ message = 'Forbidden request to user info endpoint';
284
+ }
285
+ logger.error('User Info API error', message);
286
+ response.error.data = transformError('User Info Error', message, response.error.status);
287
+ return response;
288
+ }
289
+ logger.debug('OIDC userInfo API response', response);
290
+ return response;
291
+ },
292
+ }),
293
+ }),
294
+ });
295
+ //# sourceMappingURL=oidc.api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.api.js","sourceRoot":"","sources":["../../../src/lib/oidc.api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GenericError } from '@forgerock/sdk-types';
2
+ export declare function transformError(error: string, message: string, status: number | string): GenericError;
3
+ //# sourceMappingURL=oidc.api.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.api.utils.d.ts","sourceRoot":"","sources":["../../../src/lib/oidc.api.utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,YAAY,CAOd"}
@@ -0,0 +1,9 @@
1
+ export function transformError(error, message, status) {
2
+ return {
3
+ error,
4
+ message,
5
+ status,
6
+ type: 'network_error',
7
+ };
8
+ }
9
+ //# sourceMappingURL=oidc.api.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oidc.api.utils.js","sourceRoot":"","sources":["../../../src/lib/oidc.api.utils.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,OAAe,EACf,MAAuB;IAEvB,OAAO;QACL,KAAK;QACL,OAAO;QACP,MAAM;QACN,IAAI,EAAE,eAAe;KACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function isExpiryWithinThreshold(oauthThreshold?: number, tokenExpiry?: number): boolean;
2
+ //# sourceMappingURL=token.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.utils.d.ts","sourceRoot":"","sources":["../../../src/lib/token.utils.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ9F"}
@@ -0,0 +1,15 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+ export function isExpiryWithinThreshold(oauthThreshold, tokenExpiry) {
8
+ if (oauthThreshold && tokenExpiry) {
9
+ const expiryTimeMinusThreshold = tokenExpiry - oauthThreshold;
10
+ const result = expiryTimeMinusThreshold < Date.now();
11
+ return result;
12
+ }
13
+ return false;
14
+ }
15
+ //# sourceMappingURL=token.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.utils.js","sourceRoot":"","sources":["../../../src/lib/token.utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CAAC,cAAuB,EAAE,WAAoB;IACnF,IAAI,cAAc,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,wBAAwB,GAAG,WAAW,GAAG,cAAc,CAAC;QAC9D,MAAM,MAAM,GAAG,wBAAwB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAErD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,236 @@
1
+ import type { WellknownResponse } from '@forgerock/sdk-types';
2
+ import type { FetchBaseQueryError, FetchBaseQueryMeta } from '@reduxjs/toolkit/query';
3
+ import type { RootState } from './client.types.js';
4
+ /**
5
+ * RTK Query API for well-known endpoint discovery.
6
+ *
7
+ * Uses the `initWellknownQuery` builder pattern from `@forgerock/sdk-oidc`.
8
+ * The builder constructs the request and validates the response;
9
+ * `fetchBaseQuery` handles the HTTP transport through RTK Query's pipeline.
10
+ */
11
+ export declare const wellknownApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, {
12
+ configuration: import("@reduxjs/toolkit/query").QueryDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, never, WellknownResponse, "wellknown", unknown>;
13
+ }, "wellknown", never, typeof import("@reduxjs/toolkit/query").coreModuleName>;
14
+ /**
15
+ * Creates a memoized selector for cached well-known data.
16
+ *
17
+ * @param wellknownUrl - The well-known endpoint URL used as the cache key
18
+ * @returns A memoized selector that extracts the WellknownResponse from state, or undefined if not yet fetched
19
+ */
20
+ export declare function createWellknownSelector(wellknownUrl: string): ((state: import("@reduxjs/toolkit/query").RootState<{
21
+ configuration: import("@reduxjs/toolkit/query").QueryDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, never, WellknownResponse, "wellknown", unknown>;
22
+ }, never, "wellknown">) => WellknownResponse | undefined) & {
23
+ clearCache: () => void;
24
+ resultsCount: () => number;
25
+ resetResultsCount: () => void;
26
+ } & {
27
+ resultFunc: (resultFuncArgs_0: ({
28
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
29
+ originalArgs?: undefined | undefined;
30
+ data?: undefined | undefined;
31
+ error?: undefined | undefined;
32
+ requestId?: undefined | undefined;
33
+ endpointName?: string | undefined;
34
+ startedTimeStamp?: undefined | undefined;
35
+ fulfilledTimeStamp?: undefined | undefined;
36
+ } & {
37
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
38
+ isUninitialized: true;
39
+ isLoading: false;
40
+ isSuccess: false;
41
+ isError: false;
42
+ }) | ({
43
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
44
+ error: undefined;
45
+ originalArgs: string;
46
+ requestId: string;
47
+ endpointName: string;
48
+ startedTimeStamp: number;
49
+ data: WellknownResponse;
50
+ fulfilledTimeStamp: number;
51
+ } & {
52
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
53
+ isUninitialized: false;
54
+ isLoading: false;
55
+ isSuccess: true;
56
+ isError: false;
57
+ }) | ({
58
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
59
+ originalArgs: string;
60
+ requestId: string;
61
+ data?: WellknownResponse | undefined;
62
+ error?: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError | undefined;
63
+ endpointName: string;
64
+ startedTimeStamp: number;
65
+ fulfilledTimeStamp?: number | undefined;
66
+ } & {
67
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
68
+ isUninitialized: false;
69
+ isLoading: true;
70
+ isSuccess: false;
71
+ isError: false;
72
+ }) | ({
73
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
74
+ data?: WellknownResponse | undefined;
75
+ fulfilledTimeStamp?: number | undefined;
76
+ originalArgs: string;
77
+ requestId: string;
78
+ endpointName: string;
79
+ startedTimeStamp: number;
80
+ error: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError;
81
+ } & {
82
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
83
+ isUninitialized: false;
84
+ isLoading: false;
85
+ isSuccess: false;
86
+ isError: true;
87
+ })) => WellknownResponse | undefined;
88
+ memoizedResultFunc: ((resultFuncArgs_0: ({
89
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
90
+ originalArgs?: undefined | undefined;
91
+ data?: undefined | undefined;
92
+ error?: undefined | undefined;
93
+ requestId?: undefined | undefined;
94
+ endpointName?: string | undefined;
95
+ startedTimeStamp?: undefined | undefined;
96
+ fulfilledTimeStamp?: undefined | undefined;
97
+ } & {
98
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
99
+ isUninitialized: true;
100
+ isLoading: false;
101
+ isSuccess: false;
102
+ isError: false;
103
+ }) | ({
104
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
105
+ error: undefined;
106
+ originalArgs: string;
107
+ requestId: string;
108
+ endpointName: string;
109
+ startedTimeStamp: number;
110
+ data: WellknownResponse;
111
+ fulfilledTimeStamp: number;
112
+ } & {
113
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
114
+ isUninitialized: false;
115
+ isLoading: false;
116
+ isSuccess: true;
117
+ isError: false;
118
+ }) | ({
119
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
120
+ originalArgs: string;
121
+ requestId: string;
122
+ data?: WellknownResponse | undefined;
123
+ error?: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError | undefined;
124
+ endpointName: string;
125
+ startedTimeStamp: number;
126
+ fulfilledTimeStamp?: number | undefined;
127
+ } & {
128
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
129
+ isUninitialized: false;
130
+ isLoading: true;
131
+ isSuccess: false;
132
+ isError: false;
133
+ }) | ({
134
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
135
+ data?: WellknownResponse | undefined;
136
+ fulfilledTimeStamp?: number | undefined;
137
+ originalArgs: string;
138
+ requestId: string;
139
+ endpointName: string;
140
+ startedTimeStamp: number;
141
+ error: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError;
142
+ } & {
143
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
144
+ isUninitialized: false;
145
+ isLoading: false;
146
+ isSuccess: false;
147
+ isError: true;
148
+ })) => WellknownResponse | undefined) & {
149
+ clearCache: () => void;
150
+ resultsCount: () => number;
151
+ resetResultsCount: () => void;
152
+ };
153
+ lastResult: () => WellknownResponse | undefined;
154
+ dependencies: [(state: import("@reduxjs/toolkit/query").RootState<{
155
+ configuration: import("@reduxjs/toolkit/query").QueryDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, FetchBaseQueryError, {}, FetchBaseQueryMeta>, never, WellknownResponse, "wellknown", unknown>;
156
+ }, never, "wellknown">) => ({
157
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
158
+ originalArgs?: undefined | undefined;
159
+ data?: undefined | undefined;
160
+ error?: undefined | undefined;
161
+ requestId?: undefined | undefined;
162
+ endpointName?: string | undefined;
163
+ startedTimeStamp?: undefined | undefined;
164
+ fulfilledTimeStamp?: undefined | undefined;
165
+ } & {
166
+ status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
167
+ isUninitialized: true;
168
+ isLoading: false;
169
+ isSuccess: false;
170
+ isError: false;
171
+ }) | ({
172
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
173
+ error: undefined;
174
+ originalArgs: string;
175
+ requestId: string;
176
+ endpointName: string;
177
+ startedTimeStamp: number;
178
+ data: WellknownResponse;
179
+ fulfilledTimeStamp: number;
180
+ } & {
181
+ status: import("@reduxjs/toolkit/query").QueryStatus.fulfilled;
182
+ isUninitialized: false;
183
+ isLoading: false;
184
+ isSuccess: true;
185
+ isError: false;
186
+ }) | ({
187
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
188
+ originalArgs: string;
189
+ requestId: string;
190
+ data?: WellknownResponse | undefined;
191
+ error?: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError | undefined;
192
+ endpointName: string;
193
+ startedTimeStamp: number;
194
+ fulfilledTimeStamp?: number | undefined;
195
+ } & {
196
+ status: import("@reduxjs/toolkit/query").QueryStatus.pending;
197
+ isUninitialized: false;
198
+ isLoading: true;
199
+ isSuccess: false;
200
+ isError: false;
201
+ }) | ({
202
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
203
+ data?: WellknownResponse | undefined;
204
+ fulfilledTimeStamp?: number | undefined;
205
+ originalArgs: string;
206
+ requestId: string;
207
+ endpointName: string;
208
+ startedTimeStamp: number;
209
+ error: FetchBaseQueryError | import("@reduxjs/toolkit").SerializedError;
210
+ } & {
211
+ status: import("@reduxjs/toolkit/query").QueryStatus.rejected;
212
+ isUninitialized: false;
213
+ isLoading: false;
214
+ isSuccess: false;
215
+ isError: true;
216
+ })];
217
+ recomputations: () => number;
218
+ resetRecomputations: () => void;
219
+ dependencyRecomputations: () => number;
220
+ resetDependencyRecomputations: () => void;
221
+ } & {
222
+ argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
223
+ memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
224
+ };
225
+ /**
226
+ * Convenience selector for oidc-client's RootState type.
227
+ *
228
+ * Unlike {@link createWellknownSelector}, this immediately evaluates the
229
+ * selector against the provided state rather than returning a reusable selector.
230
+ *
231
+ * @param wellknownUrl - The well-known endpoint URL used as the cache key
232
+ * @param state - The oidc-client Redux root state
233
+ * @returns The cached WellknownResponse or undefined if not yet fetched
234
+ */
235
+ export declare function wellknownSelector(wellknownUrl: string, state: RootState): WellknownResponse | undefined;
236
+ //# sourceMappingURL=wellknown.api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wellknown.api.d.ts","sourceRoot":"","sources":["../../../src/lib/wellknown.api.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY;;8EAkBvB,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAK3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,iCAMvE"}
@@ -0,0 +1,55 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+ import { createSelector } from '@reduxjs/toolkit';
8
+ import { createApi, fetchBaseQuery } from '@reduxjs/toolkit/query';
9
+ import { initWellknownQuery } from '@forgerock/sdk-oidc';
10
+ /**
11
+ * RTK Query API for well-known endpoint discovery.
12
+ *
13
+ * Uses the `initWellknownQuery` builder pattern from `@forgerock/sdk-oidc`.
14
+ * The builder constructs the request and validates the response;
15
+ * `fetchBaseQuery` handles the HTTP transport through RTK Query's pipeline.
16
+ */
17
+ export const wellknownApi = createApi({
18
+ reducerPath: 'wellknown',
19
+ baseQuery: fetchBaseQuery(),
20
+ endpoints: (builder) => ({
21
+ configuration: builder.query({
22
+ queryFn: async (url, _api, _extra, baseQuery) => {
23
+ const result = await initWellknownQuery(url).applyQuery(async (req) => {
24
+ const queryResult = await baseQuery(req);
25
+ return queryResult;
26
+ });
27
+ return result;
28
+ },
29
+ }),
30
+ }),
31
+ });
32
+ /**
33
+ * Creates a memoized selector for cached well-known data.
34
+ *
35
+ * @param wellknownUrl - The well-known endpoint URL used as the cache key
36
+ * @returns A memoized selector that extracts the WellknownResponse from state, or undefined if not yet fetched
37
+ */
38
+ export function createWellknownSelector(wellknownUrl) {
39
+ return createSelector(wellknownApi.endpoints.configuration.select(wellknownUrl), (result) => result?.data);
40
+ }
41
+ /**
42
+ * Convenience selector for oidc-client's RootState type.
43
+ *
44
+ * Unlike {@link createWellknownSelector}, this immediately evaluates the
45
+ * selector against the provided state rather than returning a reusable selector.
46
+ *
47
+ * @param wellknownUrl - The well-known endpoint URL used as the cache key
48
+ * @param state - The oidc-client Redux root state
49
+ * @returns The cached WellknownResponse or undefined if not yet fetched
50
+ */
51
+ export function wellknownSelector(wellknownUrl, state) {
52
+ const selector = createSelector(wellknownApi.endpoints.configuration.select(wellknownUrl), (result) => result?.data);
53
+ return selector(state);
54
+ }
55
+ //# sourceMappingURL=wellknown.api.js.map