@forgerock/davinci-client 1.1.0 → 1.2.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.
- package/dist/src/lib/client.store.d.ts +43 -42
- package/dist/src/lib/client.store.d.ts.map +1 -1
- package/dist/src/lib/client.store.js +87 -82
- package/dist/src/lib/client.store.js.map +1 -1
- package/dist/src/lib/client.store.utils.d.ts +27 -14
- package/dist/src/lib/client.store.utils.d.ts.map +1 -1
- package/dist/src/lib/client.store.utils.js +15 -2
- package/dist/src/lib/client.store.utils.js.map +1 -1
- package/dist/src/lib/client.types.d.ts +3 -1
- package/dist/src/lib/client.types.d.ts.map +1 -1
- package/dist/src/lib/collector.types.d.ts +112 -7
- package/dist/src/lib/collector.types.d.ts.map +1 -1
- package/dist/src/lib/collector.types.js +0 -3
- package/dist/src/lib/collector.types.js.map +1 -1
- package/dist/src/lib/collector.utils.d.ts +36 -19
- package/dist/src/lib/collector.utils.d.ts.map +1 -1
- package/dist/src/lib/collector.utils.js +123 -9
- package/dist/src/lib/collector.utils.js.map +1 -1
- package/dist/src/lib/config.types.d.ts +3 -3
- package/dist/src/lib/config.types.d.ts.map +1 -1
- package/dist/src/lib/davinci.api.d.ts +6 -4
- package/dist/src/lib/davinci.api.d.ts.map +1 -1
- package/dist/src/lib/davinci.api.js +31 -18
- package/dist/src/lib/davinci.api.js.map +1 -1
- package/dist/src/lib/davinci.types.d.ts +46 -7
- package/dist/src/lib/davinci.types.d.ts.map +1 -1
- package/dist/src/lib/davinci.utils.d.ts +4 -7
- package/dist/src/lib/davinci.utils.d.ts.map +1 -1
- package/dist/src/lib/davinci.utils.js +14 -31
- package/dist/src/lib/davinci.utils.js.map +1 -1
- package/dist/src/lib/node.reducer.d.ts +4 -4
- package/dist/src/lib/node.reducer.d.ts.map +1 -1
- package/dist/src/lib/node.reducer.js +54 -4
- package/dist/src/lib/node.reducer.js.map +1 -1
- package/dist/src/lib/node.slice.d.ts +25 -7
- package/dist/src/lib/node.slice.d.ts.map +1 -1
- package/dist/src/lib/node.slice.js +40 -10
- package/dist/src/lib/node.slice.js.map +1 -1
- package/dist/src/lib/node.types.d.ts +3 -3
- package/dist/src/lib/node.types.d.ts.map +1 -1
- package/dist/src/lib/node.utils.d.ts +2 -2
- package/dist/src/lib/node.utils.d.ts.map +1 -1
- package/dist/src/lib/wellknown.api.d.ts +1 -1
- package/dist/src/types.d.ts +12 -3
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +1 -2
- package/dist/src/types.js.map +1 -1
- package/package.json +10 -20
- package/dist/src/lib/authorize.utils.d.ts +0 -22
- package/dist/src/lib/authorize.utils.d.ts.map +0 -1
- package/dist/src/lib/authorize.utils.js +0 -47
- package/dist/src/lib/authorize.utils.js.map +0 -1
- package/dist/src/lib/effects/request.effect.mock.d.ts +0 -4
- package/dist/src/lib/effects/request.effect.mock.d.ts.map +0 -1
- package/dist/src/lib/effects/request.effect.mock.js +0 -106
- package/dist/src/lib/effects/request.effect.mock.js.map +0 -1
- package/dist/src/lib/effects/request.effect.types.d.ts +0 -20
- package/dist/src/lib/effects/request.effect.types.d.ts.map +0 -1
- package/dist/src/lib/effects/request.effect.types.js +0 -2
- package/dist/src/lib/effects/request.effect.types.js.map +0 -1
- package/dist/src/lib/effects/request.effect.unions.d.ts +0 -12
- package/dist/src/lib/effects/request.effect.unions.d.ts.map +0 -1
- package/dist/src/lib/effects/request.effect.unions.js +0 -16
- package/dist/src/lib/effects/request.effect.unions.js.map +0 -1
- package/dist/src/lib/effects/request.effect.utils.d.ts +0 -27
- package/dist/src/lib/effects/request.effect.utils.d.ts.map +0 -1
- package/dist/src/lib/effects/request.effect.utils.js +0 -57
- package/dist/src/lib/effects/request.effect.utils.js.map +0 -1
|
@@ -1,11 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import RTK slices and api
|
|
3
|
+
*/
|
|
4
|
+
import { CustomLogger, LogLevel } from '@forgerock/sdk-logger';
|
|
5
|
+
import type { ActionTypes, RequestMiddleware } from '@forgerock/sdk-request-middleware';
|
|
1
6
|
/**
|
|
2
7
|
* Import the DaVinciRequest types
|
|
3
8
|
*/
|
|
4
9
|
import type { DaVinciConfig } from './config.types.js';
|
|
5
10
|
import type { DaVinciAction, DaVinciRequest, OutgoingQueryParams, StartOptions } from './davinci.types.js';
|
|
6
|
-
import type { SingleValueCollectors,
|
|
7
|
-
import type { InitFlow, Updater, Validator } from './client.types.js';
|
|
8
|
-
import
|
|
11
|
+
import type { SingleValueCollectors, MultiSelectCollector, ObjectValueCollectors } from './collector.types.js';
|
|
12
|
+
import type { InitFlow, InternalErrorResponse, NodeStates, Updater, Validator } from './client.types.js';
|
|
13
|
+
import { ContinueNode, StartNode } from './node.types.js';
|
|
9
14
|
/**
|
|
10
15
|
* Create a client function that returns a set of methods
|
|
11
16
|
* to interact with and normalize the DaVinci API.
|
|
@@ -14,9 +19,13 @@ import type { RequestMiddleware } from './effects/request.effect.types.js';
|
|
|
14
19
|
* @param {ConfigurationOptions} options - the configuration options for the client
|
|
15
20
|
* @returns {Observable} - an observable client for DaVinci flows
|
|
16
21
|
*/
|
|
17
|
-
export declare function davinci({ config, requestMiddleware, }: {
|
|
22
|
+
export declare function davinci<ActionType extends ActionTypes = ActionTypes>({ config, requestMiddleware, logger, }: {
|
|
18
23
|
config: DaVinciConfig;
|
|
19
|
-
requestMiddleware?: RequestMiddleware[];
|
|
24
|
+
requestMiddleware?: RequestMiddleware<ActionType>[];
|
|
25
|
+
logger?: {
|
|
26
|
+
level: LogLevel;
|
|
27
|
+
custom?: CustomLogger;
|
|
28
|
+
};
|
|
20
29
|
}): Promise<{
|
|
21
30
|
subscribe: (listener: () => void) => import("@reduxjs/toolkit").Unsubscribe;
|
|
22
31
|
/**
|
|
@@ -26,8 +35,8 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
26
35
|
* for the social login being started.
|
|
27
36
|
*
|
|
28
37
|
* This method will save the `continueUrl`
|
|
29
|
-
* and then
|
|
30
|
-
*
|
|
38
|
+
* and then the app developer can use the url
|
|
39
|
+
* from the collector to redirect their application
|
|
31
40
|
*
|
|
32
41
|
* Can return an error when no continue url is found
|
|
33
42
|
* or no authenticate url is found in the collectors
|
|
@@ -36,7 +45,7 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
36
45
|
* @param collector IdpCollector
|
|
37
46
|
* @returns {function}
|
|
38
47
|
*/
|
|
39
|
-
externalIdp: (
|
|
48
|
+
externalIdp: () => (() => Promise<void | InternalErrorResponse>);
|
|
40
49
|
/**
|
|
41
50
|
* @method flow - Method for initiating a new flow, different than current flow
|
|
42
51
|
* @param {DaVinciAction} action - the action to initiate the flow
|
|
@@ -48,35 +57,25 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
48
57
|
* @param {DaVinciRequest} args - the arguments to pass to the next
|
|
49
58
|
* @returns {Promise} - a promise that resolves to the next node
|
|
50
59
|
*/
|
|
51
|
-
next: (args?: DaVinciRequest) => Promise<
|
|
52
|
-
error: string;
|
|
53
|
-
cache: null;
|
|
54
|
-
client: {
|
|
55
|
-
status: "start";
|
|
56
|
-
};
|
|
57
|
-
server: {
|
|
58
|
-
status: "start";
|
|
59
|
-
};
|
|
60
|
-
status: "start";
|
|
61
|
-
}>;
|
|
60
|
+
next: (args?: DaVinciRequest) => Promise<NodeStates>;
|
|
62
61
|
/**
|
|
63
62
|
* @method: resume - Resume a social login flow when returned to application
|
|
64
63
|
* @returns unknown
|
|
65
64
|
*/
|
|
66
|
-
resume: ({ continueToken }: {
|
|
65
|
+
resume: ({ continueToken, }: {
|
|
67
66
|
continueToken: string;
|
|
68
|
-
}) => Promise<
|
|
67
|
+
}) => Promise<InternalErrorResponse | NodeStates>;
|
|
69
68
|
/**
|
|
70
69
|
* @method start - Method for initiating a DaVinci flow
|
|
71
70
|
* @returns {Promise} - a promise that initiates a DaVinci flow and returns a node
|
|
72
71
|
*/
|
|
73
|
-
start: <QueryParams extends OutgoingQueryParams = OutgoingQueryParams>(options?: StartOptions<QueryParams> | undefined) => Promise<
|
|
72
|
+
start: <QueryParams extends OutgoingQueryParams = OutgoingQueryParams>(options?: StartOptions<QueryParams> | undefined) => Promise<ContinueNode | import("./node.types.js").ErrorNode | import("./node.types.js").FailureNode | StartNode | import("./node.types.js").SuccessNode>;
|
|
74
73
|
/**
|
|
75
74
|
* @method update - Exclusive method for updating the current node with user provided values
|
|
76
75
|
* @param {SingleValueCollector} collector - the collector to update
|
|
77
76
|
* @returns {function} - a function to call for updating collector value
|
|
78
77
|
*/
|
|
79
|
-
update: (collector: SingleValueCollectors | MultiSelectCollector) => Updater;
|
|
78
|
+
update: (collector: SingleValueCollectors | MultiSelectCollector | ObjectValueCollectors) => Updater;
|
|
80
79
|
/**
|
|
81
80
|
* @method validate - Method for validating the value against validation rules
|
|
82
81
|
* @param {SingleValueCollector} collector - the collector to validate
|
|
@@ -122,7 +121,7 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
122
121
|
* @method node - Selector to get the node from state
|
|
123
122
|
* @returns {Node} - the current node from state
|
|
124
123
|
*/
|
|
125
|
-
getNode: () =>
|
|
124
|
+
getNode: () => ContinueNode | import("./node.types.js").ErrorNode | import("./node.types.js").FailureNode | StartNode | import("./node.types.js").SuccessNode;
|
|
126
125
|
/**
|
|
127
126
|
* @method server - Selector to get the node.server from state
|
|
128
127
|
* @returns {Node.server} - the server property from the current node
|
|
@@ -167,12 +166,13 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
167
166
|
*/
|
|
168
167
|
cache: {
|
|
169
168
|
getLatestResponse: () => ((state: import("@reduxjs/toolkit/query").RootState<{
|
|
170
|
-
flow: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
171
|
-
next: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
172
|
-
start: import("@reduxjs/toolkit/query").MutationDefinition<StartOptions<OutgoingQueryParams> | undefined, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
169
|
+
flow: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", any>;
|
|
170
|
+
next: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", any>;
|
|
171
|
+
start: import("@reduxjs/toolkit/query").MutationDefinition<StartOptions<OutgoingQueryParams> | undefined, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", unknown>;
|
|
173
172
|
resume: import("@reduxjs/toolkit/query").QueryDefinition<{
|
|
173
|
+
serverInfo: ContinueNode["server"];
|
|
174
174
|
continueToken: string;
|
|
175
|
-
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
175
|
+
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", unknown>;
|
|
176
176
|
}, never, "davinci">) => ({
|
|
177
177
|
requestId?: undefined;
|
|
178
178
|
status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
|
|
@@ -192,14 +192,14 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
192
192
|
} & Omit<{
|
|
193
193
|
requestId: string;
|
|
194
194
|
data?: unknown;
|
|
195
|
-
error?: import("@reduxjs/toolkit
|
|
195
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
196
196
|
endpointName: string;
|
|
197
197
|
startedTimeStamp: number;
|
|
198
198
|
fulfilledTimeStamp?: number;
|
|
199
199
|
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
|
|
200
200
|
requestId: string;
|
|
201
201
|
data?: unknown;
|
|
202
|
-
error?: import("@reduxjs/toolkit
|
|
202
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
203
203
|
endpointName: string;
|
|
204
204
|
startedTimeStamp: number;
|
|
205
205
|
fulfilledTimeStamp?: number;
|
|
@@ -216,7 +216,7 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
216
216
|
} & {
|
|
217
217
|
requestId: string;
|
|
218
218
|
data?: unknown;
|
|
219
|
-
error?: import("@reduxjs/toolkit
|
|
219
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
220
220
|
endpointName: string;
|
|
221
221
|
startedTimeStamp: number;
|
|
222
222
|
fulfilledTimeStamp?: number;
|
|
@@ -233,14 +233,14 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
233
233
|
} & Omit<{
|
|
234
234
|
requestId: string;
|
|
235
235
|
data?: unknown;
|
|
236
|
-
error?: import("@reduxjs/toolkit
|
|
236
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
237
237
|
endpointName: string;
|
|
238
238
|
startedTimeStamp: number;
|
|
239
239
|
fulfilledTimeStamp?: number;
|
|
240
240
|
}, "error"> & Required<Pick<{
|
|
241
241
|
requestId: string;
|
|
242
242
|
data?: unknown;
|
|
243
|
-
error?: import("@reduxjs/toolkit
|
|
243
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
244
244
|
endpointName: string;
|
|
245
245
|
startedTimeStamp: number;
|
|
246
246
|
fulfilledTimeStamp?: number;
|
|
@@ -257,12 +257,13 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
257
257
|
};
|
|
258
258
|
};
|
|
259
259
|
getResponseWithId: (requestId: string) => ((state: import("@reduxjs/toolkit/query").RootState<{
|
|
260
|
-
flow: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
261
|
-
next: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
262
|
-
start: import("@reduxjs/toolkit/query").MutationDefinition<StartOptions<OutgoingQueryParams> | undefined, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
260
|
+
flow: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", any>;
|
|
261
|
+
next: import("@reduxjs/toolkit/query").MutationDefinition<any, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", any>;
|
|
262
|
+
start: import("@reduxjs/toolkit/query").MutationDefinition<StartOptions<OutgoingQueryParams> | undefined, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", unknown>;
|
|
263
263
|
resume: import("@reduxjs/toolkit/query").QueryDefinition<{
|
|
264
|
+
serverInfo: ContinueNode["server"];
|
|
264
265
|
continueToken: string;
|
|
265
|
-
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci">;
|
|
266
|
+
}, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, unknown, "davinci", unknown>;
|
|
266
267
|
}, never, "davinci">) => ({
|
|
267
268
|
requestId?: undefined;
|
|
268
269
|
status: import("@reduxjs/toolkit/query").QueryStatus.uninitialized;
|
|
@@ -282,14 +283,14 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
282
283
|
} & Omit<{
|
|
283
284
|
requestId: string;
|
|
284
285
|
data?: unknown;
|
|
285
|
-
error?: import("@reduxjs/toolkit
|
|
286
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
286
287
|
endpointName: string;
|
|
287
288
|
startedTimeStamp: number;
|
|
288
289
|
fulfilledTimeStamp?: number;
|
|
289
290
|
}, "data" | "fulfilledTimeStamp"> & Required<Pick<{
|
|
290
291
|
requestId: string;
|
|
291
292
|
data?: unknown;
|
|
292
|
-
error?: import("@reduxjs/toolkit
|
|
293
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
293
294
|
endpointName: string;
|
|
294
295
|
startedTimeStamp: number;
|
|
295
296
|
fulfilledTimeStamp?: number;
|
|
@@ -306,7 +307,7 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
306
307
|
} & {
|
|
307
308
|
requestId: string;
|
|
308
309
|
data?: unknown;
|
|
309
|
-
error?: import("@reduxjs/toolkit
|
|
310
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
310
311
|
endpointName: string;
|
|
311
312
|
startedTimeStamp: number;
|
|
312
313
|
fulfilledTimeStamp?: number;
|
|
@@ -323,14 +324,14 @@ export declare function davinci({ config, requestMiddleware, }: {
|
|
|
323
324
|
} & Omit<{
|
|
324
325
|
requestId: string;
|
|
325
326
|
data?: unknown;
|
|
326
|
-
error?: import("@reduxjs/toolkit
|
|
327
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
327
328
|
endpointName: string;
|
|
328
329
|
startedTimeStamp: number;
|
|
329
330
|
fulfilledTimeStamp?: number;
|
|
330
331
|
}, "error"> & Required<Pick<{
|
|
331
332
|
requestId: string;
|
|
332
333
|
data?: unknown;
|
|
333
|
-
error?: import("@reduxjs/toolkit
|
|
334
|
+
error?: import("@reduxjs/toolkit").SerializedError | import("@reduxjs/toolkit/query").FetchBaseQueryError | undefined;
|
|
334
335
|
endpointName: string;
|
|
335
336
|
startedTimeStamp: number;
|
|
336
337
|
fulfilledTimeStamp?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.store.d.ts","sourceRoot":"","sources":["../../../src/lib/client.store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.store.d.ts","sourceRoot":"","sources":["../../../src/lib/client.store.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAsB,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AASnF,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACxF;;GAEG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,QAAQ,EACR,qBAAqB,EACrB,UAAU,EACV,OAAO,EACP,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAsB,OAAO,CAAC,UAAU,SAAS,WAAW,GAAG,WAAW,EAAE,EAC1E,MAAM,EACN,iBAAiB,EACjB,MAAM,GACP,EAAE;IACD,MAAM,EAAE,aAAa,CAAC;IACtB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC;IACpD,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,QAAQ,CAAC;QAChB,MAAM,CAAC,EAAE,YAAY,CAAC;KACvB,CAAC;CACH;;IAqCG;;;;;;;;;;;;;;;;OAgBG;uBACc,CAAC,MAAM,OAAO,CAAC,IAAI,GAAG,qBAAqB,CAAC,CAAC;IAoB9D;;;;OAIG;mBACY,aAAa,KAAG,QAAQ;IAkBvC;;;;OAIG;kBACiB,cAAc,KAAG,OAAO,CAAC,UAAU,CAAC;IAkBxD;;;OAGG;iCAGA;QACD,aAAa,EAAE,MAAM,CAAC;KACvB,KAAG,OAAO,CAAC,qBAAqB,GAAG,UAAU,CAAC;IAwB/C;;;OAGG;YACW,WAAW,SAAS,mBAAmB,kCACzC,YAAY,CAAC,WAAW,CAAC,GAAG,SAAS;IAMjD;;;;OAIG;wBAEU,qBAAqB,GAAG,oBAAoB,GAAG,qBAAqB,KAC9E,OAAO;IAkDV;;;;;OAKG;0BACmB,qBAAqB,KAAG,SAAS;IA0CvD;;;OAGG;;;;;;;;;;;;;;;;;;;gBArPwE,CAAC;iBACxE,CAAC;;;;IAuPL;;;OAGG;;;;IAgCH;;;OAGG;;IAKH;;;OAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAMH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uCAgB8B,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAc1C"}
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* Import RTK slices and api
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { logger as loggerFn } from '@forgerock/sdk-logger';
|
|
11
|
+
import { createStorage } from '@forgerock/storage';
|
|
12
|
+
import { createClientStore, handleUpdateValidateError } from './client.store.utils.js';
|
|
11
13
|
import { nodeSlice } from './node.slice.js';
|
|
12
14
|
import { davinciApi } from './davinci.api.js';
|
|
13
15
|
import { configSlice } from './config.slice.js';
|
|
14
16
|
import { wellknownApi } from './wellknown.api.js';
|
|
15
17
|
import { returnValidator } from './collector.utils.js';
|
|
16
|
-
import { authorize } from './davinci.utils.js';
|
|
17
18
|
/**
|
|
18
19
|
* Create a client function that returns a set of methods
|
|
19
20
|
* to interact with and normalize the DaVinci API.
|
|
@@ -22,17 +23,25 @@ import { authorize } from './davinci.utils.js';
|
|
|
22
23
|
* @param {ConfigurationOptions} options - the configuration options for the client
|
|
23
24
|
* @returns {Observable} - an observable client for DaVinci flows
|
|
24
25
|
*/
|
|
25
|
-
export async function davinci({ config, requestMiddleware, }) {
|
|
26
|
-
const
|
|
26
|
+
export async function davinci({ config, requestMiddleware, logger, }) {
|
|
27
|
+
const log = loggerFn({ level: logger?.level || 'error', custom: logger?.custom });
|
|
28
|
+
const store = createClientStore({ requestMiddleware, logger: log });
|
|
29
|
+
const serverInfo = createStorage({ storeType: 'localStorage' }, 'serverInfo');
|
|
27
30
|
if (!config.serverConfig.wellknown) {
|
|
28
|
-
|
|
31
|
+
const error = new Error('`wellknown` property is a required as part of the `config.serverConfig`');
|
|
32
|
+
log.error(error.message);
|
|
33
|
+
throw error;
|
|
29
34
|
}
|
|
30
35
|
if (!config.clientId) {
|
|
31
|
-
|
|
36
|
+
const error = new Error('`clientId` property is a required as part of the `config`');
|
|
37
|
+
log.error(error.message);
|
|
38
|
+
throw error;
|
|
32
39
|
}
|
|
33
40
|
const { data: openIdResponse } = await store.dispatch(wellknownApi.endpoints.wellknown.initiate(config.serverConfig.wellknown));
|
|
34
41
|
if (!openIdResponse) {
|
|
35
|
-
|
|
42
|
+
const error = new Error('error fetching `wellknown` response for OpenId Configuration');
|
|
43
|
+
log.error(error.message);
|
|
44
|
+
throw error;
|
|
36
45
|
}
|
|
37
46
|
store.dispatch(configSlice.actions.set({ ...config, wellknownResponse: openIdResponse }));
|
|
38
47
|
return {
|
|
@@ -45,8 +54,8 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
45
54
|
* for the social login being started.
|
|
46
55
|
*
|
|
47
56
|
* This method will save the `continueUrl`
|
|
48
|
-
* and then
|
|
49
|
-
*
|
|
57
|
+
* and then the app developer can use the url
|
|
58
|
+
* from the collector to redirect their application
|
|
50
59
|
*
|
|
51
60
|
* Can return an error when no continue url is found
|
|
52
61
|
* or no authenticate url is found in the collectors
|
|
@@ -55,10 +64,22 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
55
64
|
* @param collector IdpCollector
|
|
56
65
|
* @returns {function}
|
|
57
66
|
*/
|
|
58
|
-
externalIdp: (
|
|
67
|
+
externalIdp: () => {
|
|
59
68
|
const rootState = store.getState();
|
|
60
69
|
const serverSlice = nodeSlice.selectors.selectServer(rootState);
|
|
61
|
-
|
|
70
|
+
if (serverSlice && serverSlice.status === 'continue') {
|
|
71
|
+
return async () => {
|
|
72
|
+
await serverInfo.set(serverSlice);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return async () => {
|
|
76
|
+
return {
|
|
77
|
+
error: {
|
|
78
|
+
message: 'Not in a continue node state, must be in a continue node to use external idp method',
|
|
79
|
+
type: 'state_error',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
};
|
|
62
83
|
},
|
|
63
84
|
/**
|
|
64
85
|
* @method flow - Method for initiating a new flow, different than current flow
|
|
@@ -67,7 +88,7 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
67
88
|
*/
|
|
68
89
|
flow: (action) => {
|
|
69
90
|
if (!action.action) {
|
|
70
|
-
|
|
91
|
+
log.error('Missing `argument.action`');
|
|
71
92
|
return async function () {
|
|
72
93
|
return {
|
|
73
94
|
error: { message: 'Missing argument.action', type: 'argument_error' },
|
|
@@ -91,7 +112,11 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
91
112
|
if (nodeCheck.status === 'start') {
|
|
92
113
|
return {
|
|
93
114
|
...nodeCheck,
|
|
94
|
-
error:
|
|
115
|
+
error: {
|
|
116
|
+
status: 'error',
|
|
117
|
+
type: 'state_error',
|
|
118
|
+
message: 'Please use `start` before calling `next`',
|
|
119
|
+
},
|
|
95
120
|
};
|
|
96
121
|
}
|
|
97
122
|
await store.dispatch(davinciApi.endpoints.next.initiate(args));
|
|
@@ -102,10 +127,24 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
102
127
|
* @method: resume - Resume a social login flow when returned to application
|
|
103
128
|
* @returns unknown
|
|
104
129
|
*/
|
|
105
|
-
resume: async ({ continueToken }) => {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
130
|
+
resume: async ({ continueToken, }) => {
|
|
131
|
+
try {
|
|
132
|
+
const storedServerInfo = (await serverInfo.get());
|
|
133
|
+
await store.dispatch(davinciApi.endpoints.resume.initiate({ continueToken, serverInfo: storedServerInfo }));
|
|
134
|
+
await serverInfo.remove();
|
|
135
|
+
const node = nodeSlice.selectSlice(store.getState());
|
|
136
|
+
return node;
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// logger.error('No url found in collector, social login needs a url in the collector');
|
|
140
|
+
return {
|
|
141
|
+
error: {
|
|
142
|
+
message: 'No url found in storage, social login needs a continue url which is saved in local storage. You may have cleared your browser data',
|
|
143
|
+
type: 'internal_error',
|
|
144
|
+
},
|
|
145
|
+
type: 'internal_error',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
109
148
|
},
|
|
110
149
|
/**
|
|
111
150
|
* @method start - Method for initiating a DaVinci flow
|
|
@@ -122,41 +161,21 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
122
161
|
*/
|
|
123
162
|
update: (collector) => {
|
|
124
163
|
if (!collector.id) {
|
|
125
|
-
|
|
126
|
-
return function () {
|
|
127
|
-
return {
|
|
128
|
-
error: {
|
|
129
|
-
message: 'Argument for `collector` has no ID',
|
|
130
|
-
type: 'argument_error',
|
|
131
|
-
},
|
|
132
|
-
type: 'internal_error',
|
|
133
|
-
};
|
|
134
|
-
};
|
|
164
|
+
return handleUpdateValidateError('Argument for `collector` has no ID', 'argument_error', log.error);
|
|
135
165
|
}
|
|
136
166
|
const { id } = collector;
|
|
137
|
-
const collectorToUpdate = nodeSlice.selectors.selectCollector(store.getState(), id);
|
|
167
|
+
const { error, state: collectorToUpdate } = nodeSlice.selectors.selectCollector(store.getState(), id);
|
|
168
|
+
if (error) {
|
|
169
|
+
return handleUpdateValidateError(error.message, 'state_error', log.error);
|
|
170
|
+
}
|
|
138
171
|
if (!collectorToUpdate) {
|
|
139
|
-
return
|
|
140
|
-
console.error('Collector not found');
|
|
141
|
-
return {
|
|
142
|
-
type: 'internal_error',
|
|
143
|
-
error: { message: 'Collector not found', type: 'state_error' },
|
|
144
|
-
};
|
|
145
|
-
};
|
|
172
|
+
return handleUpdateValidateError('Collector not found', 'state_error', log.error);
|
|
146
173
|
}
|
|
147
174
|
if (collectorToUpdate.category !== 'MultiValueCollector' &&
|
|
148
175
|
collectorToUpdate.category !== 'SingleValueCollector' &&
|
|
149
|
-
collectorToUpdate.category !== 'ValidatedSingleValueCollector'
|
|
150
|
-
|
|
151
|
-
return
|
|
152
|
-
return {
|
|
153
|
-
type: 'internal_error',
|
|
154
|
-
error: {
|
|
155
|
-
message: 'Collector is not a SingleValueCollector or ValidatedSingleValueCollector and cannot be updated',
|
|
156
|
-
type: 'state_error',
|
|
157
|
-
},
|
|
158
|
-
};
|
|
159
|
-
};
|
|
176
|
+
collectorToUpdate.category !== 'ValidatedSingleValueCollector' &&
|
|
177
|
+
collectorToUpdate.category !== 'ObjectValueCollector') {
|
|
178
|
+
return handleUpdateValidateError('Collector is not a MultiValueCollector, SingleValueCollector or ValidatedSingleValueCollector and cannot be updated', 'state_error', log.error);
|
|
160
179
|
}
|
|
161
180
|
return function (value, index) {
|
|
162
181
|
try {
|
|
@@ -180,45 +199,21 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
180
199
|
*/
|
|
181
200
|
validate: (collector) => {
|
|
182
201
|
if (!collector.id) {
|
|
183
|
-
|
|
184
|
-
return function () {
|
|
185
|
-
return {
|
|
186
|
-
error: { message: 'Argument for `collector` has no ID', type: 'argument_error' },
|
|
187
|
-
type: 'internal_error',
|
|
188
|
-
};
|
|
189
|
-
};
|
|
202
|
+
return handleUpdateValidateError('Argument for `collector` has no ID', 'argument_error', log.error);
|
|
190
203
|
}
|
|
191
204
|
const { id } = collector;
|
|
192
|
-
const collectorToUpdate = nodeSlice.selectors.selectCollector(store.getState(), id);
|
|
205
|
+
const { error, state: collectorToUpdate } = nodeSlice.selectors.selectCollector(store.getState(), id);
|
|
206
|
+
if (error) {
|
|
207
|
+
return handleUpdateValidateError(error.message, 'state_error', log.error);
|
|
208
|
+
}
|
|
193
209
|
if (!collectorToUpdate) {
|
|
194
|
-
return
|
|
195
|
-
console.error('Collector not found');
|
|
196
|
-
return {
|
|
197
|
-
type: 'internal_error',
|
|
198
|
-
error: { message: 'Collector not found', type: 'state_error' },
|
|
199
|
-
};
|
|
200
|
-
};
|
|
210
|
+
return handleUpdateValidateError('Collector not found', 'state_error', log.error);
|
|
201
211
|
}
|
|
202
212
|
if (collectorToUpdate.category !== 'ValidatedSingleValueCollector') {
|
|
203
|
-
|
|
204
|
-
return function () {
|
|
205
|
-
return {
|
|
206
|
-
type: 'internal_error',
|
|
207
|
-
error: {
|
|
208
|
-
message: 'Collector is not a SingleValueCollector and cannot be validated',
|
|
209
|
-
type: 'state_error',
|
|
210
|
-
},
|
|
211
|
-
};
|
|
212
|
-
};
|
|
213
|
+
return handleUpdateValidateError('Collector is not a SingleValueCollector and cannot be validated', 'state_error', log.error);
|
|
213
214
|
}
|
|
214
215
|
if (!('validation' in collectorToUpdate.input)) {
|
|
215
|
-
|
|
216
|
-
return function () {
|
|
217
|
-
return {
|
|
218
|
-
type: 'internal_error',
|
|
219
|
-
error: { message: 'Collector has no validation rules', type: 'state_error' },
|
|
220
|
-
};
|
|
221
|
-
};
|
|
216
|
+
return handleUpdateValidateError('Collector has no validation rules', 'state_error', log.error);
|
|
222
217
|
}
|
|
223
218
|
return returnValidator(collectorToUpdate);
|
|
224
219
|
},
|
|
@@ -236,7 +231,12 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
236
231
|
const client = nodeSlice.selectors.selectClient(state);
|
|
237
232
|
// Let's check if the node has a client and collectors
|
|
238
233
|
if (client && 'collectors' in client) {
|
|
239
|
-
|
|
234
|
+
const { error, state: collectors } = nodeSlice.selectors.selectCollectors(state) || [];
|
|
235
|
+
if (error) {
|
|
236
|
+
log.error(error.message);
|
|
237
|
+
return [];
|
|
238
|
+
}
|
|
239
|
+
return collectors;
|
|
240
240
|
}
|
|
241
241
|
// Return an empty array if no client or collectors are found
|
|
242
242
|
return [];
|
|
@@ -247,7 +247,12 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
247
247
|
},
|
|
248
248
|
getErrorCollectors: () => {
|
|
249
249
|
const state = store.getState();
|
|
250
|
-
|
|
250
|
+
const { error, state: collectors } = nodeSlice.selectors.selectErrorCollectors(state);
|
|
251
|
+
if (error) {
|
|
252
|
+
log.error(error.message);
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
return collectors;
|
|
251
256
|
},
|
|
252
257
|
/**
|
|
253
258
|
* @method node - Selector to get the node from state
|
|
@@ -271,7 +276,7 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
271
276
|
getLatestResponse: () => {
|
|
272
277
|
const node = nodeSlice.selectSlice(store.getState());
|
|
273
278
|
if (!node.cache?.key) {
|
|
274
|
-
|
|
279
|
+
log.error(`Cannot find current node's cache key or no current node`);
|
|
275
280
|
return { error: { message: 'Cannot find current node', type: 'state_error' } };
|
|
276
281
|
}
|
|
277
282
|
const flowItem = davinciApi.endpoints.flow.select(node.cache.key);
|
|
@@ -281,7 +286,7 @@ export async function davinci({ config, requestMiddleware, }) {
|
|
|
281
286
|
},
|
|
282
287
|
getResponseWithId: (requestId) => {
|
|
283
288
|
if (!requestId) {
|
|
284
|
-
|
|
289
|
+
log.error('Please provide the cache key');
|
|
285
290
|
return { error: { message: 'Please provide the cache key', type: 'argument_error' } };
|
|
286
291
|
}
|
|
287
292
|
const flowItem = davinciApi.endpoints.flow.select(requestId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.store.js","sourceRoot":"","sources":["../../../src/lib/client.store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAa,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.store.js","sourceRoot":"","sources":["../../../src/lib/client.store.ts"],"names":[],"mappings":"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"}
|