@forgerock/davinci-client 1.0.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/LICENSE +21 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lib/client.store.d.ts +352 -0
- package/dist/src/lib/client.store.d.ts.map +1 -0
- package/dist/src/lib/client.store.js +300 -0
- package/dist/src/lib/client.store.js.map +1 -0
- package/dist/src/lib/client.store.utils.d.ts +74 -0
- package/dist/src/lib/client.store.utils.d.ts.map +1 -0
- package/dist/src/lib/client.store.utils.js +48 -0
- package/dist/src/lib/client.store.utils.js.map +1 -0
- package/dist/src/lib/client.types.d.ts +19 -0
- package/dist/src/lib/client.types.d.ts.map +1 -0
- package/dist/src/lib/client.types.js +2 -0
- package/dist/src/lib/client.types.js.map +1 -0
- package/dist/src/lib/collector.types.d.ts +360 -0
- package/dist/src/lib/collector.types.d.ts.map +1 -0
- package/dist/src/lib/collector.types.js +8 -0
- package/dist/src/lib/collector.types.js.map +1 -0
- package/dist/src/lib/collector.utils.d.ts +117 -0
- package/dist/src/lib/collector.utils.d.ts.map +1 -0
- package/dist/src/lib/collector.utils.js +463 -0
- package/dist/src/lib/collector.utils.js.map +1 -0
- package/dist/{lib → src/lib}/config.slice.d.ts +12 -5
- package/dist/src/lib/config.slice.d.ts.map +1 -0
- package/dist/src/lib/config.slice.js +59 -0
- package/dist/src/lib/config.slice.js.map +1 -0
- package/dist/src/lib/config.types.d.ts +12 -0
- package/dist/src/lib/config.types.d.ts.map +1 -0
- package/dist/src/lib/config.types.js +2 -0
- package/dist/src/lib/config.types.js.map +1 -0
- package/dist/src/lib/davinci.api.d.ts +31 -0
- package/dist/src/lib/davinci.api.d.ts.map +1 -0
- package/dist/src/lib/davinci.api.js +346 -0
- package/dist/src/lib/davinci.api.js.map +1 -0
- package/dist/{lib → src/lib}/davinci.types.d.ts +101 -8
- package/dist/src/lib/davinci.types.d.ts.map +1 -0
- package/dist/src/lib/davinci.types.js +11 -0
- package/dist/src/lib/davinci.types.js.map +1 -0
- package/dist/{lib → src/lib}/davinci.utils.d.ts +10 -6
- package/dist/src/lib/davinci.utils.d.ts.map +1 -0
- package/dist/src/lib/davinci.utils.js +168 -0
- package/dist/src/lib/davinci.utils.js.map +1 -0
- package/dist/src/lib/error.types.d.ts.map +1 -0
- package/dist/src/lib/error.types.js +2 -0
- package/dist/src/lib/error.types.js.map +1 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +9 -0
- package/dist/src/lib/index.js.map +1 -0
- package/dist/src/lib/node.reducer.d.ts +27 -0
- package/dist/src/lib/node.reducer.d.ts.map +1 -0
- package/dist/src/lib/node.reducer.js +193 -0
- package/dist/src/lib/node.reducer.js.map +1 -0
- package/dist/{lib → src/lib}/node.slice.d.ts +55 -26
- package/dist/src/lib/node.slice.d.ts.map +1 -0
- package/dist/src/lib/node.slice.js +261 -0
- package/dist/src/lib/node.slice.js.map +1 -0
- package/dist/{lib → src/lib}/node.types.d.ts +17 -8
- package/dist/src/lib/node.types.d.ts.map +1 -0
- package/dist/src/lib/node.types.js +2 -0
- package/dist/src/lib/node.types.js.map +1 -0
- package/dist/src/lib/node.utils.d.ts +4 -0
- package/dist/src/lib/node.utils.d.ts.map +1 -0
- package/dist/src/lib/node.utils.js +32 -0
- package/dist/src/lib/node.utils.js.map +1 -0
- package/dist/src/lib/wellknown.api.d.ts +5 -0
- package/dist/src/lib/wellknown.api.d.ts.map +1 -0
- package/dist/src/lib/wellknown.api.js +22 -0
- package/dist/src/lib/wellknown.api.js.map +1 -0
- package/dist/src/lib/wellknown.types.d.ts.map +1 -0
- package/dist/src/lib/wellknown.types.js +2 -0
- package/dist/src/lib/wellknown.types.js.map +1 -0
- package/dist/src/types.d.ts +40 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +7 -0
- package/dist/src/types.js.map +1 -0
- package/package.json +39 -20
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -4
- package/dist/lib/authorize.utils.d.ts +0 -22
- package/dist/lib/authorize.utils.d.ts.map +0 -1
- package/dist/lib/authorize.utils.js +0 -23
- package/dist/lib/client.store.d.ts +0 -149
- package/dist/lib/client.store.d.ts.map +0 -1
- package/dist/lib/client.store.js +0 -131
- package/dist/lib/client.store.utils.d.ts +0 -46
- package/dist/lib/client.store.utils.d.ts.map +0 -1
- package/dist/lib/client.store.utils.js +0 -19
- package/dist/lib/client.types.d.ts +0 -9
- package/dist/lib/client.types.d.ts.map +0 -1
- package/dist/lib/collector.types.d.ts +0 -78
- package/dist/lib/collector.types.d.ts.map +0 -1
- package/dist/lib/collector.utils.d.ts +0 -54
- package/dist/lib/collector.utils.d.ts.map +0 -1
- package/dist/lib/collector.utils.js +0 -88
- package/dist/lib/config.slice.d.ts.map +0 -1
- package/dist/lib/config.slice.js +0 -40
- package/dist/lib/config.types.d.ts +0 -9
- package/dist/lib/config.types.d.ts.map +0 -1
- package/dist/lib/davinci.api.d.ts +0 -20
- package/dist/lib/davinci.api.d.ts.map +0 -1
- package/dist/lib/davinci.api.js +0 -172
- package/dist/lib/davinci.types.d.ts.map +0 -1
- package/dist/lib/davinci.utils.d.ts.map +0 -1
- package/dist/lib/davinci.utils.js +0 -102
- package/dist/lib/error.types.d.ts.map +0 -1
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/node.reducer.d.ts +0 -22
- package/dist/lib/node.reducer.d.ts.map +0 -1
- package/dist/lib/node.reducer.js +0 -31
- package/dist/lib/node.slice.d.ts.map +0 -1
- package/dist/lib/node.slice.js +0 -160
- package/dist/lib/node.types.d.ts.map +0 -1
- package/dist/lib/wellknown.api.d.ts +0 -5
- package/dist/lib/wellknown.api.d.ts.map +0 -1
- package/dist/lib/wellknown.api.js +0 -15
- package/dist/lib/wellknown.types.d.ts.map +0 -1
- package/dist/types.d.ts +0 -23
- package/dist/types.d.ts.map +0 -1
- /package/dist/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/{lib → src/lib}/error.types.d.ts +0 -0
- /package/dist/{lib → src/lib}/index.d.ts +0 -0
- /package/dist/{lib → src/lib}/wellknown.types.d.ts +0 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { nodeSlice } from './node.slice.js';
|
|
2
|
+
/**
|
|
3
|
+
* @function transformSubmitRequest - Transforms a NextNode into a DaVinciRequest for form submissions
|
|
4
|
+
* @param {ContinueNode} node - The node to transform into a DaVinciRequest
|
|
5
|
+
* @returns {DaVinciRequest} - The transformed request object
|
|
6
|
+
*/
|
|
7
|
+
export function transformSubmitRequest(node, logger) {
|
|
8
|
+
// Filter out ActionCollectors as they are not used in form submissions
|
|
9
|
+
const collectors = node.client?.collectors?.filter((collector) => collector.category === 'MultiValueCollector' ||
|
|
10
|
+
collector.category === 'SingleValueCollector' ||
|
|
11
|
+
collector.category === 'ValidatedSingleValueCollector' ||
|
|
12
|
+
collector.category === 'ObjectValueCollector');
|
|
13
|
+
const formData = collectors?.reduce((acc, collector) => {
|
|
14
|
+
acc[collector.input.key] = collector.input.value;
|
|
15
|
+
return acc;
|
|
16
|
+
}, {});
|
|
17
|
+
logger.debug('Transforming submit request', { node, formData });
|
|
18
|
+
return {
|
|
19
|
+
id: node.server.id || '',
|
|
20
|
+
eventName: node.server.eventName || '',
|
|
21
|
+
interactionId: node.server.interactionId || '',
|
|
22
|
+
parameters: {
|
|
23
|
+
eventType: 'submit',
|
|
24
|
+
data: {
|
|
25
|
+
actionKey: node.client?.action || '',
|
|
26
|
+
formData: formData || {},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* @function transformActionRequest - Transforms a NextNode into a DaVinciRequest for action requests
|
|
33
|
+
* @param {ContinueNode} node - The node to transform into a DaVinciRequest
|
|
34
|
+
* @param {string} action - The action to transform into a DaVinciRequest
|
|
35
|
+
* @returns {DaVinciRequest} - The transformed request object
|
|
36
|
+
*/
|
|
37
|
+
export function transformActionRequest(node, action, logger) {
|
|
38
|
+
logger.debug('Transforming action request', { node, action });
|
|
39
|
+
return {
|
|
40
|
+
id: node.server.id || '',
|
|
41
|
+
eventName: node.server.eventName || '',
|
|
42
|
+
interactionId: node.server.interactionId || '',
|
|
43
|
+
parameters: {
|
|
44
|
+
eventType: 'action',
|
|
45
|
+
data: {
|
|
46
|
+
actionKey: action,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function handleResponse(cacheEntry, dispatch, status, logger) {
|
|
52
|
+
/**
|
|
53
|
+
* 5XX errors are treated as unrecoverable failures
|
|
54
|
+
*/
|
|
55
|
+
if (cacheEntry.isError && cacheEntry.error.status >= 500) {
|
|
56
|
+
logger.error('Response of 5XX indicates unrecoverable failure');
|
|
57
|
+
const data = cacheEntry.error.data;
|
|
58
|
+
const requestId = cacheEntry.requestId;
|
|
59
|
+
dispatch(nodeSlice.actions.failure({ data, requestId, httpStatus: cacheEntry.error.status }));
|
|
60
|
+
return; // Filter out 5XX's
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check for 4XX errors that are unrecoverable
|
|
64
|
+
*/
|
|
65
|
+
if (cacheEntry.isError && cacheEntry.error.status >= 400 && cacheEntry.error.status < 500) {
|
|
66
|
+
const data = cacheEntry.error.data;
|
|
67
|
+
const requestId = cacheEntry.requestId;
|
|
68
|
+
// Filter out client-side "timeout" related unrecoverable failures
|
|
69
|
+
if (data.code === 1999 || data.code === 'requestTimedOut') {
|
|
70
|
+
logger.error('Error is a client-side timeout');
|
|
71
|
+
dispatch(nodeSlice.actions.failure({ data, requestId, httpStatus: cacheEntry.error.status }));
|
|
72
|
+
return; // Filter out timeouts
|
|
73
|
+
}
|
|
74
|
+
// Filter our "PingOne Authentication Connector" unrecoverable failures
|
|
75
|
+
if (data.connectorId === 'pingOneAuthenticationConnector' &&
|
|
76
|
+
(data.capabilityName === 'returnSuccessResponseRedirect' ||
|
|
77
|
+
data.capabilityName === 'setSession')) {
|
|
78
|
+
logger.error('Error is a PingOne Authentication Connector unrecoverable failure');
|
|
79
|
+
dispatch(nodeSlice.actions.failure({ data, requestId, httpStatus: cacheEntry.error.status }));
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
logger.debug('Response with this error type should be recoverable');
|
|
83
|
+
// If we're still here, we have a 4XX failure that should be recoverable
|
|
84
|
+
dispatch(nodeSlice.actions.error({ data, requestId, httpStatus: cacheEntry.error.status }));
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Check for 3XX errors that result in CORS errors, reported as FETCH_ERROR
|
|
89
|
+
*/
|
|
90
|
+
if (cacheEntry.isError && cacheEntry.error.status === 'FETCH_ERROR') {
|
|
91
|
+
logger.error('Response with FETCH_ERROR indicates configuration failure. Please ensure a correct Client ID for your OAuth application.');
|
|
92
|
+
const data = {
|
|
93
|
+
code: cacheEntry.error.status,
|
|
94
|
+
message: 'Fetch Error: Please ensure a correct Client ID for your OAuth application.',
|
|
95
|
+
};
|
|
96
|
+
const requestId = cacheEntry.requestId;
|
|
97
|
+
dispatch(nodeSlice.actions.failure({ data, requestId, httpStatus: cacheEntry.error.status }));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* If the response's HTTP status is a success (2XX), but the DaVinci API has returned an error,
|
|
102
|
+
* we need to handle this as a failure or return as unknown.
|
|
103
|
+
*/
|
|
104
|
+
if (cacheEntry.isSuccess && 'error' in cacheEntry.data) {
|
|
105
|
+
logger.error('Response with `isSuccess` but `error` property indicates unrecoverable failure');
|
|
106
|
+
const data = cacheEntry.data;
|
|
107
|
+
const requestId = cacheEntry.requestId;
|
|
108
|
+
dispatch(nodeSlice.actions.failure({
|
|
109
|
+
data: data.error,
|
|
110
|
+
requestId,
|
|
111
|
+
httpStatus: status,
|
|
112
|
+
}));
|
|
113
|
+
return; // Filter out 2XX errors
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* If the response's HTTP status is a success (2XX), but the DaVinci API has returned an error,
|
|
117
|
+
* we need to handle this as a failure or return as unknown.
|
|
118
|
+
*/
|
|
119
|
+
if (cacheEntry.isSuccess && 'status' in cacheEntry.data) {
|
|
120
|
+
const status = cacheEntry.data.status.toLowerCase();
|
|
121
|
+
if (status === 'failure') {
|
|
122
|
+
logger.error('Response with `isSuccess` and `status` of "failure" indicates unrecoverable failure');
|
|
123
|
+
const data = cacheEntry.data;
|
|
124
|
+
const requestId = cacheEntry.requestId;
|
|
125
|
+
dispatch(nodeSlice.actions.failure({
|
|
126
|
+
data: data.error,
|
|
127
|
+
requestId,
|
|
128
|
+
httpStatus: status,
|
|
129
|
+
}));
|
|
130
|
+
return; // Filter out 2XX errors with 'failure' status
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
// Do nothing
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* If we've made it here, we have a successful response and do not have an error property.
|
|
138
|
+
* Parse for state of the flow and dispatch appropriate action.
|
|
139
|
+
*/
|
|
140
|
+
if (cacheEntry.isSuccess) {
|
|
141
|
+
const requestId = cacheEntry.requestId;
|
|
142
|
+
const hasNextUrl = () => {
|
|
143
|
+
const data = cacheEntry.data;
|
|
144
|
+
if ('_links' in data) {
|
|
145
|
+
if ('next' in data._links) {
|
|
146
|
+
if ('href' in data._links.next) {
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return false;
|
|
152
|
+
};
|
|
153
|
+
if ('session' in cacheEntry.data || 'authorizeResponse' in cacheEntry.data) {
|
|
154
|
+
const data = cacheEntry.data;
|
|
155
|
+
dispatch(nodeSlice.actions.success({ data, requestId, httpStatus: status }));
|
|
156
|
+
}
|
|
157
|
+
else if (hasNextUrl()) {
|
|
158
|
+
const data = cacheEntry.data;
|
|
159
|
+
dispatch(nodeSlice.actions.next({ data, requestId, httpStatus: status }));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// If we got here, the response type is unknown and therefore an unrecoverable failure
|
|
163
|
+
const data = cacheEntry.data;
|
|
164
|
+
dispatch(nodeSlice.actions.failure({ data, requestId, httpStatus: status }));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=davinci.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"davinci.utils.js","sourceRoot":"","sources":["../../../src/lib/davinci.utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.types.d.ts","sourceRoot":"","sources":["../../../src/lib/error.types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EACA,gBAAgB,GAChB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,aAAa,GACb,eAAe,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.types.js","sourceRoot":"","sources":["../../../src/lib/error.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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 { davinci } from './client.store.js';
|
|
8
|
+
export { davinci };
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DaVinciField } from './davinci.types.js';
|
|
2
|
+
import { ActionCollector, MultiSelectCollector, SingleSelectCollector, FlowCollector, PasswordCollector, SingleValueCollector, IdpCollector, SubmitCollector, TextCollector, ReadOnlyCollector, ValidatedTextCollector, DeviceAuthenticationCollector, DeviceRegistrationCollector, PhoneNumberCollector, PhoneNumberInputValue, UnknownCollector } from './collector.types.js';
|
|
3
|
+
/**
|
|
4
|
+
* @const nextCollectorValues - Action for setting the next collector values
|
|
5
|
+
* @see https://redux-toolkit.js.org/api/createAction
|
|
6
|
+
*
|
|
7
|
+
* This is for internal "collector" setup for handling the state of the current node
|
|
8
|
+
*/
|
|
9
|
+
export declare const nextCollectorValues: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
10
|
+
fields: DaVinciField[];
|
|
11
|
+
formData: {
|
|
12
|
+
value: Record<string, unknown>;
|
|
13
|
+
};
|
|
14
|
+
}, string>;
|
|
15
|
+
export declare const updateCollectorValues: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
|
|
16
|
+
id: string;
|
|
17
|
+
value: string | string[] | PhoneNumberInputValue;
|
|
18
|
+
index?: number;
|
|
19
|
+
}, string>;
|
|
20
|
+
/**
|
|
21
|
+
* @const nodeCollectorReducer - Reducer for handling the collector values
|
|
22
|
+
* @see https://redux-toolkit.js.org/api/createReducer
|
|
23
|
+
*/
|
|
24
|
+
export declare const nodeCollectorReducer: import("@reduxjs/toolkit").Reducer<(TextCollector | SingleSelectCollector | ValidatedTextCollector | PasswordCollector | MultiSelectCollector | DeviceAuthenticationCollector | DeviceRegistrationCollector | PhoneNumberCollector | IdpCollector | SubmitCollector | FlowCollector | ReadOnlyCollector | UnknownCollector | ActionCollector<"ActionCollector"> | SingleValueCollector<"SingleValueCollector">)[]> & {
|
|
25
|
+
getInitialState: () => (TextCollector | SingleSelectCollector | ValidatedTextCollector | PasswordCollector | MultiSelectCollector | DeviceAuthenticationCollector | DeviceRegistrationCollector | PhoneNumberCollector | IdpCollector | SubmitCollector | FlowCollector | ReadOnlyCollector | UnknownCollector | ActionCollector<"ActionCollector"> | SingleValueCollector<"SingleValueCollector">)[];
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=node.reducer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.reducer.d.ts","sourceRoot":"","sources":["../../../src/lib/node.reducer.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,sBAAsB,CAAC;AAE9B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;YACtB,YAAY,EAAE;cACZ;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE;UAC/B,CAAC;AAChB,eAAO,MAAM,qBAAqB;QAC5B,MAAM;WACH,MAAM,GAAG,MAAM,EAAE,GAAG,qBAAqB;YACxC,MAAM;UACC,CAAC;AAuBlB;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;CAqL/B,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* Import the required utilities from Redux Toolkit
|
|
9
|
+
*/
|
|
10
|
+
import { createAction, createReducer } from '@reduxjs/toolkit';
|
|
11
|
+
/**
|
|
12
|
+
* Import the collector utilities
|
|
13
|
+
*/
|
|
14
|
+
import { returnActionCollector, returnFlowCollector, returnPasswordCollector, returnIdpCollector, returnSubmitCollector, returnTextCollector, returnSingleSelectCollector, returnMultiSelectCollector, returnReadOnlyCollector, returnObjectSelectCollector, returnObjectValueCollector, returnUnknownCollector, } from './collector.utils.js';
|
|
15
|
+
/**
|
|
16
|
+
* @const nextCollectorValues - Action for setting the next collector values
|
|
17
|
+
* @see https://redux-toolkit.js.org/api/createAction
|
|
18
|
+
*
|
|
19
|
+
* This is for internal "collector" setup for handling the state of the current node
|
|
20
|
+
*/
|
|
21
|
+
export const nextCollectorValues = createAction('node/next');
|
|
22
|
+
export const updateCollectorValues = createAction('node/update');
|
|
23
|
+
/**
|
|
24
|
+
* @const initialCollectorValues - Initial state for the collector values
|
|
25
|
+
*/
|
|
26
|
+
const initialCollectorValues = [];
|
|
27
|
+
/**
|
|
28
|
+
* @const nodeCollectorReducer - Reducer for handling the collector values
|
|
29
|
+
* @see https://redux-toolkit.js.org/api/createReducer
|
|
30
|
+
*/
|
|
31
|
+
export const nodeCollectorReducer = createReducer(initialCollectorValues, (builder) => {
|
|
32
|
+
builder
|
|
33
|
+
/**
|
|
34
|
+
* Using the `nextCollectorValues` const (e.g. `'node/next'`) to add the case
|
|
35
|
+
* 'node/next' is essentially derived `createSlice` below. `node.next()` is
|
|
36
|
+
* transformed to `'node/next'` for the action type.
|
|
37
|
+
*/
|
|
38
|
+
.addCase(nextCollectorValues, (_, action) => {
|
|
39
|
+
const fields = action.payload.fields;
|
|
40
|
+
// Map the fields to the initial state with the schema of Generic Collector
|
|
41
|
+
const collectors = Array.isArray(fields)
|
|
42
|
+
? fields.map((field, idx) => {
|
|
43
|
+
/**
|
|
44
|
+
* Some collectors may not have the same properties as others;
|
|
45
|
+
* LABEL field types are one of them, so let's catch them first.
|
|
46
|
+
*/
|
|
47
|
+
if (field.type === 'LABEL') {
|
|
48
|
+
return returnReadOnlyCollector(field, idx);
|
|
49
|
+
}
|
|
50
|
+
// *Some* collectors may have default or existing data to display
|
|
51
|
+
const data = action.payload.formData &&
|
|
52
|
+
action.payload.formData.value &&
|
|
53
|
+
action.payload.formData.value[field.key];
|
|
54
|
+
// Match specific collectors
|
|
55
|
+
switch (field.type) {
|
|
56
|
+
case 'CHECKBOX':
|
|
57
|
+
case 'COMBOBOX': {
|
|
58
|
+
// Intentional fall-through
|
|
59
|
+
const strArr = data;
|
|
60
|
+
return returnMultiSelectCollector(field, idx, strArr);
|
|
61
|
+
}
|
|
62
|
+
case 'DROPDOWN':
|
|
63
|
+
case 'RADIO': {
|
|
64
|
+
// Intentional fall-through
|
|
65
|
+
const str = data;
|
|
66
|
+
return returnSingleSelectCollector(field, idx, str);
|
|
67
|
+
}
|
|
68
|
+
case 'FLOW_BUTTON':
|
|
69
|
+
case 'FLOW_LINK': {
|
|
70
|
+
// Intentional fall-through
|
|
71
|
+
// No data to send
|
|
72
|
+
return returnFlowCollector(field, idx);
|
|
73
|
+
}
|
|
74
|
+
case 'DEVICE_AUTHENTICATION':
|
|
75
|
+
case 'DEVICE_REGISTRATION': {
|
|
76
|
+
// Intentional fall-through
|
|
77
|
+
return returnObjectSelectCollector(field, idx);
|
|
78
|
+
}
|
|
79
|
+
case 'PASSWORD':
|
|
80
|
+
case 'PASSWORD_VERIFY': {
|
|
81
|
+
// No data to send
|
|
82
|
+
return returnPasswordCollector(field, idx);
|
|
83
|
+
}
|
|
84
|
+
case 'PHONE_NUMBER': {
|
|
85
|
+
// No data to send
|
|
86
|
+
return returnObjectValueCollector(field, idx);
|
|
87
|
+
}
|
|
88
|
+
case 'TEXT': {
|
|
89
|
+
const str = data;
|
|
90
|
+
return returnTextCollector(field, idx, str);
|
|
91
|
+
}
|
|
92
|
+
case 'SOCIAL_LOGIN_BUTTON': {
|
|
93
|
+
// No data to send
|
|
94
|
+
return returnIdpCollector(field, idx);
|
|
95
|
+
}
|
|
96
|
+
case 'SUBMIT_BUTTON': {
|
|
97
|
+
// No data to send
|
|
98
|
+
return returnSubmitCollector(field, idx);
|
|
99
|
+
}
|
|
100
|
+
default:
|
|
101
|
+
// Default is handled below
|
|
102
|
+
}
|
|
103
|
+
// Generic Collectors
|
|
104
|
+
if (field.type.includes('BUTTON') || field.type.includes('LINK')) {
|
|
105
|
+
// No data to send
|
|
106
|
+
return returnActionCollector(field, idx, 'ActionCollector');
|
|
107
|
+
}
|
|
108
|
+
return returnUnknownCollector(field, idx);
|
|
109
|
+
})
|
|
110
|
+
: [];
|
|
111
|
+
return collectors || [];
|
|
112
|
+
})
|
|
113
|
+
/**
|
|
114
|
+
* Using the `updateCollectorValues` const (e.g. `'node/update'`) to add the case
|
|
115
|
+
* 'node/next' is essentially derived `createSlice` below. `node.next()` is
|
|
116
|
+
* transformed to `'node/next'` for the action type.
|
|
117
|
+
*/
|
|
118
|
+
.addCase(updateCollectorValues, (state, action) => {
|
|
119
|
+
const collector = state.find((collector) => collector.id === action.payload.id);
|
|
120
|
+
if (!collector) {
|
|
121
|
+
throw new Error('No collector found to update');
|
|
122
|
+
}
|
|
123
|
+
if (collector.category === 'ActionCollector') {
|
|
124
|
+
throw new Error('ActionCollectors are read-only');
|
|
125
|
+
}
|
|
126
|
+
if (collector.category === 'NoValueCollector') {
|
|
127
|
+
throw new Error('NoValueCollectors, like ReadOnlyCollectors, are read-only');
|
|
128
|
+
}
|
|
129
|
+
if (action.payload.value === undefined) {
|
|
130
|
+
throw new Error('Value argument cannot be undefined');
|
|
131
|
+
}
|
|
132
|
+
if (collector.category === 'SingleValueCollector' ||
|
|
133
|
+
collector.category === 'ValidatedSingleValueCollector') {
|
|
134
|
+
if (typeof action.payload.value !== 'string') {
|
|
135
|
+
throw new Error('SingleValueCollector does not accept an array');
|
|
136
|
+
}
|
|
137
|
+
collector.input.value = action.payload.value;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (collector.category === 'MultiValueCollector') {
|
|
141
|
+
if (typeof action.payload.value !== 'string' && !Array.isArray(action.payload.value)) {
|
|
142
|
+
throw new Error('MultiValueCollector does not accept an object');
|
|
143
|
+
}
|
|
144
|
+
if (Array.isArray(action.payload.value)) {
|
|
145
|
+
collector.input.value = [...action.payload.value];
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
collector.input.value.push(action.payload.value);
|
|
149
|
+
}
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
if (collector.type === 'DeviceAuthenticationCollector') {
|
|
153
|
+
if (typeof action.payload.id !== 'string') {
|
|
154
|
+
throw new Error('Index argument must be a string');
|
|
155
|
+
}
|
|
156
|
+
// Iterate through the options object and find option to update
|
|
157
|
+
const option = collector.output.options.find((option) => option.value === action.payload.value);
|
|
158
|
+
if (!option) {
|
|
159
|
+
throw new Error('No option found matching value to update');
|
|
160
|
+
}
|
|
161
|
+
// Remap values back to DaVinci spec
|
|
162
|
+
collector.input.value = {
|
|
163
|
+
type: option.type,
|
|
164
|
+
id: option.value,
|
|
165
|
+
value: option.content,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (collector.type === 'DeviceRegistrationCollector') {
|
|
169
|
+
if (typeof action.payload.id !== 'string') {
|
|
170
|
+
throw new Error('Index argument must be a string');
|
|
171
|
+
}
|
|
172
|
+
// Iterate through the options object and find option to update
|
|
173
|
+
const option = collector.output.options.find((option) => option.value === action.payload.value);
|
|
174
|
+
if (!option) {
|
|
175
|
+
throw new Error('No option found matching value to update');
|
|
176
|
+
}
|
|
177
|
+
collector.input.value = option.type;
|
|
178
|
+
}
|
|
179
|
+
if (collector.type === 'PhoneNumberCollector') {
|
|
180
|
+
if (typeof action.payload.id !== 'string') {
|
|
181
|
+
throw new Error('Index argument must be a string');
|
|
182
|
+
}
|
|
183
|
+
if (typeof action.payload.value !== 'object') {
|
|
184
|
+
throw new Error('Value argument must be an object');
|
|
185
|
+
}
|
|
186
|
+
if (!('phoneNumber' in action.payload.value) || !('countryCode' in action.payload.value)) {
|
|
187
|
+
throw new Error('Value argument must contain a phoneNumber and countryCode property');
|
|
188
|
+
}
|
|
189
|
+
collector.input.value = action.payload.value;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=node.reducer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.reducer.js","sourceRoot":"","sources":["../../../src/lib/node.reducer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE/D;;GAEG;AACH,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,2BAA2B,EAC3B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,sBAAsB,CAAC;AAqB9B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,YAAY,CAG5C,WAAW,CAAC,CAAC;AAChB,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAI9C,aAAa,CAAC,CAAC;AAElB;;GAEG;AACH,MAAM,sBAAsB,GAgBtB,EAAE,CAAC;AAET;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,aAAa,CAAC,sBAAsB,EAAE,CAAC,OAAO,EAAE,EAAE;IACpF,OAAO;QACL;;;;WAIG;SACF,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACrC,2EAA2E;QAC3E,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAmB,EAAE,GAAW,EAAE,EAAE;gBAC9C;;;mBAGG;gBACH,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,OAAO,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBAC7C,CAAC;gBAED,iEAAiE;gBACjE,MAAM,IAAI,GACR,MAAM,CAAC,OAAO,CAAC,QAAQ;oBACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK;oBAC7B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE3C,4BAA4B;gBAC5B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,UAAU,CAAC;oBAChB,KAAK,UAAU,CAAC,CAAC,CAAC;wBAChB,2BAA2B;wBAC3B,MAAM,MAAM,GAAG,IAAgB,CAAC;wBAChC,OAAO,0BAA0B,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;oBACxD,CAAC;oBACD,KAAK,UAAU,CAAC;oBAChB,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,2BAA2B;wBAC3B,MAAM,GAAG,GAAG,IAAc,CAAC;wBAC3B,OAAO,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBACtD,CAAC;oBACD,KAAK,aAAa,CAAC;oBACnB,KAAK,WAAW,CAAC,CAAC,CAAC;wBACjB,2BAA2B;wBAC3B,kBAAkB;wBAClB,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACzC,CAAC;oBACD,KAAK,uBAAuB,CAAC;oBAC7B,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBAC3B,2BAA2B;wBAC3B,OAAO,2BAA2B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACjD,CAAC;oBACD,KAAK,UAAU,CAAC;oBAChB,KAAK,iBAAiB,CAAC,CAAC,CAAC;wBACvB,kBAAkB;wBAClB,OAAO,uBAAuB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC7C,CAAC;oBACD,KAAK,cAAc,CAAC,CAAC,CAAC;wBACpB,kBAAkB;wBAClB,OAAO,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAChD,CAAC;oBACD,KAAK,MAAM,CAAC,CAAC,CAAC;wBACZ,MAAM,GAAG,GAAG,IAAc,CAAC;wBAC3B,OAAO,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC9C,CAAC;oBACD,KAAK,qBAAqB,CAAC,CAAC,CAAC;wBAC3B,kBAAkB;wBAClB,OAAO,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBACxC,CAAC;oBACD,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,kBAAkB;wBAClB,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC3C,CAAC;oBACD,QAAQ;oBACR,2BAA2B;gBAC7B,CAAC;gBAED,qBAAqB;gBACrB,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjE,kBAAkB;oBAClB,OAAO,qBAAqB,CAAC,KAAK,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;gBAC9D,CAAC;gBAED,OAAO,sBAAsB,CAAC,KAAqB,EAAE,GAAG,CAAC,CAAC;YAC5D,CAAC,CAAC;YACJ,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,UAAU,IAAI,EAAE,CAAC;IAC1B,CAAC,CAAC;QACF;;;;WAIG;SACF,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,KAAK,iBAAiB,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ,KAAK,kBAAkB,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,IACE,SAAS,CAAC,QAAQ,KAAK,sBAAsB;YAC7C,SAAS,CAAC,QAAQ,KAAK,+BAA+B,EACtD,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,QAAQ,KAAK,qBAAqB,EAAE,CAAC;YACjD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrF,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACnD,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,+BAA+B,EAAE,CAAC;YACvD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,+DAA+D;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAC1C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAClD,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YAED,oCAAoC;YACpC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,KAAK;gBAChB,KAAK,EAAE,MAAM,CAAC,OAAO;aACtB,CAAC;QACJ,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,6BAA6B,EAAE,CAAC;YACrD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,+DAA+D;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAC1C,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,CAAC,KAAK,CAClD,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC9D,CAAC;YAED,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC;QACtC,CAAC;QAED,IAAI,SAAS,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC9C,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YACD,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC7C,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzF,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACxF,CAAC;YACD,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -1,85 +1,95 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Import the needed reducers
|
|
3
|
+
*/
|
|
4
|
+
import { updateCollectorValues } from './node.reducer.js';
|
|
5
|
+
/**
|
|
6
|
+
* Import the types
|
|
7
|
+
*/
|
|
8
|
+
import type { PayloadAction } from '@reduxjs/toolkit';
|
|
9
|
+
import type { GenericError } from './error.types.js';
|
|
10
|
+
import type { DavinciErrorResponse, DaVinciFailureResponse, DaVinciNextResponse, DaVinciSuccessResponse } from './davinci.types.js';
|
|
11
|
+
import type { ContinueNode, SuccessNode, ErrorNode, StartNode, FailureNode } from './node.types.js';
|
|
6
12
|
/**
|
|
7
13
|
* @const initialNodeState - Initial state for the node slice
|
|
8
14
|
*/
|
|
9
15
|
export declare const initialNodeState: {
|
|
10
16
|
cache: null;
|
|
11
17
|
client: {
|
|
12
|
-
status:
|
|
18
|
+
status: "start";
|
|
13
19
|
};
|
|
14
20
|
error: null;
|
|
15
21
|
server: {
|
|
16
|
-
status:
|
|
22
|
+
status: "start";
|
|
17
23
|
};
|
|
18
|
-
status:
|
|
24
|
+
status: "start";
|
|
19
25
|
};
|
|
20
26
|
/**
|
|
21
27
|
* @const nodeSlice - Slice for handling the node state
|
|
22
28
|
* @see https://redux-toolkit.js.org/api/createSlice
|
|
23
29
|
*/
|
|
24
|
-
export declare const nodeSlice: import(
|
|
30
|
+
export declare const nodeSlice: import("@reduxjs/toolkit").Slice<ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode, {
|
|
25
31
|
/**
|
|
26
32
|
* @method error - Method for creating an error node
|
|
27
33
|
* @param {Object} state - The current state of the slice
|
|
28
34
|
* @param {PayloadAction<DaVinciErrorCacheEntry<DavinciErrorResponse>>} action - The action to be dispatched
|
|
29
35
|
* @returns {ErrorNode} - The error node
|
|
30
36
|
*/
|
|
31
|
-
error(state: import(
|
|
37
|
+
error(state: import("immer").WritableDraft<ContinueNode> | import("immer").WritableDraft<ErrorNode> | import("immer").WritableDraft<FailureNode> | import("immer").WritableDraft<StartNode> | import("immer").WritableDraft<SuccessNode>, action: PayloadAction<{
|
|
32
38
|
data: DavinciErrorResponse;
|
|
33
39
|
requestId: string;
|
|
34
40
|
httpStatus: number;
|
|
35
|
-
}>): import(
|
|
41
|
+
}>): import("immer").WritableDraft<ErrorNode>;
|
|
36
42
|
/**
|
|
37
43
|
* @method failure - Method for creating an error node
|
|
38
44
|
* @param {Object} state - The current state of the slice
|
|
39
45
|
* @param {PayloadAction<DaVinciFailureResponse>} action - The action to be dispatched
|
|
40
46
|
* @returns {FailureNode} - The error node
|
|
41
47
|
*/
|
|
42
|
-
failure(state: import(
|
|
48
|
+
failure(state: import("immer").WritableDraft<ContinueNode> | import("immer").WritableDraft<ErrorNode> | import("immer").WritableDraft<FailureNode> | import("immer").WritableDraft<StartNode> | import("immer").WritableDraft<SuccessNode>, action: PayloadAction<{
|
|
43
49
|
data: DaVinciFailureResponse | unknown;
|
|
44
50
|
requestId: string;
|
|
45
51
|
httpStatus: number;
|
|
46
|
-
}>): import(
|
|
52
|
+
}>): import("immer").WritableDraft<FailureNode>;
|
|
47
53
|
/**
|
|
48
54
|
* @method next - Method for creating a next node
|
|
49
55
|
* @param {Object} state - The current state of the slice
|
|
50
56
|
* @param {PayloadAction<DaVinciNextResponse>} action - The action to be dispatched
|
|
51
57
|
* @returns {ContinueNode} - The next node
|
|
52
58
|
*/
|
|
53
|
-
next(state: import(
|
|
59
|
+
next(state: import("immer").WritableDraft<ContinueNode> | import("immer").WritableDraft<ErrorNode> | import("immer").WritableDraft<FailureNode> | import("immer").WritableDraft<StartNode> | import("immer").WritableDraft<SuccessNode>, action: PayloadAction<{
|
|
54
60
|
data: DaVinciNextResponse;
|
|
55
61
|
requestId: string;
|
|
56
62
|
httpStatus: number;
|
|
57
|
-
}>): import(
|
|
63
|
+
}>): import("immer").WritableDraft<ContinueNode>;
|
|
58
64
|
/**
|
|
59
65
|
* @method start - Method for creating a start node
|
|
60
66
|
* @param {Object} state - The current state of the slice
|
|
61
67
|
* @returns {StartNode} - The start node
|
|
62
68
|
*/
|
|
63
|
-
success(state: import(
|
|
69
|
+
success(state: import("immer").WritableDraft<ContinueNode> | import("immer").WritableDraft<ErrorNode> | import("immer").WritableDraft<FailureNode> | import("immer").WritableDraft<StartNode> | import("immer").WritableDraft<SuccessNode>, action: PayloadAction<{
|
|
64
70
|
data: DaVinciSuccessResponse;
|
|
65
71
|
requestId: string;
|
|
66
72
|
httpStatus: number;
|
|
67
|
-
}>): import(
|
|
73
|
+
}>): import("immer").WritableDraft<SuccessNode>;
|
|
68
74
|
/**
|
|
69
75
|
* @method update - Method for updating collector values with the node
|
|
70
76
|
* @param {Object} state - The current state of the slice
|
|
71
77
|
* @param {PayloadAction<unknown>} action - The action to be dispatched
|
|
72
78
|
* @returns {ContinueNode} - The next node
|
|
73
79
|
*/
|
|
74
|
-
update(state: import(
|
|
80
|
+
update(state: import("immer").WritableDraft<ContinueNode> | import("immer").WritableDraft<ErrorNode> | import("immer").WritableDraft<FailureNode> | import("immer").WritableDraft<StartNode> | import("immer").WritableDraft<SuccessNode>, action: ReturnType<typeof updateCollectorValues>): import("immer").WritableDraft<ContinueNode>;
|
|
75
81
|
}, "node", "node", {
|
|
76
82
|
selectClient: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) => {
|
|
77
83
|
action: string;
|
|
78
|
-
collectors: import(
|
|
84
|
+
collectors: import("./node.types.js").Collectors[];
|
|
79
85
|
description?: string;
|
|
80
86
|
name?: string;
|
|
81
87
|
status: "continue";
|
|
82
88
|
} | {
|
|
89
|
+
action: string;
|
|
90
|
+
collectors: import("./node.types.js").Collectors[];
|
|
91
|
+
description?: string;
|
|
92
|
+
name?: string;
|
|
83
93
|
status: "error";
|
|
84
94
|
} | {
|
|
85
95
|
status: "failure";
|
|
@@ -92,11 +102,30 @@ export declare const nodeSlice: import('@reduxjs/toolkit').Slice<ContinueNode |
|
|
|
92
102
|
};
|
|
93
103
|
status: "success";
|
|
94
104
|
} | null;
|
|
95
|
-
selectCollectors: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) =>
|
|
96
|
-
|
|
97
|
-
|
|
105
|
+
selectCollectors: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) => {
|
|
106
|
+
error: null;
|
|
107
|
+
state: import("./node.types.js").Collectors[];
|
|
108
|
+
} | {
|
|
109
|
+
error: GenericError;
|
|
110
|
+
state: never[];
|
|
111
|
+
};
|
|
112
|
+
selectCollector: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode, id: string) => {
|
|
113
|
+
error: null;
|
|
114
|
+
state: import("./node.types.js").Collectors | undefined;
|
|
115
|
+
} | {
|
|
116
|
+
error: GenericError;
|
|
117
|
+
state: null;
|
|
118
|
+
};
|
|
119
|
+
selectError: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) => import("./node.types.js").DaVinciError | null;
|
|
120
|
+
selectErrorCollectors: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) => {
|
|
121
|
+
error: null;
|
|
122
|
+
state: import("./node.types.js").CollectorErrors[];
|
|
123
|
+
} | {
|
|
124
|
+
error: GenericError;
|
|
125
|
+
state: never[];
|
|
126
|
+
};
|
|
98
127
|
selectServer: (state: ContinueNode | ErrorNode | FailureNode | StartNode | SuccessNode) => {
|
|
99
|
-
_links?: import(
|
|
128
|
+
_links?: import("./davinci.types.js").Links;
|
|
100
129
|
id?: string;
|
|
101
130
|
interactionId?: string;
|
|
102
131
|
interactionToken?: string;
|
|
@@ -104,14 +133,14 @@ export declare const nodeSlice: import('@reduxjs/toolkit').Slice<ContinueNode |
|
|
|
104
133
|
eventName?: string;
|
|
105
134
|
status: "continue";
|
|
106
135
|
} | {
|
|
107
|
-
_links?: import(
|
|
136
|
+
_links?: import("./davinci.types.js").Links;
|
|
108
137
|
eventName?: string;
|
|
109
138
|
id?: string;
|
|
110
139
|
interactionId?: string;
|
|
111
140
|
interactionToken?: string;
|
|
112
141
|
status: "error";
|
|
113
142
|
} | {
|
|
114
|
-
_links?: import(
|
|
143
|
+
_links?: import("./davinci.types.js").Links;
|
|
115
144
|
eventName?: string;
|
|
116
145
|
href?: string;
|
|
117
146
|
id?: string;
|
|
@@ -121,7 +150,7 @@ export declare const nodeSlice: import('@reduxjs/toolkit').Slice<ContinueNode |
|
|
|
121
150
|
} | {
|
|
122
151
|
status: "start";
|
|
123
152
|
} | {
|
|
124
|
-
_links?: import(
|
|
153
|
+
_links?: import("./davinci.types.js").Links;
|
|
125
154
|
eventName?: string;
|
|
126
155
|
id?: string;
|
|
127
156
|
interactionId?: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.slice.d.ts","sourceRoot":"","sources":["../../../src/lib/node.slice.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,OAAO,EAAwB,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAGhF;;GAEG;AACH,OAAO,KAAK,EAAS,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EACV,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAWpG;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;CAUR,CAAC;AAItB;;;GAGG;AACH,eAAO,MAAM,SAAS;IAIlB;;;;;OAKG;sPAGO,aAAa,CAAC;QAAE,IAAI,EAAE,oBAAoB,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAsC9F;;;;;OAKG;wPAGO,aAAa,CAAC;QACpB,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACvC,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IA2CJ;;;;;OAKG;qPAGO,aAAa,CAAC;QACpB,IAAI,EAAE,mBAAmB,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IA8CJ;;;;OAIG;wPAGO,aAAa,CAAC;QACpB,IAAI,EAAE,sBAAsB,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IA+BJ;;;;;OAKG;uPACmB,UAAU,CAAC,OAAO,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;gBA/K3B,CAAC;iBAGlC,CADA;;;;;;;;eAqMO,YAAY;;;mGAIQ,MAAM;;;;eAY1B,YAAY;;;;;;;;eAmBZ,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC"}
|