@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,124 @@
|
|
|
1
|
+
import { WebAuthnOutcome, WebAuthnStepType } from './enums.js';
|
|
2
|
+
import type { HiddenValueCallback } from '../callbacks/hidden-value-callback.js';
|
|
3
|
+
import type { JourneyStep } from '../step.utils.js';
|
|
4
|
+
import type { AttestationType, RelyingParty, WebAuthnAuthenticationMetadata, WebAuthnCallbacks, WebAuthnRegistrationMetadata } from './interfaces.js';
|
|
5
|
+
import type { MetadataCallback } from '../callbacks/metadata-callback.js';
|
|
6
|
+
import type { TextOutputCallback } from '../callbacks/text-output-callback.js';
|
|
7
|
+
type OutcomeWithName<ClientId extends string, Attestation extends AttestationType, PubKeyCred extends PublicKeyCredential, Name = ''> = Name extends infer P extends string ? `${ClientId}::${Attestation}::${PubKeyCred['id']}${P extends '' ? '' : `::${P}`}` : never;
|
|
8
|
+
/**
|
|
9
|
+
* Utility for integrating a web browser's WebAuthn API.
|
|
10
|
+
*
|
|
11
|
+
* Example:
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* // Determine if a step is a WebAuthn step
|
|
15
|
+
* const stepType = WebAuthn.getWebAuthnStepType(step);
|
|
16
|
+
* if (stepType === WebAuthnStepType.Registration) {
|
|
17
|
+
* // Register a new device
|
|
18
|
+
* await WebAuthn.register(step);
|
|
19
|
+
* } else if (stepType === WebAuthnStepType.Authentication) {
|
|
20
|
+
* // Authenticate with a registered device
|
|
21
|
+
* await WebAuthn.authenticate(step);
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare abstract class WebAuthn {
|
|
26
|
+
/**
|
|
27
|
+
* Determines if the given step is a WebAuthn step.
|
|
28
|
+
*
|
|
29
|
+
* @param step The step to evaluate
|
|
30
|
+
* @return A WebAuthnStepType value
|
|
31
|
+
*/
|
|
32
|
+
static getWebAuthnStepType(step: JourneyStep): WebAuthnStepType;
|
|
33
|
+
/**
|
|
34
|
+
* Populates the step with the necessary authentication outcome.
|
|
35
|
+
*
|
|
36
|
+
* @param step The step that contains WebAuthn authentication data
|
|
37
|
+
* @return The populated step
|
|
38
|
+
*/
|
|
39
|
+
static authenticate(step: JourneyStep): Promise<JourneyStep>;
|
|
40
|
+
/**
|
|
41
|
+
* Populates the step with the necessary registration outcome.
|
|
42
|
+
*
|
|
43
|
+
* @param step The step that contains WebAuthn registration data
|
|
44
|
+
* @return The populated step
|
|
45
|
+
*/
|
|
46
|
+
static register<T extends string = ''>(step: JourneyStep, deviceName?: T): Promise<JourneyStep>;
|
|
47
|
+
/**
|
|
48
|
+
* Returns an object containing the two WebAuthn callbacks.
|
|
49
|
+
*
|
|
50
|
+
* @param step The step that contains WebAuthn callbacks
|
|
51
|
+
* @return The WebAuthn callbacks
|
|
52
|
+
*/
|
|
53
|
+
static getCallbacks(step: JourneyStep): WebAuthnCallbacks;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the WebAuthn metadata callback containing data to pass to the browser
|
|
56
|
+
* Web Authentication API.
|
|
57
|
+
*
|
|
58
|
+
* @param step The step that contains WebAuthn callbacks
|
|
59
|
+
* @return The metadata callback
|
|
60
|
+
*/
|
|
61
|
+
static getMetadataCallback(step: JourneyStep): MetadataCallback | undefined;
|
|
62
|
+
/**
|
|
63
|
+
* Returns the WebAuthn hidden value callback where the outcome should be populated.
|
|
64
|
+
*
|
|
65
|
+
* @param step The step that contains WebAuthn callbacks
|
|
66
|
+
* @return The hidden value callback
|
|
67
|
+
*/
|
|
68
|
+
static getOutcomeCallback(step: JourneyStep): HiddenValueCallback | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Returns the WebAuthn metadata callback containing data to pass to the browser
|
|
71
|
+
* Web Authentication API.
|
|
72
|
+
*
|
|
73
|
+
* @param step The step that contains WebAuthn callbacks
|
|
74
|
+
* @return The metadata callback
|
|
75
|
+
*/
|
|
76
|
+
static getTextOutputCallback(step: JourneyStep): TextOutputCallback | undefined;
|
|
77
|
+
/**
|
|
78
|
+
* Retrieves the credential from the browser Web Authentication API.
|
|
79
|
+
*
|
|
80
|
+
* @param options The public key options associated with the request
|
|
81
|
+
* @return The credential
|
|
82
|
+
*/
|
|
83
|
+
static getAuthenticationCredential(options: PublicKeyCredentialRequestOptions): Promise<PublicKeyCredential | null>;
|
|
84
|
+
/**
|
|
85
|
+
* Converts an authentication credential into the outcome expected by OpenAM.
|
|
86
|
+
*
|
|
87
|
+
* @param credential The credential to convert
|
|
88
|
+
* @return The outcome string
|
|
89
|
+
*/
|
|
90
|
+
static getAuthenticationOutcome(credential: PublicKeyCredential | null): OutcomeWithName<string, AttestationType, PublicKeyCredential> | OutcomeWithName<string, AttestationType, PublicKeyCredential, string>;
|
|
91
|
+
/**
|
|
92
|
+
* Retrieves the credential from the browser Web Authentication API.
|
|
93
|
+
*
|
|
94
|
+
* @param options The public key options associated with the request
|
|
95
|
+
* @return The credential
|
|
96
|
+
*/
|
|
97
|
+
static getRegistrationCredential(options: PublicKeyCredentialCreationOptions): Promise<PublicKeyCredential | null>;
|
|
98
|
+
/**
|
|
99
|
+
* Converts a registration credential into the outcome expected by OpenAM.
|
|
100
|
+
*
|
|
101
|
+
* @param credential The credential to convert
|
|
102
|
+
* @return The outcome string
|
|
103
|
+
*/
|
|
104
|
+
static getRegistrationOutcome(credential: PublicKeyCredential | null): OutcomeWithName<string, AttestationType, PublicKeyCredential>;
|
|
105
|
+
/**
|
|
106
|
+
* Converts authentication tree metadata into options required by the browser
|
|
107
|
+
* Web Authentication API.
|
|
108
|
+
*
|
|
109
|
+
* @param metadata The metadata provided in the authentication tree MetadataCallback
|
|
110
|
+
* @return The Web Authentication API request options
|
|
111
|
+
*/
|
|
112
|
+
static createAuthenticationPublicKey(metadata: WebAuthnAuthenticationMetadata): PublicKeyCredentialRequestOptions;
|
|
113
|
+
/**
|
|
114
|
+
* Converts authentication tree metadata into options required by the browser
|
|
115
|
+
* Web Authentication API.
|
|
116
|
+
*
|
|
117
|
+
* @param metadata The metadata provided in the authentication tree MetadataCallback
|
|
118
|
+
* @return The Web Authentication API request options
|
|
119
|
+
*/
|
|
120
|
+
static createRegistrationPublicKey(metadata: WebAuthnRegistrationMetadata): PublicKeyCredentialCreationOptions;
|
|
121
|
+
}
|
|
122
|
+
export { WebAuthnOutcome, WebAuthnStepType };
|
|
123
|
+
export type { RelyingParty, WebAuthnAuthenticationMetadata, WebAuthnCallbacks, WebAuthnRegistrationMetadata, };
|
|
124
|
+
//# sourceMappingURL=webauthn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webauthn.d.ts","sourceRoot":"","sources":["../../../../src/lib/webauthn/webauthn.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAuB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAQpF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,8BAA8B,EAC9B,iBAAiB,EACjB,4BAA4B,EAE7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,KAAK,eAAe,CAClB,QAAQ,SAAS,MAAM,EACvB,WAAW,SAAS,eAAe,EACnC,UAAU,SAAS,mBAAmB,EACtC,IAAI,GAAG,EAAE,IACP,IAAI,SAAS,MAAM,CAAC,SAAS,MAAM,GACnC,GAAG,QAAQ,KAAK,WAAW,KAAK,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,EAAE,EAAE,GACjF,KAAK,CAAC;AAIV;;;;;;;;;;;;;;;;GAgBG;AACH,8BAAsB,QAAQ;IAC5B;;;;;OAKG;WACW,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB;IA6BtE;;;;;OAKG;WACiB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IAqDzE;;;;;OAKG;WAIiB,QAAQ,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAChD,IAAI,EAAE,WAAW,EACjB,UAAU,CAAC,EAAE,CAAC,GACb,OAAO,CAAC,WAAW,CAAC;IAyDvB;;;;;OAKG;WACW,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,iBAAiB;IAiBhE;;;;;;OAMG;WACW,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,gBAAgB,GAAG,SAAS;IAQlF;;;;;OAKG;WACW,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,mBAAmB,GAAG,SAAS;IAMpF;;;;;;OAMG;WACW,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,GAAG,SAAS;IAStF;;;;;OAKG;WACiB,2BAA2B,CAC7C,OAAO,EAAE,iCAAiC,GACzC,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAWtC;;;;;OAKG;WACW,wBAAwB,CACpC,UAAU,EAAE,mBAAmB,GAAG,IAAI,GAEpC,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,CAAC,GAC7D,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,CAAC;IA6CzE;;;;;OAKG;WACiB,yBAAyB,CAC3C,OAAO,EAAE,kCAAkC,GAC1C,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAatC;;;;;OAKG;WACW,sBAAsB,CAClC,UAAU,EAAE,mBAAmB,GAAG,IAAI,GACrC,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,mBAAmB,CAAC;IAqBhE;;;;;;OAMG;WACW,6BAA6B,CACzC,QAAQ,EAAE,8BAA8B,GACvC,iCAAiC;IAsBpC;;;;;;OAMG;WACW,2BAA2B,CACvC,QAAQ,EAAE,4BAA4B,GACrC,kCAAkC;CA0CtC;AAED,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC;AAC7C,YAAY,EACV,YAAY,EACZ,8BAA8B,EAC9B,iBAAiB,EACjB,4BAA4B,GAC7B,CAAC"}
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @forgerock/ping-javascript-sdk
|
|
3
|
+
*
|
|
4
|
+
* index.ts
|
|
5
|
+
*
|
|
6
|
+
* Copyright (c) 2024 - 2025 Ping Identity Corporation. All rights reserved.
|
|
7
|
+
*
|
|
8
|
+
* This software may be modified and distributed under the terms
|
|
9
|
+
* of the MIT license. See the LICENSE file for details.
|
|
10
|
+
*/
|
|
11
|
+
import { callbackType } from '@forgerock/sdk-types';
|
|
12
|
+
import { WebAuthnOutcome, WebAuthnOutcomeType, WebAuthnStepType } from './enums.js';
|
|
13
|
+
import { arrayBufferToString, parseCredentials, parsePubKeyArray, parseRelyingPartyId, } from './helpers.js';
|
|
14
|
+
/**
|
|
15
|
+
* Utility for integrating a web browser's WebAuthn API.
|
|
16
|
+
*
|
|
17
|
+
* Example:
|
|
18
|
+
*
|
|
19
|
+
* ```js
|
|
20
|
+
* // Determine if a step is a WebAuthn step
|
|
21
|
+
* const stepType = WebAuthn.getWebAuthnStepType(step);
|
|
22
|
+
* if (stepType === WebAuthnStepType.Registration) {
|
|
23
|
+
* // Register a new device
|
|
24
|
+
* await WebAuthn.register(step);
|
|
25
|
+
* } else if (stepType === WebAuthnStepType.Authentication) {
|
|
26
|
+
* // Authenticate with a registered device
|
|
27
|
+
* await WebAuthn.authenticate(step);
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export class WebAuthn {
|
|
32
|
+
/**
|
|
33
|
+
* Determines if the given step is a WebAuthn step.
|
|
34
|
+
*
|
|
35
|
+
* @param step The step to evaluate
|
|
36
|
+
* @return A WebAuthnStepType value
|
|
37
|
+
*/
|
|
38
|
+
static getWebAuthnStepType(step) {
|
|
39
|
+
const outcomeCallback = this.getOutcomeCallback(step);
|
|
40
|
+
const metadataCallback = this.getMetadataCallback(step);
|
|
41
|
+
const textOutputCallback = this.getTextOutputCallback(step);
|
|
42
|
+
if (outcomeCallback && metadataCallback) {
|
|
43
|
+
const metadata = metadataCallback.getOutputValue('data');
|
|
44
|
+
if (metadata?.pubKeyCredParams) {
|
|
45
|
+
return WebAuthnStepType.Registration;
|
|
46
|
+
}
|
|
47
|
+
return WebAuthnStepType.Authentication;
|
|
48
|
+
}
|
|
49
|
+
if (outcomeCallback && textOutputCallback) {
|
|
50
|
+
const message = textOutputCallback.getMessage();
|
|
51
|
+
if (message.includes('pubKeyCredParams')) {
|
|
52
|
+
return WebAuthnStepType.Registration;
|
|
53
|
+
}
|
|
54
|
+
return WebAuthnStepType.Authentication;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return WebAuthnStepType.None;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Populates the step with the necessary authentication outcome.
|
|
62
|
+
*
|
|
63
|
+
* @param step The step that contains WebAuthn authentication data
|
|
64
|
+
* @return The populated step
|
|
65
|
+
*/
|
|
66
|
+
static async authenticate(step) {
|
|
67
|
+
const { hiddenCallback, metadataCallback, textOutputCallback } = this.getCallbacks(step);
|
|
68
|
+
if (hiddenCallback && (metadataCallback || textOutputCallback)) {
|
|
69
|
+
let outcome;
|
|
70
|
+
let credential = null;
|
|
71
|
+
try {
|
|
72
|
+
let publicKey;
|
|
73
|
+
if (metadataCallback) {
|
|
74
|
+
const meta = metadataCallback.getOutputValue('data');
|
|
75
|
+
publicKey = this.createAuthenticationPublicKey(meta);
|
|
76
|
+
credential = await this.getAuthenticationCredential(publicKey);
|
|
77
|
+
outcome = this.getAuthenticationOutcome(credential);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
throw new Error('No metadata callback found for WebAuthn authentication. Please disable JavaScript in server node.');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
if (!(error instanceof Error))
|
|
85
|
+
throw error;
|
|
86
|
+
// NotSupportedError is a special case
|
|
87
|
+
if (error.name === WebAuthnOutcomeType.NotSupportedError) {
|
|
88
|
+
hiddenCallback.setInputValue(WebAuthnOutcome.Unsupported);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
hiddenCallback.setInputValue(`${WebAuthnOutcome.Error}::${error.name}:${error.message}`);
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
if (metadataCallback) {
|
|
95
|
+
const meta = metadataCallback.getOutputValue('data');
|
|
96
|
+
if (meta?.supportsJsonResponse && credential && 'authenticatorAttachment' in credential) {
|
|
97
|
+
hiddenCallback.setInputValue(JSON.stringify({
|
|
98
|
+
authenticatorAttachment: credential.authenticatorAttachment,
|
|
99
|
+
legacyData: outcome,
|
|
100
|
+
}));
|
|
101
|
+
return step;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
hiddenCallback.setInputValue(outcome);
|
|
105
|
+
return step;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const e = new Error('Incorrect callbacks for WebAuthn authentication');
|
|
109
|
+
e.name = WebAuthnOutcomeType.DataError;
|
|
110
|
+
hiddenCallback?.setInputValue(`${WebAuthnOutcome.Error}::${e.name}:${e.message}`);
|
|
111
|
+
throw e;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Populates the step with the necessary registration outcome.
|
|
116
|
+
*
|
|
117
|
+
* @param step The step that contains WebAuthn registration data
|
|
118
|
+
* @return The populated step
|
|
119
|
+
*/
|
|
120
|
+
// Can make this generic const in Typescript 5.0 > and the name itself will
|
|
121
|
+
// be inferred from the type so `typeof deviceName` will not just return string
|
|
122
|
+
// but the actual name of the deviceName passed in as a generic.
|
|
123
|
+
static async register(step, deviceName) {
|
|
124
|
+
const { hiddenCallback, metadataCallback, textOutputCallback } = this.getCallbacks(step);
|
|
125
|
+
if (hiddenCallback && (metadataCallback || textOutputCallback)) {
|
|
126
|
+
let outcome;
|
|
127
|
+
let credential = null;
|
|
128
|
+
try {
|
|
129
|
+
let publicKey;
|
|
130
|
+
if (metadataCallback) {
|
|
131
|
+
const meta = metadataCallback.getOutputValue('data');
|
|
132
|
+
publicKey = this.createRegistrationPublicKey(meta);
|
|
133
|
+
credential = await this.getRegistrationCredential(publicKey);
|
|
134
|
+
outcome = this.getRegistrationOutcome(credential);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
throw new Error('No metadata callback found for WebAuthn registration. Please disable JavaScript in server node.');
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
if (!(error instanceof Error))
|
|
142
|
+
throw error;
|
|
143
|
+
// NotSupportedError is a special case
|
|
144
|
+
if (error.name === WebAuthnOutcomeType.NotSupportedError) {
|
|
145
|
+
hiddenCallback.setInputValue(WebAuthnOutcome.Unsupported);
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
hiddenCallback.setInputValue(`${WebAuthnOutcome.Error}::${error.name}:${error.message}`);
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
if (metadataCallback) {
|
|
152
|
+
const meta = metadataCallback.getOutputValue('data');
|
|
153
|
+
if (meta?.supportsJsonResponse && credential && 'authenticatorAttachment' in credential) {
|
|
154
|
+
hiddenCallback.setInputValue(JSON.stringify({
|
|
155
|
+
authenticatorAttachment: credential.authenticatorAttachment,
|
|
156
|
+
legacyData: deviceName && deviceName.length > 0 ? `${outcome}::${deviceName}` : outcome,
|
|
157
|
+
}));
|
|
158
|
+
return step;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
hiddenCallback.setInputValue(deviceName && deviceName.length > 0 ? `${outcome}::${deviceName}` : outcome);
|
|
162
|
+
return step;
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
const e = new Error('Incorrect callbacks for WebAuthn registration');
|
|
166
|
+
e.name = WebAuthnOutcomeType.DataError;
|
|
167
|
+
hiddenCallback?.setInputValue(`${WebAuthnOutcome.Error}::${e.name}:${e.message}`);
|
|
168
|
+
throw e;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Returns an object containing the two WebAuthn callbacks.
|
|
173
|
+
*
|
|
174
|
+
* @param step The step that contains WebAuthn callbacks
|
|
175
|
+
* @return The WebAuthn callbacks
|
|
176
|
+
*/
|
|
177
|
+
static getCallbacks(step) {
|
|
178
|
+
const hiddenCallback = this.getOutcomeCallback(step);
|
|
179
|
+
const metadataCallback = this.getMetadataCallback(step);
|
|
180
|
+
const textOutputCallback = this.getTextOutputCallback(step);
|
|
181
|
+
const returnObj = {
|
|
182
|
+
hiddenCallback,
|
|
183
|
+
};
|
|
184
|
+
if (metadataCallback) {
|
|
185
|
+
returnObj.metadataCallback = metadataCallback;
|
|
186
|
+
}
|
|
187
|
+
else if (textOutputCallback) {
|
|
188
|
+
returnObj.textOutputCallback = textOutputCallback;
|
|
189
|
+
}
|
|
190
|
+
return returnObj;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Returns the WebAuthn metadata callback containing data to pass to the browser
|
|
194
|
+
* Web Authentication API.
|
|
195
|
+
*
|
|
196
|
+
* @param step The step that contains WebAuthn callbacks
|
|
197
|
+
* @return The metadata callback
|
|
198
|
+
*/
|
|
199
|
+
static getMetadataCallback(step) {
|
|
200
|
+
return step.getCallbacksOfType(callbackType.MetadataCallback).find((x) => {
|
|
201
|
+
const cb = x.getOutputByName('data', undefined);
|
|
202
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
203
|
+
return cb && cb.hasOwnProperty('relyingPartyId');
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Returns the WebAuthn hidden value callback where the outcome should be populated.
|
|
208
|
+
*
|
|
209
|
+
* @param step The step that contains WebAuthn callbacks
|
|
210
|
+
* @return The hidden value callback
|
|
211
|
+
*/
|
|
212
|
+
static getOutcomeCallback(step) {
|
|
213
|
+
return step
|
|
214
|
+
.getCallbacksOfType(callbackType.HiddenValueCallback)
|
|
215
|
+
.find((x) => x.getOutputByName('id', '') === 'webAuthnOutcome');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Returns the WebAuthn metadata callback containing data to pass to the browser
|
|
219
|
+
* Web Authentication API.
|
|
220
|
+
*
|
|
221
|
+
* @param step The step that contains WebAuthn callbacks
|
|
222
|
+
* @return The metadata callback
|
|
223
|
+
*/
|
|
224
|
+
static getTextOutputCallback(step) {
|
|
225
|
+
return step
|
|
226
|
+
.getCallbacksOfType(callbackType.TextOutputCallback)
|
|
227
|
+
.find((x) => {
|
|
228
|
+
const cb = x.getOutputByName('message', undefined);
|
|
229
|
+
return cb && cb.includes('webAuthnOutcome');
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Retrieves the credential from the browser Web Authentication API.
|
|
234
|
+
*
|
|
235
|
+
* @param options The public key options associated with the request
|
|
236
|
+
* @return The credential
|
|
237
|
+
*/
|
|
238
|
+
static async getAuthenticationCredential(options) {
|
|
239
|
+
// Feature check before we attempt registering a device
|
|
240
|
+
if (!window.PublicKeyCredential) {
|
|
241
|
+
const e = new Error('PublicKeyCredential not supported by this browser');
|
|
242
|
+
e.name = WebAuthnOutcomeType.NotSupportedError;
|
|
243
|
+
throw e;
|
|
244
|
+
}
|
|
245
|
+
const credential = await navigator.credentials.get({ publicKey: options });
|
|
246
|
+
return credential;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Converts an authentication credential into the outcome expected by OpenAM.
|
|
250
|
+
*
|
|
251
|
+
* @param credential The credential to convert
|
|
252
|
+
* @return The outcome string
|
|
253
|
+
*/
|
|
254
|
+
static getAuthenticationOutcome(credential) {
|
|
255
|
+
if (credential === null) {
|
|
256
|
+
const e = new Error('No credential generated from authentication');
|
|
257
|
+
e.name = WebAuthnOutcomeType.UnknownError;
|
|
258
|
+
throw e;
|
|
259
|
+
}
|
|
260
|
+
try {
|
|
261
|
+
const clientDataJSON = arrayBufferToString(credential.response.clientDataJSON);
|
|
262
|
+
const assertionResponse = credential.response;
|
|
263
|
+
const authenticatorData = new Int8Array(assertionResponse.authenticatorData).toString();
|
|
264
|
+
const signature = new Int8Array(assertionResponse.signature).toString();
|
|
265
|
+
// Current native typing for PublicKeyCredential does not include `userHandle`
|
|
266
|
+
// eslint-disable-next-line
|
|
267
|
+
// @ts-ignore
|
|
268
|
+
const userHandle = arrayBufferToString(credential.response.userHandle);
|
|
269
|
+
let stringOutput = `${clientDataJSON}::${authenticatorData}::${signature}::${credential.id}`;
|
|
270
|
+
// Check if Username is stored on device
|
|
271
|
+
if (userHandle) {
|
|
272
|
+
stringOutput = `${stringOutput}::${userHandle}`;
|
|
273
|
+
return stringOutput;
|
|
274
|
+
}
|
|
275
|
+
return stringOutput;
|
|
276
|
+
}
|
|
277
|
+
catch {
|
|
278
|
+
const e = new Error('Transforming credential object to string failed');
|
|
279
|
+
e.name = WebAuthnOutcomeType.EncodingError;
|
|
280
|
+
throw e;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Retrieves the credential from the browser Web Authentication API.
|
|
285
|
+
*
|
|
286
|
+
* @param options The public key options associated with the request
|
|
287
|
+
* @return The credential
|
|
288
|
+
*/
|
|
289
|
+
static async getRegistrationCredential(options) {
|
|
290
|
+
// Feature check before we attempt registering a device
|
|
291
|
+
if (!window.PublicKeyCredential) {
|
|
292
|
+
const e = new Error('PublicKeyCredential not supported by this browser');
|
|
293
|
+
e.name = WebAuthnOutcomeType.NotSupportedError;
|
|
294
|
+
throw e;
|
|
295
|
+
}
|
|
296
|
+
const credential = await navigator.credentials.create({
|
|
297
|
+
publicKey: options,
|
|
298
|
+
});
|
|
299
|
+
return credential;
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Converts a registration credential into the outcome expected by OpenAM.
|
|
303
|
+
*
|
|
304
|
+
* @param credential The credential to convert
|
|
305
|
+
* @return The outcome string
|
|
306
|
+
*/
|
|
307
|
+
static getRegistrationOutcome(credential) {
|
|
308
|
+
if (credential === null) {
|
|
309
|
+
const e = new Error('No credential generated from registration');
|
|
310
|
+
e.name = WebAuthnOutcomeType.UnknownError;
|
|
311
|
+
throw e;
|
|
312
|
+
}
|
|
313
|
+
try {
|
|
314
|
+
const clientDataJSON = arrayBufferToString(credential.response.clientDataJSON);
|
|
315
|
+
const attestationResponse = credential.response;
|
|
316
|
+
const attestationObject = new Int8Array(attestationResponse.attestationObject).toString();
|
|
317
|
+
return `${clientDataJSON}::${attestationObject}::${credential.id}`;
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
const e = new Error('Transforming credential object to string failed');
|
|
321
|
+
e.name = WebAuthnOutcomeType.EncodingError;
|
|
322
|
+
throw e;
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Converts authentication tree metadata into options required by the browser
|
|
327
|
+
* Web Authentication API.
|
|
328
|
+
*
|
|
329
|
+
* @param metadata The metadata provided in the authentication tree MetadataCallback
|
|
330
|
+
* @return The Web Authentication API request options
|
|
331
|
+
*/
|
|
332
|
+
static createAuthenticationPublicKey(metadata) {
|
|
333
|
+
const { acceptableCredentials, allowCredentials, challenge, relyingPartyId, timeout, userVerification, } = metadata;
|
|
334
|
+
const rpId = parseRelyingPartyId(relyingPartyId);
|
|
335
|
+
const allowCredentialsValue = parseCredentials(allowCredentials || acceptableCredentials || '');
|
|
336
|
+
return {
|
|
337
|
+
challenge: Uint8Array.from(atob(challenge), (c) => c.charCodeAt(0)).buffer,
|
|
338
|
+
timeout,
|
|
339
|
+
// only add key-value pair if proper value is provided
|
|
340
|
+
...(allowCredentialsValue && { allowCredentials: allowCredentialsValue }),
|
|
341
|
+
...(userVerification && { userVerification }),
|
|
342
|
+
...(rpId && { rpId }),
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Converts authentication tree metadata into options required by the browser
|
|
347
|
+
* Web Authentication API.
|
|
348
|
+
*
|
|
349
|
+
* @param metadata The metadata provided in the authentication tree MetadataCallback
|
|
350
|
+
* @return The Web Authentication API request options
|
|
351
|
+
*/
|
|
352
|
+
static createRegistrationPublicKey(metadata) {
|
|
353
|
+
const { pubKeyCredParams: pubKeyCredParamsString } = metadata;
|
|
354
|
+
const pubKeyCredParams = parsePubKeyArray(pubKeyCredParamsString);
|
|
355
|
+
if (!pubKeyCredParams) {
|
|
356
|
+
const e = new Error('Missing pubKeyCredParams property from registration options');
|
|
357
|
+
e.name = WebAuthnOutcomeType.DataError;
|
|
358
|
+
throw e;
|
|
359
|
+
}
|
|
360
|
+
const excludeCredentials = parseCredentials(metadata.excludeCredentials);
|
|
361
|
+
const { attestationPreference, authenticatorSelection, challenge, relyingPartyId, relyingPartyName, timeout, userId, userName, displayName, } = metadata;
|
|
362
|
+
const rpId = parseRelyingPartyId(relyingPartyId);
|
|
363
|
+
const rp = {
|
|
364
|
+
name: relyingPartyName,
|
|
365
|
+
...(rpId && { id: rpId }),
|
|
366
|
+
};
|
|
367
|
+
return {
|
|
368
|
+
attestation: attestationPreference,
|
|
369
|
+
authenticatorSelection: JSON.parse(authenticatorSelection),
|
|
370
|
+
challenge: Uint8Array.from(atob(challenge), (c) => c.charCodeAt(0)).buffer,
|
|
371
|
+
...(excludeCredentials.length && { excludeCredentials }),
|
|
372
|
+
pubKeyCredParams,
|
|
373
|
+
rp,
|
|
374
|
+
timeout,
|
|
375
|
+
user: {
|
|
376
|
+
displayName: displayName || userName,
|
|
377
|
+
id: Int8Array.from(userId.split('').map((c) => c.charCodeAt(0))),
|
|
378
|
+
name: displayName || userName,
|
|
379
|
+
},
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
export { WebAuthnOutcome, WebAuthnStepType };
|