@forgerock/journey-client 0.0.0-beta-20251222204813
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 +45 -0
- package/LICENSE +21 -0
- package/README.md +143 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/coverage-final.json +1 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +101 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +210 -0
- package/dist/package.json +62 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +7 -0
- package/dist/src/lib/callbacks/attribute-input-callback.d.ts +44 -0
- package/dist/src/lib/callbacks/attribute-input-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/attribute-input-callback.js +71 -0
- package/dist/src/lib/callbacks/base-callback.d.ts +45 -0
- package/dist/src/lib/callbacks/base-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/base-callback.js +88 -0
- package/dist/src/lib/callbacks/choice-callback.d.ts +33 -0
- package/dist/src/lib/callbacks/choice-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/choice-callback.js +57 -0
- package/dist/src/lib/callbacks/confirmation-callback.d.ts +41 -0
- package/dist/src/lib/callbacks/confirmation-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/confirmation-callback.js +69 -0
- package/dist/src/lib/callbacks/device-profile-callback.d.ts +30 -0
- package/dist/src/lib/callbacks/device-profile-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/device-profile-callback.js +43 -0
- package/dist/src/lib/callbacks/factory.d.ts +8 -0
- package/dist/src/lib/callbacks/factory.d.ts.map +1 -0
- package/dist/src/lib/callbacks/factory.js +87 -0
- package/dist/src/lib/callbacks/hidden-value-callback.d.ts +13 -0
- package/dist/src/lib/callbacks/hidden-value-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/hidden-value-callback.js +19 -0
- package/dist/src/lib/callbacks/kba-create-callback.d.ts +34 -0
- package/dist/src/lib/callbacks/kba-create-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/kba-create-callback.js +59 -0
- package/dist/src/lib/callbacks/metadata-callback.d.ts +17 -0
- package/dist/src/lib/callbacks/metadata-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/metadata-callback.js +25 -0
- package/dist/src/lib/callbacks/name-callback.d.ts +21 -0
- package/dist/src/lib/callbacks/name-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/name-callback.js +31 -0
- package/dist/src/lib/callbacks/password-callback.d.ts +29 -0
- package/dist/src/lib/callbacks/password-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/password-callback.js +43 -0
- package/dist/src/lib/callbacks/ping-protect-evaluation-callback.d.ts +52 -0
- package/dist/src/lib/callbacks/ping-protect-evaluation-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/ping-protect-evaluation-callback.js +64 -0
- package/dist/src/lib/callbacks/ping-protect-initialize-callback.d.ts +29 -0
- package/dist/src/lib/callbacks/ping-protect-initialize-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/ping-protect-initialize-callback.js +40 -0
- package/dist/src/lib/callbacks/polling-wait-callback.d.ts +21 -0
- package/dist/src/lib/callbacks/polling-wait-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/polling-wait-callback.js +31 -0
- package/dist/src/lib/callbacks/recaptcha-callback.d.ts +21 -0
- package/dist/src/lib/callbacks/recaptcha-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/recaptcha-callback.js +31 -0
- package/dist/src/lib/callbacks/recaptcha-enterprise-callback.d.ts +41 -0
- package/dist/src/lib/callbacks/recaptcha-enterprise-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/recaptcha-enterprise-callback.js +65 -0
- package/dist/src/lib/callbacks/redirect-callback.d.ts +17 -0
- package/dist/src/lib/callbacks/redirect-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/redirect-callback.js +25 -0
- package/dist/src/lib/callbacks/select-idp-callback.d.ts +28 -0
- package/dist/src/lib/callbacks/select-idp-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/select-idp-callback.js +35 -0
- package/dist/src/lib/callbacks/suspended-text-output-callback.d.ts +13 -0
- package/dist/src/lib/callbacks/suspended-text-output-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/suspended-text-output-callback.js +19 -0
- package/dist/src/lib/callbacks/terms-and-conditions-callback.d.ts +29 -0
- package/dist/src/lib/callbacks/terms-and-conditions-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/terms-and-conditions-callback.js +45 -0
- package/dist/src/lib/callbacks/text-input-callback.d.ts +21 -0
- package/dist/src/lib/callbacks/text-input-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/text-input-callback.js +31 -0
- package/dist/src/lib/callbacks/text-output-callback.d.ts +22 -0
- package/dist/src/lib/callbacks/text-output-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/text-output-callback.js +32 -0
- package/dist/src/lib/callbacks/validated-create-password-callback.d.ts +37 -0
- package/dist/src/lib/callbacks/validated-create-password-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/validated-create-password-callback.js +63 -0
- package/dist/src/lib/callbacks/validated-create-username-callback.d.ts +37 -0
- package/dist/src/lib/callbacks/validated-create-username-callback.d.ts.map +1 -0
- package/dist/src/lib/callbacks/validated-create-username-callback.js +64 -0
- package/dist/src/lib/client.store.d.ts +37 -0
- package/dist/src/lib/client.store.d.ts.map +1 -0
- package/dist/src/lib/client.store.js +147 -0
- package/dist/src/lib/client.store.utils.d.ts +81 -0
- package/dist/src/lib/client.store.utils.d.ts.map +1 -0
- package/dist/src/lib/client.store.utils.js +28 -0
- package/dist/src/lib/config.types.d.ts +8 -0
- package/dist/src/lib/config.types.d.ts.map +1 -0
- package/dist/src/lib/config.types.js +7 -0
- package/dist/src/lib/device/defaults.d.ts +13 -0
- package/dist/src/lib/device/defaults.d.ts.map +1 -0
- package/dist/src/lib/device/defaults.js +78 -0
- package/dist/src/lib/device/device-profile.d.ts +41 -0
- package/dist/src/lib/device/device-profile.d.ts.map +1 -0
- package/dist/src/lib/device/device-profile.js +216 -0
- package/dist/src/lib/device/device-profile.mock.data.d.ts +109 -0
- package/dist/src/lib/device/device-profile.mock.data.d.ts.map +1 -0
- package/dist/src/lib/device/device-profile.mock.data.js +117 -0
- package/dist/src/lib/device/interfaces.d.ts +43 -0
- package/dist/src/lib/device/interfaces.d.ts.map +1 -0
- package/dist/src/lib/device/interfaces.js +10 -0
- package/dist/src/lib/interfaces.d.ts +15 -0
- package/dist/src/lib/interfaces.d.ts.map +1 -0
- package/dist/src/lib/interfaces.js +7 -0
- package/dist/src/lib/journey.api.d.ts +15 -0
- package/dist/src/lib/journey.api.d.ts.map +1 -0
- package/dist/src/lib/journey.api.js +129 -0
- package/dist/src/lib/journey.slice.d.ts +12 -0
- package/dist/src/lib/journey.slice.d.ts.map +1 -0
- package/dist/src/lib/journey.slice.js +18 -0
- package/dist/src/lib/journey.utils.d.ts +7 -0
- package/dist/src/lib/journey.utils.d.ts.map +1 -0
- package/dist/src/lib/journey.utils.js +33 -0
- package/dist/src/lib/login-failure.utils.d.ts +16 -0
- package/dist/src/lib/login-failure.utils.d.ts.map +1 -0
- package/dist/src/lib/login-failure.utils.js +34 -0
- package/dist/src/lib/login-success.utils.d.ts +16 -0
- package/dist/src/lib/login-success.utils.d.ts.map +1 -0
- package/dist/src/lib/login-success.utils.js +25 -0
- package/dist/src/lib/policy/interfaces.d.ts +11 -0
- package/dist/src/lib/policy/interfaces.d.ts.map +1 -0
- package/dist/src/lib/policy/interfaces.js +6 -0
- package/dist/src/lib/policy/message-creator.d.ts +3 -0
- package/dist/src/lib/policy/message-creator.d.ts.map +1 -0
- package/dist/src/lib/policy/message-creator.js +58 -0
- package/dist/src/lib/policy/policy.d.ts +57 -0
- package/dist/src/lib/policy/policy.d.ts.map +1 -0
- package/dist/src/lib/policy/policy.js +108 -0
- package/dist/src/lib/qr-code/qr-code.d.ts +35 -0
- package/dist/src/lib/qr-code/qr-code.d.ts.map +1 -0
- package/dist/src/lib/qr-code/qr-code.js +73 -0
- package/dist/src/lib/qr-code/qr-code.mock.data.d.ts +66 -0
- package/dist/src/lib/qr-code/qr-code.mock.data.d.ts.map +1 -0
- package/dist/src/lib/qr-code/qr-code.mock.data.js +175 -0
- package/dist/src/lib/recovery-codes/recovery-codes.d.ts +40 -0
- package/dist/src/lib/recovery-codes/recovery-codes.d.ts.map +1 -0
- package/dist/src/lib/recovery-codes/recovery-codes.js +64 -0
- package/dist/src/lib/recovery-codes/script-parser.d.ts +8 -0
- package/dist/src/lib/recovery-codes/script-parser.d.ts.map +1 -0
- package/dist/src/lib/recovery-codes/script-parser.js +45 -0
- package/dist/src/lib/recovery-codes/script-text.mock.data.d.ts +27 -0
- package/dist/src/lib/recovery-codes/script-text.mock.data.d.ts.map +1 -0
- package/dist/src/lib/recovery-codes/script-text.mock.data.js +103 -0
- package/dist/src/lib/step.types.d.ts +14 -0
- package/dist/src/lib/step.types.d.ts.map +1 -0
- package/dist/src/lib/step.types.js +7 -0
- package/dist/src/lib/step.utils.d.ts +10 -0
- package/dist/src/lib/step.utils.d.ts.map +1 -0
- package/dist/src/lib/step.utils.js +62 -0
- package/dist/src/lib/webauthn/enums.d.ts +24 -0
- package/dist/src/lib/webauthn/enums.d.ts.map +1 -0
- package/dist/src/lib/webauthn/enums.js +35 -0
- package/dist/src/lib/webauthn/helpers.d.ts +18 -0
- package/dist/src/lib/webauthn/helpers.d.ts.map +1 -0
- package/dist/src/lib/webauthn/helpers.js +103 -0
- package/dist/src/lib/webauthn/helpers.mock.data.d.ts +6 -0
- package/dist/src/lib/webauthn/helpers.mock.data.d.ts.map +1 -0
- package/dist/src/lib/webauthn/helpers.mock.data.js +14 -0
- package/dist/src/lib/webauthn/interfaces.d.ts +92 -0
- package/dist/src/lib/webauthn/interfaces.d.ts.map +1 -0
- package/dist/src/lib/webauthn/interfaces.js +34 -0
- package/dist/src/lib/webauthn/script-text.mock.data.d.ts +76 -0
- package/dist/src/lib/webauthn/script-text.mock.data.d.ts.map +1 -0
- package/dist/src/lib/webauthn/script-text.mock.data.js +451 -0
- package/dist/src/lib/webauthn/webauthn.d.ts +124 -0
- package/dist/src/lib/webauthn/webauthn.d.ts.map +1 -0
- package/dist/src/lib/webauthn/webauthn.js +383 -0
- package/dist/src/lib/webauthn/webauthn.mock.data.d.ts +331 -0
- package/dist/src/lib/webauthn/webauthn.mock.data.d.ts.map +1 -0
- package/dist/src/lib/webauthn/webauthn.mock.data.js +446 -0
- package/dist/src/types.d.ts +31 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +34 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/eslint.config.mjs +19 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/attribute-input-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/fr-auth-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/ping-protect-evaluation-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/ping-protect-initialize-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/recaptcha-enterprise-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/text-input-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/validated-create-password-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/callbacks/validated-create-username-callback.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/fr-device/device-profile.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/src/lib/fr-policy/fr-policy.test.d.ts +1 -0
- package/out-tsc/vitest/packages/journey-client/tsconfig.spec.tsbuildinfo +1 -0
- package/out-tsc/vitest/packages/journey-client/vite.config.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/attribute-input-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/base-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/base-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/callback-types.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/callback-types.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/callback-utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/callback-utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/choice-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/confirmation-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/device-profile-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/device-profile-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/factory.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/factory.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/fr-auth-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/fr-auth-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/hidden-value-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/kba-create-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/metadata-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/name-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/password-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-evaluation-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/ping-protect-initialize-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/polling-wait-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/recaptcha-enterprise-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/redirect-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/select-idp-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/suspended-text-output-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/terms-and-conditions-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-input-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/text-output-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-password-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback-operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback-operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback.operators.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback.operators.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/callbacks/validated-create-username-callback.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/client.store.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/client.store.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/device/device-profile.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/device/device-profile.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-device/device-profile.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-device/device-profile.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-policy/fr-policy.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-policy/fr-policy.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-qrcode/fr-qrcode.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-qrcode/fr-qrcode.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-recovery-codes/recovery-codes.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-recovery-codes/recovery-codes.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-recovery-codes/script-parser.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-recovery-codes/script-parser.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-step.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-step.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/fr-webauthn.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/fr-webauthn.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/helpers.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/helpers.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/script-parser.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/fr-webauthn/script-parser.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-client.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-client.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-device/device-profile.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-device/device-profile.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-login-failure.utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-login-failure.utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-login-success.utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-login-success.utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-policy/fr-policy.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-policy/fr-policy.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-policy/journey-policy.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-policy/journey-policy.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-qrcode/journey-qrcode.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-qrcode/journey-qrcode.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-step.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-step.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/enums.d.ts +24 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/enums.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.d.ts +18 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.mock.data.d.ts +6 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.mock.data.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/helpers.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/index.d.ts +123 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/interfaces.d.ts +93 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/interfaces.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/journey-webauthn.mock.data.d.ts +331 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/journey-webauthn.mock.data.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/journey-webauthn.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/journey-webauthn.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-parser.d.ts +4 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-parser.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-parser.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-parser.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-text.mock.data.d.ts +76 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/script-text.mock.data.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/webauthn-utils.d.ts +38 -0
- package/out-tsc/vitest/src/lib/journey-webauthn/webauthn-utils.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey.api.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey.api.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/journey.store.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/journey.store.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/login-failure.utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/login-failure.utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/login-success.utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/login-success.utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/object-utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/object-utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/policy/policy.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/policy/policy.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/qr-code/qr-code.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/qr-code/qr-code.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/recovery-codes/index.d.ts +37 -0
- package/out-tsc/vitest/src/lib/recovery-codes/index.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/recovery-codes/recovery-codes.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/recovery-codes/recovery-codes.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-parser.d.ts +9 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-parser.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-parser.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-parser.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-text.mock.data.d.ts +27 -0
- package/out-tsc/vitest/src/lib/recovery-codes/script-text.mock.data.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/step-utils.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/step-utils.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/step.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/step.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/webauthn/helpers.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/webauthn/helpers.test.d.ts.map +1 -0
- package/out-tsc/vitest/src/lib/webauthn/webauthn.test.d.ts +2 -0
- package/out-tsc/vitest/src/lib/webauthn/webauthn.test.d.ts.map +1 -0
- package/out-tsc/vitest/tsconfig.spec.tsbuildinfo +1 -0
- package/out-tsc/vitest/vite.config.d.ts +3 -0
- package/out-tsc/vitest/vite.config.d.ts.map +1 -0
- package/package.json +62 -0
- package/src/index.ts +8 -0
- package/src/lib/callbacks/attribute-input-callback.test.ts +89 -0
- package/src/lib/callbacks/attribute-input-callback.ts +81 -0
- package/src/lib/callbacks/base-callback.test.ts +42 -0
- package/src/lib/callbacks/base-callback.ts +101 -0
- package/src/lib/callbacks/choice-callback.test.ts +77 -0
- package/src/lib/callbacks/choice-callback.ts +64 -0
- package/src/lib/callbacks/confirmation-callback.test.ts +94 -0
- package/src/lib/callbacks/confirmation-callback.ts +78 -0
- package/src/lib/callbacks/device-profile-callback.test.ts +68 -0
- package/src/lib/callbacks/device-profile-callback.ts +51 -0
- package/src/lib/callbacks/factory.test.ts +89 -0
- package/src/lib/callbacks/factory.ts +95 -0
- package/src/lib/callbacks/hidden-value-callback.test.ts +26 -0
- package/src/lib/callbacks/hidden-value-callback.ts +21 -0
- package/src/lib/callbacks/kba-create-callback.test.ts +62 -0
- package/src/lib/callbacks/kba-create-callback.ts +68 -0
- package/src/lib/callbacks/metadata-callback.test.ts +31 -0
- package/src/lib/callbacks/metadata-callback.ts +28 -0
- package/src/lib/callbacks/name-callback.test.ts +42 -0
- package/src/lib/callbacks/name-callback.ts +35 -0
- package/src/lib/callbacks/password-callback.test.ts +60 -0
- package/src/lib/callbacks/password-callback.ts +49 -0
- package/src/lib/callbacks/ping-protect-evaluation-callback.test.ts +69 -0
- package/src/lib/callbacks/ping-protect-evaluation-callback.ts +70 -0
- package/src/lib/callbacks/ping-protect-initialize-callback.test.ts +153 -0
- package/src/lib/callbacks/ping-protect-initialize-callback.ts +44 -0
- package/src/lib/callbacks/polling-wait-callback.test.ts +36 -0
- package/src/lib/callbacks/polling-wait-callback.ts +35 -0
- package/src/lib/callbacks/recaptcha-callback.test.ts +42 -0
- package/src/lib/callbacks/recaptcha-callback.ts +35 -0
- package/src/lib/callbacks/recaptcha-enterprise-callback.test.ts +86 -0
- package/src/lib/callbacks/recaptcha-enterprise-callback.ts +72 -0
- package/src/lib/callbacks/redirect-callback.test.ts +31 -0
- package/src/lib/callbacks/redirect-callback.ts +28 -0
- package/src/lib/callbacks/select-idp-callback.test.ts +51 -0
- package/src/lib/callbacks/select-idp-callback.ts +48 -0
- package/src/lib/callbacks/suspended-text-output-callback.test.ts +35 -0
- package/src/lib/callbacks/suspended-text-output-callback.ts +21 -0
- package/src/lib/callbacks/terms-and-conditions-callback.test.ts +55 -0
- package/src/lib/callbacks/terms-and-conditions-callback.ts +51 -0
- package/src/lib/callbacks/text-input-callback.test.ts +43 -0
- package/src/lib/callbacks/text-input-callback.ts +35 -0
- package/src/lib/callbacks/text-output-callback.test.ts +36 -0
- package/src/lib/callbacks/text-output-callback.ts +36 -0
- package/src/lib/callbacks/validated-create-password-callback.test.ts +84 -0
- package/src/lib/callbacks/validated-create-password-callback.ts +75 -0
- package/src/lib/callbacks/validated-create-username-callback.test.ts +84 -0
- package/src/lib/callbacks/validated-create-username-callback.ts +76 -0
- package/src/lib/client.store.test.ts +324 -0
- package/src/lib/client.store.ts +194 -0
- package/src/lib/client.store.utils.ts +46 -0
- package/src/lib/config.types.ts +17 -0
- package/src/lib/device/defaults.ts +79 -0
- package/src/lib/device/device-profile.mock.data.ts +120 -0
- package/src/lib/device/device-profile.test.ts +128 -0
- package/src/lib/device/device-profile.ts +287 -0
- package/src/lib/device/interfaces.ts +63 -0
- package/src/lib/device/sample-profile.json +45 -0
- package/src/lib/interfaces.ts +25 -0
- package/src/lib/journey.api.ts +198 -0
- package/src/lib/journey.slice.ts +33 -0
- package/src/lib/journey.utils.ts +44 -0
- package/src/lib/login-failure.utils.test.ts +31 -0
- package/src/lib/login-failure.utils.ts +62 -0
- package/src/lib/login-success.utils.test.ts +29 -0
- package/src/lib/login-success.utils.ts +43 -0
- package/src/lib/policy/interfaces.ts +16 -0
- package/src/lib/policy/message-creator.ts +66 -0
- package/src/lib/policy/policy.test.ts +202 -0
- package/src/lib/policy/policy.ts +134 -0
- package/src/lib/qr-code/qr-code.mock.data.ts +184 -0
- package/src/lib/qr-code/qr-code.test.ts +78 -0
- package/src/lib/qr-code/qr-code.ts +96 -0
- package/src/lib/recovery-codes/recovery-codes.test.ts +43 -0
- package/src/lib/recovery-codes/recovery-codes.ts +72 -0
- package/src/lib/recovery-codes/script-parser.test.ts +34 -0
- package/src/lib/recovery-codes/script-parser.ts +50 -0
- package/src/lib/recovery-codes/script-text.mock.data.ts +120 -0
- package/src/lib/step.test.ts +104 -0
- package/src/lib/step.types.ts +22 -0
- package/src/lib/step.utils.ts +99 -0
- package/src/lib/webauthn/enums.ts +36 -0
- package/src/lib/webauthn/helpers.mock.data.ts +24 -0
- package/src/lib/webauthn/helpers.test.ts +54 -0
- package/src/lib/webauthn/helpers.ts +124 -0
- package/src/lib/webauthn/interfaces.ts +112 -0
- package/src/lib/webauthn/script-text.mock.data.ts +463 -0
- package/src/lib/webauthn/webauthn.mock.data.ts +478 -0
- package/src/lib/webauthn/webauthn.test.ts +100 -0
- package/src/lib/webauthn/webauthn.ts +508 -0
- package/src/types.ts +50 -0
- package/tsconfig.json +28 -0
- package/tsconfig.lib.json +37 -0
- package/tsconfig.spec.json +42 -0
- package/vite.config.ts +0 -0
- package/vitest.setup.ts +1 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* recovery-codes.test.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { RecoveryCodes } from './recovery-codes.js';
|
|
12
|
+
import { createJourneyStep } from '../step.utils.js';
|
|
13
|
+
import {
|
|
14
|
+
displayRecoveryCodesResponse,
|
|
15
|
+
expectedDeviceName,
|
|
16
|
+
expectedRecoveryCodes,
|
|
17
|
+
otherResponse,
|
|
18
|
+
} from './script-text.mock.data.js';
|
|
19
|
+
|
|
20
|
+
describe('Class for managing the Display Recovery Codes node', () => {
|
|
21
|
+
it('should return true if Display Recovery Codes step', () => {
|
|
22
|
+
const step = createJourneyStep(displayRecoveryCodesResponse);
|
|
23
|
+
const isDisplayStep = RecoveryCodes.isDisplayStep(step);
|
|
24
|
+
expect(isDisplayStep).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
it('should return false if not Display Recovery Codes step', () => {
|
|
28
|
+
const step = createJourneyStep(otherResponse);
|
|
29
|
+
const isDisplayStep = RecoveryCodes.isDisplayStep(step);
|
|
30
|
+
expect(isDisplayStep).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('should return the Recovery Codes as array of strings', () => {
|
|
34
|
+
const step = createJourneyStep(displayRecoveryCodesResponse);
|
|
35
|
+
const recoveryCodes = RecoveryCodes.getCodes(step);
|
|
36
|
+
expect(recoveryCodes).toStrictEqual(expectedRecoveryCodes);
|
|
37
|
+
});
|
|
38
|
+
it('should return a display name from the getDisplayName method', () => {
|
|
39
|
+
const step = createJourneyStep(displayRecoveryCodesResponse);
|
|
40
|
+
const displayName = RecoveryCodes.getDeviceName(step);
|
|
41
|
+
expect(displayName).toStrictEqual(expectedDeviceName);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* index.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { callbackType } from '@forgerock/sdk-types';
|
|
12
|
+
|
|
13
|
+
import { parseDeviceNameText, parseDisplayRecoveryCodesText } from './script-parser.js';
|
|
14
|
+
|
|
15
|
+
import type { TextOutputCallback } from '../callbacks/text-output-callback.js';
|
|
16
|
+
import type { JourneyStep } from '../step.utils.js';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Utility for handling recovery code nodes.
|
|
20
|
+
*
|
|
21
|
+
* Example:
|
|
22
|
+
*
|
|
23
|
+
* ```js
|
|
24
|
+
* // Determine if step is Display Recovery Codes step
|
|
25
|
+
* const isDisplayRecoveryCodesStep = RecoveryCodes.isDisplayStep(step);
|
|
26
|
+
* if (isDisplayRecoveryCodesStep) {
|
|
27
|
+
* const recoveryCodes = RecoveryCodes.getCodes(step);
|
|
28
|
+
* // Do the UI needful
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export abstract class RecoveryCodes {
|
|
33
|
+
public static getDeviceName(step: JourneyStep): string {
|
|
34
|
+
const text = this.getDisplayCallback(step)?.getOutputByName('message', '') ?? '';
|
|
35
|
+
return parseDeviceNameText(text);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves the recovery codes by parsing the JavaScript message text in callback.
|
|
39
|
+
*
|
|
40
|
+
* @param step The step to evaluate
|
|
41
|
+
* @return Recovery Code values in array
|
|
42
|
+
*/
|
|
43
|
+
public static getCodes(step: JourneyStep): string[] {
|
|
44
|
+
const text = this.getDisplayCallback(step)?.getOutputByName('message', '');
|
|
45
|
+
return parseDisplayRecoveryCodesText(text || '');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Determines if the given step is a Display Recovery Codes step.
|
|
50
|
+
*
|
|
51
|
+
* @param step The step to evaluate
|
|
52
|
+
* @return Is this step a Display Recovery Codes step
|
|
53
|
+
*/
|
|
54
|
+
public static isDisplayStep(step: JourneyStep): boolean {
|
|
55
|
+
return !!this.getDisplayCallback(step);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Gets the recovery codes step.
|
|
60
|
+
*
|
|
61
|
+
* @param step The step to evaluate
|
|
62
|
+
* @return gets the Display Recovery Codes' callback
|
|
63
|
+
*/
|
|
64
|
+
private static getDisplayCallback(step: JourneyStep): TextOutputCallback | undefined {
|
|
65
|
+
return step
|
|
66
|
+
.getCallbacksOfType<TextOutputCallback>(callbackType.TextOutputCallback)
|
|
67
|
+
.find((x) => {
|
|
68
|
+
const cb = x.getOutputByName<string | undefined>('message', undefined);
|
|
69
|
+
return cb && (cb.includes('Recovery Codes') || cb.includes('recovery codes'));
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* script-parser.test.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { parseDeviceNameText, parseDisplayRecoveryCodesText } from './script-parser.js';
|
|
12
|
+
import {
|
|
13
|
+
displayRecoveryCodes,
|
|
14
|
+
expectedRecoveryCodes,
|
|
15
|
+
securityKeyCustomNameResponse,
|
|
16
|
+
securityKeyResponse,
|
|
17
|
+
} from './script-text.mock.data.js';
|
|
18
|
+
|
|
19
|
+
describe('Parsing of the Display Recovery Codes script text', () => {
|
|
20
|
+
it('should parse the Display Recovery Codes Text', () => {
|
|
21
|
+
const result = parseDisplayRecoveryCodesText(displayRecoveryCodes);
|
|
22
|
+
expect(result).toStrictEqual(expectedRecoveryCodes);
|
|
23
|
+
});
|
|
24
|
+
it('should parse the display name from recovery codes script', () => {
|
|
25
|
+
const text = securityKeyResponse;
|
|
26
|
+
const result = parseDeviceNameText(text);
|
|
27
|
+
expect(result).toStrictEqual('New Security Key');
|
|
28
|
+
});
|
|
29
|
+
it('should parse a custom name out of the recovery text', () => {
|
|
30
|
+
const text = securityKeyCustomNameResponse;
|
|
31
|
+
const result = parseDeviceNameText(text);
|
|
32
|
+
expect(result).toStrictEqual('My Custom Device Name');
|
|
33
|
+
});
|
|
34
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* script-parser.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export function parseDisplayRecoveryCodesText(text: string): string[] {
|
|
12
|
+
/**
|
|
13
|
+
* e.g. ` ...
|
|
14
|
+
* "<div class=\"text-center\">\n" +
|
|
15
|
+
* "iZmEtxvQ00\n" +
|
|
16
|
+
* "</div>\n" +
|
|
17
|
+
* ... `
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const recoveryCodesMatches = text.match(/\s[\w\W]"([\w]*)\\/g);
|
|
21
|
+
const recoveryCodes =
|
|
22
|
+
Array.isArray(recoveryCodesMatches) &&
|
|
23
|
+
recoveryCodesMatches.map((substr: string) => {
|
|
24
|
+
// e.g. `"iZmEtxvQ00\`
|
|
25
|
+
const arr = substr.match(/"([\w]*)\\/);
|
|
26
|
+
return Array.isArray(arr) ? arr[1] : '';
|
|
27
|
+
});
|
|
28
|
+
return recoveryCodes || [];
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
*
|
|
33
|
+
* @param text
|
|
34
|
+
* @returns string
|
|
35
|
+
*/
|
|
36
|
+
export function parseDeviceNameText(text: string): string {
|
|
37
|
+
/**
|
|
38
|
+
* We default the device name to 'New Security Key'
|
|
39
|
+
* If the user has a device name, it will be wrapped in <em> tags
|
|
40
|
+
* e.g. ` ... <em>My Security Key</em> ... `
|
|
41
|
+
* We want to remove the <em> tags and just return the device name
|
|
42
|
+
* e.g. ` ... My Security Key ... `
|
|
43
|
+
*/
|
|
44
|
+
const displayName =
|
|
45
|
+
text
|
|
46
|
+
?.match(/<em\s*.*>\s*.*<\/em>/g)?.[0]
|
|
47
|
+
?.replace('<em>', '')
|
|
48
|
+
?.replace('</em>', '') ?? 'New Security Key';
|
|
49
|
+
return displayName;
|
|
50
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/* eslint-disable no-useless-escape */
|
|
2
|
+
/*
|
|
3
|
+
* @forgerock/ping-javascript-sdk
|
|
4
|
+
*
|
|
5
|
+
* script-text.mock.data.ts
|
|
6
|
+
*
|
|
7
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
8
|
+
* This software may be modified and distributed under the terms
|
|
9
|
+
* of the MIT license. See the LICENSE file for details.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { callbackType } from '@forgerock/sdk-types';
|
|
13
|
+
|
|
14
|
+
const displayRecoveryCodes = `/*
|
|
15
|
+
* Copyright 2018 ForgeRock AS. All Rights Reserved
|
|
16
|
+
*
|
|
17
|
+
* Use of this code requires a commercial software license with ForgeRock AS.
|
|
18
|
+
* or with one of its affiliates. All use shall be exclusively subject
|
|
19
|
+
* to such license between the licensee and ForgeRock AS.
|
|
20
|
+
*/\n\nvar newLocation = document.getElementById(\"wrapper\");\nvar oldHtml = newLocation.getElementsByTagName(\"fieldset\")[0].innerHTML;\nnewLocation.getElementsByTagName(\"fieldset\")[0].innerHTML = \"<div class=\\\"panel panel-default\\\">\\n\" +
|
|
21
|
+
\" <div class=\\\"panel-body text-center\\\">\\n\" +
|
|
22
|
+
\" <h3>Your Recovery Codes</h3>\\n\" +
|
|
23
|
+
\" <h4>You must make a copy of these WebAuthn authenticator recovery codes. They cannot be displayed again.</h4>\\n\" +
|
|
24
|
+
\" </div>\\n\" +
|
|
25
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
26
|
+
\"iZmEtxvQ00\\n\" +
|
|
27
|
+
\"</div>\\n\" +
|
|
28
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
29
|
+
\"Eqw3GFVamY\\n\" +
|
|
30
|
+
\"</div>\\n\" +
|
|
31
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
32
|
+
\"nNPqIEtIpS\\n\" +
|
|
33
|
+
\"</div>\\n\" +
|
|
34
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
35
|
+
\"vGhNQpDjP8\\n\" +
|
|
36
|
+
\"</div>\\n\" +
|
|
37
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
38
|
+
\"ItA4W3iBaA\\n\" +
|
|
39
|
+
\"</div>\\n\" +
|
|
40
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
41
|
+
\"JmLQP6XyIo\\n\" +
|
|
42
|
+
\"</div>\\n\" +
|
|
43
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
44
|
+
\"G2e6foNKke\\n\" +
|
|
45
|
+
\"</div>\\n\" +
|
|
46
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
47
|
+
\"h2SqAqvT21\\n\" +
|
|
48
|
+
\"</div>\\n\" +
|
|
49
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
50
|
+
\"q6VX1ojNbI\\n\" +
|
|
51
|
+
\"</div>\\n\" +
|
|
52
|
+
\"<div class=\\\"text-center\\\">\\n\" +
|
|
53
|
+
\"IZKIQXAfY2\\n\" +
|
|
54
|
+
\"</div>\\n\" +
|
|
55
|
+
\"<div class=\\\"panel-body text-center\\\">\\n\" +
|
|
56
|
+
\" <p>Use one of these codes to authenticate if you lose your device, which has been named: <em>New Security Key</em></p>\\n\" +
|
|
57
|
+
\"</div>\\n\" +
|
|
58
|
+
\"</div>\" + oldHtml;\ndocument.body.appendChild(newLocation);\n\n\n
|
|
59
|
+
`;
|
|
60
|
+
|
|
61
|
+
const displayRecoveryCodesResponse = {
|
|
62
|
+
authId: 'foo',
|
|
63
|
+
callbacks: [
|
|
64
|
+
{
|
|
65
|
+
type: callbackType.TextOutputCallback,
|
|
66
|
+
output: [
|
|
67
|
+
{
|
|
68
|
+
name: 'message',
|
|
69
|
+
value:
|
|
70
|
+
'/*\n * Copyright 2018 ForgeRock AS. All Rights Reserved\n *\n * Use of this code requires a commercial software license with ForgeRock AS.\n * or with one of its affiliates. All use shall be exclusively subject\n * to such license between the licensee and ForgeRock AS.\n */\n\nvar newLocation = document.getElementById("wrapper");\nvar oldHtml = newLocation.getElementsByTagName("fieldset")[0].innerHTML;\nnewLocation.getElementsByTagName("fieldset")[0].innerHTML = "<div class=\\"panel panel-default\\">\\n" +\n " <div class=\\"panel-body text-center\\">\\n" +\n " <h3>Your Recovery Codes</h3>\\n" +\n " <h4>You must make a copy of these WebAuthn authenticator recovery codes. They cannot be displayed again.</h4>\\n" +\n " </div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "iZmEtxvQ00\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "Eqw3GFVamY\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "nNPqIEtIpS\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "vGhNQpDjP8\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "ItA4W3iBaA\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "JmLQP6XyIo\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "G2e6foNKke\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "h2SqAqvT21\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "q6VX1ojNbI\\n" +\n "</div>\\n" +\n "<div class=\\"text-center\\">\\n" +\n "IZKIQXAfY2\\n" +\n "</div>\\n" +\n "<div class=\\"panel-body text-center\\">\\n" +\n " <p>Use one of these codes to authenticate if you lose your device, which has been named: <em>New Security Key</em></p>\\n" +\n "</div>\\n" +\n "</div>" + oldHtml;\ndocument.body.appendChild(newLocation);\n\n\n',
|
|
71
|
+
},
|
|
72
|
+
{ name: 'messageType', value: '4' },
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
const expectedDeviceName = 'New Security Key';
|
|
78
|
+
|
|
79
|
+
const expectedRecoveryCodes = [
|
|
80
|
+
'iZmEtxvQ00',
|
|
81
|
+
'Eqw3GFVamY',
|
|
82
|
+
'nNPqIEtIpS',
|
|
83
|
+
'vGhNQpDjP8',
|
|
84
|
+
'ItA4W3iBaA',
|
|
85
|
+
'JmLQP6XyIo',
|
|
86
|
+
'G2e6foNKke',
|
|
87
|
+
'h2SqAqvT21',
|
|
88
|
+
'q6VX1ojNbI',
|
|
89
|
+
'IZKIQXAfY2',
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
const otherResponse = {
|
|
93
|
+
authId: 'foo',
|
|
94
|
+
callbacks: [
|
|
95
|
+
{
|
|
96
|
+
type: callbackType.TextOutputCallback,
|
|
97
|
+
output: [
|
|
98
|
+
{
|
|
99
|
+
name: 'message',
|
|
100
|
+
value:
|
|
101
|
+
'/*\n * Copyright 2018 ForgeRock AS. All Rights Reserved\n *\n * Use of this code requires a commercial software license with ForgeRock AS.\n * or with one of its affiliates. All use shall be exclusively subject\n * to such license between the licensee and ForgeRock AS.\n */\n\nvar new Location = foo;',
|
|
102
|
+
},
|
|
103
|
+
{ name: 'messageType', value: '4' },
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const securityKeyResponse = `/* * Copyright 2018 ForgeRock AS. All Rights Reserved * * Use of this code requires a commercial software license with ForgeRock AS. * or with one of its affiliates. All use shall be exclusively subject * to such license between the licensee and ForgeRock AS. */ var newLocation = document.getElementById("wrapper"); var oldHtml = newLocation.getElementsByTagName("fieldset")[0].innerHTML; newLocation.getElementsByTagName("fieldset")[0].innerHTML = "<div class=\"panel panel-default\">\n" + " <div class=\"panel-body text-center\">\n" + " <h3>Your Recovery Codes</h3>\n" + " <h4>You must make a copy of these recovery codes. They cannot be displayed again.</h4>\n" + " </div>\n" + "<div class=\"text-center\">\n" + "kw50qtmm32\n" + "</div>\n" + "<div class=\"text-center\">\n" + "Rt2Td8AK2s\n" + "</div>\n" + "<div class=\"text-center\">\n" + "6vZrIRCBJB\n" + "</div>\n" + "<div class=\"text-center\">\n" + "HCmL01Yiyv\n" + "</div>\n" + "<div class=\"text-center\">\n" + "BvDsSpazA2\n" + "</div>\n" + "<div class=\"text-center\">\n" + "T6pbKLyW2l\n" + "</div>\n" + "<div class=\"text-center\">\n" + "gZR0u6XubS\n" + "</div>\n" + "<div class=\"text-center\">\n" + "VZ1bH94IfO\n" + "</div>\n" + "<div class=\"text-center\">\n" + "O9BZ4bLefQ\n" + "</div>\n" + "<div class=\"text-center\">\n" + "NKNrBxlHCt\n" + "</div>\n" + "<div class=\"panel-body text-center\">\n" + " <p>Use one of these codes to authenticate if you lose your device, which has been named: <em>New Security Key</em></p>\n" + "</div>\n" + "</div>" + oldHtml; document.body.appendChild(newLocation);`;
|
|
110
|
+
const securityKeyCustomNameResponse = `/* * Copyright 2018 ForgeRock AS. All Rights Reserved * * Use of this code requires a commercial software license with ForgeRock AS. * or with one of its affiliates. All use shall be exclusively subject * to such license between the licensee and ForgeRock AS. */ var newLocation = document.getElementById("wrapper"); var oldHtml = newLocation.getElementsByTagName("fieldset")[0].innerHTML; newLocation.getElementsByTagName("fieldset")[0].innerHTML = "<div class=\"panel panel-default\">\n" + " <div class=\"panel-body text-center\">\n" + " <h3>Your Recovery Codes</h3>\n" + " <h4>You must make a copy of these recovery codes. They cannot be displayed again.</h4>\n" + " </div>\n" + "<div class=\"text-center\">\n" + "kw50qtmm32\n" + "</div>\n" + "<div class=\"text-center\">\n" + "Rt2Td8AK2s\n" + "</div>\n" + "<div class=\"text-center\">\n" + "6vZrIRCBJB\n" + "</div>\n" + "<div class=\"text-center\">\n" + "HCmL01Yiyv\n" + "</div>\n" + "<div class=\"text-center\">\n" + "BvDsSpazA2\n" + "</div>\n" + "<div class=\"text-center\">\n" + "T6pbKLyW2l\n" + "</div>\n" + "<div class=\"text-center\">\n" + "gZR0u6XubS\n" + "</div>\n" + "<div class=\"text-center\">\n" + "VZ1bH94IfO\n" + "</div>\n" + "<div class=\"text-center\">\n" + "O9BZ4bLefQ\n" + "</div>\n" + "<div class=\"text-center\">\n" + "NKNrBxlHCt\n" + "</div>\n" + "<div class=\"panel-body text-center\">\n" + " <p>Use one of these codes to authenticate if you lose your device, which has been named: <em>My Custom Device Name</em></p>\n" + "</div>\n" + "</div>" + oldHtml; document.body.appendChild(newLocation);`;
|
|
111
|
+
|
|
112
|
+
export {
|
|
113
|
+
displayRecoveryCodes,
|
|
114
|
+
displayRecoveryCodesResponse,
|
|
115
|
+
expectedDeviceName,
|
|
116
|
+
expectedRecoveryCodes,
|
|
117
|
+
otherResponse,
|
|
118
|
+
securityKeyCustomNameResponse,
|
|
119
|
+
securityKeyResponse,
|
|
120
|
+
};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This software may be modified and distributed under the terms
|
|
5
|
+
* of the MIT license. See the LICENSE file for details.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { callbackType } from '@forgerock/sdk-types';
|
|
9
|
+
import { describe, it, expect } from 'vitest';
|
|
10
|
+
|
|
11
|
+
import type { Step } from '@forgerock/sdk-types';
|
|
12
|
+
|
|
13
|
+
import { createJourneyStep } from './step.utils.js';
|
|
14
|
+
import { NameCallback } from './callbacks/name-callback.js';
|
|
15
|
+
|
|
16
|
+
describe('fr-step.ts', () => {
|
|
17
|
+
const stepPayload: Step = {
|
|
18
|
+
authId: '123',
|
|
19
|
+
callbacks: [
|
|
20
|
+
{
|
|
21
|
+
type: callbackType.NameCallback,
|
|
22
|
+
input: [{ name: 'IDToken1', value: '' }],
|
|
23
|
+
output: [{ name: 'prompt', value: 'Username' }],
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: callbackType.PasswordCallback,
|
|
27
|
+
input: [{ name: 'IDToken2', value: '' }],
|
|
28
|
+
output: [{ name: 'prompt', value: 'Password' }],
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
type: callbackType.NameCallback, // Duplicate for testing
|
|
32
|
+
input: [{ name: 'IDToken3', value: '' }],
|
|
33
|
+
output: [{ name: 'prompt', value: 'Username 2' }],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
description: 'Step description',
|
|
37
|
+
header: 'Step header',
|
|
38
|
+
stage: 'Step stage',
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
it('should correctly initialize with a payload', () => {
|
|
42
|
+
const step = createJourneyStep(stepPayload);
|
|
43
|
+
expect(step.payload).toEqual(stepPayload);
|
|
44
|
+
expect(step.callbacks).toHaveLength(3);
|
|
45
|
+
expect(step.callbacks[0]).toBeInstanceOf(NameCallback);
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it('should get a single callback of a specific type', () => {
|
|
49
|
+
const singleCallbackPayload: Step = { ...stepPayload, callbacks: [stepPayload.callbacks![1]] };
|
|
50
|
+
const step = createJourneyStep(singleCallbackPayload);
|
|
51
|
+
const cb = step.getCallbackOfType(callbackType.PasswordCallback);
|
|
52
|
+
expect(cb).toBeDefined();
|
|
53
|
+
expect(cb.getType()).toBe(callbackType.PasswordCallback);
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('should throw an error if getCallbackOfType finds no matching callbacks', () => {
|
|
57
|
+
const step = createJourneyStep(stepPayload);
|
|
58
|
+
const err = `Expected 1 callback of type "TermsAndConditionsCallback", but found 0`;
|
|
59
|
+
expect(() => step.getCallbackOfType(callbackType.TermsAndConditionsCallback)).toThrow(err);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should throw an error if getCallbackOfType finds multiple matching callbacks', () => {
|
|
63
|
+
const step = createJourneyStep(stepPayload);
|
|
64
|
+
const err = `Expected 1 callback of type "NameCallback", but found 2`;
|
|
65
|
+
expect(() => step.getCallbackOfType(callbackType.NameCallback)).toThrow(err);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should get all callbacks of a specific type', () => {
|
|
69
|
+
const step = createJourneyStep(stepPayload);
|
|
70
|
+
const callbacks = step.getCallbacksOfType(callbackType.NameCallback);
|
|
71
|
+
expect(callbacks).toHaveLength(2);
|
|
72
|
+
expect(callbacks[0].getType()).toBe(callbackType.NameCallback);
|
|
73
|
+
expect(callbacks[1].getType()).toBe(callbackType.NameCallback);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('should return an empty array if getCallbacksOfType finds no matches', () => {
|
|
77
|
+
const step = createJourneyStep(stepPayload);
|
|
78
|
+
const callbacks = step.getCallbacksOfType(callbackType.TermsAndConditionsCallback);
|
|
79
|
+
expect(callbacks).toHaveLength(0);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
it('should set the value of a specific callback', () => {
|
|
83
|
+
const singleCallbackPayload: Step = { ...stepPayload, callbacks: [stepPayload.callbacks![1]] };
|
|
84
|
+
const step = createJourneyStep(singleCallbackPayload);
|
|
85
|
+
step.setCallbackValue(callbackType.PasswordCallback, 'password123');
|
|
86
|
+
const cb = step.getCallbackOfType(callbackType.PasswordCallback);
|
|
87
|
+
expect(cb.getInputValue()).toBe('password123');
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it('should return the description', () => {
|
|
91
|
+
const step = createJourneyStep(stepPayload);
|
|
92
|
+
expect(step.getDescription()).toBe('Step description');
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
it('should return the header', () => {
|
|
96
|
+
const step = createJourneyStep(stepPayload);
|
|
97
|
+
expect(step.getHeader()).toBe('Step header');
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should return the stage', () => {
|
|
101
|
+
const step = createJourneyStep(stepPayload);
|
|
102
|
+
expect(step.getStage()).toBe('Step stage');
|
|
103
|
+
});
|
|
104
|
+
});
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This software may be modified and distributed under the terms
|
|
5
|
+
* of the MIT license. See the LICENSE file for details.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { AuthResponse, CallbackType, Step, StepType } from '@forgerock/sdk-types';
|
|
9
|
+
|
|
10
|
+
import type { BaseCallback } from './callbacks/base-callback.js';
|
|
11
|
+
|
|
12
|
+
export type JourneyStep = AuthResponse & {
|
|
13
|
+
type: StepType.Step;
|
|
14
|
+
payload: Step;
|
|
15
|
+
callbacks: BaseCallback[];
|
|
16
|
+
getCallbackOfType: <T extends BaseCallback>(type: CallbackType) => T;
|
|
17
|
+
getCallbacksOfType: <T extends BaseCallback>(type: CallbackType) => T[];
|
|
18
|
+
setCallbackValue: (type: CallbackType, value: unknown) => void;
|
|
19
|
+
getDescription: () => string | undefined;
|
|
20
|
+
getHeader: () => string | undefined;
|
|
21
|
+
getStage: () => string | undefined;
|
|
22
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
3
|
+
*
|
|
4
|
+
* This software may be modified and distributed under the terms
|
|
5
|
+
* of the MIT license. See the LICENSE file for details.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { type CallbackType, type Callback, type Step } from '@forgerock/sdk-types';
|
|
9
|
+
|
|
10
|
+
import { StepType } from '@forgerock/sdk-types';
|
|
11
|
+
|
|
12
|
+
import { createCallback } from './callbacks/factory.js';
|
|
13
|
+
|
|
14
|
+
import type { BaseCallback } from './callbacks/base-callback.js';
|
|
15
|
+
import type { JourneyStep } from './step.types.js';
|
|
16
|
+
import type { CallbackFactory } from './callbacks/factory.js';
|
|
17
|
+
|
|
18
|
+
function getCallbacksOfType<T extends BaseCallback>(
|
|
19
|
+
callbacks: BaseCallback[],
|
|
20
|
+
type: CallbackType,
|
|
21
|
+
): T[] {
|
|
22
|
+
return callbacks.filter((x) => x.getType() === type) as T[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function getCallbackOfType<T extends BaseCallback>(
|
|
26
|
+
callbacks: BaseCallback[],
|
|
27
|
+
type: CallbackType,
|
|
28
|
+
): T {
|
|
29
|
+
const callbacksOfType = getCallbacksOfType<T>(callbacks, type);
|
|
30
|
+
if (callbacksOfType.length !== 1) {
|
|
31
|
+
throw new Error(`Expected 1 callback of type "${type}", but found ${callbacksOfType.length}`);
|
|
32
|
+
}
|
|
33
|
+
return callbacksOfType[0];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function setCallbackValue(callbacks: BaseCallback[], type: CallbackType, value: unknown): void {
|
|
37
|
+
const callbacksToUpdate = getCallbacksOfType(callbacks, type);
|
|
38
|
+
if (callbacksToUpdate.length !== 1) {
|
|
39
|
+
throw new Error(`Expected 1 callback of type "${type}", but found ${callbacksToUpdate.length}`);
|
|
40
|
+
}
|
|
41
|
+
callbacksToUpdate[0].setInputValue(value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function getDescription(payload: Step): string | undefined {
|
|
45
|
+
return payload.description;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getHeader(payload: Step): string | undefined {
|
|
49
|
+
return payload.header;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function getStage(payload: Step): string | undefined {
|
|
53
|
+
return payload.stage;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function convertCallbacks(
|
|
57
|
+
callbacks: Callback[],
|
|
58
|
+
callbackFactory?: CallbackFactory,
|
|
59
|
+
): BaseCallback[] {
|
|
60
|
+
const converted = callbacks.map((x: Callback) => {
|
|
61
|
+
// This gives preference to the provided factory and falls back to our default implementation
|
|
62
|
+
return (callbackFactory || createCallback)(x) || createCallback(x);
|
|
63
|
+
});
|
|
64
|
+
return converted;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function createJourneyStep(payload: Step, callbackFactory?: CallbackFactory): JourneyStep {
|
|
68
|
+
// Redux Toolkit freezes data, so we need to clone it before making any changes
|
|
69
|
+
const unfrozenPayload =
|
|
70
|
+
typeof structuredClone === 'function'
|
|
71
|
+
? structuredClone(payload)
|
|
72
|
+
: (JSON.parse(JSON.stringify(payload)) as Step);
|
|
73
|
+
|
|
74
|
+
const convertedCallbacks = unfrozenPayload.callbacks
|
|
75
|
+
? convertCallbacks(unfrozenPayload.callbacks, callbackFactory)
|
|
76
|
+
: [];
|
|
77
|
+
return {
|
|
78
|
+
payload: unfrozenPayload,
|
|
79
|
+
callbacks: convertedCallbacks,
|
|
80
|
+
type: StepType.Step,
|
|
81
|
+
getCallbackOfType: <T extends BaseCallback>(type: CallbackType) =>
|
|
82
|
+
getCallbackOfType<T>(convertedCallbacks, type),
|
|
83
|
+
getCallbacksOfType: <T extends BaseCallback>(type: CallbackType) =>
|
|
84
|
+
getCallbacksOfType<T>(convertedCallbacks, type),
|
|
85
|
+
setCallbackValue: (type: CallbackType, value: unknown) =>
|
|
86
|
+
setCallbackValue(convertedCallbacks, type, value),
|
|
87
|
+
getDescription: () => getDescription(payload),
|
|
88
|
+
getHeader: () => getHeader(payload),
|
|
89
|
+
getStage: () => getStage(payload),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* A function that can populate the provided authentication tree step.
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
type JourneyStepHandler = (step: JourneyStep) => void;
|
|
98
|
+
|
|
99
|
+
export { createJourneyStep, JourneyStep, JourneyStepHandler };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* enums.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
enum WebAuthnOutcome {
|
|
12
|
+
Error = 'ERROR',
|
|
13
|
+
Unsupported = 'unsupported',
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
enum WebAuthnOutcomeType {
|
|
17
|
+
AbortError = 'AbortError',
|
|
18
|
+
DataError = 'DataError',
|
|
19
|
+
ConstraintError = 'ConstraintError',
|
|
20
|
+
EncodingError = 'EncodingError',
|
|
21
|
+
InvalidError = 'InvalidError',
|
|
22
|
+
NetworkError = 'NetworkError',
|
|
23
|
+
NotAllowedError = 'NotAllowedError',
|
|
24
|
+
NotSupportedError = 'NotSupportedError',
|
|
25
|
+
SecurityError = 'SecurityError',
|
|
26
|
+
TimeoutError = 'TimeoutError',
|
|
27
|
+
UnknownError = 'UnknownError',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
enum WebAuthnStepType {
|
|
31
|
+
None = 0,
|
|
32
|
+
Authentication = 1,
|
|
33
|
+
Registration = 2,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { WebAuthnOutcome, WebAuthnOutcomeType, WebAuthnStepType };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* helpers.mock.data.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2020 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
* This software may be modified and distributed under the terms
|
|
8
|
+
* of the MIT license. See the LICENSE file for details.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const allowCredentials70 =
|
|
12
|
+
'allowCredentials: [{ "type": "public-key", "id": new Int8Array([1, -16, 9, 79, 6, -2, -82, 51, 124, -94, 95, 23, -86, 70, -43, 89, 91, -9, 45, -22, 91, -51, 84, 93, 24, -64, 38, 101, 126, -53, 87, 70, -49, -88, -105, 116, 33, 75, -39, -92, -5, 115, 12, 52, 124, -100, 85, 104, -15, 5, -13, 25, -74, 101, 71, -115, -102, 16, 10, -9, -19, -110, 65, 118, -28, 89, -15, -115, -81, 22, -104, 123, 17, -92, 49, 109, -38, -51, 100, 96, -65, 25, -48, 28, 106, -45, 17, -45, -37, 46, -5, -6, -26, -23, -108, 13, -66, -55, -117, -107, 119, 7, -32, 34, 46, 0, -29, -111, -32, 45, -15, -113, 110, 123, -44, 6, 10, 65, 99, 25, 105, 69, -127, 76, 127, -33, -89, -56, 74, 25, 43, -43, -56, 9, 87, 80, 124, -32, -39, 115, 17, 18, 78, 121, 69, -36, -44, -28, -109, -126, 58, 64, 80, -4, 21, 63, -19]).buffer }]';
|
|
13
|
+
|
|
14
|
+
export const allowMultipleCredentials70 =
|
|
15
|
+
'allowCredentials: [{ "type": "public-key", "id": new Int8Array([-33, 120, 18, 124, 16, 5, -127, -51, 68, 85, 76, -92, -3, 25, 116, 91, 71, 53, 106, -114, -86, 9, -81, -96, -32, -110, 66, -23, -5, 104, 96, 46, 43, -66, -110, 8, -70, 11, 51, -93, 19, 124, 81, 78, 58, -97, 89, -87, -26, -112, 95, -83, 118, -25, 118, 3, 35, -96, 120, -76, -87, 83, -101, 82]).buffer },{ "type": "public-key", "id": new Int8Array([1, 73, 82, 23, 76, -5, -53, -48, -104, -17, -42, 45, 7, 35, 35, -72, -7, 37, 9, 37, 117, 42, 66, 116, 58, 25, -68, 53, 113, -10, 102, 3, -60, -81, -74, 96, -5, 111, -56, 110, -101, -54, -31, -123, -100, 3, 37, -69, -114, -19, -25, -62, 18, 122, 39, 11, 83, 60, -58, 3, 116, 10, -80, -35, 6, -128, -51, -92, 100, -115, -22, -122, 21, -65, 97, 67, -49, 26, 42, -11, 90, 121, -63, 112, -16, 118, -99, -73, -89, -67, 72, -80, 18, -72, 109, 4, -14, 1, -93, 17, -17, -70, -2, -5, -116, 111, -128, 7, 62, -34, -43, 110, 89, 113, -65, -95, 113, -5, -104, -100, -73, 42, 2, 112, -21, 41, 41, 91, 108, -102, 47, -77, -52, 70, 107, -4, 25, -120, 114, 30, 23, 103, 120, 17, 55, 91, -110, -58, -110, 13, -56, 57, -126, 36, 40, 89, -9]).buffer }]';
|
|
16
|
+
|
|
17
|
+
export const acceptableCredentials653 =
|
|
18
|
+
'{ "type": "public-key", "id": new Int8Array([53, -21, 26, -99, 5, 4, -112, -76, -126, 90, -35, -7, -31, -92, 19, -71, -39, 73, 52, -10, -14, -7, -59, -7, -36, -111, 64, 101, 29, 89, 90, -56, 108, 42, 32, -19, -113, 118, -114, 49, 109, -70, 68, -89, 36, -36, -103, -128, 34, -24, -40, -71, -125, -120, -80, 63, 25, -33, 2, 26, 111, -52, -15, -52]).buffer }';
|
|
19
|
+
|
|
20
|
+
export const acceptableMultipleCredentials653 =
|
|
21
|
+
'{ "type": "public-key", "id": new Int8Array([17, 88, -12, 26, -50, -48, -38, 36, -69, -105, -68, -38, 66, -53, -37, -50, -109, -126, 122, 26, 25, -45, 96, 37, -124, 102, 124, 94, -98, -59, 113, 94, 115, -111, -69, 45, 37, -83, 118, -115, -4, -49, 34, 115, -24, -49, -37, -17, -127, -15, 62, 18, 93, 122, -109, 53, -52, 44, -63, -74, 109, 2, -110, 45]).buffer },{ "type": "public-key", "id": new Int8Array([1, 83, -98, 32, 110, -62, 78, 53, -63, -118, 12, 122, -72, -15, 85, 48, -39, -97, -73, 108, -122, -60, 56, -112, -89, -118, 111, 0, -4, 13, -50, -43, -53, 28, 114, 82, 22, -76, 15, 51, -95, 26, -90, -93, -51, 115, -28, 85, -105, -27, 111, 70, 106, -28, 45, 126, 44, 63, -16, 97, -55, 31, -24, 57, -92, 48, 26, 127, -39, 75, 12, 13, 100, -77, 13, -48, 49, 52, 31, 85, 9, 63, -122, -90, -54, -87, -110, -1, 115, -122, -69, -15, 83, 57, 95, -31, -92, -116, 89, -109, -98, 21, 24, -80, -28, 103, -28, -82, -39, 114, -29, -46, -76, 123, -69, -44, 124, 10, 53, -103, 19, -43, -12, 62, -83, -86, 95, -78, 70, -105, 116, -25, 106, 54, -72, -119, 91, 91, -71, -49, 22, 25, -108, 112, -14, 55, 9, 75, 89, -91, -59, 45]).buffer }';
|
|
22
|
+
|
|
23
|
+
export const pubKeyCredParamsStr =
|
|
24
|
+
'[ { "type": "public-key", "alg": -257 }, { "type": "public-key", "alg": -7 } ]';
|