@okta/okta-auth-js 6.1.0 → 6.3.1
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 +55 -0
- package/README.md +53 -23
- package/cjs/AuthStateManager.js +14 -7
- package/cjs/AuthStateManager.js.map +1 -1
- package/cjs/OktaAuth.js +30 -14
- package/cjs/OktaAuth.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 +195 -0
- package/cjs/ServiceManager.js.map +1 -0
- package/cjs/TokenManager.js +6 -14
- package/cjs/TokenManager.js.map +1 -1
- package/cjs/TransactionManager.js +11 -5
- package/cjs/TransactionManager.js.map +1 -1
- package/cjs/browser/browserStorage.js +31 -25
- package/cjs/browser/browserStorage.js.map +1 -1
- package/cjs/crypto/node.js +19 -13
- package/cjs/crypto/node.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 +68 -77
- 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 +56 -15
- 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 +270 -195
- 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 +86 -0
- package/cjs/options/browser.js.map +1 -0
- package/cjs/options/index.js +94 -0
- package/cjs/options/index.js.map +1 -0
- package/cjs/options/node.js +45 -0
- package/cjs/options/node.js.map +1 -0
- package/cjs/options.js +11 -1
- package/cjs/options.js.map +1 -1
- package/cjs/server/serverStorage.js +7 -4
- package/cjs/server/serverStorage.js.map +1 -1
- package/cjs/services/AutoRenewService.js +94 -0
- package/cjs/services/AutoRenewService.js.map +1 -0
- package/cjs/services/SyncStorageService.js +93 -0
- package/cjs/services/SyncStorageService.js.map +1 -0
- package/cjs/services/index.js +30 -0
- package/cjs/services/index.js.map +1 -0
- package/cjs/types/Service.js +2 -0
- package/cjs/types/Service.js.map +1 -0
- package/cjs/types/index.js +13 -0
- package/cjs/types/index.js.map +1 -1
- package/dist/okta-auth-js.min.js +1 -1
- package/dist/okta-auth-js.min.js.LICENSE.txt +0 -8
- 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.LICENSE.txt +1 -7
- package/dist/okta-auth-js.umd.js.map +1 -1
- package/esm/{index.js → esm.browser.js} +2144 -2975
- package/esm/esm.browser.js.map +1 -0
- package/esm/esm.node.mjs +9595 -0
- package/esm/esm.node.mjs.map +1 -0
- package/lib/AuthStateManager.d.ts +3 -3
- package/lib/OktaAuth.d.ts +5 -4
- package/lib/PromiseQueue.d.ts +6 -2
- package/lib/ServiceManager.d.ts +38 -0
- package/lib/TokenManager.d.ts +0 -1
- 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 +6 -5
- package/lib/idx/remediators/Base/AuthenticatorData.d.ts +5 -9
- 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 +16 -0
- package/lib/options/index.d.ts +14 -0
- package/lib/options/node.d.ts +16 -0
- package/lib/services/AutoRenewService.d.ts +27 -0
- package/lib/services/{TokenService.d.ts → SyncStorageService.d.ts} +8 -5
- package/lib/services/index.d.ts +13 -0
- package/lib/types/OktaAuthOptions.d.ts +5 -0
- package/lib/types/Service.d.ts +23 -0
- package/lib/types/Storage.d.ts +7 -5
- package/lib/types/api.d.ts +6 -5
- package/lib/types/index.d.ts +1 -0
- package/package.json +26 -11
- package/cjs/services/TokenService.js +0 -111
- package/cjs/services/TokenService.js.map +0 -1
- package/esm/index.js.map +0 -1
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,115 +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
|
-
|
|
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;
|
|
116
94
|
let idxResponse;
|
|
117
|
-
let
|
|
118
|
-
let metaFromResp;
|
|
119
|
-
let interactionCode;
|
|
120
|
-
|
|
121
|
-
try {
|
|
122
|
-
var _metaFromResp;
|
|
95
|
+
let meta;
|
|
123
96
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
state,
|
|
127
|
-
scopes,
|
|
128
|
-
version,
|
|
129
|
-
remediators,
|
|
130
|
-
actions,
|
|
97
|
+
if (stateHandle) {
|
|
98
|
+
idxResponse = await (0, _introspect.introspect)(authClient, {
|
|
131
99
|
withCredentials,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
} = options; // Only one flow can be operating at a time
|
|
138
|
-
|
|
139
|
-
flow = flow || authClient.idx.getFlow() || 'default';
|
|
140
|
-
|
|
141
|
-
if (flow) {
|
|
142
|
-
authClient.idx.setFlow(flow);
|
|
143
|
-
const flowSpec = (0, _flow.getFlowSpecification)(authClient, flow); // Favor option values over flow spec
|
|
144
|
-
|
|
145
|
-
withCredentials = typeof withCredentials !== 'undefined' ? withCredentials : flowSpec.withCredentials;
|
|
146
|
-
remediators = remediators || flowSpec.remediators;
|
|
147
|
-
actions = actions || flowSpec.actions;
|
|
148
|
-
} // Try to resume saved transaction
|
|
149
|
-
|
|
100
|
+
version,
|
|
101
|
+
stateHandle
|
|
102
|
+
});
|
|
103
|
+
} else {
|
|
104
|
+
var _meta;
|
|
150
105
|
|
|
151
|
-
|
|
106
|
+
// Try to resume saved transaction
|
|
107
|
+
meta = (0, _transactionMeta.getSavedTransactionMeta)(authClient, {
|
|
152
108
|
state,
|
|
153
109
|
recoveryToken,
|
|
154
110
|
activationToken
|
|
155
111
|
});
|
|
156
|
-
interactionHandle = (
|
|
112
|
+
let interactionHandle = (_meta = meta) === null || _meta === void 0 ? void 0 : _meta.interactionHandle; // may be undefined
|
|
157
113
|
|
|
158
114
|
if (!interactionHandle) {
|
|
159
115
|
// start a new transaction
|
|
@@ -166,8 +122,7 @@ async function run(authClient, options = {}) {
|
|
|
166
122
|
recoveryToken
|
|
167
123
|
});
|
|
168
124
|
interactionHandle = interactResponse.interactionHandle;
|
|
169
|
-
|
|
170
|
-
withCredentials = metaFromResp.withCredentials;
|
|
125
|
+
meta = interactResponse.meta;
|
|
171
126
|
} // Introspect to get idx response
|
|
172
127
|
|
|
173
128
|
|
|
@@ -176,94 +131,214 @@ async function run(authClient, options = {}) {
|
|
|
176
131
|
version,
|
|
177
132
|
interactionHandle
|
|
178
133
|
});
|
|
179
|
-
|
|
180
|
-
availableSteps = getAvailableSteps(idxResponse); // Include meta in the transaction response
|
|
134
|
+
}
|
|
181
135
|
|
|
182
|
-
|
|
136
|
+
return { ...data,
|
|
137
|
+
idxResponse,
|
|
138
|
+
meta
|
|
139
|
+
};
|
|
140
|
+
}
|
|
183
141
|
|
|
184
|
-
|
|
185
|
-
|
|
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);
|
|
186
156
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
157
|
+
if (!shouldRemediate) {
|
|
158
|
+
return data;
|
|
159
|
+
}
|
|
190
160
|
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
|
|
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;
|
|
257
249
|
} else {
|
|
258
|
-
|
|
259
|
-
|
|
250
|
+
tokens = await getTokens(authClient, data);
|
|
251
|
+
status = _types.IdxStatus.SUCCESS;
|
|
252
|
+
shouldClearTransaction = true;
|
|
260
253
|
}
|
|
261
254
|
}
|
|
262
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
|
+
|
|
263
322
|
if (shouldClearTransaction) {
|
|
264
323
|
authClient.transactionManager.clear({
|
|
265
324
|
clearSharedStorage
|
|
266
325
|
});
|
|
326
|
+
} else {
|
|
327
|
+
// ensures state is saved to sessionStorage
|
|
328
|
+
(0, _transactionMeta.saveTransactionMeta)(authClient, { ...meta
|
|
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
|
+
}
|
|
267
342
|
} // from idx-js, used by the widget
|
|
268
343
|
|
|
269
344
|
|
|
@@ -275,7 +350,7 @@ async function run(authClient, options = {}) {
|
|
|
275
350
|
rawIdxState
|
|
276
351
|
} = idxResponse || {};
|
|
277
352
|
return {
|
|
278
|
-
status,
|
|
353
|
+
status: status,
|
|
279
354
|
...(meta && {
|
|
280
355
|
meta
|
|
281
356
|
}),
|
|
@@ -286,12 +361,12 @@ async function run(authClient, options = {}) {
|
|
|
286
361
|
availableSteps
|
|
287
362
|
}),
|
|
288
363
|
...(tokens && {
|
|
289
|
-
tokens
|
|
364
|
+
tokens
|
|
290
365
|
}),
|
|
291
366
|
...(nextStep && {
|
|
292
367
|
nextStep
|
|
293
368
|
}),
|
|
294
|
-
...(messages && {
|
|
369
|
+
...(messages && messages.length && {
|
|
295
370
|
messages
|
|
296
371
|
}),
|
|
297
372
|
...(error && {
|
|
@@ -300,11 +375,11 @@ async function run(authClient, options = {}) {
|
|
|
300
375
|
interactionCode,
|
|
301
376
|
// if options.exchangeCodeForTokens is false
|
|
302
377
|
// from idx-js
|
|
303
|
-
actions,
|
|
304
|
-
context,
|
|
305
|
-
neededToProceed,
|
|
306
|
-
proceed,
|
|
307
|
-
rawIdxState
|
|
378
|
+
actions: actions,
|
|
379
|
+
context: context,
|
|
380
|
+
neededToProceed: neededToProceed,
|
|
381
|
+
proceed: proceed,
|
|
382
|
+
rawIdxState: rawIdxState
|
|
308
383
|
};
|
|
309
384
|
}
|
|
310
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 } 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 \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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../lib/idx/types/idx-js.ts"],"names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;
|
|
1
|
+
{"version":3,"sources":["../../../../lib/idx/types/idx-js.ts"],"names":["isRawIdxResponse","obj","version","isIdxResponse","rawIdxState"],"mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AA2KA;AAeO,SAASA,gBAAT,CAA0BC,GAA1B,EAA2D;AAChE,SAAOA,GAAG,IAAIA,GAAG,CAACC,OAAlB;AACD;;AAqBM,SAASC,aAAT,CAAuBF,GAAvB,EAAqD;AAC1D,SAAOA,GAAG,IAAID,gBAAgB,CAACC,GAAG,CAACG,WAAL,CAA9B;AACD","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// TODO: remove when idx-js provides type information\n\nexport interface ChallengeData {\n challenge: string; \n userVerification: string; \n extensions?: {\n appid: string;\n };\n}\nexport interface ActivationData {\n challenge: string;\n rp: {\n name: string;\n };\n user: {\n id: string;\n name: string;\n displayName: string;\n };\n pubKeyCredParams: {\n type: string;\n alg: number;\n }[];\n attestation?: string;\n authenticatorSelection?: {\n userVerification?: string;\n authenticatorAttachment?: string;\n requireResidentKey?: boolean;\n residentKey?: string;\n };\n excludeCredentials?: {\n id: string;\n type: string;\n }[];\n}\nexport interface IdxAuthenticatorMethod {\n type: string;\n}\nexport interface IdxAuthenticator {\n displayName: string;\n id: string;\n key: string;\n methods: IdxAuthenticatorMethod[];\n type: string;\n settings?: {\n complexity?: unknown;\n age?: unknown;\n };\n contextualData?: {\n enrolledQuestion?: {\n question: string;\n questionKey: string;\n };\n qrcode?: { \n href: string; \n method: string; \n type: string; \n };\n sharedSecret?: string;\n questions?: {\n questionKey: string;\n question: string;\n }[];\n questionKeys?: string[];\n selectedChannel?: string;\n activationData?: ActivationData;\n challengeData?: ChallengeData;\n };\n credentialId?: string;\n enrollmentId?: string;\n}\n\nexport interface IdxForm {\n value: IdxRemediationValue[];\n}\n\nexport interface IdxOption {\n value: string | { form: IdxForm };\n label: string;\n relatesTo?: IdxAuthenticator;\n}\n\nexport interface IdpConfig {\n id: string;\n name: string;\n}\n\nexport interface IdxRemediationValueForm {\n form: IdxForm;\n}\n\nexport interface IdxRemediationValue {\n name: string;\n type?: string;\n required?: boolean;\n secret?: boolean;\n visible?: boolean;\n mutable?: boolean;\n value?: string | IdxRemediationValueForm;\n label?: string;\n form?: IdxForm;\n options?: IdxOption[];\n messages?: IdxMessages;\n minLength?: number;\n maxLength?: number;\n}\n\nexport interface IdxRemediation {\n name: string;\n label?: string;\n value?: IdxRemediationValue[];\n relatesTo?: {\n type?: string;\n value: IdxAuthenticator;\n };\n idp?: IdpConfig;\n href?: string;\n method?: string;\n type?: string;\n accepts?: string;\n refresh?: number;\n}\n\nexport interface IdxContext {\n version: string;\n stateHandle: string;\n expiresAt: string;\n intent: string;\n currentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n authenticators: {\n type: string;\n value: IdxAuthenticator[];\n };\n authenticatorEnrollments: {\n type: string;\n value: IdxAuthenticator[];\n };\n enrollmentAuthenticator: {\n type: string;\n value: IdxAuthenticator;\n };\n user: {\n type: string;\n value: Record<string, unknown>;\n };\n app: {\n type: string;\n value: Record<string, unknown>;\n };\n messages?: IdxMessages;\n success?: IdxRemediation;\n failure?: IdxRemediation;\n}\n\nexport interface IdxMessage {\n message: string;\n class: string;\n i18n: {\n key: string;\n params?: unknown[];\n };\n}\n\nexport interface IdxMessages {\n type: 'array';\n value: IdxMessage[];\n}\n\n// JSON response from the server\nexport interface RawIdxResponse {\n version: string;\n stateHandle: string;\n intent?: string;\n expiresAt?: string;\n remediation?: {\n type: 'array';\n value: IdxRemediation[];\n };\n messages?: IdxMessages;\n success?: boolean;\n successWithInteractionCode?: IdxRemediation;\n}\n\nexport function isRawIdxResponse(obj: any): obj is RawIdxResponse {\n return obj && obj.version;\n}\n\n\nexport interface IdxActions {\n [key: string]: () => Promise<IdxResponse>;\n}\n\n// Object returned from auth-js\nexport interface IdxResponse {\n proceed: (remediationName: string, params: unknown) => Promise<IdxResponse>;\n neededToProceed: IdxRemediation[];\n rawIdxState: RawIdxResponse;\n interactionCode?: string;\n actions: IdxActions;\n toPersist: {\n interactionHandle?: string;\n };\n context?: IdxContext;\n requestDidSucceed?: boolean;\n}\n\nexport function isIdxResponse(obj: any): obj is IdxResponse {\n return obj && isRawIdxResponse(obj.rawIdxState);\n}\n"],"file":"idx-js.js"}
|