@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,261 @@
|
|
|
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 { createSlice } from '@reduxjs/toolkit';
|
|
11
|
+
/**
|
|
12
|
+
* Import the needed reducers
|
|
13
|
+
*/
|
|
14
|
+
import { nodeCollectorReducer } from './node.reducer.js';
|
|
15
|
+
import { getCollectorErrors } from './node.utils.js';
|
|
16
|
+
/**
|
|
17
|
+
* The possible statuses for the four types of nodes
|
|
18
|
+
*/
|
|
19
|
+
const CONTINUE_STATUS = 'continue';
|
|
20
|
+
const ERROR_STATUS = 'error';
|
|
21
|
+
const FAILURE_STATUS = 'failure';
|
|
22
|
+
const SUCCESS_STATUS = 'success';
|
|
23
|
+
const START_STATUS = 'start';
|
|
24
|
+
/**
|
|
25
|
+
* @const initialNodeState - Initial state for the node slice
|
|
26
|
+
*/
|
|
27
|
+
export const initialNodeState = {
|
|
28
|
+
cache: null,
|
|
29
|
+
client: {
|
|
30
|
+
status: START_STATUS,
|
|
31
|
+
},
|
|
32
|
+
error: null,
|
|
33
|
+
server: {
|
|
34
|
+
status: START_STATUS,
|
|
35
|
+
},
|
|
36
|
+
status: START_STATUS,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* @const nodeSlice - Slice for handling the node state
|
|
40
|
+
* @see https://redux-toolkit.js.org/api/createSlice
|
|
41
|
+
*/
|
|
42
|
+
export const nodeSlice = createSlice({
|
|
43
|
+
name: 'node',
|
|
44
|
+
initialState: initialNodeState,
|
|
45
|
+
reducers: {
|
|
46
|
+
/**
|
|
47
|
+
* @method error - Method for creating an error node
|
|
48
|
+
* @param {Object} state - The current state of the slice
|
|
49
|
+
* @param {PayloadAction<DaVinciErrorCacheEntry<DavinciErrorResponse>>} action - The action to be dispatched
|
|
50
|
+
* @returns {ErrorNode} - The error node
|
|
51
|
+
*/
|
|
52
|
+
error(state, action) {
|
|
53
|
+
const newState = state;
|
|
54
|
+
// Reference to the original response from DaVinci in the cache
|
|
55
|
+
newState.cache = {
|
|
56
|
+
key: action.payload.requestId,
|
|
57
|
+
};
|
|
58
|
+
// Data for the client to consume
|
|
59
|
+
newState.client = {
|
|
60
|
+
...state.client,
|
|
61
|
+
status: ERROR_STATUS,
|
|
62
|
+
};
|
|
63
|
+
newState.error = {
|
|
64
|
+
code: action.payload.data.code,
|
|
65
|
+
collectors: getCollectorErrors(action.payload.data),
|
|
66
|
+
message: action.payload.data.message,
|
|
67
|
+
internalHttpStatus: action.payload.data.httpResponseCode,
|
|
68
|
+
status: 'error',
|
|
69
|
+
type: 'davinci_error',
|
|
70
|
+
};
|
|
71
|
+
newState.httpStatus = action.payload.httpStatus;
|
|
72
|
+
// Data that the server users
|
|
73
|
+
newState.server = {
|
|
74
|
+
...state.server,
|
|
75
|
+
status: ERROR_STATUS,
|
|
76
|
+
};
|
|
77
|
+
// Used to help detect the node type
|
|
78
|
+
newState.status = ERROR_STATUS;
|
|
79
|
+
return newState;
|
|
80
|
+
},
|
|
81
|
+
/**
|
|
82
|
+
* @method failure - Method for creating an error node
|
|
83
|
+
* @param {Object} state - The current state of the slice
|
|
84
|
+
* @param {PayloadAction<DaVinciFailureResponse>} action - The action to be dispatched
|
|
85
|
+
* @returns {FailureNode} - The error node
|
|
86
|
+
*/
|
|
87
|
+
failure(state, action) {
|
|
88
|
+
const newState = state;
|
|
89
|
+
newState.cache = {
|
|
90
|
+
key: action.payload.requestId,
|
|
91
|
+
};
|
|
92
|
+
newState.client = {
|
|
93
|
+
status: FAILURE_STATUS,
|
|
94
|
+
};
|
|
95
|
+
if (action.payload.data && typeof action.payload.data === 'object') {
|
|
96
|
+
const data = action.payload.data;
|
|
97
|
+
newState.error = {
|
|
98
|
+
code: data['code'] || 'unknown',
|
|
99
|
+
message: data['message'] || data['errorMessage'] || '',
|
|
100
|
+
internalHttpStatus: typeof data['httpResponseCode'] === 'number' ? data['httpResponseCode'] : 0,
|
|
101
|
+
status: FAILURE_STATUS,
|
|
102
|
+
type: 'davinci_error',
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
newState.error = {
|
|
107
|
+
code: 'unknown',
|
|
108
|
+
message: 'An unknown error occurred',
|
|
109
|
+
status: FAILURE_STATUS,
|
|
110
|
+
type: 'network_error',
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
newState.httpStatus = action.payload.httpStatus;
|
|
114
|
+
newState.server = {
|
|
115
|
+
status: FAILURE_STATUS,
|
|
116
|
+
};
|
|
117
|
+
newState.status = FAILURE_STATUS;
|
|
118
|
+
return newState;
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* @method next - Method for creating a next node
|
|
122
|
+
* @param {Object} state - The current state of the slice
|
|
123
|
+
* @param {PayloadAction<DaVinciNextResponse>} action - The action to be dispatched
|
|
124
|
+
* @returns {ContinueNode} - The next node
|
|
125
|
+
*/
|
|
126
|
+
next(state, action) {
|
|
127
|
+
const newState = state;
|
|
128
|
+
const collectors = nodeCollectorReducer([], {
|
|
129
|
+
type: action.type,
|
|
130
|
+
payload: {
|
|
131
|
+
fields: action.payload.data?.form?.components?.fields,
|
|
132
|
+
formData: action.payload.data?.formData,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
const submitCollector = collectors.filter((collector) => collector.type === 'SubmitCollector')[0];
|
|
136
|
+
newState.cache = {
|
|
137
|
+
key: action.payload.requestId,
|
|
138
|
+
};
|
|
139
|
+
newState.client = {
|
|
140
|
+
action: submitCollector?.output.key,
|
|
141
|
+
description: action.payload.data?.form?.description,
|
|
142
|
+
collectors,
|
|
143
|
+
name: action.payload.data.form?.name,
|
|
144
|
+
status: CONTINUE_STATUS,
|
|
145
|
+
};
|
|
146
|
+
newState.error = null;
|
|
147
|
+
newState.httpStatus = action.payload.httpStatus;
|
|
148
|
+
newState.server = {
|
|
149
|
+
_links: action.payload.data._links,
|
|
150
|
+
id: action.payload.data.id,
|
|
151
|
+
interactionId: action.payload.data.interactionId,
|
|
152
|
+
interactionToken: action.payload.data.interactionToken,
|
|
153
|
+
eventName: action.payload.data.eventName || 'continue',
|
|
154
|
+
status: CONTINUE_STATUS,
|
|
155
|
+
};
|
|
156
|
+
// Used to help detect the node type
|
|
157
|
+
newState.status = CONTINUE_STATUS;
|
|
158
|
+
return newState;
|
|
159
|
+
},
|
|
160
|
+
/**
|
|
161
|
+
* @method start - Method for creating a start node
|
|
162
|
+
* @param {Object} state - The current state of the slice
|
|
163
|
+
* @returns {StartNode} - The start node
|
|
164
|
+
*/
|
|
165
|
+
success(state, action) {
|
|
166
|
+
const newState = state;
|
|
167
|
+
newState.cache = {
|
|
168
|
+
key: action.payload.requestId,
|
|
169
|
+
};
|
|
170
|
+
newState.client = {
|
|
171
|
+
authorization: {
|
|
172
|
+
code: action.payload.data.authorizeResponse?.code,
|
|
173
|
+
state: action.payload.data.authorizeResponse?.state,
|
|
174
|
+
},
|
|
175
|
+
status: SUCCESS_STATUS,
|
|
176
|
+
};
|
|
177
|
+
newState.httpStatus = action.payload.httpStatus;
|
|
178
|
+
newState.server = {
|
|
179
|
+
id: action.payload.data.id,
|
|
180
|
+
interactionId: action.payload.data.interactionId,
|
|
181
|
+
interactionToken: action.payload.data.interactionToken,
|
|
182
|
+
session: action.payload.data.session?.id,
|
|
183
|
+
status: SUCCESS_STATUS,
|
|
184
|
+
};
|
|
185
|
+
newState.error = null;
|
|
186
|
+
newState.status = SUCCESS_STATUS;
|
|
187
|
+
return newState;
|
|
188
|
+
},
|
|
189
|
+
/**
|
|
190
|
+
* @method update - Method for updating collector values with the node
|
|
191
|
+
* @param {Object} state - The current state of the slice
|
|
192
|
+
* @param {PayloadAction<unknown>} action - The action to be dispatched
|
|
193
|
+
* @returns {ContinueNode} - The next node
|
|
194
|
+
*/
|
|
195
|
+
update(state, action) {
|
|
196
|
+
const newState = state;
|
|
197
|
+
newState.client.collectors = nodeCollectorReducer(newState.client.collectors, action);
|
|
198
|
+
return newState;
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
selectors: {
|
|
202
|
+
selectClient: (state) => {
|
|
203
|
+
return state.client;
|
|
204
|
+
},
|
|
205
|
+
selectCollectors: (state) => {
|
|
206
|
+
if (state.client && 'collectors' in state.client) {
|
|
207
|
+
return {
|
|
208
|
+
error: null,
|
|
209
|
+
state: state?.client.collectors,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
error: {
|
|
214
|
+
code: 'unknown',
|
|
215
|
+
type: 'state_error',
|
|
216
|
+
message: `\`collectors\` are only available on nodes with \`status\` of ${CONTINUE_STATUS} or ${ERROR_STATUS}`,
|
|
217
|
+
},
|
|
218
|
+
state: [],
|
|
219
|
+
};
|
|
220
|
+
},
|
|
221
|
+
selectCollector: (state, id) => {
|
|
222
|
+
if (state.client && 'collectors' in state.client) {
|
|
223
|
+
return {
|
|
224
|
+
error: null,
|
|
225
|
+
state: state.client.collectors?.find((collector) => collector.id === id),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
return {
|
|
229
|
+
error: {
|
|
230
|
+
code: 'unknown',
|
|
231
|
+
type: 'state_error',
|
|
232
|
+
message: `\`collectors\` are only available on nodes with \`status\` of ${CONTINUE_STATUS} or ${ERROR_STATUS}`,
|
|
233
|
+
},
|
|
234
|
+
state: null,
|
|
235
|
+
};
|
|
236
|
+
},
|
|
237
|
+
selectError: (state) => {
|
|
238
|
+
return state.error;
|
|
239
|
+
},
|
|
240
|
+
selectErrorCollectors: (state) => {
|
|
241
|
+
if (state.status === ERROR_STATUS) {
|
|
242
|
+
return {
|
|
243
|
+
error: null,
|
|
244
|
+
state: state.error?.collectors || [],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
error: {
|
|
249
|
+
code: 'unknown',
|
|
250
|
+
type: 'state_error',
|
|
251
|
+
message: `\`errorCollectors\` are only available on nodes with \`status\` of ${ERROR_STATUS}`,
|
|
252
|
+
},
|
|
253
|
+
state: [],
|
|
254
|
+
};
|
|
255
|
+
},
|
|
256
|
+
selectServer: (state) => {
|
|
257
|
+
return state.server;
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
});
|
|
261
|
+
//# sourceMappingURL=node.slice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.slice.js","sourceRoot":"","sources":["../../../src/lib/node.slice.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { FlowCollector, PasswordCollector, TextCollector,
|
|
2
|
-
import {
|
|
1
|
+
import type { FlowCollector, PasswordCollector, TextCollector, IdpCollector, SubmitCollector, ActionCollector, SingleValueCollector, SingleSelectCollector, MultiSelectCollector, DeviceAuthenticationCollector, DeviceRegistrationCollector, ReadOnlyCollector, ValidatedTextCollector, PhoneNumberCollector, UnknownCollector } from './collector.types.js';
|
|
2
|
+
import type { Links } from './davinci.types.js';
|
|
3
3
|
import { GenericError } from './error.types.js';
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
export type Collectors = FlowCollector | PasswordCollector | TextCollector | SingleSelectCollector | IdpCollector | SubmitCollector | ActionCollector<'ActionCollector'> | SingleValueCollector<'SingleValueCollector'> | MultiSelectCollector | DeviceAuthenticationCollector | DeviceRegistrationCollector | PhoneNumberCollector | ReadOnlyCollector | ValidatedTextCollector | UnknownCollector;
|
|
5
|
+
export interface CollectorErrors {
|
|
6
|
+
code: string;
|
|
7
|
+
message: string;
|
|
8
|
+
target: string;
|
|
8
9
|
}
|
|
9
|
-
export type Collectors = FlowCollector | PasswordCollector | TextCollector | SocialLoginCollector | SubmitCollector | ActionCollector<'ActionCollector'> | SingleValueCollector<'SingleValueCollector'>;
|
|
10
10
|
export interface ContinueNode {
|
|
11
11
|
cache: {
|
|
12
12
|
key: string;
|
|
@@ -31,11 +31,20 @@ export interface ContinueNode {
|
|
|
31
31
|
};
|
|
32
32
|
status: 'continue';
|
|
33
33
|
}
|
|
34
|
+
export interface DaVinciError extends GenericError {
|
|
35
|
+
collectors?: CollectorErrors[];
|
|
36
|
+
internalHttpStatus?: number;
|
|
37
|
+
status: 'error' | 'failure' | 'unknown';
|
|
38
|
+
}
|
|
34
39
|
export interface ErrorNode {
|
|
35
40
|
cache: {
|
|
36
41
|
key: string;
|
|
37
42
|
};
|
|
38
43
|
client: {
|
|
44
|
+
action: string;
|
|
45
|
+
collectors: Collectors[];
|
|
46
|
+
description?: string;
|
|
47
|
+
name?: string;
|
|
39
48
|
status: 'error';
|
|
40
49
|
};
|
|
41
50
|
error: DaVinciError;
|
|
@@ -75,7 +84,7 @@ export interface StartNode {
|
|
|
75
84
|
client: {
|
|
76
85
|
status: 'start';
|
|
77
86
|
};
|
|
78
|
-
error: null;
|
|
87
|
+
error: DaVinciError | null;
|
|
79
88
|
server: {
|
|
80
89
|
status: 'start';
|
|
81
90
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.types.d.ts","sourceRoot":"","sources":["../../../src/lib/node.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.types.js","sourceRoot":"","sources":["../../../src/lib/node.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.utils.d.ts","sourceRoot":"","sources":["../../../src/lib/node.utils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,qBA+B7D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function getCollectorErrors(error) {
|
|
2
|
+
const details = error.details;
|
|
3
|
+
if (!details || !Array.isArray(details)) {
|
|
4
|
+
return [];
|
|
5
|
+
}
|
|
6
|
+
return details.reduce((acc, next) => {
|
|
7
|
+
if (!next.rawResponse) {
|
|
8
|
+
return acc;
|
|
9
|
+
}
|
|
10
|
+
if (!next.rawResponse.code) {
|
|
11
|
+
return acc;
|
|
12
|
+
}
|
|
13
|
+
if (next.rawResponse.code !== 'INVALID_DATA') {
|
|
14
|
+
return acc;
|
|
15
|
+
}
|
|
16
|
+
if (!Array.isArray(next.rawResponse.details)) {
|
|
17
|
+
return acc;
|
|
18
|
+
}
|
|
19
|
+
next.rawResponse.details.forEach((item) => {
|
|
20
|
+
if (!item.target) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
acc.push({
|
|
24
|
+
code: item.code || '',
|
|
25
|
+
message: item.message || '',
|
|
26
|
+
target: item.target,
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
return acc;
|
|
30
|
+
}, []);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=node.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.utils.js","sourceRoot":"","sources":["../../../src/lib/node.utils.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,kBAAkB,CAAC,KAA2B;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACrD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC3B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7C,OAAO,GAAG,CAAC;QACb,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAQ,EAAE;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO;YACT,CAAC;YACD,GAAG,CAAC,IAAI,CAAC;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;gBACrB,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;gBAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;aACpB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { WellknownResponse } from './wellknown.types.js';
|
|
2
|
+
export declare const wellknownApi: import("@reduxjs/toolkit/query").Api<import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, {
|
|
3
|
+
wellknown: import("@reduxjs/toolkit/query").QueryDefinition<string, import("@reduxjs/toolkit/query").BaseQueryFn<string | import("@reduxjs/toolkit/query").FetchArgs, unknown, import("@reduxjs/toolkit/query").FetchBaseQueryError, {}, import("@reduxjs/toolkit/query").FetchBaseQueryMeta>, never, WellknownResponse, "wellknown", unknown>;
|
|
4
|
+
}, "wellknown", never, typeof import("@reduxjs/toolkit/query").coreModuleName>;
|
|
5
|
+
//# 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":"AAOA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,eAAO,MAAM,YAAY;;8EAavB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
export const wellknownApi = createApi({
|
|
9
|
+
reducerPath: 'wellknown',
|
|
10
|
+
baseQuery: fetchBaseQuery({
|
|
11
|
+
prepareHeaders: (headers) => {
|
|
12
|
+
headers.set('Accept', 'application/json');
|
|
13
|
+
return headers;
|
|
14
|
+
},
|
|
15
|
+
}),
|
|
16
|
+
endpoints: (builder) => ({
|
|
17
|
+
wellknown: builder.query({
|
|
18
|
+
query: (endpoint) => ({ url: endpoint }),
|
|
19
|
+
}),
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=wellknown.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellknown.api.js","sourceRoot":"","sources":["../../../src/lib/wellknown.api.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;IACpC,WAAW,EAAE,WAAW;IACxB,SAAS,EAAE,cAAc,CAAC;QACxB,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE;YAC1B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YAC1C,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;IACF,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC,KAAK,CAA4B;YAClD,KAAK,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;SACjD,CAAC;KACH,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellknown.types.d.ts","sourceRoot":"","sources":["../../../src/lib/wellknown.types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qCAAqC,EAAE,MAAM,CAAC;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6BAA6B,EAAE,MAAM,CAAC;IACtC,0BAA0B,EAAE,MAAM,CAAC;IACnC,2BAA2B,EAAE,MAAM,CAAC;IACpC,+BAA+B,EAAE,MAAM,CAAC;IACxC,qCAAqC,EAAE,MAAM,CAAC;IAC9C,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,qCAAqC,EAAE,MAAM,EAAE,CAAC;IAChD,qCAAqC,EAAE,MAAM,EAAE,CAAC;IAChD,2CAA2C,EAAE,MAAM,EAAE,CAAC;IACtD,qCAAqC,EAAE,MAAM,EAAE,CAAC;IAChD,gDAAgD,EAAE,MAAM,EAAE,CAAC;IAC3D,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gCAAgC,EAAE,MAAM,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellknown.types.js","sourceRoot":"","sources":["../../../src/lib/wellknown.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import 'immer';
|
|
2
|
+
import type { RequestMiddleware } from '@forgerock/sdk-request-middleware';
|
|
3
|
+
import type * as collectors from './lib/collector.types.js';
|
|
4
|
+
import type * as config from './lib/config.types.js';
|
|
5
|
+
import type * as nodes from './lib/node.types.js';
|
|
6
|
+
import type * as client from './lib/client.types.js';
|
|
7
|
+
import { davinci } from './lib/client.store.js';
|
|
8
|
+
import { nodeSlice } from './lib/node.slice.js';
|
|
9
|
+
export type { CustomLogger } from '@forgerock/sdk-logger/types';
|
|
10
|
+
export type DaVinciConfig = config.DaVinciConfig;
|
|
11
|
+
export type DavinciClient = Awaited<ReturnType<typeof davinci>>;
|
|
12
|
+
export type Updater = client.Updater;
|
|
13
|
+
export type InitFlow = client.InitFlow;
|
|
14
|
+
export type Validator = client.Validator;
|
|
15
|
+
export type GetClient = ReturnType<typeof nodeSlice.selectors.selectClient>;
|
|
16
|
+
export type StartNode = nodes.StartNode;
|
|
17
|
+
export type ContinueNode = nodes.ContinueNode;
|
|
18
|
+
export type ErrorNode = nodes.ErrorNode;
|
|
19
|
+
export type SuccessNode = nodes.SuccessNode;
|
|
20
|
+
export type FailureNode = nodes.FailureNode;
|
|
21
|
+
export type NodeStates = ContinueNode | ErrorNode | StartNode | SuccessNode | FailureNode;
|
|
22
|
+
export type Collectors = nodes.Collectors;
|
|
23
|
+
export type DaVinciValidationError = nodes.DaVinciError;
|
|
24
|
+
export type ActionCollector<T extends collectors.ActionCollectorTypes> = collectors.ActionCollector<T>;
|
|
25
|
+
export type SingleValueCollector<T extends collectors.SingleValueCollectorTypes> = collectors.SingleValueCollector<T>;
|
|
26
|
+
export type FlowCollector = collectors.FlowCollector;
|
|
27
|
+
export type PasswordCollector = collectors.PasswordCollector;
|
|
28
|
+
export type TextCollector = collectors.TextCollector;
|
|
29
|
+
export type IdpCollector = collectors.IdpCollector;
|
|
30
|
+
export type SubmitCollector = collectors.SubmitCollector;
|
|
31
|
+
export type ValidatedTextCollector = collectors.ValidatedTextCollector;
|
|
32
|
+
export type ReadOnlyCollector = collectors.ReadOnlyCollector;
|
|
33
|
+
export type MultiSelectCollector = collectors.MultiSelectCollector;
|
|
34
|
+
export type SingleSelectCollector = collectors.SingleSelectCollector;
|
|
35
|
+
export type DeviceRegistrationCollector = collectors.DeviceRegistrationCollector;
|
|
36
|
+
export type DeviceAuthenticationCollector = collectors.DeviceAuthenticationCollector;
|
|
37
|
+
export type PhoneNumberCollector = collectors.PhoneNumberCollector;
|
|
38
|
+
export type InternalErrorResponse = client.InternalErrorResponse;
|
|
39
|
+
export type { RequestMiddleware };
|
|
40
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAKA,OAAO,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,KAAK,UAAU,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,YAAY,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAEjD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC;AAChE,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;AACrC,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACvC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;AACzC,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AAC5E,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,MAAM,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;AAC9C,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;AAC5C,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;AAC5C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;AAC1F,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;AAC1C,MAAM,MAAM,sBAAsB,GAAG,KAAK,CAAC,YAAY,CAAC;AAExD,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,UAAU,CAAC,oBAAoB,IACnE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,UAAU,CAAC,yBAAyB,IAC7E,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAErC,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;AACrD,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;AAC7D,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC;AACrD,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,eAAe,CAAC;AACzD,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,sBAAsB,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC;AAC7D,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC;AACnE,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,qBAAqB,CAAC;AACrE,MAAM,MAAM,2BAA2B,GAAG,UAAU,CAAC,2BAA2B,CAAC;AACjF,MAAM,MAAM,6BAA6B,GAAG,UAAU,CAAC,6BAA6B,CAAC;AACrF,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,oBAAoB,CAAC;AAEnE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/* Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* This software may be modified and distributed under the terms
|
|
4
|
+
* of the MIT license. See the LICENSE file for details.
|
|
5
|
+
*/
|
|
6
|
+
import 'immer'; // Side-effect needed only for getting types in workspace
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,OAAO,CAAC,CAAC,yDAAyD"}
|
package/package.json
CHANGED
|
@@ -1,32 +1,51 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forgerock/davinci-client",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"main": "./dist/index.js",
|
|
5
|
-
"module": "./dist/index.js",
|
|
6
|
-
"typings": "./dist/index.d.ts",
|
|
7
|
-
"type": "module",
|
|
8
|
-
"files": [
|
|
9
|
-
"dist"
|
|
10
|
-
],
|
|
3
|
+
"version": "1.2.0",
|
|
11
4
|
"repository": {
|
|
12
5
|
"type": "git",
|
|
13
|
-
"url": "git+https://github.com
|
|
6
|
+
"url": "git+https://github.com/ForgeRock/ping-javascript-sdk.git",
|
|
14
7
|
"directory": "packages/davinci-client"
|
|
15
8
|
},
|
|
9
|
+
"sideEffects": [
|
|
10
|
+
"./src/types.js"
|
|
11
|
+
],
|
|
12
|
+
"type": "module",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": "./dist/src/index.js",
|
|
15
|
+
"./types": "./dist/src/types.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"main": "./dist/src/index.js",
|
|
18
|
+
"module": "./dist/src/index.js",
|
|
19
|
+
"typings": "./dist/src/index.d.ts",
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"!dist/tsconfig.lib.tsbuildinfo",
|
|
23
|
+
"./LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@reduxjs/toolkit": "^2.8.2",
|
|
27
|
+
"immer": "^10.1.1",
|
|
28
|
+
"@forgerock/sdk-logger": "1.2.0",
|
|
29
|
+
"@forgerock/sdk-oidc": "1.2.0",
|
|
30
|
+
"@forgerock/sdk-request-middleware": "1.2.0",
|
|
31
|
+
"@forgerock/storage": "1.2.0",
|
|
32
|
+
"@forgerock/sdk-types": "1.2.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"vitest": "^3.0.4"
|
|
36
|
+
},
|
|
16
37
|
"publishConfig": {
|
|
17
38
|
"access": "public"
|
|
18
39
|
},
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
"@forgerock/javascript-sdk": "4.6.0"
|
|
40
|
+
"nx": {
|
|
41
|
+
"tags": [
|
|
42
|
+
"scope:package"
|
|
43
|
+
]
|
|
24
44
|
},
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
"./types": "./dist/types.d.ts"
|
|
45
|
+
"scripts": {
|
|
46
|
+
"build": "pnpm nx nxBuild",
|
|
47
|
+
"lint": "pnpm nx nxLint",
|
|
48
|
+
"test": "pnpm nx nxTest",
|
|
49
|
+
"test:watch": "pnpm nx nxTest --watch"
|
|
31
50
|
}
|
|
32
51
|
}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Define the options for the authorization URL
|
|
3
|
-
* @param clientId The client ID of the application
|
|
4
|
-
* @param redirectUri The redirect URI of the application
|
|
5
|
-
* @param responseType The response type of the authorization request
|
|
6
|
-
* @param scope The scope of the authorization request
|
|
7
|
-
*/
|
|
8
|
-
export interface GetAuthorizationUrlOptions {
|
|
9
|
-
clientId: string;
|
|
10
|
-
login: 'redirect';
|
|
11
|
-
redirectUri: string;
|
|
12
|
-
responseType: string;
|
|
13
|
-
scope: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* @function createAuthorizeUrl - Create authorization URL for initial call to DaVinci
|
|
17
|
-
* @param baseUrl {string}
|
|
18
|
-
* @param options {GetAuthorizationUrlOptions}
|
|
19
|
-
* @returns {Promise<string>} - the authorization URL
|
|
20
|
-
*/
|
|
21
|
-
export declare function createAuthorizeUrl(authorizeUrl: string, options: GetAuthorizationUrlOptions): Promise<string>;
|
|
22
|
-
//# sourceMappingURL=authorize.utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"authorize.utils.d.ts","sourceRoot":"","sources":["../../src/lib/authorize.utils.ts"],"names":[],"mappings":"AAMA;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CA+BjB"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { ResponseType as l, PKCE as a } from "@forgerock/javascript-sdk";
|
|
2
|
-
import { generateAndStoreAuthUrlValues as d } from "@forgerock/javascript-sdk/src/oauth2-client/state-pkce";
|
|
3
|
-
async function h(r, e) {
|
|
4
|
-
const n = new URL(r).origin, [t, o] = d({
|
|
5
|
-
clientId: e.clientId,
|
|
6
|
-
login: e.login,
|
|
7
|
-
serverConfig: { baseUrl: n },
|
|
8
|
-
responseType: l.Code
|
|
9
|
-
}), s = await a.createChallenge(t.verifier), c = new URLSearchParams({
|
|
10
|
-
code_challenge: s,
|
|
11
|
-
code_challenge_method: "S256",
|
|
12
|
-
client_id: e.clientId,
|
|
13
|
-
redirect_uri: e.redirectUri,
|
|
14
|
-
response_mode: "pi.flow",
|
|
15
|
-
response_type: e.responseType,
|
|
16
|
-
scope: e.scope,
|
|
17
|
-
state: t.state
|
|
18
|
-
}), i = new URL(`${r}?${c.toString()}`);
|
|
19
|
-
return o(), i.toString();
|
|
20
|
-
}
|
|
21
|
-
export {
|
|
22
|
-
h as createAuthorizeUrl
|
|
23
|
-
};
|