@okta/okta-auth-js 6.2.0 → 6.3.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/CHANGELOG.md +23 -0
- package/cjs/AuthStateManager.js +9 -3
- package/cjs/AuthStateManager.js.map +1 -1
- package/cjs/OktaUserAgent.js +2 -2
- package/cjs/PromiseQueue.js +9 -2
- package/cjs/PromiseQueue.js.map +1 -1
- package/cjs/ServiceManager.js +3 -3
- package/cjs/ServiceManager.js.map +1 -1
- package/cjs/TransactionManager.js +8 -2
- package/cjs/TransactionManager.js.map +1 -1
- package/cjs/browser/browserStorage.js +19 -18
- package/cjs/browser/browserStorage.js.map +1 -1
- package/cjs/idx/authenticator/Authenticator.js.map +1 -1
- package/cjs/idx/authenticator/OktaPassword.js +12 -3
- package/cjs/idx/authenticator/OktaPassword.js.map +1 -1
- package/cjs/idx/authenticator/OktaVerifyTotp.js +9 -1
- package/cjs/idx/authenticator/OktaVerifyTotp.js.map +1 -1
- package/cjs/idx/authenticator/SecurityQuestionEnrollment.js +14 -1
- package/cjs/idx/authenticator/SecurityQuestionEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/SecurityQuestionVerification.js +9 -1
- package/cjs/idx/authenticator/SecurityQuestionVerification.js.map +1 -1
- package/cjs/idx/authenticator/VerificationCodeAuthenticator.js +13 -3
- package/cjs/idx/authenticator/VerificationCodeAuthenticator.js.map +1 -1
- package/cjs/idx/authenticator/WebauthnEnrollment.js +5 -0
- package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/WebauthnVerification.js +5 -0
- package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -1
- package/cjs/idx/authenticator/util.js +64 -0
- package/cjs/idx/authenticator/util.js.map +1 -0
- package/cjs/idx/idx-js/index.js +0 -122
- package/cjs/idx/idx-js/index.js.map +1 -1
- package/cjs/idx/idx-js/introspect.js +10 -6
- package/cjs/idx/idx-js/introspect.js.map +1 -1
- package/cjs/idx/idx-js/v1/generateIdxAction.js +17 -23
- package/cjs/idx/idx-js/v1/generateIdxAction.js.map +1 -1
- package/cjs/idx/idx-js/v1/makeIdxState.js +5 -4
- package/cjs/idx/idx-js/v1/makeIdxState.js.map +1 -1
- package/cjs/idx/introspect.js +13 -3
- package/cjs/idx/introspect.js.map +1 -1
- package/cjs/idx/proceed.js +14 -11
- package/cjs/idx/proceed.js.map +1 -1
- package/cjs/idx/remediate.js +65 -72
- package/cjs/idx/remediate.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js +6 -2
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorVerificationData.js +23 -19
- package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
- package/cjs/idx/remediators/Base/AuthenticatorData.js +22 -14
- package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
- package/cjs/idx/remediators/Base/Remediator.js +85 -85
- package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
- package/cjs/idx/remediators/Base/SelectAuthenticator.js +24 -15
- package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js +15 -4
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/ChallengePoll.js +8 -1
- package/cjs/idx/remediators/ChallengePoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollPoll.js +1 -1
- package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollProfile.js +15 -9
- package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
- package/cjs/idx/remediators/EnrollmentChannelData.js +0 -8
- package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
- package/cjs/idx/remediators/Identify.js +12 -5
- package/cjs/idx/remediators/Identify.js.map +1 -1
- package/cjs/idx/remediators/ReEnrollAuthenticator.js +9 -8
- package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js +4 -3
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js +0 -1
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -1
- package/cjs/idx/remediators/Skip.js +1 -8
- package/cjs/idx/remediators/Skip.js.map +1 -1
- package/cjs/idx/remediators/util.js.map +1 -1
- package/cjs/idx/run.js +267 -198
- package/cjs/idx/run.js.map +1 -1
- package/cjs/idx/types/idx-js.js.map +1 -1
- package/cjs/idx/types/index.js +37 -0
- package/cjs/idx/types/index.js.map +1 -1
- package/cjs/idx/util.js +198 -0
- package/cjs/idx/util.js.map +1 -0
- package/cjs/options/browser.js +11 -6
- package/cjs/options/browser.js.map +1 -1
- package/cjs/options/index.js +1 -1
- package/cjs/options/index.js.map +1 -1
- package/cjs/options/node.js +5 -6
- package/cjs/options/node.js.map +1 -1
- package/cjs/options.js +170 -0
- package/cjs/options.js.map +1 -0
- package/dist/okta-auth-js.min.js +1 -1
- package/dist/okta-auth-js.min.js.map +1 -1
- package/dist/okta-auth-js.umd.js +1 -1
- package/dist/okta-auth-js.umd.js.map +1 -1
- package/esm/esm.browser.js +1178 -794
- package/esm/esm.browser.js.map +1 -1
- package/esm/esm.node.mjs +1099 -781
- package/esm/esm.node.mjs.map +1 -1
- package/lib/AuthStateManager.d.ts +2 -0
- package/lib/PromiseQueue.d.ts +6 -2
- package/lib/TransactionManager.d.ts +3 -4
- package/lib/idx/authenticator/Authenticator.d.ts +1 -1
- package/lib/idx/authenticator/OktaPassword.d.ts +2 -1
- package/lib/idx/authenticator/OktaVerifyTotp.d.ts +1 -1
- package/lib/idx/authenticator/SecurityQuestionEnrollment.d.ts +3 -5
- package/lib/idx/authenticator/SecurityQuestionVerification.d.ts +1 -1
- package/lib/idx/authenticator/VerificationCodeAuthenticator.d.ts +2 -1
- package/lib/idx/authenticator/WebauthnEnrollment.d.ts +1 -1
- package/lib/idx/authenticator/WebauthnVerification.d.ts +1 -1
- package/lib/idx/authenticator/util.d.ts +4 -0
- package/lib/idx/idx-js/index.d.ts +1 -17
- package/lib/idx/idx-js/introspect.d.ts +2 -1
- package/lib/idx/idx-js/v1/generateIdxAction.d.ts +1 -1
- package/lib/idx/idx-js/v1/makeIdxState.d.ts +2 -2
- package/lib/idx/proceed.d.ts +1 -3
- package/lib/idx/remediate.d.ts +2 -2
- package/lib/idx/remediators/AuthenticatorVerificationData.d.ts +1 -0
- package/lib/idx/remediators/Base/AuthenticatorData.d.ts +0 -3
- package/lib/idx/remediators/Base/Remediator.d.ts +5 -4
- package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +7 -9
- package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +2 -4
- package/lib/idx/remediators/ChallengePoll.d.ts +1 -0
- package/lib/idx/remediators/EnrollProfile.d.ts +0 -3
- package/lib/idx/remediators/EnrollmentChannelData.d.ts +0 -4
- package/lib/idx/remediators/Identify.d.ts +3 -5
- package/lib/idx/remediators/ReEnrollAuthenticator.d.ts +2 -5
- package/lib/idx/remediators/SelectAuthenticatorAuthenticate.d.ts +2 -1
- package/lib/idx/remediators/SelectAuthenticatorUnlockAccount.d.ts +1 -2
- package/lib/idx/remediators/Skip.d.ts +0 -3
- package/lib/idx/types/idx-js.d.ts +5 -1
- package/lib/idx/types/index.d.ts +7 -3
- package/lib/idx/util.d.ts +11 -0
- package/lib/options/browser.d.ts +2 -2
- package/lib/options/node.d.ts +2 -2
- package/lib/options.d.ts +14 -0
- package/lib/types/Storage.d.ts +7 -5
- package/lib/types/api.d.ts +1 -3
- package/package.json +7 -6
package/cjs/idx/run.js
CHANGED
|
@@ -1,17 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _WeakMap = require("@babel/runtime-corejs3/core-js-stable/weak-map");
|
|
4
|
-
|
|
5
|
-
var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
|
|
6
|
-
|
|
7
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
3
|
exports.run = run;
|
|
10
4
|
|
|
11
|
-
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
|
12
|
-
|
|
13
|
-
var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/values"));
|
|
14
|
-
|
|
15
5
|
var _interact = require("./interact");
|
|
16
6
|
|
|
17
7
|
var _introspect = require("./introspect");
|
|
@@ -20,17 +10,15 @@ var _remediate = require("./remediate");
|
|
|
20
10
|
|
|
21
11
|
var _flow = require("./flow");
|
|
22
12
|
|
|
23
|
-
var remediators = _interopRequireWildcard(require("./remediators"));
|
|
24
|
-
|
|
25
13
|
var _types = require("../types");
|
|
26
14
|
|
|
27
15
|
var _idxJs = require("./types/idx-js");
|
|
28
16
|
|
|
29
17
|
var _transactionMeta = require("./transactionMeta");
|
|
30
18
|
|
|
31
|
-
|
|
19
|
+
var _util = require("./util");
|
|
32
20
|
|
|
33
|
-
|
|
21
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
34
22
|
|
|
35
23
|
/*!
|
|
36
24
|
* Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
@@ -45,117 +33,83 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
45
33
|
*/
|
|
46
34
|
|
|
47
35
|
/* eslint-disable max-statements, complexity, max-depth */
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (neededToProceed.some(({
|
|
60
|
-
name
|
|
61
|
-
}) => name === 'select-enroll-profile')) {
|
|
62
|
-
res.push(_types.IdxFeature.REGISTRATION);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (neededToProceed.some(({
|
|
66
|
-
name
|
|
67
|
-
}) => name === 'redirect-idp')) {
|
|
68
|
-
res.push(_types.IdxFeature.SOCIAL_IDP);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (neededToProceed.some(({
|
|
72
|
-
name
|
|
73
|
-
}) => name === 'unlock-account')) {
|
|
74
|
-
res.push(_types.IdxFeature.ACCOUNT_UNLOCK);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return res;
|
|
36
|
+
function initializeValues(options) {
|
|
37
|
+
// remove known options, everything else is assumed to be a value
|
|
38
|
+
const knownOptions = ['flow', 'remediators', 'actions', 'withCredentials', 'step'];
|
|
39
|
+
const values = { ...options
|
|
40
|
+
};
|
|
41
|
+
knownOptions.forEach(option => {
|
|
42
|
+
delete values[option];
|
|
43
|
+
});
|
|
44
|
+
return values;
|
|
78
45
|
}
|
|
79
46
|
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
47
|
+
function initializeData(authClient, data) {
|
|
48
|
+
const {
|
|
49
|
+
options
|
|
50
|
+
} = data;
|
|
51
|
+
let {
|
|
52
|
+
flow,
|
|
53
|
+
withCredentials,
|
|
54
|
+
remediators,
|
|
55
|
+
actions
|
|
56
|
+
} = options;
|
|
57
|
+
const status = _types.IdxStatus.PENDING; // certain options can be set by the flow specification
|
|
58
|
+
|
|
59
|
+
flow = flow || authClient.idx.getFlow() || 'default';
|
|
60
|
+
|
|
61
|
+
if (flow) {
|
|
62
|
+
authClient.idx.setFlow(flow);
|
|
63
|
+
const flowSpec = (0, _flow.getFlowSpecification)(authClient, flow); // Favor option values over flow spec
|
|
64
|
+
|
|
65
|
+
withCredentials = typeof withCredentials !== 'undefined' ? withCredentials : flowSpec.withCredentials;
|
|
66
|
+
remediators = remediators || flowSpec.remediators;
|
|
67
|
+
actions = actions || flowSpec.actions;
|
|
100
68
|
}
|
|
101
69
|
|
|
102
|
-
return
|
|
70
|
+
return { ...data,
|
|
71
|
+
options: { ...options,
|
|
72
|
+
flow,
|
|
73
|
+
withCredentials,
|
|
74
|
+
remediators,
|
|
75
|
+
actions
|
|
76
|
+
},
|
|
77
|
+
status
|
|
78
|
+
};
|
|
103
79
|
}
|
|
104
80
|
|
|
105
|
-
async function
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
81
|
+
async function getDataFromIntrospect(authClient, data) {
|
|
82
|
+
const {
|
|
83
|
+
options
|
|
84
|
+
} = data;
|
|
85
|
+
const {
|
|
86
|
+
stateHandle,
|
|
87
|
+
withCredentials,
|
|
88
|
+
version,
|
|
89
|
+
state,
|
|
90
|
+
scopes,
|
|
91
|
+
recoveryToken,
|
|
92
|
+
activationToken
|
|
93
|
+
} = options;
|
|
118
94
|
let idxResponse;
|
|
119
|
-
let
|
|
120
|
-
let metaFromResp;
|
|
121
|
-
let interactionCode;
|
|
122
|
-
|
|
123
|
-
try {
|
|
124
|
-
var _metaFromResp;
|
|
95
|
+
let meta;
|
|
125
96
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
state,
|
|
129
|
-
scopes,
|
|
130
|
-
version,
|
|
131
|
-
remediators,
|
|
132
|
-
actions,
|
|
97
|
+
if (stateHandle) {
|
|
98
|
+
idxResponse = await (0, _introspect.introspect)(authClient, {
|
|
133
99
|
withCredentials,
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
} = options; // Only one flow can be operating at a time
|
|
140
|
-
|
|
141
|
-
flow = flow || authClient.idx.getFlow() || 'default';
|
|
142
|
-
|
|
143
|
-
if (flow) {
|
|
144
|
-
authClient.idx.setFlow(flow);
|
|
145
|
-
const flowSpec = (0, _flow.getFlowSpecification)(authClient, flow); // Favor option values over flow spec
|
|
146
|
-
|
|
147
|
-
withCredentials = typeof withCredentials !== 'undefined' ? withCredentials : flowSpec.withCredentials;
|
|
148
|
-
remediators = remediators || flowSpec.remediators;
|
|
149
|
-
actions = actions || flowSpec.actions;
|
|
150
|
-
} // Try to resume saved transaction
|
|
151
|
-
|
|
100
|
+
version,
|
|
101
|
+
stateHandle
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
var _meta;
|
|
152
105
|
|
|
153
|
-
|
|
106
|
+
// Try to resume saved transaction
|
|
107
|
+
meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
|
|
154
108
|
state,
|
|
155
109
|
recoveryToken,
|
|
156
110
|
activationToken
|
|
157
111
|
});
|
|
158
|
-
interactionHandle = (
|
|
112
|
+
let interactionHandle = (_meta = meta) === null || _meta === void 0 ? void 0 : _meta.interactionHandle; // may be undefined
|
|
159
113
|
|
|
160
114
|
if (!interactionHandle) {
|
|
161
115
|
// start a new transaction
|
|
@@ -168,8 +122,7 @@ async function run(authClient, options = {}) {
|
|
|
168
122
|
recoveryToken
|
|
169
123
|
});
|
|
170
124
|
interactionHandle = interactResponse.interactionHandle;
|
|
171
|
-
|
|
172
|
-
withCredentials = metaFromResp.withCredentials;
|
|
125
|
+
meta = interactResponse.meta;
|
|
173
126
|
} // Introspect to get idx response
|
|
174
127
|
|
|
175
128
|
|
|
@@ -178,98 +131,214 @@ async function run(authClient, options = {}) {
|
|
|
178
131
|
version,
|
|
179
132
|
interactionHandle
|
|
180
133
|
});
|
|
181
|
-
|
|
182
|
-
availableSteps = getAvailableSteps(idxResponse); // Include meta in the transaction response
|
|
134
|
+
}
|
|
183
135
|
|
|
184
|
-
|
|
136
|
+
return { ...data,
|
|
137
|
+
idxResponse,
|
|
138
|
+
meta
|
|
139
|
+
};
|
|
140
|
+
}
|
|
185
141
|
|
|
186
|
-
|
|
187
|
-
|
|
142
|
+
async function getDataFromRemediate(data) {
|
|
143
|
+
let {
|
|
144
|
+
idxResponse,
|
|
145
|
+
options,
|
|
146
|
+
values
|
|
147
|
+
} = data;
|
|
148
|
+
const {
|
|
149
|
+
autoRemediate,
|
|
150
|
+
remediators,
|
|
151
|
+
actions,
|
|
152
|
+
flow,
|
|
153
|
+
step
|
|
154
|
+
} = options;
|
|
155
|
+
const shouldRemediate = autoRemediate !== false && (remediators || actions || step);
|
|
188
156
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
157
|
+
if (!shouldRemediate) {
|
|
158
|
+
return data;
|
|
159
|
+
}
|
|
192
160
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
161
|
+
values = { ...values,
|
|
162
|
+
stateHandle: idxResponse.rawIdxState.stateHandle
|
|
163
|
+
}; // Can we handle the remediations?
|
|
164
|
+
|
|
165
|
+
const {
|
|
166
|
+
idxResponse: idxResponseFromRemediation,
|
|
167
|
+
nextStep,
|
|
168
|
+
canceled
|
|
169
|
+
} = await (0, _remediate.remediate)(idxResponse, values, {
|
|
170
|
+
remediators,
|
|
171
|
+
actions,
|
|
172
|
+
flow,
|
|
173
|
+
step
|
|
174
|
+
});
|
|
175
|
+
idxResponse = idxResponseFromRemediation;
|
|
176
|
+
return { ...data,
|
|
177
|
+
idxResponse,
|
|
178
|
+
nextStep,
|
|
179
|
+
canceled
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
async function getTokens(authClient, data) {
|
|
184
|
+
let {
|
|
185
|
+
meta,
|
|
186
|
+
idxResponse
|
|
187
|
+
} = data;
|
|
188
|
+
const {
|
|
189
|
+
interactionCode
|
|
190
|
+
} = idxResponse;
|
|
191
|
+
const {
|
|
192
|
+
clientId,
|
|
193
|
+
codeVerifier,
|
|
194
|
+
ignoreSignature,
|
|
195
|
+
redirectUri,
|
|
196
|
+
urls,
|
|
197
|
+
scopes
|
|
198
|
+
} = meta;
|
|
199
|
+
const tokenResponse = await authClient.token.exchangeCodeForTokens({
|
|
200
|
+
interactionCode,
|
|
201
|
+
clientId,
|
|
202
|
+
codeVerifier,
|
|
203
|
+
ignoreSignature,
|
|
204
|
+
redirectUri,
|
|
205
|
+
scopes
|
|
206
|
+
}, urls);
|
|
207
|
+
return tokenResponse.tokens;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
async function finalizeData(authClient, data) {
|
|
211
|
+
let {
|
|
212
|
+
options,
|
|
213
|
+
idxResponse,
|
|
214
|
+
canceled,
|
|
215
|
+
status
|
|
216
|
+
} = data;
|
|
217
|
+
const {
|
|
218
|
+
exchangeCodeForTokens
|
|
219
|
+
} = options;
|
|
220
|
+
let shouldClearTransaction = false;
|
|
221
|
+
let clearSharedStorage = true;
|
|
222
|
+
let interactionCode;
|
|
223
|
+
let tokens;
|
|
224
|
+
let enabledFeatures;
|
|
225
|
+
let availableSteps;
|
|
226
|
+
let messages;
|
|
227
|
+
let terminal;
|
|
228
|
+
|
|
229
|
+
if (idxResponse) {
|
|
230
|
+
enabledFeatures = (0, _util.getEnabledFeatures)(idxResponse);
|
|
231
|
+
availableSteps = (0, _util.getAvailableSteps)(idxResponse);
|
|
232
|
+
messages = (0, _util.getMessagesFromResponse)(idxResponse);
|
|
233
|
+
terminal = (0, _util.isTerminalResponse)(idxResponse);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (terminal) {
|
|
237
|
+
status = _types.IdxStatus.TERMINAL;
|
|
238
|
+
shouldClearTransaction = true;
|
|
239
|
+
clearSharedStorage = false;
|
|
240
|
+
} else if (canceled) {
|
|
241
|
+
status = _types.IdxStatus.CANCELED;
|
|
242
|
+
shouldClearTransaction = true;
|
|
243
|
+
} else if (idxResponse !== null && idxResponse !== void 0 && idxResponse.interactionCode) {
|
|
244
|
+
interactionCode = idxResponse.interactionCode;
|
|
245
|
+
|
|
246
|
+
if (exchangeCodeForTokens === false) {
|
|
247
|
+
status = _types.IdxStatus.SUCCESS;
|
|
248
|
+
shouldClearTransaction = false;
|
|
259
249
|
} else {
|
|
260
|
-
|
|
261
|
-
|
|
250
|
+
tokens = await getTokens(authClient, data);
|
|
251
|
+
status = _types.IdxStatus.SUCCESS;
|
|
252
|
+
shouldClearTransaction = true;
|
|
262
253
|
}
|
|
263
254
|
}
|
|
264
255
|
|
|
256
|
+
return { ...data,
|
|
257
|
+
status,
|
|
258
|
+
interactionCode,
|
|
259
|
+
tokens,
|
|
260
|
+
shouldClearTransaction,
|
|
261
|
+
clearSharedStorage,
|
|
262
|
+
enabledFeatures,
|
|
263
|
+
availableSteps,
|
|
264
|
+
messages,
|
|
265
|
+
terminal
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
function handleError(err, data) {
|
|
270
|
+
let {
|
|
271
|
+
error,
|
|
272
|
+
status,
|
|
273
|
+
shouldClearTransaction
|
|
274
|
+
} = data; // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors
|
|
275
|
+
|
|
276
|
+
if ((0, _idxJs.isIdxResponse)(err)) {
|
|
277
|
+
error = err;
|
|
278
|
+
status = _types.IdxStatus.FAILURE;
|
|
279
|
+
shouldClearTransaction = true;
|
|
280
|
+
} else {
|
|
281
|
+
// error is not an IDX response, throw it like a regular error
|
|
282
|
+
throw err;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return { ...data,
|
|
286
|
+
error,
|
|
287
|
+
status,
|
|
288
|
+
shouldClearTransaction
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
async function run(authClient, options = {}) {
|
|
293
|
+
let data = {
|
|
294
|
+
options,
|
|
295
|
+
values: initializeValues(options)
|
|
296
|
+
};
|
|
297
|
+
data = initializeData(authClient, data);
|
|
298
|
+
|
|
299
|
+
try {
|
|
300
|
+
data = await getDataFromIntrospect(authClient, data);
|
|
301
|
+
data = await getDataFromRemediate(data);
|
|
302
|
+
} catch (err) {
|
|
303
|
+
data = handleError(err, data);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
data = await finalizeData(authClient, data);
|
|
307
|
+
const {
|
|
308
|
+
idxResponse,
|
|
309
|
+
meta,
|
|
310
|
+
shouldClearTransaction,
|
|
311
|
+
clearSharedStorage,
|
|
312
|
+
status,
|
|
313
|
+
enabledFeatures,
|
|
314
|
+
availableSteps,
|
|
315
|
+
tokens,
|
|
316
|
+
nextStep,
|
|
317
|
+
messages,
|
|
318
|
+
error,
|
|
319
|
+
interactionCode
|
|
320
|
+
} = data;
|
|
321
|
+
|
|
265
322
|
if (shouldClearTransaction) {
|
|
266
323
|
authClient.transactionManager.clear({
|
|
267
324
|
clearSharedStorage
|
|
268
325
|
});
|
|
269
|
-
} else
|
|
326
|
+
} else {
|
|
270
327
|
// ensures state is saved to sessionStorage
|
|
271
328
|
(0, _transactionMeta.saveTransactionMeta)(authClient, { ...meta
|
|
272
329
|
});
|
|
330
|
+
|
|
331
|
+
if (idxResponse) {
|
|
332
|
+
// Save intermediate idx response in storage to reduce introspect call
|
|
333
|
+
const {
|
|
334
|
+
rawIdxState: rawIdxResponse,
|
|
335
|
+
requestDidSucceed
|
|
336
|
+
} = idxResponse;
|
|
337
|
+
authClient.transactionManager.saveIdxResponse({
|
|
338
|
+
rawIdxResponse,
|
|
339
|
+
requestDidSucceed
|
|
340
|
+
});
|
|
341
|
+
}
|
|
273
342
|
} // from idx-js, used by the widget
|
|
274
343
|
|
|
275
344
|
|
|
@@ -281,7 +350,7 @@ async function run(authClient, options = {}) {
|
|
|
281
350
|
rawIdxState
|
|
282
351
|
} = idxResponse || {};
|
|
283
352
|
return {
|
|
284
|
-
status,
|
|
353
|
+
status: status,
|
|
285
354
|
...(meta && {
|
|
286
355
|
meta
|
|
287
356
|
}),
|
|
@@ -292,12 +361,12 @@ async function run(authClient, options = {}) {
|
|
|
292
361
|
availableSteps
|
|
293
362
|
}),
|
|
294
363
|
...(tokens && {
|
|
295
|
-
tokens
|
|
364
|
+
tokens
|
|
296
365
|
}),
|
|
297
366
|
...(nextStep && {
|
|
298
367
|
nextStep
|
|
299
368
|
}),
|
|
300
|
-
...(messages && {
|
|
369
|
+
...(messages && messages.length && {
|
|
301
370
|
messages
|
|
302
371
|
}),
|
|
303
372
|
...(error && {
|
|
@@ -306,11 +375,11 @@ async function run(authClient, options = {}) {
|
|
|
306
375
|
interactionCode,
|
|
307
376
|
// if options.exchangeCodeForTokens is false
|
|
308
377
|
// from idx-js
|
|
309
|
-
actions,
|
|
310
|
-
context,
|
|
311
|
-
neededToProceed,
|
|
312
|
-
proceed,
|
|
313
|
-
rawIdxState
|
|
378
|
+
actions: actions,
|
|
379
|
+
context: context,
|
|
380
|
+
neededToProceed: neededToProceed,
|
|
381
|
+
proceed: proceed,
|
|
382
|
+
rawIdxState: rawIdxState
|
|
314
383
|
};
|
|
315
384
|
}
|
|
316
385
|
//# sourceMappingURL=run.js.map
|
package/cjs/idx/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../lib/idx/run.ts"],"names":["getEnabledFeatures","idxResponse","res","actions","neededToProceed","push","IdxFeature","PASSWORD_RECOVERY","some","name","REGISTRATION","SOCIAL_IDP","ACCOUNT_UNLOCK","getAvailableSteps","remediatorMap","remediators","map","remediatorClass","remediationName","remediation","T","remediator","getNextStep","context","run","authClient","options","tokens","nextStep","messages","error","meta","enabledFeatures","availableSteps","status","IdxStatus","PENDING","shouldClearTransaction","clearSharedStorage","interactionHandle","metaFromResp","interactionCode","flow","state","scopes","version","withCredentials","exchangeCodeForTokens","autoRemediate","step","recoveryToken","activationToken","idx","getFlow","setFlow","flowSpec","transactionManager","clear","interactResponse","values","stateHandle","rawIdxState","idxResponseFromResp","nextStepFromResp","terminal","canceled","messagesFromResp","saveIdxResponse","TERMINAL","CANCELED","SUCCESS","clientId","codeVerifier","ignoreSignature","redirectUri","urls","token","err","FAILURE","proceed"],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate, RemediateOptions } from './remediate';\nimport { getFlowSpecification, RemediationFlow } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n FlowIdentifier,\n} from '../types';\nimport { IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta, saveTransactionMeta } from './transactionMeta';\nimport { ProceedOptions } from './proceed';\n\nexport type RunOptions = ProceedOptions & RemediateOptions & {\n flow?: FlowIdentifier;\n remediators?: RemediationFlow;\n actions?: string[];\n withCredentials?: boolean;\n}\n\nfunction getEnabledFeatures(idxResponse: IdxResponse): IdxFeature[] {\n const res = [];\n const { actions, neededToProceed } = idxResponse;\n\n if (actions['currentAuthenticator-recover']) {\n res.push(IdxFeature.PASSWORD_RECOVERY as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'select-enroll-profile')) {\n res.push(IdxFeature.REGISTRATION as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'redirect-idp')) {\n res.push(IdxFeature.SOCIAL_IDP as never);\n }\n\n if (neededToProceed.some(({ name }) => name === 'unlock-account')) {\n res.push(IdxFeature.ACCOUNT_UNLOCK as never);\n }\n\n return res;\n}\n\nfunction getAvailableSteps(idxResponse: IdxResponse): NextStep[] {\n const res = [];\n\n const remediatorMap = Object.values(remediators).reduce((map, remediatorClass) => {\n // Only add concrete subclasses to the map\n if (remediatorClass.remediationName) {\n map[remediatorClass.remediationName] = remediatorClass;\n }\n return map;\n }, {});\n\n for (let remediation of idxResponse.neededToProceed) {\n const T = remediatorMap[remediation.name];\n if (T) {\n const remediator = new T(remediation);\n res.push (remediator.getNextStep(idxResponse.context) as never);\n }\n }\n\n return res;\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let tokens;\n let nextStep;\n let messages;\n let error;\n let meta;\n let enabledFeatures;\n let availableSteps;\n let status = IdxStatus.PENDING;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let idxResponse;\n let interactionHandle;\n let metaFromResp;\n let interactionCode;\n\n try {\n\n let {\n flow,\n state,\n scopes,\n version,\n remediators,\n actions,\n withCredentials,\n exchangeCodeForTokens,\n autoRemediate,\n step,\n recoveryToken,\n activationToken\n } = options;\n\n // Only one flow can be operating at a time\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n\n // Try to resume saved transaction\n metaFromResp = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken });\n interactionHandle = metaFromResp?.interactionHandle; // may be undefined\n\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken\n }); \n interactionHandle = interactResponse.interactionHandle;\n metaFromResp = interactResponse.meta;\n withCredentials = metaFromResp.withCredentials;\n }\n\n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(idxResponse);\n \n // Include meta in the transaction response\n meta = metaFromResp;\n\n if (autoRemediate !== false && (remediators || actions)) {\n const values: remediators.RemediationValues = { \n ...options, \n stateHandle: idxResponse.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromResp, \n nextStep: nextStepFromResp,\n terminal,\n canceled,\n messages: messagesFromResp,\n } = await remediate(idxResponse, values, { remediators, actions, flow, step });\n idxResponse = idxResponseFromResp || idxResponse;\n\n // Track fields from remediation response\n nextStep = nextStepFromResp;\n messages = messagesFromResp;\n\n // Save intermediate idx response in storage to reduce introspect call\n if (nextStep) {\n authClient.transactionManager.saveIdxResponse(idxResponse.rawIdxState);\n availableSteps = getAvailableSteps(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n shouldClearTransaction = true;\n clearSharedStorage = false; // transaction may be continued in another tab\n } if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n // exchange the interaction code for tokens\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = metaFromResp;\n tokens = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n }\n } catch (err) {\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n }\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n else if (meta?.state) {\n // ensures state is saved to sessionStorage\n saveTransactionMeta(authClient, { ...meta });\n }\n \n // from idx-js, used by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState } = idxResponse || {};\n return {\n status,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens: tokens.tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && { messages }),\n ...(error && { error }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions,\n context,\n neededToProceed,\n proceed,\n rawIdxState,\n };\n}\n"],"file":"run.js"}
|
|
1
|
+
{"version":3,"sources":["../../../lib/idx/run.ts"],"names":["initializeValues","options","knownOptions","values","forEach","option","initializeData","authClient","data","flow","withCredentials","remediators","actions","status","IdxStatus","PENDING","idx","getFlow","setFlow","flowSpec","getDataFromIntrospect","stateHandle","version","state","scopes","recoveryToken","activationToken","idxResponse","meta","interactionHandle","transactionManager","clear","interactResponse","getDataFromRemediate","autoRemediate","step","shouldRemediate","rawIdxState","idxResponseFromRemediation","nextStep","canceled","getTokens","interactionCode","clientId","codeVerifier","ignoreSignature","redirectUri","urls","tokenResponse","token","exchangeCodeForTokens","tokens","finalizeData","shouldClearTransaction","clearSharedStorage","enabledFeatures","availableSteps","messages","terminal","TERMINAL","CANCELED","SUCCESS","handleError","err","error","FAILURE","run","rawIdxResponse","requestDidSucceed","saveIdxResponse","context","neededToProceed","proceed","length"],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\n/*!\n * Copyright (c) 2015-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * \n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n\n/* eslint-disable max-statements, complexity, max-depth */\nimport { interact } from './interact';\nimport { introspect } from './introspect';\nimport { remediate, RemediateOptions } from './remediate';\nimport { getFlowSpecification, RemediationFlow } from './flow';\nimport * as remediators from './remediators';\nimport { \n OktaAuthInterface,\n IdxStatus,\n IdxTransaction,\n IdxFeature,\n NextStep,\n FlowIdentifier,\n IdxTransactionMeta,\n Tokens,\n APIError,\n} from '../types';\nimport { IdxMessage, IdxResponse, isIdxResponse } from './types/idx-js';\nimport { getSavedTransactionMeta, saveTransactionMeta } from './transactionMeta';\nimport { ProceedOptions } from './proceed';\nimport { getAvailableSteps, getEnabledFeatures, getMessagesFromResponse, isTerminalResponse } from './util';\n\nexport type RunOptions = ProceedOptions & RemediateOptions & {\n flow?: FlowIdentifier;\n remediators?: RemediationFlow;\n actions?: string[];\n withCredentials?: boolean;\n}\n\ndeclare interface RunData {\n options: RunOptions;\n values: remediators.RemediationValues;\n status?: IdxStatus;\n tokens?: Tokens;\n nextStep?: NextStep;\n messages?: IdxMessage[];\n error?: APIError | IdxResponse;\n meta?: IdxTransactionMeta;\n enabledFeatures?: IdxFeature[];\n availableSteps?: NextStep[];\n idxResponse?: IdxResponse;\n canceled?: boolean;\n interactionCode?: string;\n shouldClearTransaction?: boolean;\n clearSharedStorage?: boolean;\n terminal?: boolean;\n}\n\nfunction initializeValues(options: RunOptions) {\n // remove known options, everything else is assumed to be a value\n const knownOptions = ['flow', 'remediators', 'actions', 'withCredentials', 'step'];\n const values = { ...options };\n knownOptions.forEach(option => {\n delete values[option];\n });\n return values;\n}\n\nfunction initializeData(authClient, data: RunData): RunData {\n const { options } = data;\n let {\n flow,\n withCredentials,\n remediators,\n actions\n } = options;\n\n const status = IdxStatus.PENDING;\n\n // certain options can be set by the flow specification\n flow = flow || authClient.idx.getFlow() || 'default';\n if (flow) {\n authClient.idx.setFlow(flow);\n const flowSpec = getFlowSpecification(authClient, flow);\n // Favor option values over flow spec\n withCredentials = (typeof withCredentials !== 'undefined') ? withCredentials : flowSpec.withCredentials;\n remediators = remediators || flowSpec.remediators;\n actions = actions || flowSpec.actions;\n }\n return { \n ...data,\n options: { ...options, flow, withCredentials, remediators, actions },\n status\n };\n}\n\nasync function getDataFromIntrospect(authClient, data: RunData): Promise<RunData> {\n const { options } = data;\n const {\n stateHandle,\n withCredentials,\n version,\n state,\n scopes,\n recoveryToken,\n activationToken\n } = options;\n\n let idxResponse;\n let meta;\n\n if (stateHandle) {\n idxResponse = await introspect(authClient, { withCredentials, version, stateHandle });\n } else {\n // Try to resume saved transaction\n meta = getSavedTransactionMeta(authClient, { state, recoveryToken, activationToken });\n let interactionHandle = meta?.interactionHandle; // may be undefined\n\n if (!interactionHandle) {\n // start a new transaction\n authClient.transactionManager.clear();\n const interactResponse = await interact(authClient, {\n withCredentials,\n state,\n scopes,\n activationToken,\n recoveryToken\n }); \n interactionHandle = interactResponse.interactionHandle;\n meta = interactResponse.meta;\n }\n \n // Introspect to get idx response\n idxResponse = await introspect(authClient, { withCredentials, version, interactionHandle });\n }\n return { ...data, idxResponse, meta };\n}\n\nasync function getDataFromRemediate(data: RunData): Promise<RunData> {\n let {\n idxResponse,\n options,\n values\n } = data;\n\n const {\n autoRemediate,\n remediators,\n actions,\n flow,\n step,\n } = options;\n \n const shouldRemediate = (autoRemediate !== false && (remediators || actions || step));\n if (!shouldRemediate) {\n return data;\n }\n\n values = { \n ...values, \n stateHandle: idxResponse!.rawIdxState.stateHandle \n };\n\n // Can we handle the remediations?\n const { \n idxResponse: idxResponseFromRemediation, \n nextStep,\n canceled,\n } = await remediate(idxResponse!, values, { remediators, actions, flow, step });\n idxResponse = idxResponseFromRemediation;\n\n return { ...data, idxResponse, nextStep, canceled };\n}\n\nasync function getTokens(authClient, data: RunData): Promise<Tokens> {\n let { meta, idxResponse } = data;\n const { interactionCode } = idxResponse as IdxResponse;\n const {\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n urls,\n scopes,\n } = meta as IdxTransactionMeta;\n const tokenResponse = await authClient.token.exchangeCodeForTokens({\n interactionCode,\n clientId,\n codeVerifier,\n ignoreSignature,\n redirectUri,\n scopes\n }, urls);\n return tokenResponse.tokens;\n}\n\nasync function finalizeData(authClient, data: RunData): Promise<RunData> {\n let {\n options,\n idxResponse,\n canceled,\n status,\n } = data;\n const { exchangeCodeForTokens } = options;\n let shouldClearTransaction = false;\n let clearSharedStorage = true;\n let interactionCode;\n let tokens;\n let enabledFeatures;\n let availableSteps;\n let messages;\n let terminal;\n\n if (idxResponse) {\n enabledFeatures = getEnabledFeatures(idxResponse);\n availableSteps = getAvailableSteps(idxResponse);\n messages = getMessagesFromResponse(idxResponse);\n terminal = isTerminalResponse(idxResponse);\n }\n\n if (terminal) {\n status = IdxStatus.TERMINAL;\n shouldClearTransaction = true;\n clearSharedStorage = false;\n } else if (canceled) {\n status = IdxStatus.CANCELED;\n shouldClearTransaction = true;\n } else if (idxResponse?.interactionCode) { \n interactionCode = idxResponse.interactionCode;\n if (exchangeCodeForTokens === false) {\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = false;\n } else {\n tokens = await getTokens(authClient, data);\n status = IdxStatus.SUCCESS;\n shouldClearTransaction = true;\n }\n }\n return {\n ...data,\n status,\n interactionCode,\n tokens,\n shouldClearTransaction,\n clearSharedStorage,\n enabledFeatures,\n availableSteps,\n messages,\n terminal\n };\n}\n\nfunction handleError(err, data: RunData): RunData {\n let { error, status, shouldClearTransaction } = data;\n\n // current version of idx-js will throw/reject IDX responses. Handle these differently than regular errors\n if (isIdxResponse(err)) {\n error = err;\n status = IdxStatus.FAILURE;\n shouldClearTransaction = true;\n } else {\n // error is not an IDX response, throw it like a regular error\n throw err;\n }\n\n return { ...data, error, status, shouldClearTransaction };\n}\n\nexport async function run(\n authClient: OktaAuthInterface, \n options: RunOptions = {},\n): Promise<IdxTransaction> {\n let data: RunData = {\n options,\n values: initializeValues(options)\n };\n\n data = initializeData(authClient, data);\n try {\n data = await getDataFromIntrospect(authClient, data);\n data = await getDataFromRemediate(data);\n } catch (err) {\n data = handleError(err, data);\n }\n data = await finalizeData(authClient, data);\n\n const {\n idxResponse,\n meta,\n shouldClearTransaction,\n clearSharedStorage,\n status,\n enabledFeatures,\n availableSteps,\n tokens,\n nextStep,\n messages,\n error,\n interactionCode\n } = data;\n\n if (shouldClearTransaction) {\n authClient.transactionManager.clear({ clearSharedStorage });\n }\n else {\n // ensures state is saved to sessionStorage\n saveTransactionMeta(authClient, { ...meta });\n\n if (idxResponse) {\n // Save intermediate idx response in storage to reduce introspect call\n const { rawIdxState: rawIdxResponse, requestDidSucceed } = idxResponse;\n authClient.transactionManager.saveIdxResponse({\n rawIdxResponse,\n requestDidSucceed\n });\n }\n\n }\n \n // from idx-js, used by the widget\n const { actions, context, neededToProceed, proceed, rawIdxState } = idxResponse || {};\n return {\n status: status!,\n ...(meta && { meta }),\n ...(enabledFeatures && { enabledFeatures }),\n ...(availableSteps && { availableSteps }),\n ...(tokens && { tokens }),\n ...(nextStep && { nextStep }),\n ...(messages && messages.length && { messages }),\n ...(error && { error }),\n interactionCode, // if options.exchangeCodeForTokens is false\n\n // from idx-js\n actions: actions!,\n context: context!,\n neededToProceed: neededToProceed!,\n proceed: proceed!,\n rawIdxState: rawIdxState!,\n };\n}\n"],"file":"run.js"}
|