@okta/okta-auth-js 6.0.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 +65 -0
- package/README.md +58 -27
- package/cjs/AuthStateManager.js +21 -7
- package/cjs/AuthStateManager.js.map +1 -1
- package/cjs/OktaAuth.js +96 -40
- package/cjs/OktaAuth.js.map +1 -1
- package/cjs/OktaUserAgent.js +2 -2
- package/cjs/PromiseQueue.js +14 -3
- package/cjs/PromiseQueue.js.map +1 -1
- package/cjs/SavedObject.js +4 -2
- package/cjs/SavedObject.js.map +1 -1
- package/cjs/ServiceManager.js +195 -0
- package/cjs/ServiceManager.js.map +1 -0
- package/cjs/StorageManager.js +13 -8
- package/cjs/StorageManager.js.map +1 -1
- package/cjs/TokenManager.js +34 -32
- package/cjs/TokenManager.js.map +1 -1
- package/cjs/TransactionManager.js +17 -5
- package/cjs/TransactionManager.js.map +1 -1
- package/cjs/browser/browserStorage.js +48 -33
- package/cjs/browser/browserStorage.js.map +1 -1
- package/cjs/browser/fingerprint.js +9 -3
- package/cjs/browser/fingerprint.js.map +1 -1
- package/cjs/builderUtil.js +4 -2
- package/cjs/builderUtil.js.map +1 -1
- package/cjs/clock.js +5 -1
- package/cjs/clock.js.map +1 -1
- package/cjs/crypto/base64.js +18 -0
- package/cjs/crypto/base64.js.map +1 -1
- package/cjs/crypto/index.js +6 -4
- package/cjs/crypto/index.js.map +1 -1
- package/cjs/crypto/node.js +19 -13
- package/cjs/crypto/node.js.map +1 -1
- package/cjs/crypto/oidcHash.js +5 -1
- package/cjs/crypto/oidcHash.js.map +1 -1
- package/cjs/crypto/webauthn.js +101 -0
- package/cjs/crypto/webauthn.js.map +1 -0
- package/cjs/crypto/webcrypto.js +3 -1
- package/cjs/crypto/webcrypto.js.map +1 -1
- package/cjs/errors/AuthApiError.js +1 -1
- package/cjs/errors/AuthPollStopError.js +1 -1
- package/cjs/errors/AuthSdkError.js +1 -1
- package/cjs/errors/CustomError.js +5 -1
- package/cjs/errors/CustomError.js.map +1 -1
- package/cjs/errors/OAuthError.js +1 -1
- package/cjs/errors/index.js +1 -1
- package/cjs/fetch/fetchRequest.js +18 -6
- package/cjs/fetch/fetchRequest.js.map +1 -1
- package/cjs/http/headers.js.map +1 -1
- package/cjs/http/index.js +4 -2
- package/cjs/http/index.js.map +1 -1
- package/cjs/http/request.js +9 -5
- package/cjs/http/request.js.map +1 -1
- package/cjs/idx/authenticate.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 +15 -2
- package/cjs/idx/authenticator/SecurityQuestionEnrollment.js.map +1 -1
- package/cjs/idx/authenticator/SecurityQuestionVerification.js +10 -2
- 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 +51 -0
- package/cjs/idx/authenticator/WebauthnEnrollment.js.map +1 -0
- package/cjs/idx/authenticator/WebauthnVerification.js +60 -0
- package/cjs/idx/authenticator/WebauthnVerification.js.map +1 -0
- package/cjs/idx/authenticator/getAuthenticator.js +13 -1
- package/cjs/idx/authenticator/getAuthenticator.js.map +1 -1
- package/cjs/idx/authenticator/index.js +34 -6
- package/cjs/idx/authenticator/index.js.map +1 -1
- package/cjs/idx/authenticator/util.js +64 -0
- package/cjs/idx/authenticator/util.js.map +1 -0
- package/cjs/idx/cancel.js.map +1 -1
- package/cjs/idx/emailVerify.js +1 -1
- package/cjs/idx/emailVerify.js.map +1 -1
- package/cjs/idx/flow/AccountUnlockFlow.js +30 -0
- package/cjs/idx/flow/AccountUnlockFlow.js.map +1 -0
- package/cjs/idx/flow/FlowSpecification.js +8 -0
- package/cjs/idx/flow/FlowSpecification.js.map +1 -1
- package/cjs/idx/flow/PasswordRecoveryFlow.js +4 -1
- package/cjs/idx/flow/PasswordRecoveryFlow.js.map +1 -1
- package/cjs/idx/flow/index.js +20 -5
- package/cjs/idx/flow/index.js.map +1 -1
- package/cjs/idx/handleInteractionCodeRedirect.js +5 -1
- package/cjs/idx/handleInteractionCodeRedirect.js.map +1 -1
- package/cjs/idx/headers.js +21 -5
- package/cjs/idx/headers.js.map +1 -1
- package/cjs/idx/idx-js/client.js +91 -0
- package/cjs/idx/idx-js/client.js.map +1 -0
- package/cjs/idx/idx-js/index.js +40 -0
- package/cjs/idx/idx-js/index.js.map +1 -0
- package/cjs/idx/idx-js/interact.js +83 -0
- package/cjs/idx/idx-js/interact.js.map +1 -0
- package/cjs/idx/idx-js/introspect.js +62 -0
- package/cjs/idx/idx-js/introspect.js.map +1 -0
- package/cjs/idx/idx-js/parsers.js +41 -0
- package/cjs/idx/idx-js/parsers.js.map +1 -0
- package/cjs/idx/idx-js/util.js +34 -0
- package/cjs/idx/idx-js/util.js.map +1 -0
- package/cjs/idx/idx-js/v1/actionParser.js +90 -0
- package/cjs/idx/idx-js/v1/actionParser.js.map +1 -0
- package/cjs/idx/idx-js/v1/generateIdxAction.js +111 -0
- package/cjs/idx/idx-js/v1/generateIdxAction.js.map +1 -0
- package/cjs/idx/idx-js/v1/idxResponseParser.js +137 -0
- package/cjs/idx/idx-js/v1/idxResponseParser.js.map +1 -0
- package/cjs/idx/idx-js/v1/makeIdxState.js +65 -0
- package/cjs/idx/idx-js/v1/makeIdxState.js.map +1 -0
- package/cjs/idx/idx-js/v1/parsers.js +24 -0
- package/cjs/idx/idx-js/v1/parsers.js.map +1 -0
- package/cjs/idx/idx-js/v1/remediationParser.js +32 -0
- package/cjs/idx/idx-js/v1/remediationParser.js.map +1 -0
- package/cjs/idx/index.js +120 -121
- package/cjs/idx/index.js.map +1 -1
- package/cjs/idx/interact.js +9 -4
- package/cjs/idx/interact.js.map +1 -1
- package/cjs/idx/introspect.js +19 -9
- package/cjs/idx/introspect.js.map +1 -1
- package/cjs/idx/poll.js +13 -3
- package/cjs/idx/poll.js.map +1 -1
- package/cjs/idx/proceed.js +14 -11
- package/cjs/idx/proceed.js.map +1 -1
- package/cjs/idx/recoverPassword.js.map +1 -1
- package/cjs/idx/register.js +5 -1
- package/cjs/idx/register.js.map +1 -1
- package/cjs/idx/remediate.js +112 -88
- package/cjs/idx/remediate.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js +16 -6
- package/cjs/idx/remediators/AuthenticatorEnrollmentData.js.map +1 -1
- package/cjs/idx/remediators/AuthenticatorVerificationData.js +61 -16
- package/cjs/idx/remediators/AuthenticatorVerificationData.js.map +1 -1
- package/cjs/idx/remediators/Base/AuthenticatorData.js +44 -20
- package/cjs/idx/remediators/Base/AuthenticatorData.js.map +1 -1
- package/cjs/idx/remediators/Base/Remediator.js +116 -82
- package/cjs/idx/remediators/Base/Remediator.js.map +1 -1
- package/cjs/idx/remediators/Base/SelectAuthenticator.js +58 -34
- package/cjs/idx/remediators/Base/SelectAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js +30 -7
- package/cjs/idx/remediators/Base/VerifyAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/ChallengeAuthenticator.js +2 -2
- package/cjs/idx/remediators/ChallengePoll.js +10 -3
- package/cjs/idx/remediators/ChallengePoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollAuthenticator.js +2 -2
- package/cjs/idx/remediators/EnrollPoll.js +16 -6
- package/cjs/idx/remediators/EnrollPoll.js.map +1 -1
- package/cjs/idx/remediators/EnrollProfile.js +34 -16
- package/cjs/idx/remediators/EnrollProfile.js.map +1 -1
- package/cjs/idx/remediators/EnrollmentChannelData.js +25 -17
- package/cjs/idx/remediators/EnrollmentChannelData.js.map +1 -1
- package/cjs/idx/remediators/Identify.js +16 -7
- package/cjs/idx/remediators/Identify.js.map +1 -1
- package/cjs/idx/remediators/ReEnrollAuthenticator.js +13 -10
- package/cjs/idx/remediators/ReEnrollAuthenticator.js.map +1 -1
- package/cjs/idx/remediators/RedirectIdp.js +2 -2
- package/cjs/idx/remediators/ResetAuthenticator.js +2 -2
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js +9 -6
- package/cjs/idx/remediators/SelectAuthenticatorAuthenticate.js.map +1 -1
- package/cjs/idx/remediators/SelectAuthenticatorEnroll.js +2 -2
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js +71 -0
- package/cjs/idx/remediators/SelectAuthenticatorUnlockAccount.js.map +1 -0
- package/cjs/idx/remediators/SelectEnrollProfile.js +2 -2
- package/cjs/idx/remediators/SelectEnrollmentChannel.js +22 -10
- package/cjs/idx/remediators/SelectEnrollmentChannel.js.map +1 -1
- package/cjs/idx/remediators/Skip.js +5 -10
- package/cjs/idx/remediators/Skip.js.map +1 -1
- package/cjs/idx/remediators/index.js +33 -18
- package/cjs/idx/remediators/index.js.map +1 -1
- package/cjs/idx/remediators/util.js +13 -3
- package/cjs/idx/remediators/util.js.map +1 -1
- package/cjs/idx/run.js +276 -177
- package/cjs/idx/run.js.map +1 -1
- package/cjs/idx/startTransaction.js.map +1 -1
- package/cjs/idx/transactionMeta.js.map +1 -1
- package/cjs/idx/types/idx-js.js.map +1 -1
- package/cjs/idx/types/index.js +82 -9
- package/cjs/idx/types/index.js.map +1 -1
- package/cjs/idx/unlockAccount.js +48 -0
- package/cjs/idx/unlockAccount.js.map +1 -0
- package/cjs/idx/util.js +198 -0
- package/cjs/idx/util.js.map +1 -0
- package/cjs/index.js +20 -14
- package/cjs/index.js.map +1 -1
- package/cjs/oidc/endpoints/authorize.js +8 -2
- package/cjs/oidc/endpoints/authorize.js.map +1 -1
- package/cjs/oidc/endpoints/index.js +5 -3
- package/cjs/oidc/endpoints/index.js.map +1 -1
- package/cjs/oidc/endpoints/token.js +15 -3
- package/cjs/oidc/endpoints/token.js.map +1 -1
- package/cjs/oidc/endpoints/well-known.js +7 -3
- package/cjs/oidc/endpoints/well-known.js.map +1 -1
- package/cjs/oidc/exchangeCodeForTokens.js +10 -2
- package/cjs/oidc/exchangeCodeForTokens.js.map +1 -1
- package/cjs/oidc/getToken.js +9 -5
- package/cjs/oidc/getToken.js.map +1 -1
- package/cjs/oidc/getUserInfo.js +7 -3
- package/cjs/oidc/getUserInfo.js.map +1 -1
- package/cjs/oidc/getWithPopup.js +8 -2
- package/cjs/oidc/getWithPopup.js.map +1 -1
- package/cjs/oidc/getWithRedirect.js +5 -1
- package/cjs/oidc/getWithRedirect.js.map +1 -1
- package/cjs/oidc/getWithoutPrompt.js +8 -2
- package/cjs/oidc/getWithoutPrompt.js.map +1 -1
- package/cjs/oidc/handleOAuthResponse.js +9 -3
- package/cjs/oidc/handleOAuthResponse.js.map +1 -1
- package/cjs/oidc/index.js +4 -2
- package/cjs/oidc/index.js.map +1 -1
- package/cjs/oidc/parseFromUrl.js +9 -3
- package/cjs/oidc/parseFromUrl.js.map +1 -1
- package/cjs/oidc/renewToken.js.map +1 -1
- package/cjs/oidc/renewTokens.js +5 -1
- package/cjs/oidc/renewTokens.js.map +1 -1
- package/cjs/oidc/renewTokensWithRefresh.js +5 -1
- package/cjs/oidc/renewTokensWithRefresh.js.map +1 -1
- package/cjs/oidc/revokeToken.js +7 -3
- package/cjs/oidc/revokeToken.js.map +1 -1
- package/cjs/oidc/util/browser.js +5 -1
- package/cjs/oidc/util/browser.js.map +1 -1
- package/cjs/oidc/util/defaultTokenParams.js.map +1 -1
- package/cjs/oidc/util/errors.js.map +1 -1
- package/cjs/oidc/util/index.js +14 -12
- package/cjs/oidc/util/index.js.map +1 -1
- package/cjs/oidc/util/loginRedirect.js +5 -1
- package/cjs/oidc/util/loginRedirect.js.map +1 -1
- package/cjs/oidc/util/oauth.js +4 -2
- package/cjs/oidc/util/oauth.js.map +1 -1
- package/cjs/oidc/util/oauthMeta.js.map +1 -1
- package/cjs/oidc/util/pkce.js +11 -3
- package/cjs/oidc/util/pkce.js.map +1 -1
- package/cjs/oidc/util/prepareTokenParams.js +7 -5
- package/cjs/oidc/util/prepareTokenParams.js.map +1 -1
- package/cjs/oidc/util/validateClaims.js +1 -1
- package/cjs/oidc/util/validateClaims.js.map +1 -1
- package/cjs/oidc/verifyToken.js +11 -3
- package/cjs/oidc/verifyToken.js.map +1 -1
- 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 +17 -5
- package/cjs/options.js.map +1 -1
- package/cjs/server/serverStorage.js +8 -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/tx/AuthTransaction.js +15 -9
- package/cjs/tx/AuthTransaction.js.map +1 -1
- package/cjs/tx/api.js +8 -4
- package/cjs/tx/api.js.map +1 -1
- package/cjs/tx/index.js +7 -5
- package/cjs/tx/index.js.map +1 -1
- package/cjs/tx/poll.js +6 -4
- package/cjs/tx/poll.js.map +1 -1
- package/cjs/tx/util.js +5 -1
- package/cjs/tx/util.js.map +1 -1
- package/cjs/types/Service.js +2 -0
- package/cjs/types/Service.js.map +1 -0
- package/cjs/types/Transaction.js +10 -2
- package/cjs/types/Transaction.js.map +1 -1
- package/cjs/types/index.js +29 -14
- package/cjs/types/index.js.map +1 -1
- package/cjs/util/index.js +7 -5
- package/cjs/util/index.js.map +1 -1
- package/cjs/util/misc.js +5 -1
- package/cjs/util/misc.js.map +1 -1
- package/cjs/util/object.js +16 -6
- package/cjs/util/object.js.map +1 -1
- package/cjs/util/sharedStorage.js +5 -1
- package/cjs/util/sharedStorage.js.map +1 -1
- package/dist/okta-auth-js.min.js +1 -1
- package/dist/okta-auth-js.min.js.LICENSE.txt +0 -20
- package/dist/okta-auth-js.min.js.map +1 -1
- package/dist/okta-auth-js.polyfill.js +1 -1
- package/dist/okta-auth-js.polyfill.js.map +1 -1
- package/dist/okta-auth-js.umd.js +1 -1
- package/dist/okta-auth-js.umd.js.LICENSE.txt +1 -19
- package/dist/okta-auth-js.umd.js.map +1 -1
- package/esm/{index.js → esm.browser.js} +2978 -2585
- 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 +10 -6
- package/lib/PromiseQueue.d.ts +6 -2
- package/lib/ServiceManager.d.ts +38 -0
- package/lib/StorageManager.d.ts +1 -1
- package/lib/TokenManager.d.ts +2 -3
- package/lib/TransactionManager.d.ts +4 -5
- package/lib/browser/fingerprint.d.ts +2 -3
- package/lib/crypto/base64.d.ts +2 -0
- package/lib/crypto/webauthn.d.ts +25 -0
- package/lib/http/headers.d.ts +2 -2
- package/lib/http/request.d.ts +4 -4
- package/lib/idx/authenticate.d.ts +2 -2
- package/lib/idx/authenticator/Authenticator.d.ts +4 -5
- package/lib/idx/authenticator/OktaPassword.d.ts +8 -9
- package/lib/idx/authenticator/OktaVerifyTotp.d.ts +1 -1
- package/lib/idx/authenticator/SecurityQuestionEnrollment.d.ts +11 -12
- package/lib/idx/authenticator/SecurityQuestionVerification.d.ts +7 -7
- package/lib/idx/authenticator/VerificationCodeAuthenticator.d.ts +8 -3
- package/lib/idx/authenticator/WebauthnEnrollment.d.ts +16 -0
- package/lib/idx/authenticator/WebauthnVerification.d.ts +17 -0
- package/lib/idx/authenticator/getAuthenticator.d.ts +1 -1
- package/lib/idx/authenticator/index.d.ts +9 -0
- package/lib/idx/authenticator/util.d.ts +4 -0
- package/lib/idx/cancel.d.ts +2 -2
- package/lib/idx/emailVerify.d.ts +2 -2
- package/lib/idx/flow/AccountUnlockFlow.d.ts +13 -0
- package/lib/idx/flow/FlowSpecification.d.ts +2 -2
- package/lib/idx/flow/index.d.ts +1 -0
- package/lib/idx/headers.d.ts +3 -2
- package/lib/idx/idx-js/client.d.ts +36 -0
- package/lib/idx/idx-js/index.d.ts +35 -0
- package/lib/idx/idx-js/interact.d.ts +25 -0
- package/lib/idx/idx-js/introspect.d.ts +21 -0
- package/lib/idx/idx-js/parsers.d.ts +15 -0
- package/lib/idx/idx-js/util.d.ts +12 -0
- package/lib/idx/idx-js/v1/actionParser.d.ts +16 -0
- package/lib/idx/idx-js/v1/generateIdxAction.d.ts +13 -0
- package/lib/idx/idx-js/v1/idxResponseParser.d.ts +20 -0
- package/lib/idx/idx-js/v1/makeIdxState.d.ts +13 -0
- package/lib/idx/idx-js/v1/parsers.d.ts +16 -0
- package/lib/idx/idx-js/v1/remediationParser.d.ts +12 -0
- package/lib/idx/index.d.ts +12 -11
- package/lib/idx/interact.d.ts +3 -2
- package/lib/idx/introspect.d.ts +2 -2
- package/lib/idx/poll.d.ts +2 -2
- package/lib/idx/proceed.d.ts +5 -6
- package/lib/idx/recoverPassword.d.ts +2 -2
- package/lib/idx/register.d.ts +2 -2
- 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 -8
- package/lib/idx/remediators/Base/Remediator.d.ts +6 -5
- package/lib/idx/remediators/Base/SelectAuthenticator.d.ts +9 -8
- package/lib/idx/remediators/Base/VerifyAuthenticator.d.ts +9 -16
- 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 +1 -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 +37 -0
- package/lib/idx/remediators/SelectEnrollmentChannel.d.ts +1 -0
- package/lib/idx/remediators/Skip.d.ts +0 -3
- package/lib/idx/remediators/index.d.ts +1 -0
- package/lib/idx/run.d.ts +2 -2
- package/lib/idx/startTransaction.d.ts +2 -2
- package/lib/idx/transactionMeta.d.ts +7 -7
- package/lib/idx/types/FlowIdentifier.d.ts +1 -1
- package/lib/idx/types/idx-js.d.ts +41 -1
- package/lib/idx/types/index.d.ts +27 -7
- package/lib/idx/unlockAccount.d.ts +15 -0
- package/lib/idx/util.d.ts +11 -0
- package/lib/oidc/endpoints/well-known.d.ts +3 -3
- package/lib/oidc/exchangeCodeForTokens.d.ts +2 -2
- package/lib/oidc/getToken.d.ts +2 -2
- package/lib/oidc/getWithPopup.d.ts +2 -2
- package/lib/oidc/getWithRedirect.d.ts +2 -2
- package/lib/oidc/getWithoutPrompt.d.ts +2 -2
- package/lib/oidc/handleOAuthResponse.d.ts +2 -2
- package/lib/oidc/renewToken.d.ts +2 -2
- package/lib/oidc/renewTokensWithRefresh.d.ts +2 -2
- package/lib/oidc/revokeToken.d.ts +2 -2
- package/lib/oidc/util/browser.d.ts +2 -2
- package/lib/oidc/util/defaultTokenParams.d.ts +2 -2
- package/lib/oidc/util/errors.d.ts +2 -2
- package/lib/oidc/util/loginRedirect.d.ts +4 -4
- package/lib/oidc/util/oauth.d.ts +4 -4
- package/lib/oidc/util/oauthMeta.d.ts +2 -2
- package/lib/oidc/util/prepareTokenParams.d.ts +5 -5
- package/lib/oidc/util/validateClaims.d.ts +2 -2
- package/lib/oidc/verifyToken.d.ts +2 -2
- 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 +6 -2
- package/lib/types/Service.d.ts +23 -0
- package/lib/types/Storage.d.ts +7 -5
- package/lib/types/Transaction.d.ts +2 -10
- package/lib/types/api.d.ts +23 -10
- package/lib/types/index.d.ts +1 -1
- package/lib/util/sharedStorage.d.ts +1 -1
- package/package.json +32 -14
- package/polyfill/index.js +1 -0
- package/cjs/services/TokenService.js +0 -111
- package/cjs/services/TokenService.js.map +0 -1
- package/esm/index.js.map +0 -1
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
4
|
+
|
|
3
5
|
exports.Remediator = void 0;
|
|
4
6
|
|
|
5
|
-
var
|
|
7
|
+
var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
|
|
8
|
+
|
|
9
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
10
|
+
|
|
11
|
+
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
|
12
|
+
|
|
13
|
+
var _keys = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/keys"));
|
|
14
|
+
|
|
15
|
+
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
|
16
|
+
|
|
17
|
+
var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
|
|
6
18
|
|
|
7
19
|
var _util = require("../util");
|
|
8
20
|
|
|
21
|
+
var _util2 = require("../../authenticator/util");
|
|
22
|
+
|
|
9
23
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
10
24
|
|
|
11
25
|
/*!
|
|
@@ -23,63 +37,60 @@ var _util = require("../util");
|
|
|
23
37
|
/* eslint-disable complexity */
|
|
24
38
|
// Base class - DO NOT expose static remediationName
|
|
25
39
|
class Remediator {
|
|
26
|
-
constructor(remediation, values = {}) {
|
|
40
|
+
constructor(remediation, values = {}, options = {}) {
|
|
27
41
|
// assign fields to the instance
|
|
28
42
|
this.values = { ...values
|
|
29
43
|
};
|
|
44
|
+
this.options = { ...options
|
|
45
|
+
};
|
|
30
46
|
this.formatAuthenticators();
|
|
31
47
|
this.remediation = remediation;
|
|
32
48
|
}
|
|
33
49
|
|
|
34
50
|
formatAuthenticators() {
|
|
35
|
-
|
|
51
|
+
var _context2, _context3;
|
|
36
52
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
53
|
+
(0, _values.default)(this).authenticators = (0, _values.default)(this).authenticators || []; // ensure authenticators are in the correct format
|
|
54
|
+
|
|
55
|
+
(0, _values.default)(this).authenticators = (0, _map.default)(_context2 = (0, _values.default)(this).authenticators).call(_context2, authenticator => {
|
|
56
|
+
return (0, _util2.formatAuthenticator)(authenticator);
|
|
57
|
+
}); // add authenticator (if any) to "authenticators"
|
|
42
58
|
|
|
43
|
-
|
|
59
|
+
if ((0, _values.default)(this).authenticator) {
|
|
60
|
+
const authenticator = (0, _util2.formatAuthenticator)((0, _values.default)(this).authenticator);
|
|
61
|
+
const hasAuthenticatorInList = (0, _values.default)(this).authenticators.some(existing => {
|
|
62
|
+
return (0, _util2.compareAuthenticators)(authenticator, existing);
|
|
44
63
|
});
|
|
45
64
|
|
|
46
65
|
if (!hasAuthenticatorInList) {
|
|
47
|
-
this.
|
|
48
|
-
key: this.values.authenticator
|
|
49
|
-
});
|
|
66
|
+
(0, _values.default)(this).authenticators.push(authenticator);
|
|
50
67
|
}
|
|
51
|
-
} //
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
this.values.authenticators = this.values.authenticators.map(authenticator => {
|
|
55
|
-
return typeof authenticator === 'string' ? {
|
|
56
|
-
key: authenticator
|
|
57
|
-
} : authenticator;
|
|
58
|
-
}); // save non-key meta to "authenticatorsData" field
|
|
68
|
+
} // save non-key meta to "authenticatorsData" field
|
|
59
69
|
// authenticators will be removed after selection to avoid select-authenticator loop
|
|
60
70
|
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
|
|
72
|
+
(0, _values.default)(this).authenticatorsData = (0, _reduce.default)(_context3 = (0, _values.default)(this).authenticators).call(_context3, (acc, authenticator) => {
|
|
73
|
+
if (typeof authenticator === 'object' && (0, _keys.default)(authenticator).length > 1) {
|
|
63
74
|
// save authenticator meta into authenticator data
|
|
64
75
|
acc.push(authenticator);
|
|
65
76
|
}
|
|
66
77
|
|
|
67
78
|
return acc;
|
|
68
|
-
}, this.
|
|
79
|
+
}, (0, _values.default)(this).authenticatorsData || []);
|
|
69
80
|
}
|
|
70
81
|
|
|
71
82
|
getName() {
|
|
72
83
|
return this.remediation.name;
|
|
73
84
|
} // Override this method to provide custom check
|
|
74
85
|
|
|
86
|
+
/* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */
|
|
87
|
+
|
|
75
88
|
|
|
76
89
|
canRemediate() {
|
|
77
|
-
|
|
78
|
-
return false;
|
|
79
|
-
}
|
|
90
|
+
var _context4;
|
|
80
91
|
|
|
81
92
|
const required = (0, _util.getRequiredValues)(this.remediation);
|
|
82
|
-
const needed = required.
|
|
93
|
+
const needed = (0, _find.default)(_context4 = required).call(_context4, key => !this.hasData(key));
|
|
83
94
|
|
|
84
95
|
if (needed) {
|
|
85
96
|
return false; // missing data for a required field
|
|
@@ -91,8 +102,10 @@ class Remediator {
|
|
|
91
102
|
|
|
92
103
|
getData(key) {
|
|
93
104
|
if (!key) {
|
|
105
|
+
var _context5;
|
|
106
|
+
|
|
94
107
|
let allValues = (0, _util.getAllValues)(this.remediation);
|
|
95
|
-
let res = allValues.
|
|
108
|
+
let res = (0, _reduce.default)(_context5 = allValues).call(_context5, (data, key) => {
|
|
96
109
|
data[key] = this.getData(key); // recursive
|
|
97
110
|
|
|
98
111
|
return data;
|
|
@@ -102,42 +115,37 @@ class Remediator {
|
|
|
102
115
|
|
|
103
116
|
|
|
104
117
|
if (typeof this[`map${(0, _util.titleCase)(key)}`] === 'function') {
|
|
105
|
-
|
|
118
|
+
var _context6;
|
|
119
|
+
|
|
120
|
+
const val = this[`map${(0, _util.titleCase)(key)}`]((0, _find.default)(_context6 = this.remediation.value).call(_context6, ({
|
|
106
121
|
name
|
|
107
122
|
}) => name === key));
|
|
108
|
-
}
|
|
109
123
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
124
|
+
if (val) {
|
|
125
|
+
return val;
|
|
126
|
+
}
|
|
127
|
+
} // If a map is defined for this key, return the first aliased property that returns a truthy value
|
|
113
128
|
|
|
114
129
|
|
|
115
|
-
|
|
130
|
+
if ((0, _map.default)(this) && (0, _map.default)(this)[key]) {
|
|
131
|
+
const entry = (0, _map.default)(this)[key];
|
|
116
132
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
} // find the first aliased property that returns a truthy value
|
|
133
|
+
for (let i = 0; i < entry.length; i++) {
|
|
134
|
+
let val = (0, _values.default)(this)[entry[i]];
|
|
120
135
|
|
|
136
|
+
if (val) {
|
|
137
|
+
return val;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
} // fallback: return the value by key
|
|
121
141
|
|
|
122
|
-
for (let i = 0; i < entry.length; i++) {
|
|
123
|
-
let val = this.values[entry[i]];
|
|
124
142
|
|
|
125
|
-
|
|
126
|
-
return val;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
143
|
+
return (0, _values.default)(this)[key];
|
|
129
144
|
}
|
|
130
145
|
|
|
131
146
|
hasData(key) {
|
|
132
147
|
// no attempt to format, we want simple true/false
|
|
133
|
-
|
|
134
|
-
const data = this.getData(key);
|
|
135
|
-
|
|
136
|
-
if (typeof data === 'object') {
|
|
137
|
-
return !!Object.keys(data).find(key => !!data[key]);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return !!data;
|
|
148
|
+
return !!this.getData(key);
|
|
141
149
|
}
|
|
142
150
|
|
|
143
151
|
getNextStep(_context) {
|
|
@@ -161,45 +169,47 @@ class Remediator {
|
|
|
161
169
|
|
|
162
170
|
|
|
163
171
|
getInputs() {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
return Object.keys(this.map).reduce((inputs, key) => {
|
|
169
|
-
const inputFromRemediation = this.remediation.value.find(item => item.name === key);
|
|
170
|
-
|
|
171
|
-
if (!inputFromRemediation) {
|
|
172
|
-
return inputs;
|
|
173
|
-
}
|
|
174
|
-
|
|
172
|
+
const inputs = [];
|
|
173
|
+
const inputsFromRemediation = this.remediation.value || [];
|
|
174
|
+
inputsFromRemediation.forEach(inputFromRemediation => {
|
|
175
175
|
let input;
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
type
|
|
176
|
+
let {
|
|
177
|
+
name,
|
|
178
|
+
type,
|
|
179
|
+
visible
|
|
179
180
|
} = inputFromRemediation;
|
|
180
181
|
|
|
181
|
-
if (
|
|
182
|
-
|
|
182
|
+
if (visible === false) {
|
|
183
|
+
return; // Filter out invisible inputs, like stateHandle
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (typeof this[`getInput${(0, _util.titleCase)(name)}`] === 'function') {
|
|
187
|
+
input = this[`getInput${(0, _util.titleCase)(name)}`](inputFromRemediation);
|
|
183
188
|
} else if (type !== 'object') {
|
|
184
189
|
// handle general primitive types
|
|
185
|
-
let
|
|
190
|
+
let alias;
|
|
191
|
+
const aliases = ((0, _map.default)(this) ? (0, _map.default)(this)[name] : null) || [];
|
|
186
192
|
|
|
187
193
|
if (aliases.length === 1) {
|
|
188
|
-
|
|
194
|
+
alias = aliases[0];
|
|
189
195
|
} else {
|
|
190
196
|
// try find key from values
|
|
191
|
-
|
|
197
|
+
alias = (0, _find.default)(aliases).call(aliases, name => {
|
|
198
|
+
var _context7;
|
|
199
|
+
|
|
200
|
+
return (0, _includes.default)(_context7 = (0, _keys.default)((0, _values.default)(this))).call(_context7, name);
|
|
201
|
+
});
|
|
192
202
|
}
|
|
193
203
|
|
|
194
|
-
if (
|
|
204
|
+
if (alias) {
|
|
195
205
|
input = { ...inputFromRemediation,
|
|
196
|
-
name
|
|
206
|
+
name: alias
|
|
197
207
|
};
|
|
198
208
|
}
|
|
199
209
|
}
|
|
200
210
|
|
|
201
211
|
if (!input) {
|
|
202
|
-
|
|
212
|
+
input = inputFromRemediation;
|
|
203
213
|
}
|
|
204
214
|
|
|
205
215
|
if (Array.isArray(input)) {
|
|
@@ -207,19 +217,18 @@ class Remediator {
|
|
|
207
217
|
} else {
|
|
208
218
|
inputs.push(input);
|
|
209
219
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}, []);
|
|
220
|
+
});
|
|
221
|
+
return inputs;
|
|
213
222
|
}
|
|
214
223
|
|
|
215
224
|
static getMessages(remediation) {
|
|
216
|
-
var _remediation$value$, _remediation$value$$f;
|
|
225
|
+
var _remediation$value$, _remediation$value$$f, _context8;
|
|
217
226
|
|
|
218
227
|
if (!remediation.value) {
|
|
219
228
|
return;
|
|
220
229
|
}
|
|
221
230
|
|
|
222
|
-
return (_remediation$value$ = remediation.value[0]) === null || _remediation$value$ === void 0 ? void 0 : (_remediation$value$$f = _remediation$value$.form) === null || _remediation$value$$f === void 0 ? void 0 : _remediation$value$$f.value.
|
|
231
|
+
return (_remediation$value$ = remediation.value[0]) === null || _remediation$value$ === void 0 ? void 0 : (_remediation$value$$f = _remediation$value$.form) === null || _remediation$value$$f === void 0 ? void 0 : (0, _reduce.default)(_context8 = _remediation$value$$f.value).call(_context8, (messages, field) => {
|
|
223
232
|
if (field.messages) {
|
|
224
233
|
messages = [...messages, ...field.messages.value];
|
|
225
234
|
}
|
|
@@ -235,16 +244,41 @@ class Remediator {
|
|
|
235
244
|
const inputs = this.getInputs();
|
|
236
245
|
|
|
237
246
|
for (const input of inputs) {
|
|
238
|
-
delete this
|
|
247
|
+
delete (0, _values.default)(this)[input.name];
|
|
239
248
|
}
|
|
240
249
|
|
|
241
|
-
return this
|
|
250
|
+
return (0, _values.default)(this);
|
|
242
251
|
}
|
|
243
252
|
|
|
244
253
|
getAuthenticator() {
|
|
245
|
-
var _this$remediation$rel;
|
|
254
|
+
var _this$remediation$rel, _context9, _value$find, _context10;
|
|
255
|
+
|
|
256
|
+
// relatesTo value may be an authenticator or an authenticatorEnrollment
|
|
257
|
+
const relatesTo = (_this$remediation$rel = this.remediation.relatesTo) === null || _this$remediation$rel === void 0 ? void 0 : _this$remediation$rel.value;
|
|
258
|
+
|
|
259
|
+
if (!relatesTo) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
const authenticatorFromRemediation = (0, _util.getAuthenticatorFromRemediation)(this.remediation);
|
|
246
264
|
|
|
247
|
-
|
|
265
|
+
if (!authenticatorFromRemediation) {
|
|
266
|
+
// Hopefully value is an authenticator
|
|
267
|
+
return relatesTo;
|
|
268
|
+
} // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId
|
|
269
|
+
// Let's get the correct authenticator id from the form value
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
const id = (0, _find.default)(_context9 = authenticatorFromRemediation.form.value).call(_context9, ({
|
|
273
|
+
name
|
|
274
|
+
}) => name === 'id').value;
|
|
275
|
+
const enrollmentId = (_value$find = (0, _find.default)(_context10 = authenticatorFromRemediation.form.value).call(_context10, ({
|
|
276
|
+
name
|
|
277
|
+
}) => name === 'enrollmentId')) === null || _value$find === void 0 ? void 0 : _value$find.value;
|
|
278
|
+
return { ...relatesTo,
|
|
279
|
+
id,
|
|
280
|
+
enrollmentId
|
|
281
|
+
};
|
|
248
282
|
}
|
|
249
283
|
|
|
250
284
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","key","push","map","authenticatorsData","reduce","acc","Object","keys","length","getName","name","canRemediate","required","needed","find","hasData","getData","allValues","res","data","value","entry","i","val","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputFromRemediation","item","input","aliases","includes","AuthSdkError","Array","isArray","forEach","getMessages","form","messages","field","getValuesAfterProceed","relatesTo"],"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 complexity */\nimport { AuthSdkError } from '../../../errors';\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions } from '../../types';\nimport { IdxAuthenticator, IdxContext, IdxRemediation } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase } from '../util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: Authenticator[] | string[];\n authenticator?: string;\n authenticatorsData?: Authenticator[];\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: RemediationValues;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: RemediationValues = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n // add string authenticator from input to \"authenticators\" field\n if (this.values.authenticator) {\n const hasAuthenticatorInList = this.values.authenticators.some(authenticator => {\n if (typeof authenticator === 'string') {\n return authenticator === this.values.authenticator;\n }\n return authenticator.key === this.values.authenticator;\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push({\n key: this.values.authenticator \n });\n }\n }\n\n // transform items in \"authenticators\" into one format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return typeof authenticator === 'string' ? { key: authenticator } : authenticator;\n });\n\n // save non-key meta to \"authenticatorsData\" field\n // authenticators will be removed after selection to avoid select-authenticator loop\n this.values.authenticatorsData = this.values.authenticators.reduce((acc, authenticator) => {\n if (typeof authenticator === 'object' && Object.keys(authenticator).length > 1) {\n // save authenticator meta into authenticator data\n acc.push(authenticator);\n }\n return acc;\n }, this.values.authenticatorsData || []);\n }\n\n getName(): string {\n return this.remediation.name;\n }\n\n // Override this method to provide custom check\n canRemediate(): boolean {\n if (!this.map) {\n return false;\n }\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n return this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n }\n\n if (!this.map) {\n return this.values[key];\n }\n\n // Handle general primitive types\n const entry = this.map[key];\n if (!entry) {\n return this.values[key];\n }\n\n // find the first aliased property that returns a truthy value\n for (let i = 0; i < entry.length; i++) {\n let val = this.values[entry[i]];\n if (val) {\n return val;\n }\n }\n }\n\n hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n\n // First see if the remediation has a mapping for this vale\n const data = this.getData(key);\n if (typeof data === 'object') {\n return !!Object.keys(data).find(key => !!data[key]);\n }\n return !!data;\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n if (!this.map) {\n return [];\n }\n\n return Object.keys(this.map).reduce((inputs, key) => {\n const inputFromRemediation = this.remediation.value!.find(item => item.name === key);\n if (!inputFromRemediation) {\n return inputs;\n }\n\n let input;\n const aliases = this.map![key];\n const { type } = inputFromRemediation;\n if (typeof this[`getInput${titleCase(key)}`] === 'function') {\n input = this[`getInput${titleCase(key)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let name;\n if (aliases.length === 1) {\n name = aliases[0];\n } else {\n // try find key from values\n name = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (name) {\n input = { ...inputFromRemediation, name };\n }\n } \n\n if (!input) {\n throw new AuthSdkError(`Missing custom getInput${titleCase(key)} method in Remediator: ${this.getName()}`);\n }\n\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i as never));\n } else {\n inputs.push(input as never);\n }\n return inputs;\n }, []);\n }\n\n static getMessages(remediation: IdxRemediation): IdxMessage[] | undefined {\n if (!remediation.value) {\n return;\n }\n return remediation.value[0]?.form?.value.reduce((messages, field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value] as never;\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): RemediationValues {\n const inputs = this.getInputs();\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n return this.remediation.relatesTo?.value;\n }\n}\n"],"file":"Remediator.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../../lib/idx/remediators/Base/Remediator.ts"],"names":["Remediator","constructor","remediation","values","options","formatAuthenticators","authenticators","authenticator","hasAuthenticatorInList","some","existing","push","authenticatorsData","acc","length","getName","name","canRemediate","required","needed","key","hasData","getData","allValues","res","data","val","value","entry","i","getNextStep","_context","inputs","getInputs","getAuthenticator","type","inputsFromRemediation","forEach","inputFromRemediation","input","visible","alias","aliases","Array","isArray","getMessages","form","messages","field","getValuesAfterProceed","relatesTo","authenticatorFromRemediation","id","enrollmentId"],"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 complexity */\nimport { NextStep, IdxMessage, Authenticator, Input, IdxOptions, RemediateOptions } from '../../types';\nimport { IdxAuthenticator, IdxRemediation, IdxContext } from '../../types/idx-js';\nimport { getAllValues, getRequiredValues, titleCase, getAuthenticatorFromRemediation } from '../util';\nimport { formatAuthenticator, compareAuthenticators } from '../../authenticator/util';\n\n// A map from IDX data values (server spec) to RemediationValues (client spec)\nexport type IdxToRemediationValueMap = Record<string, string[]>;\n\nexport interface RemediationValues extends IdxOptions {\n stateHandle?: string;\n authenticators?: (Authenticator | string)[];\n authenticator?: string | Authenticator;\n authenticatorsData?: Authenticator[];\n}\n\n// Base class - DO NOT expose static remediationName\nexport class Remediator {\n static remediationName: string;\n\n remediation: IdxRemediation;\n values: RemediationValues;\n options: RemediateOptions;\n map?: IdxToRemediationValueMap;\n\n constructor(remediation: IdxRemediation, values: RemediationValues = {}, options: RemediateOptions = {}) {\n // assign fields to the instance\n this.values = { ...values };\n this.options = { ...options };\n this.formatAuthenticators();\n this.remediation = remediation;\n }\n\n private formatAuthenticators() {\n this.values.authenticators = (this.values.authenticators || []) as Authenticator[];\n\n // ensure authenticators are in the correct format\n this.values.authenticators = this.values.authenticators.map(authenticator => {\n return formatAuthenticator(authenticator);\n });\n\n // add authenticator (if any) to \"authenticators\"\n if (this.values.authenticator) {\n const authenticator = formatAuthenticator(this.values.authenticator);\n const hasAuthenticatorInList = this.values.authenticators.some(existing => {\n return compareAuthenticators(authenticator, existing);\n });\n if (!hasAuthenticatorInList) {\n this.values.authenticators.push(authenticator);\n }\n }\n\n // save non-key meta to \"authenticatorsData\" field\n // authenticators will be removed after selection to avoid select-authenticator loop\n this.values.authenticatorsData = this.values.authenticators.reduce((acc, authenticator) => {\n if (typeof authenticator === 'object' && Object.keys(authenticator).length > 1) {\n // save authenticator meta into authenticator data\n acc.push(authenticator);\n }\n return acc;\n }, this.values.authenticatorsData || []);\n }\n\n getName(): string {\n return this.remediation.name;\n }\n\n // Override this method to provide custom check\n /* eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars */\n canRemediate(): boolean {\n const required = getRequiredValues(this.remediation);\n const needed = required!.find((key) => !this.hasData(key));\n if (needed) {\n return false; // missing data for a required field\n }\n return true; // all required fields have available data\n }\n\n // returns an object for the entire remediation form, or just a part\n getData(key?: string) {\n\n if (!key) {\n let allValues = getAllValues(this.remediation);\n let res = allValues!.reduce((data, key) => {\n data[key] = this.getData(key); // recursive\n return data;\n }, {});\n return res;\n }\n\n // Map value by \"map${Property}\" function in each subClass\n if (typeof this[`map${titleCase(key)}`] === 'function') {\n const val = this[`map${titleCase(key)}`](\n this.remediation.value!.find(({name}) => name === key)\n );\n if (val) {\n return val;\n }\n }\n\n // If a map is defined for this key, return the first aliased property that returns a truthy value\n if (this.map && this.map[key]) {\n const entry = this.map[key];\n for (let i = 0; i < entry.length; i++) {\n let val = this.values[entry[i]];\n if (val) {\n return val;\n }\n }\n }\n\n // fallback: return the value by key\n return this.values[key];\n }\n\n hasData(\n key: string // idx name\n ): boolean \n {\n // no attempt to format, we want simple true/false\n return !!this.getData(key);\n }\n\n getNextStep(_context?: IdxContext): NextStep {\n const name = this.getName();\n const inputs = this.getInputs();\n const authenticator = this.getAuthenticator();\n // TODO: remove type field in the next major version change\n // https://oktainc.atlassian.net/browse/OKTA-431749\n const type = authenticator?.type;\n return { \n name, \n inputs, \n ...(type && { type }),\n ...(authenticator && { authenticator }),\n };\n }\n\n // Get inputs for the next step\n private getInputs(): Input[] {\n const inputs: Input[] = [];\n const inputsFromRemediation = this.remediation.value || [];\n inputsFromRemediation.forEach(inputFromRemediation => {\n let input;\n let { name, type, visible } = inputFromRemediation;\n if (visible === false) {\n return; // Filter out invisible inputs, like stateHandle\n }\n if (typeof this[`getInput${titleCase(name)}`] === 'function') {\n input = this[`getInput${titleCase(name)}`](inputFromRemediation);\n } else if (type !== 'object') {\n // handle general primitive types\n let alias;\n const aliases = (this.map ? this.map[name] : null) || [];\n if (aliases.length === 1) {\n alias = aliases[0];\n } else {\n // try find key from values\n alias = aliases.find(name => Object.keys(this.values).includes(name));\n }\n if (alias) {\n input = { ...inputFromRemediation, name: alias };\n }\n }\n if (!input) {\n input = inputFromRemediation;\n }\n if (Array.isArray(input)) {\n input.forEach(i => inputs.push(i));\n } else {\n inputs.push(input);\n }\n });\n return inputs;\n }\n\n static getMessages(remediation: IdxRemediation): IdxMessage[] | undefined {\n if (!remediation.value) {\n return;\n }\n return remediation.value[0]?.form?.value.reduce((messages: IdxMessage[], field) => {\n if (field.messages) {\n messages = [...messages, ...field.messages.value];\n }\n return messages;\n }, []);\n }\n\n // Prepare values for the next remediation\n // In general, remove used values from inputs for the current remediation\n // Override this method if special cases need be handled\n getValuesAfterProceed(): RemediationValues {\n const inputs = this.getInputs();\n for (const input of inputs) {\n delete this.values[input.name];\n }\n return this.values;\n }\n\n protected getAuthenticator(): IdxAuthenticator | undefined {\n // relatesTo value may be an authenticator or an authenticatorEnrollment\n const relatesTo = this.remediation.relatesTo?.value;\n if (!relatesTo) {\n return;\n }\n\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n if (!authenticatorFromRemediation) {\n // Hopefully value is an authenticator\n return relatesTo;\n }\n\n // If relatesTo is an authenticatorEnrollment, the id is actually the enrollmentId\n // Let's get the correct authenticator id from the form value\n const id = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'id')!.value as string;\n const enrollmentId = authenticatorFromRemediation.form!.value\n .find(({ name }) => name === 'enrollmentId')?.value as string;\n\n return {\n ...relatesTo,\n id,\n enrollmentId\n };\n }\n}\n"],"file":"Remediator.js"}
|
|
@@ -1,15 +1,25 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
|
|
4
4
|
|
|
5
5
|
exports.SelectAuthenticator = void 0;
|
|
6
6
|
|
|
7
|
-
var
|
|
7
|
+
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
|
8
|
+
|
|
9
|
+
var _values = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/values"));
|
|
10
|
+
|
|
11
|
+
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
|
12
|
+
|
|
13
|
+
var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
|
|
8
14
|
|
|
9
15
|
var _Remediator = require("./Remediator");
|
|
10
16
|
|
|
11
17
|
var _util = require("../util");
|
|
12
18
|
|
|
19
|
+
var _types = require("../../types");
|
|
20
|
+
|
|
21
|
+
var _util2 = require("../../authenticator/util");
|
|
22
|
+
|
|
13
23
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
14
24
|
|
|
15
25
|
/*!
|
|
@@ -23,36 +33,30 @@ var _util = require("../util");
|
|
|
23
33
|
*
|
|
24
34
|
* See the License for the specific language governing permissions and limitations under the License.
|
|
25
35
|
*/
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
36
|
+
// Base class - DO NOT expose static remediationName
|
|
37
|
+
class SelectAuthenticator extends _Remediator.Remediator {
|
|
38
|
+
// Find matched authenticator in provided order
|
|
39
|
+
findMatchedOption(authenticators, options) {
|
|
40
|
+
let option;
|
|
29
41
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
42
|
+
for (let authenticator of authenticators) {
|
|
43
|
+
option = (0, _find.default)(options).call(options, ({
|
|
44
|
+
relatesTo
|
|
45
|
+
}) => relatesTo.key === authenticator.key);
|
|
34
46
|
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
if (option) {
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
37
50
|
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return option;
|
|
41
|
-
}
|
|
42
51
|
|
|
43
|
-
|
|
44
|
-
class SelectAuthenticator extends _Remediator.Remediator {
|
|
45
|
-
constructor(...args) {
|
|
46
|
-
super(...args);
|
|
47
|
-
(0, _defineProperty2.default)(this, "map", {
|
|
48
|
-
authenticator: []
|
|
49
|
-
});
|
|
52
|
+
return option;
|
|
50
53
|
}
|
|
51
54
|
|
|
52
55
|
canRemediate() {
|
|
53
56
|
const {
|
|
54
|
-
authenticators
|
|
55
|
-
|
|
57
|
+
authenticators,
|
|
58
|
+
authenticator
|
|
59
|
+
} = (0, _values.default)(this);
|
|
56
60
|
const authenticatorFromRemediation = (0, _util.getAuthenticatorFromRemediation)(this.remediation);
|
|
57
61
|
const {
|
|
58
62
|
options
|
|
@@ -60,10 +64,15 @@ class SelectAuthenticator extends _Remediator.Remediator {
|
|
|
60
64
|
|
|
61
65
|
if (!authenticators || !authenticators.length) {
|
|
62
66
|
return false;
|
|
67
|
+
} // Authenticator is explicitly specified by id
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
if ((0, _types.isAuthenticator)(authenticator) && authenticator.id) {
|
|
71
|
+
return true;
|
|
63
72
|
} // Proceed with provided authenticators
|
|
64
73
|
|
|
65
74
|
|
|
66
|
-
const matchedOption = findMatchedOption(authenticators, options);
|
|
75
|
+
const matchedOption = this.findMatchedOption(authenticators, options);
|
|
67
76
|
|
|
68
77
|
if (matchedOption) {
|
|
69
78
|
return true;
|
|
@@ -73,9 +82,11 @@ class SelectAuthenticator extends _Remediator.Remediator {
|
|
|
73
82
|
}
|
|
74
83
|
|
|
75
84
|
getNextStep() {
|
|
85
|
+
var _context;
|
|
86
|
+
|
|
76
87
|
const common = super.getNextStep();
|
|
77
88
|
const authenticatorFromRemediation = (0, _util.getAuthenticatorFromRemediation)(this.remediation);
|
|
78
|
-
const options = authenticatorFromRemediation.options.
|
|
89
|
+
const options = (0, _map.default)(_context = authenticatorFromRemediation.options).call(_context, option => {
|
|
79
90
|
const {
|
|
80
91
|
label,
|
|
81
92
|
relatesTo
|
|
@@ -92,17 +103,28 @@ class SelectAuthenticator extends _Remediator.Remediator {
|
|
|
92
103
|
}
|
|
93
104
|
|
|
94
105
|
mapAuthenticator(remediationValue) {
|
|
106
|
+
var _context2;
|
|
107
|
+
|
|
95
108
|
const {
|
|
96
|
-
authenticators
|
|
97
|
-
|
|
109
|
+
authenticators,
|
|
110
|
+
authenticator
|
|
111
|
+
} = (0, _values.default)(this); // Authenticator is explicitly specified by id
|
|
112
|
+
|
|
113
|
+
if ((0, _types.isAuthenticator)(authenticator) && authenticator.id) {
|
|
114
|
+
this.selectedAuthenticator = authenticator; // track the selected authenticator
|
|
115
|
+
|
|
116
|
+
return authenticator;
|
|
117
|
+
}
|
|
118
|
+
|
|
98
119
|
const {
|
|
99
120
|
options
|
|
100
121
|
} = remediationValue;
|
|
101
|
-
const selectedOption = findMatchedOption(authenticators, options);
|
|
122
|
+
const selectedOption = (0, _util2.findMatchedOption)(authenticators, options);
|
|
123
|
+
this.selectedAuthenticator = selectedOption.relatesTo; // track the selected authenticator
|
|
102
124
|
|
|
103
|
-
this.
|
|
125
|
+
this.selectedOption = selectedOption;
|
|
104
126
|
return {
|
|
105
|
-
id: selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.value.form.value.
|
|
127
|
+
id: selectedOption === null || selectedOption === void 0 ? void 0 : (0, _find.default)(_context2 = selectedOption.value.form.value).call(_context2, ({
|
|
106
128
|
name
|
|
107
129
|
}) => name === 'id').value
|
|
108
130
|
};
|
|
@@ -116,12 +138,14 @@ class SelectAuthenticator extends _Remediator.Remediator {
|
|
|
116
138
|
}
|
|
117
139
|
|
|
118
140
|
getValuesAfterProceed() {
|
|
141
|
+
var _context3;
|
|
142
|
+
|
|
119
143
|
this.values = super.getValuesAfterProceed(); // remove used authenticators
|
|
120
144
|
|
|
121
|
-
const authenticators = this.
|
|
122
|
-
return authenticator.
|
|
145
|
+
const authenticators = (0, _filter.default)(_context3 = (0, _values.default)(this).authenticators).call(_context3, authenticator => {
|
|
146
|
+
return (0, _util2.compareAuthenticators)(authenticator, this.selectedAuthenticator) !== true;
|
|
123
147
|
});
|
|
124
|
-
return { ...this
|
|
148
|
+
return { ...(0, _values.default)(this),
|
|
125
149
|
authenticators
|
|
126
150
|
};
|
|
127
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"names":["findMatchedOption","authenticators","options","option","authenticator","
|
|
1
|
+
{"version":3,"sources":["../../../../../lib/idx/remediators/Base/SelectAuthenticator.ts"],"names":["SelectAuthenticator","Remediator","findMatchedOption","authenticators","options","option","authenticator","relatesTo","key","canRemediate","authenticatorFromRemediation","remediation","length","id","matchedOption","getNextStep","common","label","value","mapAuthenticator","remediationValue","selectedAuthenticator","selectedOption","form","name","getInputAuthenticator","getValuesAfterProceed","values"],"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\nimport { Remediator, RemediationValues } from './Remediator';\nimport { getAuthenticatorFromRemediation } from '../util';\nimport { IdxOption, IdxRemediationValue } from '../../types/idx-js';\nimport { Authenticator, isAuthenticator } from '../../types';\nimport { compareAuthenticators, findMatchedOption} from '../../authenticator/util';\n\nexport type SelectAuthenticatorValues = RemediationValues & {\n authenticator?: string | Authenticator;\n};\n\n// Base class - DO NOT expose static remediationName\nexport class SelectAuthenticator extends Remediator {\n values!: SelectAuthenticatorValues;\n selectedAuthenticator?: Authenticator;\n selectedOption?: any;\n\n // Find matched authenticator in provided order\n findMatchedOption(authenticators, options) {\n let option;\n for (let authenticator of authenticators) {\n option = options\n .find(({ relatesTo }) => relatesTo.key === authenticator.key);\n if (option) {\n break;\n }\n }\n return option;\n }\n\n canRemediate() {\n const { authenticators, authenticator } = this.values;\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const { options } = authenticatorFromRemediation;\n // Let users select authenticator if no input is provided\n if (!authenticators || !authenticators.length) {\n return false;\n }\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n return true;\n }\n\n // Proceed with provided authenticators\n const matchedOption = this.findMatchedOption(authenticators, options);\n if (matchedOption) {\n return true;\n }\n \n return false;\n }\n\n getNextStep() {\n const common = super.getNextStep();\n const authenticatorFromRemediation = getAuthenticatorFromRemediation(this.remediation);\n const options = authenticatorFromRemediation.options!.map(option => {\n const { \n label, \n relatesTo\n } = option as IdxOption;\n const key = relatesTo!.key!;\n return { label, value: key };\n });\n return { ...common, options };\n }\n\n mapAuthenticator(remediationValue: IdxRemediationValue) {\n const { authenticators, authenticator } = this.values;\n\n // Authenticator is explicitly specified by id\n if (isAuthenticator(authenticator) && authenticator.id) {\n this.selectedAuthenticator = authenticator; // track the selected authenticator\n return authenticator;\n }\n\n const { options } = remediationValue;\n const selectedOption = findMatchedOption(authenticators, options);\n this.selectedAuthenticator = selectedOption.relatesTo; // track the selected authenticator\n this.selectedOption = selectedOption;\n return {\n id: selectedOption?.value.form.value.find(({ name }) => name === 'id').value\n };\n }\n\n getInputAuthenticator() {\n return { name: 'authenticator', key: 'string' };\n }\n\n getValuesAfterProceed(): RemediationValues {\n this.values = super.getValuesAfterProceed();\n // remove used authenticators\n const authenticators = (this.values.authenticators as Authenticator[])\n .filter(authenticator => {\n return compareAuthenticators(authenticator, this.selectedAuthenticator) !== true;\n });\n return { ...this.values, authenticators };\n }\n\n}\n"],"file":"SelectAuthenticator.js"}
|