@unidy.io/sdk 1.2.0-alpha9 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/_commonjsHelpers-CFO10eej.js +10 -0
- package/dist/cjs/_commonjsHelpers-CFO10eej.js.map +1 -0
- package/dist/cjs/app-globals-C-Wl5lPS.js +10 -0
- package/dist/cjs/app-globals-C-Wl5lPS.js.map +1 -0
- package/dist/cjs/{auth-store-DPmGKHZ2.js → auth-store-0vv3uOib.js} +4 -4
- package/dist/cjs/{auth-store-DPmGKHZ2.js.map → auth-store-0vv3uOib.js.map} +1 -1
- package/dist/cjs/component-DLxnZCW6.js +34 -0
- package/dist/cjs/component-DLxnZCW6.js.map +1 -0
- package/dist/cjs/component-utils-XXctnOM9.js +38 -0
- package/dist/cjs/component-utils-XXctnOM9.js.map +1 -0
- package/dist/cjs/de-BWF6Glzg.js +704 -0
- package/dist/cjs/de-BWF6Glzg.js.map +1 -0
- package/dist/cjs/en-GB-DhD5mdQw.js +119 -0
- package/dist/cjs/en-GB-DhD5mdQw.js.map +1 -0
- package/dist/cjs/{flash-store-gbSYhPAV.js → flash-store-CR6Umh1O.js} +3 -3
- package/dist/cjs/{flash-store-gbSYhPAV.js.map → flash-store-CR6Umh1O.js.map} +1 -1
- package/dist/cjs/fr-j2wwoj-A.js +577 -0
- package/dist/cjs/fr-j2wwoj-A.js.map +1 -0
- package/dist/cjs/has-slot-content-CfJbU4t-.js +37 -0
- package/dist/cjs/has-slot-content-CfJbU4t-.js.map +1 -0
- package/dist/cjs/{i18n-D5j_Zl-4.js → i18n-ClWrNmGh.js} +100 -4
- package/dist/cjs/{i18n-D5j_Zl-4.js.map → i18n-ClWrNmGh.js.map} +1 -1
- package/dist/cjs/{index-B325yXfO.js → index-2Fz3r5o0.js} +5 -41
- package/dist/cjs/index-2Fz3r5o0.js.map +1 -0
- package/dist/cjs/{index-yaeiYlfa.js → index-C6ZBKFYr.js} +3 -3
- package/dist/cjs/{index-yaeiYlfa.js.map → index-C6ZBKFYr.js.map} +1 -1
- package/dist/cjs/{index-BzPYBLYC.js → index-CpPKy1CZ.js} +1170 -1087
- package/dist/cjs/index-CpPKy1CZ.js.map +1 -0
- package/dist/cjs/index.cjs.js +24 -11
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/loader.cjs.js +3 -3
- package/dist/cjs/{newsletter-helpers-hdDC5X-V.js → newsletter-helpers-BHvOI8M4.js} +46 -9
- package/dist/cjs/newsletter-helpers-BHvOI8M4.js.map +1 -0
- package/dist/cjs/{newsletter-store-CupsLgO9.js → newsletter-store-22Jswiqe.js} +5 -3
- package/dist/cjs/newsletter-store-22Jswiqe.js.map +1 -0
- package/dist/cjs/nl-BE-yKvOp1-G.js +542 -0
- package/dist/cjs/nl-BE-yKvOp1-G.js.map +1 -0
- package/dist/cjs/{profile-helpers-Bprrm-Xl.js → profile-helpers-BBpAqHjK.js} +4 -4
- package/dist/cjs/{profile-helpers-Bprrm-Xl.js.map → profile-helpers-BBpAqHjK.js.map} +1 -1
- package/dist/cjs/{profile-store-C_q-TuA_.js → profile-store-CQEQhPQD.js} +4 -4
- package/dist/cjs/{profile-store-C_q-TuA_.js.map → profile-store-CQEQhPQD.js.map} +1 -1
- package/dist/cjs/redirect-with-token-wupYX97S.js +37 -0
- package/dist/cjs/redirect-with-token-wupYX97S.js.map +1 -0
- package/dist/cjs/ro-CXq9d1lv.js +578 -0
- package/dist/cjs/ro-CXq9d1lv.js.map +1 -0
- package/dist/cjs/sdk.cjs.js +3 -3
- package/dist/cjs/sv-CMln4V33.js +597 -0
- package/dist/cjs/sv-CMln4V33.js.map +1 -0
- package/dist/cjs/u-conditional-render.cjs.entry.js +14 -14
- package/dist/cjs/u-conditional-render.entry.cjs.js.map +1 -1
- package/dist/cjs/u-config.cjs.entry.js +24 -11
- package/dist/cjs/u-config.entry.cjs.js.map +1 -1
- package/dist/cjs/u-email-field.cjs.entry.js +7 -7
- package/dist/cjs/u-error-message.cjs.entry.js +49 -22
- package/dist/cjs/u-error-message.entry.cjs.js.map +1 -1
- package/dist/cjs/u-field.u-raw-field.entry.cjs.js.map +1 -1
- package/dist/cjs/u-field_2.cjs.entry.js +124 -12
- package/dist/cjs/u-flash-message.cjs.entry.js +3 -3
- package/dist/cjs/u-full-profile.cjs.entry.js +6 -6
- package/dist/cjs/u-jump-to-service.cjs.entry.js +23 -44
- package/dist/cjs/u-jump-to-service.entry.cjs.js.map +1 -1
- package/dist/cjs/u-jump-to-unidy.cjs.entry.js +22 -43
- package/dist/cjs/u-jump-to-unidy.entry.cjs.js.map +1 -1
- package/dist/cjs/u-logout-button.u-signed-in.entry.cjs.js.map +1 -1
- package/dist/cjs/u-logout-button_2.cjs.entry.js +15 -22
- package/dist/cjs/u-magic-code-field.cjs.entry.js +8 -9
- package/dist/cjs/u-magic-code-field.entry.cjs.js.map +1 -1
- package/dist/cjs/u-missing-field.cjs.entry.js +6 -5
- package/dist/cjs/u-missing-field.entry.cjs.js.map +1 -1
- package/dist/cjs/u-missing-fields-submit-button.cjs.entry.js +16 -14
- package/dist/cjs/u-missing-fields-submit-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-checkbox.cjs.entry.js +11 -12
- package/dist/cjs/u-newsletter-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-consent-checkbox.cjs.entry.js +4 -4
- package/dist/cjs/u-newsletter-logout-button.cjs.entry.js +15 -20
- package/dist/cjs/u-newsletter-logout-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-preference-checkbox.cjs.entry.js +11 -12
- package/dist/cjs/u-newsletter-preference-checkbox.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-resend-doi-button.cjs.entry.js +10 -11
- package/dist/cjs/u-newsletter-resend-doi-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-root.cjs.entry.js +45 -22
- package/dist/cjs/u-newsletter-root.entry.cjs.js.map +1 -1
- package/dist/cjs/u-newsletter-toggle-subscription-button.cjs.entry.js +11 -12
- package/dist/cjs/u-newsletter-toggle-subscription-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-pagination-button.cjs.entry.js +4 -4
- package/dist/cjs/u-pagination-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-pagination-page.cjs.entry.js +4 -4
- package/dist/cjs/u-pagination-page.entry.cjs.js.map +1 -1
- package/dist/cjs/u-passkey.cjs.entry.js +8 -9
- package/dist/cjs/u-passkey.entry.cjs.js.map +1 -1
- package/dist/cjs/u-password-field.cjs.entry.js +5 -5
- package/dist/cjs/u-profile.u-submit-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-profile_2.cjs.entry.js +31 -33
- package/dist/cjs/u-registration-button.cjs.entry.js +5 -5
- package/dist/cjs/u-reset-password-button.cjs.entry.js +12 -15
- package/dist/cjs/u-reset-password-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-send-magic-code-button.cjs.entry.js +8 -9
- package/dist/cjs/u-send-magic-code-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-signin-root.cjs.entry.js +6 -8
- package/dist/cjs/u-signin-root.entry.cjs.js.map +1 -1
- package/dist/cjs/u-signin-step.cjs.entry.js +17 -21
- package/dist/cjs/u-signin-step.entry.cjs.js.map +1 -1
- package/dist/cjs/u-social-login-button.cjs.entry.js +16 -15
- package/dist/cjs/u-social-login-button.entry.cjs.js.map +1 -1
- package/dist/cjs/u-spinner.cjs.entry.js +3 -3
- package/dist/cjs/u-spinner.entry.cjs.js.map +1 -1
- package/dist/cjs/u-ticketable-export.cjs.entry.js +76 -0
- package/dist/cjs/u-ticketable-export.entry.cjs.js.map +1 -0
- package/dist/cjs/u-ticketable-list-D3M8iA-g.js +3991 -0
- package/dist/cjs/u-ticketable-list-D3M8iA-g.js.map +1 -0
- package/dist/cjs/u-ticketable-list.cjs.entry.js +11 -6118
- package/dist/cjs/u-ticketable-list.entry.cjs.js.map +1 -1
- package/dist/cjs/{unidy-store-BGnWn9pc.js → unidy-store-Bvnl24i9.js} +3 -3
- package/dist/cjs/{unidy-store-BGnWn9pc.js.map → unidy-store-Bvnl24i9.js.map} +1 -1
- package/dist/collection/api/base-service.js.map +1 -1
- package/dist/collection/api/client.js.map +1 -1
- package/dist/collection/api/index.js +6 -6
- package/dist/collection/api/index.js.map +1 -1
- package/dist/collection/api/standalone.js +88 -39
- package/dist/collection/api/standalone.js.map +1 -1
- package/dist/collection/auth/api/auth.js.map +1 -1
- package/dist/collection/auth/api/schemas.js +5 -5
- package/dist/collection/auth/api/schemas.js.map +1 -1
- package/dist/collection/auth/auth-helpers.js +7 -8
- package/dist/collection/auth/auth-helpers.js.map +1 -1
- package/dist/collection/auth/auth.js +1 -0
- package/dist/collection/auth/auth.js.map +1 -1
- package/dist/collection/auth/components/jump-to-service/jump-to-service.js +20 -40
- package/dist/collection/auth/components/jump-to-service/jump-to-service.js.map +1 -1
- package/dist/collection/auth/components/jump-to-unidy/jump-to-unidy.js +20 -39
- package/dist/collection/auth/components/jump-to-unidy/jump-to-unidy.js.map +1 -1
- package/dist/collection/auth/components/logout-button/logout-button.js +7 -11
- package/dist/collection/auth/components/logout-button/logout-button.js.map +1 -1
- package/dist/collection/auth/components/missing-field/missing-field.js +25 -1
- package/dist/collection/auth/components/missing-field/missing-field.js.map +1 -1
- package/dist/collection/auth/components/missing-fields-submit-button/missing-fields-submit-button.js +33 -7
- package/dist/collection/auth/components/missing-fields-submit-button/missing-fields-submit-button.js.map +1 -1
- package/dist/collection/auth/components/password-field/password-field.js +1 -1
- package/dist/collection/auth/components/reset-pass-button/reset-pass-button.js +6 -8
- package/dist/collection/auth/components/reset-pass-button/reset-pass-button.js.map +1 -1
- package/dist/collection/auth/components/signed-in/signed-in.js +2 -5
- package/dist/collection/auth/components/signed-in/signed-in.js.map +1 -1
- package/dist/collection/auth/components/signin-root/signin-root.js +2 -5
- package/dist/collection/auth/components/signin-root/signin-root.js.map +1 -1
- package/dist/collection/auth/components/signin-step/signin-step.js +9 -13
- package/dist/collection/auth/components/signin-step/signin-step.js.map +1 -1
- package/dist/collection/auth/components/social-logins/social-login-button.css +1 -1
- package/dist/collection/auth/components/social-logins/social-login-button.js +11 -12
- package/dist/collection/auth/components/social-logins/social-login-button.js.map +1 -1
- package/dist/collection/auth/components/submit-button/auth-submit-button.js +10 -0
- package/dist/collection/auth/components/submit-button/auth-submit-button.js.map +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/locales/de.json +16 -0
- package/dist/collection/locales/en.json +16 -0
- package/dist/collection/locales/fr.json +16 -0
- package/dist/collection/locales/it.json +16 -0
- package/dist/collection/locales/nl_be.json +16 -0
- package/dist/collection/locales/ro.json +16 -0
- package/dist/collection/logger.js +0 -37
- package/dist/collection/logger.js.map +1 -1
- package/dist/collection/newsletter/api/newsletters.js +19 -18
- package/dist/collection/newsletter/api/newsletters.js.map +1 -1
- package/dist/collection/newsletter/components/consent-checkbox/consent-checkbox.js +1 -1
- package/dist/collection/newsletter/components/logout-button/logout-button.js +6 -10
- package/dist/collection/newsletter/components/logout-button/logout-button.js.map +1 -1
- package/dist/collection/newsletter/components/newsletter-checkbox/newsletter-checkbox.js +1 -1
- package/dist/collection/newsletter/components/newsletter-root/newsletter-root.js +65 -10
- package/dist/collection/newsletter/components/newsletter-root/newsletter-root.js.map +1 -1
- package/dist/collection/newsletter/components/preference-checkbox/preference-checkbox.js +1 -1
- package/dist/collection/newsletter/components/toggle-subscription-button/toggle-subscription-button.js +1 -1
- package/dist/collection/newsletter/newsletter-helpers.js +39 -2
- package/dist/collection/newsletter/newsletter-helpers.js.map +1 -1
- package/dist/collection/newsletter/store/newsletter-store.js +2 -0
- package/dist/collection/newsletter/store/newsletter-store.js.map +1 -1
- package/dist/collection/profile/api/profile.js.map +1 -1
- package/dist/collection/profile/api/schemas.js +1 -1
- package/dist/collection/profile/api/schemas.js.map +1 -1
- package/dist/collection/profile/components/field/field.js +3 -1
- package/dist/collection/profile/components/field/field.js.map +1 -1
- package/dist/collection/profile/components/full-profile/full-profile.js +1 -1
- package/dist/collection/profile/components/raw-field/raw-field.js +40 -7
- package/dist/collection/profile/components/raw-field/raw-field.js.map +1 -1
- package/dist/collection/profile/store/profile-store.js +1 -1
- package/dist/collection/profile/store/profile-store.js.map +1 -1
- package/dist/collection/shared/base/component.js +28 -0
- package/dist/collection/shared/base/component.js.map +1 -0
- package/dist/collection/shared/base/has-slot-content.js +31 -0
- package/dist/collection/shared/base/has-slot-content.js.map +1 -0
- package/dist/collection/shared/component-utils.js +23 -27
- package/dist/collection/shared/component-utils.js.map +1 -1
- package/dist/collection/shared/components/conditional-render/conditional-render.js +4 -5
- package/dist/collection/shared/components/conditional-render/conditional-render.js.map +1 -1
- package/dist/collection/shared/components/config/config.js +18 -5
- package/dist/collection/shared/components/config/config.js.map +1 -1
- package/dist/collection/shared/components/email-field/email-field.js +1 -1
- package/dist/collection/shared/components/error-message/error-message.css +1 -1
- package/dist/collection/shared/components/error-message/error-message.js +44 -17
- package/dist/collection/shared/components/error-message/error-message.js.map +1 -1
- package/dist/collection/shared/components/spinner/spinner.css +1 -1
- package/dist/collection/shared/components/spinner/spinner.js +1 -1
- package/dist/collection/shared/components/submit-button/submit-button.css +1 -1
- package/dist/collection/shared/components/submit-button/submit-button.js +12 -23
- package/dist/collection/shared/components/submit-button/submit-button.js.map +1 -1
- package/dist/collection/shared/context-utils.js +96 -0
- package/dist/collection/shared/context-utils.js.map +1 -0
- package/dist/collection/shared/utils/redirect-with-token.js +30 -0
- package/dist/collection/shared/utils/redirect-with-token.js.map +1 -0
- package/dist/collection/shared/utils/url-utils.js +25 -0
- package/dist/collection/shared/utils/url-utils.js.map +1 -0
- package/dist/collection/ticketable/api/schemas.js +10 -2
- package/dist/collection/ticketable/api/schemas.js.map +1 -1
- package/dist/collection/ticketable/api/subscriptions.js +22 -1
- package/dist/collection/ticketable/api/subscriptions.js.map +1 -1
- package/dist/collection/ticketable/api/tickets.js +22 -1
- package/dist/collection/ticketable/api/tickets.js.map +1 -1
- package/dist/collection/ticketable/components/pagination/pagination-button.js +3 -5
- package/dist/collection/ticketable/components/pagination/pagination-button.js.map +1 -1
- package/dist/collection/ticketable/components/pagination/pagination-page.js +3 -5
- package/dist/collection/ticketable/components/pagination/pagination-page.js.map +1 -1
- package/dist/collection/ticketable/components/ticketable-export/ticketable-export.js +175 -0
- package/dist/collection/ticketable/components/ticketable-export/ticketable-export.js.map +1 -0
- package/dist/collection/ticketable/components/ticketable-list/ticketable-list.js +163 -25
- package/dist/collection/ticketable/components/ticketable-list/ticketable-list.js.map +1 -1
- package/dist/collection/ticketable/index.js +1 -0
- package/dist/collection/ticketable/index.js.map +1 -1
- package/dist/components/_commonjsHelpers.js +8 -0
- package/dist/components/_commonjsHelpers.js.map +1 -0
- package/dist/components/component-utils.js +25 -28
- package/dist/components/component-utils.js.map +1 -1
- package/dist/components/component.js +33 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/de.js +702 -0
- package/dist/components/de.js.map +1 -0
- package/dist/components/en-GB.js +117 -0
- package/dist/components/en-GB.js.map +1 -0
- package/dist/components/field.js +3 -1
- package/dist/components/field.js.map +1 -1
- package/dist/components/fr.js +575 -0
- package/dist/components/fr.js.map +1 -0
- package/dist/components/has-slot-content.js +35 -0
- package/dist/components/has-slot-content.js.map +1 -0
- package/dist/components/i18n.js +96 -0
- package/dist/components/i18n.js.map +1 -1
- package/dist/components/index.js +11 -3
- package/dist/components/index.js.map +1 -1
- package/dist/components/index2.js +1158 -1083
- package/dist/components/index2.js.map +1 -1
- package/dist/components/logger.js +1 -39
- package/dist/components/logger.js.map +1 -1
- package/dist/components/newsletter-helpers.js +39 -2
- package/dist/components/newsletter-helpers.js.map +1 -1
- package/dist/components/newsletter-store.js +2 -0
- package/dist/components/newsletter-store.js.map +1 -1
- package/dist/components/nl-BE.js +540 -0
- package/dist/components/nl-BE.js.map +1 -0
- package/dist/components/profile-store.js +1 -1
- package/dist/components/profile-store.js.map +1 -1
- package/dist/components/raw-field.js +116 -7
- package/dist/components/raw-field.js.map +1 -1
- package/dist/components/redirect-with-token.js +35 -0
- package/dist/components/redirect-with-token.js.map +1 -0
- package/dist/components/ro.js +576 -0
- package/dist/components/ro.js.map +1 -0
- package/dist/components/spinner.js +2 -2
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/submit-button.js +21 -24
- package/dist/components/submit-button.js.map +1 -1
- package/dist/components/sv.js +595 -0
- package/dist/components/sv.js.map +1 -0
- package/dist/components/u-conditional-render.js +5 -6
- package/dist/components/u-conditional-render.js.map +1 -1
- package/dist/components/u-config.js +16 -3
- package/dist/components/u-config.js.map +1 -1
- package/dist/components/u-email-field.js +1 -1
- package/dist/components/u-error-message.js +44 -19
- package/dist/components/u-error-message.js.map +1 -1
- package/dist/components/u-full-profile.js +1 -1
- package/dist/components/u-jump-to-service.js +16 -38
- package/dist/components/u-jump-to-service.js.map +1 -1
- package/dist/components/u-jump-to-unidy.js +16 -37
- package/dist/components/u-jump-to-unidy.js.map +1 -1
- package/dist/components/u-logout-button.js +5 -11
- package/dist/components/u-logout-button.js.map +1 -1
- package/dist/components/u-missing-field.js +5 -2
- package/dist/components/u-missing-field.js.map +1 -1
- package/dist/components/u-missing-fields-submit-button.js +10 -8
- package/dist/components/u-missing-fields-submit-button.js.map +1 -1
- package/dist/components/u-newsletter-checkbox.js +1 -1
- package/dist/components/u-newsletter-consent-checkbox.js +1 -1
- package/dist/components/u-newsletter-logout-button.js +6 -12
- package/dist/components/u-newsletter-logout-button.js.map +1 -1
- package/dist/components/u-newsletter-preference-checkbox.js +1 -1
- package/dist/components/u-newsletter-root.js +35 -12
- package/dist/components/u-newsletter-root.js.map +1 -1
- package/dist/components/u-newsletter-toggle-subscription-button.js +1 -1
- package/dist/components/u-pagination-button.js +3 -4
- package/dist/components/u-pagination-button.js.map +1 -1
- package/dist/components/u-pagination-page.js +3 -4
- package/dist/components/u-pagination-page.js.map +1 -1
- package/dist/components/u-reset-password-button.js +4 -8
- package/dist/components/u-reset-password-button.js.map +1 -1
- package/dist/components/u-signed-in.js +3 -6
- package/dist/components/u-signed-in.js.map +1 -1
- package/dist/components/u-signin-root.js +3 -6
- package/dist/components/u-signin-root.js.map +1 -1
- package/dist/components/u-signin-step.js +10 -14
- package/dist/components/u-signin-step.js.map +1 -1
- package/dist/components/u-social-login-button.js +13 -14
- package/dist/components/u-social-login-button.js.map +1 -1
- package/dist/components/u-ticketable-export.d.ts +11 -0
- package/dist/components/u-ticketable-export.js +93 -0
- package/dist/components/u-ticketable-export.js.map +1 -0
- package/dist/components/u-ticketable-list.js +256 -2396
- package/dist/components/u-ticketable-list.js.map +1 -1
- package/dist/esm/_commonjsHelpers-B85MJLTf.js +8 -0
- package/dist/esm/_commonjsHelpers-B85MJLTf.js.map +1 -0
- package/dist/esm/app-globals-J743qnJf.js +8 -0
- package/dist/esm/app-globals-J743qnJf.js.map +1 -0
- package/dist/esm/{auth-store-DBlGNGhq.js → auth-store-CSpEdi46.js} +4 -4
- package/dist/esm/{auth-store-DBlGNGhq.js.map → auth-store-CSpEdi46.js.map} +1 -1
- package/dist/esm/component-qfegGRWr.js +32 -0
- package/dist/esm/component-qfegGRWr.js.map +1 -0
- package/dist/esm/component-utils-WEof9bTg.js +36 -0
- package/dist/esm/component-utils-WEof9bTg.js.map +1 -0
- package/dist/esm/de-C6AnCqsA.js +702 -0
- package/dist/esm/de-C6AnCqsA.js.map +1 -0
- package/dist/esm/en-GB-DO63WPxt.js +117 -0
- package/dist/esm/en-GB-DO63WPxt.js.map +1 -0
- package/dist/esm/{flash-store-Df2YkLTB.js → flash-store-Dn1Bava8.js} +3 -3
- package/dist/esm/{flash-store-Df2YkLTB.js.map → flash-store-Dn1Bava8.js.map} +1 -1
- package/dist/esm/fr-C0oU6-EJ.js +575 -0
- package/dist/esm/fr-C0oU6-EJ.js.map +1 -0
- package/dist/esm/has-slot-content-DSMkJu9G.js +35 -0
- package/dist/esm/has-slot-content-DSMkJu9G.js.map +1 -0
- package/dist/esm/{i18n-Da7S9Oqf.js → i18n-ioyZxWsT.js} +100 -4
- package/dist/esm/{i18n-Da7S9Oqf.js.map → i18n-ioyZxWsT.js.map} +1 -1
- package/dist/esm/{index-FTKB5a1d.js → index-BsJDptgj.js} +4 -40
- package/dist/esm/index-BsJDptgj.js.map +1 -0
- package/dist/esm/{index-BnAYOYR5.js → index-C8kmD3tu.js} +3 -3
- package/dist/esm/{index-BnAYOYR5.js.map → index-C8kmD3tu.js.map} +1 -1
- package/dist/esm/{index-BVlbCQEX.js → index-kgGjfc-n.js} +1163 -1088
- package/dist/esm/index-kgGjfc-n.js.map +1 -0
- package/dist/esm/index.js +18 -12
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/loader.js +4 -4
- package/dist/esm/{newsletter-helpers-fCpxzovf.js → newsletter-helpers-DoKGN_Kq.js} +46 -9
- package/dist/esm/newsletter-helpers-DoKGN_Kq.js.map +1 -0
- package/dist/esm/{newsletter-store-BB618FgS.js → newsletter-store-DpR85vaC.js} +5 -3
- package/dist/esm/newsletter-store-DpR85vaC.js.map +1 -0
- package/dist/esm/nl-BE-C8uPYb_H.js +540 -0
- package/dist/esm/nl-BE-C8uPYb_H.js.map +1 -0
- package/dist/esm/{profile-helpers-CXK2X6Ts.js → profile-helpers-BMJy0ei_.js} +4 -4
- package/dist/esm/{profile-helpers-CXK2X6Ts.js.map → profile-helpers-BMJy0ei_.js.map} +1 -1
- package/dist/esm/{profile-store-CHlSKuTY.js → profile-store-7wBS3gBH.js} +4 -4
- package/dist/esm/{profile-store-CHlSKuTY.js.map → profile-store-7wBS3gBH.js.map} +1 -1
- package/dist/esm/redirect-with-token-StCLJlSp.js +35 -0
- package/dist/esm/redirect-with-token-StCLJlSp.js.map +1 -0
- package/dist/esm/ro-BlDHz7d-.js +576 -0
- package/dist/esm/ro-BlDHz7d-.js.map +1 -0
- package/dist/esm/sdk.js +4 -4
- package/dist/esm/sv-B_Gq29K0.js +595 -0
- package/dist/esm/sv-B_Gq29K0.js.map +1 -0
- package/dist/esm/u-conditional-render.entry.js +14 -14
- package/dist/esm/u-conditional-render.entry.js.map +1 -1
- package/dist/esm/u-config.entry.js +24 -11
- package/dist/esm/u-config.entry.js.map +1 -1
- package/dist/esm/u-email-field.entry.js +7 -7
- package/dist/esm/u-error-message.entry.js +49 -22
- package/dist/esm/u-error-message.entry.js.map +1 -1
- package/dist/esm/u-field.u-raw-field.entry.js.map +1 -1
- package/dist/esm/u-field_2.entry.js +124 -12
- package/dist/esm/u-flash-message.entry.js +3 -3
- package/dist/esm/u-full-profile.entry.js +6 -6
- package/dist/esm/u-jump-to-service.entry.js +23 -44
- package/dist/esm/u-jump-to-service.entry.js.map +1 -1
- package/dist/esm/u-jump-to-unidy.entry.js +22 -43
- package/dist/esm/u-jump-to-unidy.entry.js.map +1 -1
- package/dist/esm/u-logout-button.u-signed-in.entry.js.map +1 -1
- package/dist/esm/u-logout-button_2.entry.js +15 -22
- package/dist/esm/u-magic-code-field.entry.js +8 -9
- package/dist/esm/u-magic-code-field.entry.js.map +1 -1
- package/dist/esm/u-missing-field.entry.js +6 -5
- package/dist/esm/u-missing-field.entry.js.map +1 -1
- package/dist/esm/u-missing-fields-submit-button.entry.js +16 -14
- package/dist/esm/u-missing-fields-submit-button.entry.js.map +1 -1
- package/dist/esm/u-newsletter-checkbox.entry.js +11 -12
- package/dist/esm/u-newsletter-checkbox.entry.js.map +1 -1
- package/dist/esm/u-newsletter-consent-checkbox.entry.js +4 -4
- package/dist/esm/u-newsletter-logout-button.entry.js +15 -20
- package/dist/esm/u-newsletter-logout-button.entry.js.map +1 -1
- package/dist/esm/u-newsletter-preference-checkbox.entry.js +11 -12
- package/dist/esm/u-newsletter-preference-checkbox.entry.js.map +1 -1
- package/dist/esm/u-newsletter-resend-doi-button.entry.js +10 -11
- package/dist/esm/u-newsletter-resend-doi-button.entry.js.map +1 -1
- package/dist/esm/u-newsletter-root.entry.js +42 -19
- package/dist/esm/u-newsletter-root.entry.js.map +1 -1
- package/dist/esm/u-newsletter-toggle-subscription-button.entry.js +11 -12
- package/dist/esm/u-newsletter-toggle-subscription-button.entry.js.map +1 -1
- package/dist/esm/u-pagination-button.entry.js +4 -4
- package/dist/esm/u-pagination-button.entry.js.map +1 -1
- package/dist/esm/u-pagination-page.entry.js +4 -4
- package/dist/esm/u-pagination-page.entry.js.map +1 -1
- package/dist/esm/u-passkey.entry.js +8 -9
- package/dist/esm/u-passkey.entry.js.map +1 -1
- package/dist/esm/u-password-field.entry.js +5 -5
- package/dist/esm/u-profile.u-submit-button.entry.js.map +1 -1
- package/dist/esm/u-profile_2.entry.js +31 -33
- package/dist/esm/u-registration-button.entry.js +5 -5
- package/dist/esm/u-reset-password-button.entry.js +12 -15
- package/dist/esm/u-reset-password-button.entry.js.map +1 -1
- package/dist/esm/u-send-magic-code-button.entry.js +8 -9
- package/dist/esm/u-send-magic-code-button.entry.js.map +1 -1
- package/dist/esm/u-signin-root.entry.js +6 -8
- package/dist/esm/u-signin-root.entry.js.map +1 -1
- package/dist/esm/u-signin-step.entry.js +17 -21
- package/dist/esm/u-signin-step.entry.js.map +1 -1
- package/dist/esm/u-social-login-button.entry.js +16 -15
- package/dist/esm/u-social-login-button.entry.js.map +1 -1
- package/dist/esm/u-spinner.entry.js +3 -3
- package/dist/esm/u-spinner.entry.js.map +1 -1
- package/dist/esm/u-ticketable-export.entry.js +74 -0
- package/dist/esm/u-ticketable-export.entry.js.map +1 -0
- package/dist/esm/u-ticketable-list-D2p21JjR.js +3981 -0
- package/dist/esm/u-ticketable-list-D2p21JjR.js.map +1 -0
- package/dist/esm/u-ticketable-list.entry.js +10 -6121
- package/dist/esm/u-ticketable-list.entry.js.map +1 -1
- package/dist/esm/{unidy-store-Bg7IaIMd.js → unidy-store-B5Bf4Vit.js} +3 -3
- package/dist/esm/{unidy-store-Bg7IaIMd.js.map → unidy-store-B5Bf4Vit.js.map} +1 -1
- package/dist/sdk/index.esm.js +1 -1
- package/dist/sdk/index.esm.js.map +1 -1
- package/dist/sdk/locales/de.json +16 -0
- package/dist/sdk/locales/en.json +16 -0
- package/dist/sdk/locales/fr.json +16 -0
- package/dist/sdk/locales/it.json +16 -0
- package/dist/sdk/locales/nl_be.json +16 -0
- package/dist/sdk/locales/ro.json +16 -0
- package/dist/sdk/p-02dce5da.entry.js +2 -0
- package/dist/sdk/p-02dce5da.entry.js.map +1 -0
- package/dist/sdk/p-043c7643.entry.js +2 -0
- package/dist/sdk/p-043c7643.entry.js.map +1 -0
- package/dist/sdk/p-18c17747.entry.js +2 -0
- package/dist/sdk/p-18c17747.entry.js.map +1 -0
- package/dist/sdk/p-1a1c1af0.entry.js +2 -0
- package/dist/sdk/p-1a1c1af0.entry.js.map +1 -0
- package/dist/sdk/p-271781c7.entry.js +2 -0
- package/dist/sdk/{p-1a8973a6.entry.js.map → p-271781c7.entry.js.map} +1 -1
- package/dist/sdk/p-29473a55.entry.js +2 -0
- package/dist/sdk/p-29473a55.entry.js.map +1 -0
- package/dist/sdk/p-2a25d62e.entry.js +2 -0
- package/dist/sdk/p-2a25d62e.entry.js.map +1 -0
- package/dist/sdk/{p-C8lRzJEX.js → p-2bKltz_F.js} +2 -2
- package/dist/sdk/{p-C8lRzJEX.js.map → p-2bKltz_F.js.map} +1 -1
- package/dist/sdk/p-2cc3a00d.entry.js +2 -0
- package/dist/sdk/p-2cc3a00d.entry.js.map +1 -0
- package/dist/sdk/p-2f49e0cb.entry.js +2 -0
- package/dist/sdk/p-2f49e0cb.entry.js.map +1 -0
- package/dist/sdk/p-34f5d201.entry.js +2 -0
- package/dist/sdk/p-34f5d201.entry.js.map +1 -0
- package/dist/sdk/p-52c4bdd9.entry.js +2 -0
- package/dist/sdk/p-52c4bdd9.entry.js.map +1 -0
- package/dist/sdk/p-585a0efa.entry.js +2 -0
- package/dist/sdk/p-585a0efa.entry.js.map +1 -0
- package/dist/sdk/p-60675019.entry.js +2 -0
- package/dist/sdk/p-60675019.entry.js.map +1 -0
- package/dist/sdk/p-79ef9a70.entry.js +2 -0
- package/dist/sdk/p-79ef9a70.entry.js.map +1 -0
- package/dist/sdk/p-7d88e21c.entry.js +2 -0
- package/dist/sdk/p-7d88e21c.entry.js.map +1 -0
- package/dist/sdk/p-7eaf3468.entry.js +2 -0
- package/dist/sdk/p-7eaf3468.entry.js.map +1 -0
- package/dist/sdk/{p-88beb872.entry.js → p-8412762c.entry.js} +2 -2
- package/dist/sdk/p-8ea70c08.entry.js +2 -0
- package/dist/sdk/p-8ea70c08.entry.js.map +1 -0
- package/dist/sdk/p-946cdb0a.entry.js +2 -0
- package/dist/sdk/p-946cdb0a.entry.js.map +1 -0
- package/dist/sdk/p-94bb0217.entry.js +2 -0
- package/dist/sdk/p-94bb0217.entry.js.map +1 -0
- package/dist/sdk/{p-bcca06f1.entry.js → p-96860b09.entry.js} +2 -2
- package/dist/sdk/p-B1A6Nu24.js +2 -0
- package/dist/sdk/p-B1A6Nu24.js.map +1 -0
- package/dist/sdk/p-B85MJLTf.js +2 -0
- package/dist/sdk/p-B85MJLTf.js.map +1 -0
- package/dist/sdk/p-B8N6Bwsa.js +2 -0
- package/dist/sdk/{p-DCG3L43i.js.map → p-B8N6Bwsa.js.map} +1 -1
- package/dist/sdk/p-Ba5szISo.js +2 -0
- package/dist/sdk/p-Ba5szISo.js.map +1 -0
- package/dist/sdk/p-BsJDptgj.js +14 -0
- package/dist/sdk/p-BsJDptgj.js.map +1 -0
- package/dist/sdk/{p-bpXpOZY_.js → p-C0Mo15qt.js} +2 -2
- package/dist/sdk/{p-bpXpOZY_.js.map → p-C0Mo15qt.js.map} +1 -1
- package/dist/sdk/p-C10MAuCE.js +2 -0
- package/dist/sdk/p-C10MAuCE.js.map +1 -0
- package/dist/sdk/p-CTy6pQSg.js +2 -0
- package/dist/sdk/p-CTy6pQSg.js.map +1 -0
- package/dist/sdk/p-CW6kGAuQ.js +2 -0
- package/dist/sdk/p-CW6kGAuQ.js.map +1 -0
- package/dist/sdk/{p-DdMKVWx8.js → p-CbSP8My1.js} +2 -2
- package/dist/sdk/{p-DdMKVWx8.js.map → p-CbSP8My1.js.map} +1 -1
- package/dist/sdk/p-CbzzI4uW.js +2 -0
- package/dist/sdk/p-CbzzI4uW.js.map +1 -0
- package/dist/sdk/p-CgT6fZjb.js +2 -0
- package/dist/sdk/p-CgT6fZjb.js.map +1 -0
- package/dist/sdk/p-CuHZ3IkE.js +2 -0
- package/dist/sdk/p-CuHZ3IkE.js.map +1 -0
- package/dist/sdk/p-Cysk_vik.js +2 -0
- package/dist/sdk/p-Cysk_vik.js.map +1 -0
- package/dist/sdk/p-D0ut3waq.js +2 -0
- package/dist/sdk/p-D0ut3waq.js.map +1 -0
- package/dist/sdk/{p-BigbTrKk.js → p-D2Rf-QGm.js} +2 -2
- package/dist/sdk/{p-BigbTrKk.js.map → p-D2Rf-QGm.js.map} +1 -1
- package/dist/sdk/{p-6rqGeAfT.js → p-D9yFO_ID.js} +2 -2
- package/dist/sdk/{p-6rqGeAfT.js.map → p-D9yFO_ID.js.map} +1 -1
- package/dist/sdk/p-DD_5soRi.js +2 -0
- package/dist/sdk/p-DD_5soRi.js.map +1 -0
- package/dist/sdk/p-DHuvvagO.js +2 -0
- package/dist/sdk/p-DHuvvagO.js.map +1 -0
- package/dist/sdk/p-DSMkJu9G.js +2 -0
- package/dist/sdk/p-DSMkJu9G.js.map +1 -0
- package/dist/sdk/p-DcirMfca.js +2 -0
- package/dist/sdk/p-DcirMfca.js.map +1 -0
- package/dist/sdk/p-J0cv5IOA.js +2 -0
- package/dist/sdk/p-J0cv5IOA.js.map +1 -0
- package/dist/sdk/p-_5evboqW.js +2 -0
- package/dist/sdk/{p-DSktNM_k.js.map → p-_5evboqW.js.map} +1 -1
- package/dist/sdk/{p-7ee2f2ab.entry.js → p-ac3a6bbf.entry.js} +2 -2
- package/dist/sdk/p-b498bcdd.entry.js +2 -0
- package/dist/sdk/p-b498bcdd.entry.js.map +1 -0
- package/dist/sdk/p-b5dd5b4c.entry.js +2 -0
- package/dist/sdk/p-b5dd5b4c.entry.js.map +1 -0
- package/dist/sdk/{p-6b061b18.entry.js → p-b99588a8.entry.js} +2 -2
- package/dist/sdk/p-bf9c27a8.entry.js +2 -0
- package/dist/sdk/p-bf9c27a8.entry.js.map +1 -0
- package/dist/sdk/p-c10d9b8e.entry.js +2 -0
- package/dist/sdk/p-c10d9b8e.entry.js.map +1 -0
- package/dist/sdk/{p-10e20afd.entry.js → p-c2634439.entry.js} +2 -2
- package/dist/sdk/p-d6777395.entry.js +2 -0
- package/dist/sdk/p-d6777395.entry.js.map +1 -0
- package/dist/sdk/p-dbfe7b29.entry.js +2 -0
- package/dist/sdk/p-dbfe7b29.entry.js.map +1 -0
- package/dist/sdk/p-def4e874.entry.js +2 -0
- package/dist/sdk/p-def4e874.entry.js.map +1 -0
- package/dist/sdk/p-e872a012.entry.js +2 -0
- package/dist/sdk/p-e872a012.entry.js.map +1 -0
- package/dist/sdk/p-eaaf3989.entry.js +2 -0
- package/dist/sdk/p-eaaf3989.entry.js.map +1 -0
- package/dist/sdk/p-fd46b459.entry.js +2 -0
- package/dist/sdk/{p-830778eb.entry.js.map → p-fd46b459.entry.js.map} +1 -1
- package/dist/sdk/sdk.esm.js +1 -1
- package/dist/sdk/u-conditional-render.entry.esm.js.map +1 -1
- package/dist/sdk/u-config.entry.esm.js.map +1 -1
- package/dist/sdk/u-error-message.entry.esm.js.map +1 -1
- package/dist/sdk/u-field.u-raw-field.entry.esm.js.map +1 -1
- package/dist/sdk/u-jump-to-service.entry.esm.js.map +1 -1
- package/dist/sdk/u-jump-to-unidy.entry.esm.js.map +1 -1
- package/dist/sdk/u-logout-button.u-signed-in.entry.esm.js.map +1 -1
- package/dist/sdk/u-magic-code-field.entry.esm.js.map +1 -1
- package/dist/sdk/u-missing-field.entry.esm.js.map +1 -1
- package/dist/sdk/u-missing-fields-submit-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-checkbox.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-logout-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-preference-checkbox.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-resend-doi-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-root.entry.esm.js.map +1 -1
- package/dist/sdk/u-newsletter-toggle-subscription-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-pagination-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-pagination-page.entry.esm.js.map +1 -1
- package/dist/sdk/u-passkey.entry.esm.js.map +1 -1
- package/dist/sdk/u-profile.u-submit-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-reset-password-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-send-magic-code-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-signin-root.entry.esm.js.map +1 -1
- package/dist/sdk/u-signin-step.entry.esm.js.map +1 -1
- package/dist/sdk/u-social-login-button.entry.esm.js.map +1 -1
- package/dist/sdk/u-spinner.entry.esm.js.map +1 -1
- package/dist/sdk/u-ticketable-export.entry.esm.js.map +1 -0
- package/dist/sdk/u-ticketable-list.entry.esm.js.map +1 -1
- package/dist/types/api/client.d.ts +1 -1
- package/dist/types/api/index.d.ts +4 -4
- package/dist/types/api/standalone.d.ts +9 -9
- package/dist/types/auth/api/auth.d.ts +2 -3
- package/dist/types/auth/api/schemas.d.ts +19 -19
- package/dist/types/auth/auth-helpers.d.ts +1 -0
- package/dist/types/auth/components/jump-to-service/jump-to-service.d.ts +13 -5
- package/dist/types/auth/components/jump-to-unidy/jump-to-unidy.d.ts +13 -9
- package/dist/types/auth/components/logout-button/logout-button.d.ts +13 -4
- package/dist/types/auth/components/missing-field/missing-field.d.ts +1 -0
- package/dist/types/auth/components/missing-fields-submit-button/missing-fields-submit-button.d.ts +14 -2
- package/dist/types/auth/components/reset-pass-button/reset-pass-button.d.ts +13 -4
- package/dist/types/auth/components/social-logins/social-login-button.d.ts +11 -7
- package/dist/types/components.d.ts +73 -0
- package/dist/types/logger.d.ts +0 -34
- package/dist/types/newsletter/components/logout-button/logout-button.d.ts +13 -4
- package/dist/types/newsletter/components/newsletter-root/newsletter-root.d.ts +16 -2
- package/dist/types/newsletter/newsletter-helpers.d.ts +8 -2
- package/dist/types/newsletter/store/newsletter-store.d.ts +8 -1
- package/dist/types/profile/api/profile.d.ts +2 -2
- package/dist/types/profile/api/schemas.d.ts +21 -21
- package/dist/types/profile/components/raw-field/raw-field.d.ts +14 -2
- package/dist/types/shared/base/component.d.ts +46 -0
- package/dist/types/shared/base/has-slot-content.d.ts +10 -0
- package/dist/types/shared/component-utils.d.ts +20 -12
- package/dist/types/shared/components/conditional-render/conditional-render.d.ts +7 -2
- package/dist/types/shared/components/config/config.d.ts +7 -2
- package/dist/types/shared/components/error-message/error-message.d.ts +14 -2
- package/dist/types/shared/components/submit-button/submit-button.d.ts +13 -4
- package/dist/types/shared/context-utils.d.ts +73 -0
- package/dist/types/shared/utils/redirect-with-token.d.ts +21 -0
- package/dist/types/shared/utils/url-utils.d.ts +16 -0
- package/dist/types/ticketable/api/schemas.d.ts +16 -2
- package/dist/types/ticketable/api/subscriptions.d.ts +8 -3
- package/dist/types/ticketable/api/tickets.d.ts +8 -3
- package/dist/types/ticketable/components/pagination/pagination-button.d.ts +8 -4
- package/dist/types/ticketable/components/pagination/pagination-page.d.ts +8 -4
- package/dist/types/ticketable/components/ticketable-export/ticketable-export.d.ts +24 -0
- package/dist/types/ticketable/components/ticketable-list/ticketable-list.d.ts +10 -4
- package/dist/types/ticketable/index.d.ts +1 -0
- package/package.json +6 -2
- package/readme.md +248 -27
- package/dist/cjs/app-globals-hdkLqF51.js +0 -10
- package/dist/cjs/app-globals-hdkLqF51.js.map +0 -1
- package/dist/cjs/component-utils-bu3SY4dE.js +0 -42
- package/dist/cjs/component-utils-bu3SY4dE.js.map +0 -1
- package/dist/cjs/index-B325yXfO.js.map +0 -1
- package/dist/cjs/index-BzPYBLYC.js.map +0 -1
- package/dist/cjs/newsletter-helpers-hdDC5X-V.js.map +0 -1
- package/dist/cjs/newsletter-store-CupsLgO9.js.map +0 -1
- package/dist/cjs/pagination-store-zo48QpTm.js +0 -16
- package/dist/cjs/pagination-store-zo48QpTm.js.map +0 -1
- package/dist/components/pagination-store.js +0 -14
- package/dist/components/pagination-store.js.map +0 -1
- package/dist/esm/app-globals-iHhGdwBB.js +0 -8
- package/dist/esm/app-globals-iHhGdwBB.js.map +0 -1
- package/dist/esm/component-utils-BGq0leDV.js +0 -39
- package/dist/esm/component-utils-BGq0leDV.js.map +0 -1
- package/dist/esm/index-BVlbCQEX.js.map +0 -1
- package/dist/esm/index-FTKB5a1d.js.map +0 -1
- package/dist/esm/newsletter-helpers-fCpxzovf.js.map +0 -1
- package/dist/esm/newsletter-store-BB618FgS.js.map +0 -1
- package/dist/esm/pagination-store-DxmcQH8R.js +0 -14
- package/dist/esm/pagination-store-DxmcQH8R.js.map +0 -1
- package/dist/sdk/p-1a8973a6.entry.js +0 -2
- package/dist/sdk/p-35ad60ab.entry.js +0 -2
- package/dist/sdk/p-35ad60ab.entry.js.map +0 -1
- package/dist/sdk/p-3f352f38.entry.js +0 -2
- package/dist/sdk/p-3f352f38.entry.js.map +0 -1
- package/dist/sdk/p-468aaf62.entry.js +0 -2
- package/dist/sdk/p-468aaf62.entry.js.map +0 -1
- package/dist/sdk/p-4e2e6a13.entry.js +0 -2
- package/dist/sdk/p-4e2e6a13.entry.js.map +0 -1
- package/dist/sdk/p-57c8dc68.entry.js +0 -2
- package/dist/sdk/p-57c8dc68.entry.js.map +0 -1
- package/dist/sdk/p-594aec0c.entry.js +0 -2
- package/dist/sdk/p-594aec0c.entry.js.map +0 -1
- package/dist/sdk/p-60c8be64.entry.js +0 -2
- package/dist/sdk/p-60c8be64.entry.js.map +0 -1
- package/dist/sdk/p-760718d3.entry.js +0 -2
- package/dist/sdk/p-760718d3.entry.js.map +0 -1
- package/dist/sdk/p-77f541f3.entry.js +0 -2
- package/dist/sdk/p-77f541f3.entry.js.map +0 -1
- package/dist/sdk/p-830778eb.entry.js +0 -2
- package/dist/sdk/p-8839648e.entry.js +0 -2
- package/dist/sdk/p-8839648e.entry.js.map +0 -1
- package/dist/sdk/p-B6MYe-dh.js +0 -2
- package/dist/sdk/p-B6MYe-dh.js.map +0 -1
- package/dist/sdk/p-BGq0leDV.js +0 -2
- package/dist/sdk/p-BGq0leDV.js.map +0 -1
- package/dist/sdk/p-C_UZBwdm.js +0 -2
- package/dist/sdk/p-C_UZBwdm.js.map +0 -1
- package/dist/sdk/p-CbazSxaZ.js +0 -2
- package/dist/sdk/p-CbazSxaZ.js.map +0 -1
- package/dist/sdk/p-DCG3L43i.js +0 -2
- package/dist/sdk/p-DEUPZOH-.js +0 -2
- package/dist/sdk/p-DEUPZOH-.js.map +0 -1
- package/dist/sdk/p-DSktNM_k.js +0 -2
- package/dist/sdk/p-FTKB5a1d.js +0 -14
- package/dist/sdk/p-FTKB5a1d.js.map +0 -1
- package/dist/sdk/p-a7ffcff9.entry.js +0 -2
- package/dist/sdk/p-a7ffcff9.entry.js.map +0 -1
- package/dist/sdk/p-acaba1d5.entry.js +0 -2
- package/dist/sdk/p-acaba1d5.entry.js.map +0 -1
- package/dist/sdk/p-ae47a7a3.entry.js +0 -2
- package/dist/sdk/p-ae47a7a3.entry.js.map +0 -1
- package/dist/sdk/p-aec580e4.entry.js +0 -2
- package/dist/sdk/p-aec580e4.entry.js.map +0 -1
- package/dist/sdk/p-b63438ff.entry.js +0 -2
- package/dist/sdk/p-b63438ff.entry.js.map +0 -1
- package/dist/sdk/p-baaaa7f5.entry.js +0 -2
- package/dist/sdk/p-baaaa7f5.entry.js.map +0 -1
- package/dist/sdk/p-bba2da84.entry.js +0 -2
- package/dist/sdk/p-bba2da84.entry.js.map +0 -1
- package/dist/sdk/p-bc47f42b.entry.js +0 -2
- package/dist/sdk/p-bc47f42b.entry.js.map +0 -1
- package/dist/sdk/p-bd51e26f.entry.js +0 -2
- package/dist/sdk/p-bd51e26f.entry.js.map +0 -1
- package/dist/sdk/p-c3552f75.entry.js +0 -2
- package/dist/sdk/p-c3552f75.entry.js.map +0 -1
- package/dist/sdk/p-d9900482.entry.js +0 -2
- package/dist/sdk/p-d9900482.entry.js.map +0 -1
- package/dist/sdk/p-e6796c38.entry.js +0 -2
- package/dist/sdk/p-e6796c38.entry.js.map +0 -1
- package/dist/sdk/p-f272eb38.entry.js +0 -2
- package/dist/sdk/p-f272eb38.entry.js.map +0 -1
- package/dist/sdk/p-f4a47ef8.entry.js +0 -2
- package/dist/sdk/p-f4a47ef8.entry.js.map +0 -1
- package/dist/sdk/p-f608e64a.entry.js +0 -2
- package/dist/sdk/p-f608e64a.entry.js.map +0 -1
- package/dist/sdk/p-f762ac70.entry.js +0 -2
- package/dist/sdk/p-f762ac70.entry.js.map +0 -1
- package/dist/sdk/p-l6NinBiD.js +0 -2
- package/dist/sdk/p-l6NinBiD.js.map +0 -1
- /package/dist/sdk/{p-88beb872.entry.js.map → p-8412762c.entry.js.map} +0 -0
- /package/dist/sdk/{p-bcca06f1.entry.js.map → p-96860b09.entry.js.map} +0 -0
- /package/dist/sdk/{p-7ee2f2ab.entry.js.map → p-ac3a6bbf.entry.js.map} +0 -0
- /package/dist/sdk/{p-6b061b18.entry.js.map → p-b99588a8.entry.js.map} +0 -0
- /package/dist/sdk/{p-10e20afd.entry.js.map → p-c2634439.entry.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/auth/api/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,sBAAsB;AACtB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,CAAC;AAE/F,qCAAqC;AACrC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE;IACvB,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE;IACrB,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;CACrB,CAAC,CAAC;AAEH,4BAA4B;AAC5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,gBAAgB;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,aAAa,EAAE,kBAAkB;CAClC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;AAE3C,sBAAsB;AACtB,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/auth/api/schemas.ts"],"names":[],"mappings":"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","sourcesContent":["import * as z from \"zod\";\nimport { BaseErrorSchema } from \"../../api/shared\";\nimport { UserProfileSchema } from \"../../profile\";\n\n// Sign-in status enum\nexport const SignInStatusEnum = z.enum([\"pending_verification\", \"authenticated\", \"completed\"]);\n\n// Login options for sign-in response\nexport const LoginOptionsSchema = z.object({\n magic_link: z.boolean(),\n password: z.boolean(),\n social_logins: z.array(z.string()),\n passkey: z.boolean(),\n});\n\n// Sign-in creation response\nexport const CreateSignInResponseSchema = z.object({\n sid: z.string(),\n status: SignInStatusEnum,\n email: z.string(),\n expired: z.boolean(),\n login_options: LoginOptionsSchema,\n});\n\n// Generic error response (re-export of base error for backwards compatibility)\nexport const ErrorSchema = BaseErrorSchema;\n\n// Magic code response\nexport const SendMagicCodeResponseSchema = z.object({\n enable_resend_after: z.number(),\n sid: z.string().nullish(),\n login_options: z\n .object({\n magic_link: z.boolean(),\n })\n .optional(),\n});\n\n// Magic code error extends base error with resend timing\nexport const SendMagicCodeErrorSchema = BaseErrorSchema.extend({\n enable_resend_after: z.number(),\n});\n\n// JWT token response\nexport const TokenResponseSchema = z.object({\n jwt: z.string(),\n sid: z.string().nullish(),\n});\n\n// Missing required fields response extends base error with specific error_identifier\nexport const RequiredFieldsResponseSchema = z\n .object({\n error_identifier: z.literal(\"missing_required_fields\"),\n meta: z.object({\n fields: UserProfileSchema.omit({ custom_attributes: true }).partial().extend({\n custom_attributes: UserProfileSchema.shape.custom_attributes?.optional(),\n }),\n sid: z.string().nullish(),\n }),\n })\n .transform(({ error_identifier, meta }) => ({\n error_identifier,\n fields: meta.fields,\n sid: meta.sid,\n }));\n\n// Invalid password response with field-level errors\nexport const InvalidPasswordResponseSchema = z.object({\n error_details: z.object({\n password: z.array(z.string()),\n }),\n});\n\n// Passkey authentication options\nexport const PasskeyOptionsResponseSchema = z.object({\n challenge: z.string(),\n timeout: z.number(),\n rpId: z.string(),\n userVerification: z.string(),\n allowCredentials: z.array(z.any()),\n});\n\n// Passkey credential for authentication\nexport const PasskeyCredentialSchema = z.object({\n id: z.string(),\n rawId: z.string(),\n response: z.object({\n authenticatorData: z.string(),\n clientDataJSON: z.string(),\n signature: z.string(),\n }),\n type: z.string(),\n});\n\n// Jump to service/unidy schemas\nexport const JumpToServiceErrorSchema = z.object({\n error_identifier: z.string(),\n});\n\nexport const JumpToUnidyErrorSchema = z.object({\n error_identifier: z.string(),\n});\n\nexport const JumpToServiceRequestSchema = z.object({\n email: z.string(),\n redirect_uri: z.string().nullish(),\n scopes: z.array(z.string()).nullish(),\n skip_oauth_authorization: z.boolean().optional(),\n});\n\nexport const JumpToUnidyRequestSchema = z.object({\n email: z.string(),\n path: z.string().refine((val) => val.startsWith(\"/\"), {\n message: \"Path must start with '/'\",\n }),\n});\n\nexport const JumpToServiceResponseSchema = z.object({\n token: z.string(),\n});\n\nexport const JumpToUnidyResponseSchema = z.object({\n token: z.string(),\n});\n\n// Export types\nexport type SignInStatus = z.infer<typeof SignInStatusEnum>;\nexport type ErrorResponse = z.infer<typeof ErrorSchema>;\nexport type LoginOptions = z.infer<typeof LoginOptionsSchema>;\nexport type CreateSignInResponse = z.infer<typeof CreateSignInResponseSchema>;\nexport type TokenResponse = z.infer<typeof TokenResponseSchema>;\nexport type SendMagicCodeResponse = z.infer<typeof SendMagicCodeResponseSchema>;\nexport type RequiredFieldsResponse = z.infer<typeof RequiredFieldsResponseSchema>;\nexport type SendMagicCodeError = z.infer<typeof SendMagicCodeErrorSchema>;\nexport type InvalidPasswordResponse = z.infer<typeof InvalidPasswordResponseSchema>;\nexport type PasskeyOptionsResponse = z.infer<typeof PasskeyOptionsResponseSchema>;\nexport type PasskeyCredential = z.infer<typeof PasskeyCredentialSchema>;\nexport type JumpToServiceRequest = z.infer<typeof JumpToServiceRequestSchema>;\nexport type JumpToServiceResponse = z.infer<typeof JumpToServiceResponseSchema>;\nexport type JumpToUnidyRequest = z.infer<typeof JumpToUnidyRequestSchema>;\nexport type JumpToUnidyResponse = z.infer<typeof JumpToUnidyResponseSchema>;\n"]}
|
|
@@ -3,8 +3,8 @@ import { authState, authStore } from "../auth/store/auth-store";
|
|
|
3
3
|
import { t } from "../i18n";
|
|
4
4
|
import { createLogger } from "../logger";
|
|
5
5
|
import { state as profileState } from "../profile/store/profile-store";
|
|
6
|
-
import { clearUrlParam } from "../shared/component-utils";
|
|
7
6
|
import { Flash } from "../shared/store/flash-store";
|
|
7
|
+
import { clearUrlParam } from "../shared/utils/url-utils";
|
|
8
8
|
import { authenticateWithPasskey } from "./passkey-auth";
|
|
9
9
|
export class AuthHelpers {
|
|
10
10
|
client;
|
|
@@ -113,13 +113,6 @@ export class AuthHelpers {
|
|
|
113
113
|
return [error, _];
|
|
114
114
|
}
|
|
115
115
|
async refreshToken() {
|
|
116
|
-
if (authState.step === "missing-fields") {
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
const sid = clearUrlParam("sid");
|
|
120
|
-
if (sid) {
|
|
121
|
-
authStore.setSignInId(sid);
|
|
122
|
-
}
|
|
123
116
|
if (!authState.sid) {
|
|
124
117
|
this.logger.warn("No sign-in ID in the session");
|
|
125
118
|
return;
|
|
@@ -133,6 +126,12 @@ export class AuthHelpers {
|
|
|
133
126
|
authStore.setToken(response.jwt);
|
|
134
127
|
}
|
|
135
128
|
}
|
|
129
|
+
extractSidFromUrl() {
|
|
130
|
+
const sid = clearUrlParam("sid");
|
|
131
|
+
if (sid) {
|
|
132
|
+
authStore.setSignInId(sid);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
136
135
|
async checkSignedIn() {
|
|
137
136
|
if (authState.authenticated)
|
|
138
137
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../src/auth/auth-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { jwtDecode } from \"jwt-decode\";\nimport type { CreateSignInResponse, RequiredFieldsResponse, TokenResponse, UnidyClient } from \"../api\";\nimport { authState, authStore } from \"../auth/store/auth-store\";\nimport { t } from \"../i18n\";\nimport { createLogger } from \"../logger\";\nimport type { ProfileRaw } from \"../profile\";\nimport { state as profileState } from \"../profile/store/profile-store\";\nimport { clearUrlParam } from \"../shared/component-utils\";\nimport { Flash } from \"../shared/store/flash-store\";\nimport type { TokenPayload } from \"./auth\";\nimport { authenticateWithPasskey } from \"./passkey-auth\";\n\nexport class AuthHelpers {\n private client: UnidyClient;\n private logger = createLogger(\"AuthHelpers\");\n\n constructor(client: UnidyClient) {\n this.client = client;\n }\n\n async createSignIn(email: string, password?: string, sendMagicCode?: boolean) {\n if (!email) {\n throw new Error(t(\"errors.required_field\", { field: \"Email\" }));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.createSignIn({ payload: { email, password, sendMagicCode } });\n\n if (error) {\n if (error === \"magic_code_recently_created\") {\n authStore.setMagicCodeStep(\"sent\");\n authStore.setStep(\"magic-code\");\n authStore.setLoading(false);\n authStore.setFieldError(\"magicCode\", error);\n return [error, response] as const;\n }\n\n this.handleAuthError(error, response, password ? \"password\" : \"email\");\n return;\n }\n\n if (password) {\n const token = jwtDecode<TokenPayload>((response as TokenResponse).jwt);\n authStore.setSignInId(token.sid);\n authStore.setToken((response as TokenResponse).jwt);\n authStore.setLoading(false);\n authStore.getRootComponentRef()?.onAuth(response as TokenResponse);\n return;\n }\n\n if (sendMagicCode) {\n authStore.setSignInId((response as CreateSignInResponse).sid);\n authStore.setLoginOptions((response as CreateSignInResponse).login_options);\n\n if ((response as CreateSignInResponse).login_options?.magic_link === false) {\n authStore.setGlobalError(\"auth\", \"magic_link_not_enabled\");\n authStore.setLoading(false);\n\n return [\"magic_link_not_enabled\", response] as const;\n }\n\n authStore.setMagicCodeStep(\"sent\");\n authStore.setStep(\"magic-code\");\n authStore.setLoading(false);\n return [error, response] as const;\n }\n const signInResponse = response as CreateSignInResponse;\n authStore.setStep(\"verification\");\n authStore.setEmail(email);\n authStore.setSignInId(signInResponse.sid);\n authStore.setLoginOptions(signInResponse.login_options);\n authStore.setLoading(false);\n }\n\n async authenticateWithPassword(password: string) {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n if (!password) {\n throw new Error(t(\"errors.required_field\", { field: \"Password\" }));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.authenticateWithPassword({\n signInId: authState.sid,\n payload: { password },\n });\n\n if (error) {\n this.handleAuthError(error, response, \"password\");\n } else {\n authStore.setLoading(false);\n this.handleAuthSuccess(response as TokenResponse);\n return;\n }\n }\n\n async authenticateWithMagicCode(code: string) {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n if (!code) {\n throw new Error(t(\"errors.magic_code_is_missing\"));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.authenticateWithMagicCode({\n signInId: authState.sid,\n payload: { code },\n });\n\n if (error) {\n this.handleAuthError(error, response, \"magicCode\");\n return;\n }\n\n this.handleAuthSuccess(response as TokenResponse);\n }\n\n authenticateWithPasskey() {\n return authenticateWithPasskey(this.client, (response) => this.handleAuthSuccess(response));\n }\n\n async logout() {\n const [error, _] = await this.client.auth.signOut({\n signInId: authState.sid as string,\n globalLogout: authState.backendSignedIn,\n });\n\n if (error) {\n authStore.setGlobalError(\"auth\", error);\n }\n\n return [error, _] as const;\n }\n\n async refreshToken() {\n if (authState.step === \"missing-fields\") {\n return;\n }\n\n const sid = clearUrlParam(\"sid\");\n if (sid) {\n authStore.setSignInId(sid);\n }\n\n if (!authState.sid) {\n this.logger.warn(\"No sign-in ID in the session\");\n return;\n }\n\n const [error, response] = await this.client.auth.refreshToken({ signInId: authState.sid });\n\n if (error) {\n authStore.reset();\n authStore.setGlobalError(\"auth\", error);\n } else {\n authStore.setToken((response as TokenResponse).jwt);\n }\n }\n\n async checkSignedIn() {\n if (authState.authenticated) return;\n\n const [error, response] = await this.client.auth.signedIn();\n\n if (error) {\n // Silent fail\n return;\n }\n\n // we only assume that \"sso\" was used when there isn't an existing sid in the session as setting the sid is the\n // first step in any login flow, and we should not log out users unintentionally\n if (!authState.sid) {\n const token = jwtDecode<TokenPayload>((response as TokenResponse).jwt);\n authStore.setSignInId(token.sid);\n authStore.setBackendSignedIn(true);\n }\n this.handleAuthSuccess(response as TokenResponse);\n }\n\n async sendMagicCode() {\n if (!authState.sid && authState.step !== \"single-login\") {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n authStore.setMagicCodeStep(\"requested\");\n authStore.setLoading(true);\n authStore.clearErrors();\n\n if (authState.step === \"single-login\") {\n const [error, response] = await this.createSignIn(authState.email, undefined, true);\n authStore.setLoading(false);\n return [error, response] as const;\n }\n\n const [error, response] = await this.client.auth.sendMagicCode({ signInId: authState.sid });\n\n authStore.setLoading(false);\n\n authStore.setStep(\"magic-code\");\n\n if (!error) {\n authStore.setMagicCodeStep(\"sent\");\n\n return [null, response] as const;\n }\n\n authStore.setFieldError(\"magicCode\", error);\n\n if (error === \"magic_code_recently_created\") {\n authStore.setMagicCodeStep(\"sent\");\n }\n\n return [error, response] as const;\n }\n\n async sendResetPasswordEmail() {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n authStore.setLoading(true);\n authStore.setResetPasswordStep(\"requested\");\n\n const [error, _] = await this.client.auth.sendResetPasswordEmail({\n signInId: authState.sid,\n payload: { returnTo: window.location.href },\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n } else {\n authStore.setResetPasswordStep(\"sent\");\n authStore.clearErrors();\n }\n\n authStore.setLoading(false);\n }\n\n async resetPassword() {\n if (!authState.resetPassword.token) {\n throw new Error(\"No reset token available\");\n }\n\n if (!authState.resetPassword.newPassword) {\n authStore.setFieldError(\"resetPassword\", \"password_required\");\n return;\n }\n\n if (\n authState.resetPassword.passwordConfirmation &&\n authState.resetPassword.newPassword !== authState.resetPassword.passwordConfirmation\n ) {\n authStore.setFieldError(\"resetPassword\", \"passwords_do_not_match\");\n return;\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.resetPassword({\n signInId: authState.sid as string,\n token: authState.resetPassword.token,\n payload: {\n password: authState.resetPassword.newPassword,\n passwordConfirmation: authState.resetPassword.passwordConfirmation,\n },\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n\n // TODO: add proper password requirements handling --> for now this is fine\n if (error === \"invalid_password\") {\n authStore.setFieldError(\"password\", response.error_details?.password.map((p) => t(`errors.password_requirements.${p}`)).join(\"\\n\"));\n }\n } else {\n authStore.setStep(\"email\");\n authStore.updateResetPassword({\n step: \"completed\",\n token: null,\n newPassword: \"\",\n passwordConfirmation: \"\",\n });\n\n clearUrlParam(\"reset_password_token\");\n Flash.success.addMessage(\"Password reset successfully\");\n }\n\n authStore.setLoading(false);\n }\n\n async handleResetPasswordRedirect() {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n const resetToken = params.get(\"reset_password_token\");\n\n if (!resetToken) {\n return;\n }\n\n if (authState.sid) {\n authStore.setLoading(true);\n\n const [error] = await this.client.auth.validateResetPasswordToken({\n signInId: authState.sid,\n token: resetToken,\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n authStore.setStep(\"reset-password\");\n authStore.setLoading(false);\n return;\n }\n }\n\n authStore.setResetToken(resetToken);\n authStore.setStep(\"reset-password\");\n authStore.setLoading(false);\n }\n\n handleSocialAuthRedirect(): void {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n const error = params.get(\"error\");\n\n // Not a social auth redirect (normal page load)\n if (!error && !params.has(\"sid\")) {\n return;\n }\n\n // Handle successful social auth redirect\n if (!error && params.has(\"sid\") && params.has(\"id_token\")) {\n authStore.setSignInId(clearUrlParam(\"sid\"));\n\n const idToken = clearUrlParam(\"id_token\");\n\n if (idToken) {\n authStore.setToken(idToken);\n this.handleAuthSuccess({ jwt: idToken } as TokenResponse);\n } else {\n this.logger.error(\"No ID token found in the URL on social auth redirect\");\n }\n\n return;\n }\n\n // Handle missing required fields\n if (error !== \"missing_required_fields\") {\n this.logger.error(\"Social auth redirect error:\", error);\n return;\n }\n\n const fieldsFromUrl = clearUrlParam(\"fields\");\n const sid = clearUrlParam(\"sid\");\n clearUrlParam(\"error\");\n\n if (!fieldsFromUrl || !sid) {\n return;\n }\n\n try {\n const fields = JSON.parse(fieldsFromUrl);\n authStore.setSignInId(sid);\n\n this.handleMissingFields(fields);\n } catch (e) {\n this.logger.error(\"Failed to parse missing fields payload:\", e);\n authStore.setGlobalError(\"auth\", \"invalid_required_fields_payload\");\n }\n }\n\n private handleAuthError(error: string, response: unknown, fallbackField?: \"email\" | \"password\" | \"magicCode\") {\n switch (error) {\n case \"account_not_found\":\n authStore.setFieldError(\"email\", error);\n break;\n\n case \"missing_required_fields\": {\n const { fields, sid } = response as RequiredFieldsResponse;\n this.handleMissingFields(fields);\n if (sid) {\n authStore.setSignInId(sid);\n }\n break;\n }\n\n default:\n if (fallbackField === \"password\") {\n authStore.setFieldError(\"password\", error);\n } else if (fallbackField === \"magicCode\") {\n authStore.setFieldError(\"magicCode\", error);\n } else if (fallbackField === \"email\") {\n authStore.setFieldError(\"email\", error);\n } else {\n // e.g. \"account_locked\", \"internal_server_error\"\n authStore.setGlobalError(\"auth\", error);\n }\n break;\n }\n\n authStore.setLoading(false);\n }\n\n private handleMissingFields(fields: RequiredFieldsResponse[\"fields\"]) {\n authStore.setMissingFields(fields);\n profileState.data = fields as ProfileRaw;\n authStore.setStep(\"missing-fields\");\n authStore.setLoading(false);\n }\n\n private handleAuthSuccess(response: TokenResponse) {\n authStore.setToken(response.jwt);\n authStore.setLoading(false);\n authStore.getRootComponentRef()?.onAuth(response);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"auth-helpers.js","sourceRoot":"","sources":["../../src/auth/auth-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { jwtDecode } from \"jwt-decode\";\nimport type { CreateSignInResponse, RequiredFieldsResponse, TokenResponse, UnidyClient } from \"../api\";\nimport { authState, authStore } from \"../auth/store/auth-store\";\nimport { t } from \"../i18n\";\nimport { createLogger } from \"../logger\";\nimport type { ProfileRaw } from \"../profile\";\nimport { state as profileState } from \"../profile/store/profile-store\";\nimport { Flash } from \"../shared/store/flash-store\";\nimport { clearUrlParam } from \"../shared/utils/url-utils\";\nimport type { TokenPayload } from \"./auth\";\nimport { authenticateWithPasskey } from \"./passkey-auth\";\n\nexport class AuthHelpers {\n private client: UnidyClient;\n private logger = createLogger(\"AuthHelpers\");\n\n constructor(client: UnidyClient) {\n this.client = client;\n }\n\n async createSignIn(email: string, password?: string, sendMagicCode?: boolean) {\n if (!email) {\n throw new Error(t(\"errors.required_field\", { field: \"Email\" }));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.createSignIn({ payload: { email, password, sendMagicCode } });\n\n if (error) {\n if (error === \"magic_code_recently_created\") {\n authStore.setMagicCodeStep(\"sent\");\n authStore.setStep(\"magic-code\");\n authStore.setLoading(false);\n authStore.setFieldError(\"magicCode\", error);\n return [error, response] as const;\n }\n\n this.handleAuthError(error, response, password ? \"password\" : \"email\");\n return;\n }\n\n if (password) {\n const token = jwtDecode<TokenPayload>((response as TokenResponse).jwt);\n authStore.setSignInId(token.sid);\n authStore.setToken((response as TokenResponse).jwt);\n authStore.setLoading(false);\n authStore.getRootComponentRef()?.onAuth(response as TokenResponse);\n return;\n }\n\n if (sendMagicCode) {\n authStore.setSignInId((response as CreateSignInResponse).sid);\n authStore.setLoginOptions((response as CreateSignInResponse).login_options);\n\n if ((response as CreateSignInResponse).login_options?.magic_link === false) {\n authStore.setGlobalError(\"auth\", \"magic_link_not_enabled\");\n authStore.setLoading(false);\n\n return [\"magic_link_not_enabled\", response] as const;\n }\n\n authStore.setMagicCodeStep(\"sent\");\n authStore.setStep(\"magic-code\");\n authStore.setLoading(false);\n return [error, response] as const;\n }\n const signInResponse = response as CreateSignInResponse;\n authStore.setStep(\"verification\");\n authStore.setEmail(email);\n authStore.setSignInId(signInResponse.sid);\n authStore.setLoginOptions(signInResponse.login_options);\n authStore.setLoading(false);\n }\n\n async authenticateWithPassword(password: string) {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n if (!password) {\n throw new Error(t(\"errors.required_field\", { field: \"Password\" }));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.authenticateWithPassword({\n signInId: authState.sid,\n payload: { password },\n });\n\n if (error) {\n this.handleAuthError(error, response, \"password\");\n } else {\n authStore.setLoading(false);\n this.handleAuthSuccess(response as TokenResponse);\n return;\n }\n }\n\n async authenticateWithMagicCode(code: string) {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n if (!code) {\n throw new Error(t(\"errors.magic_code_is_missing\"));\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.authenticateWithMagicCode({\n signInId: authState.sid,\n payload: { code },\n });\n\n if (error) {\n this.handleAuthError(error, response, \"magicCode\");\n return;\n }\n\n this.handleAuthSuccess(response as TokenResponse);\n }\n\n authenticateWithPasskey() {\n return authenticateWithPasskey(this.client, (response) => this.handleAuthSuccess(response));\n }\n\n async logout() {\n const [error, _] = await this.client.auth.signOut({\n signInId: authState.sid as string,\n globalLogout: authState.backendSignedIn,\n });\n\n if (error) {\n authStore.setGlobalError(\"auth\", error);\n }\n\n return [error, _] as const;\n }\n\n async refreshToken() {\n if (!authState.sid) {\n this.logger.warn(\"No sign-in ID in the session\");\n return;\n }\n\n const [error, response] = await this.client.auth.refreshToken({ signInId: authState.sid });\n\n if (error) {\n authStore.reset();\n authStore.setGlobalError(\"auth\", error);\n } else {\n authStore.setToken((response as TokenResponse).jwt);\n }\n }\n\n extractSidFromUrl() {\n const sid = clearUrlParam(\"sid\");\n if (sid) {\n authStore.setSignInId(sid);\n }\n }\n\n async checkSignedIn() {\n if (authState.authenticated) return;\n\n const [error, response] = await this.client.auth.signedIn();\n\n if (error) {\n // Silent fail\n return;\n }\n\n // we only assume that \"sso\" was used when there isn't an existing sid in the session as setting the sid is the\n // first step in any login flow, and we should not log out users unintentionally\n if (!authState.sid) {\n const token = jwtDecode<TokenPayload>((response as TokenResponse).jwt);\n authStore.setSignInId(token.sid);\n authStore.setBackendSignedIn(true);\n }\n this.handleAuthSuccess(response as TokenResponse);\n }\n\n async sendMagicCode() {\n if (!authState.sid && authState.step !== \"single-login\") {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n authStore.setMagicCodeStep(\"requested\");\n authStore.setLoading(true);\n authStore.clearErrors();\n\n if (authState.step === \"single-login\") {\n const [error, response] = await this.createSignIn(authState.email, undefined, true);\n authStore.setLoading(false);\n return [error, response] as const;\n }\n\n const [error, response] = await this.client.auth.sendMagicCode({ signInId: authState.sid });\n\n authStore.setLoading(false);\n\n authStore.setStep(\"magic-code\");\n\n if (!error) {\n authStore.setMagicCodeStep(\"sent\");\n\n return [null, response] as const;\n }\n\n authStore.setFieldError(\"magicCode\", error);\n\n if (error === \"magic_code_recently_created\") {\n authStore.setMagicCodeStep(\"sent\");\n }\n\n return [error, response] as const;\n }\n\n async sendResetPasswordEmail() {\n if (!authState.sid) {\n throw new Error(t(\"errors.no_sign_in_id\"));\n }\n\n authStore.setLoading(true);\n authStore.setResetPasswordStep(\"requested\");\n\n const [error, _] = await this.client.auth.sendResetPasswordEmail({\n signInId: authState.sid,\n payload: { returnTo: window.location.href },\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n } else {\n authStore.setResetPasswordStep(\"sent\");\n authStore.clearErrors();\n }\n\n authStore.setLoading(false);\n }\n\n async resetPassword() {\n if (!authState.resetPassword.token) {\n throw new Error(\"No reset token available\");\n }\n\n if (!authState.resetPassword.newPassword) {\n authStore.setFieldError(\"resetPassword\", \"password_required\");\n return;\n }\n\n if (\n authState.resetPassword.passwordConfirmation &&\n authState.resetPassword.newPassword !== authState.resetPassword.passwordConfirmation\n ) {\n authStore.setFieldError(\"resetPassword\", \"passwords_do_not_match\");\n return;\n }\n\n authStore.setLoading(true);\n authStore.clearErrors();\n\n const [error, response] = await this.client.auth.resetPassword({\n signInId: authState.sid as string,\n token: authState.resetPassword.token,\n payload: {\n password: authState.resetPassword.newPassword,\n passwordConfirmation: authState.resetPassword.passwordConfirmation,\n },\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n\n // TODO: add proper password requirements handling --> for now this is fine\n if (error === \"invalid_password\") {\n authStore.setFieldError(\"password\", response.error_details?.password.map((p) => t(`errors.password_requirements.${p}`)).join(\"\\n\"));\n }\n } else {\n authStore.setStep(\"email\");\n authStore.updateResetPassword({\n step: \"completed\",\n token: null,\n newPassword: \"\",\n passwordConfirmation: \"\",\n });\n\n clearUrlParam(\"reset_password_token\");\n Flash.success.addMessage(\"Password reset successfully\");\n }\n\n authStore.setLoading(false);\n }\n\n async handleResetPasswordRedirect() {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n const resetToken = params.get(\"reset_password_token\");\n\n if (!resetToken) {\n return;\n }\n\n if (authState.sid) {\n authStore.setLoading(true);\n\n const [error] = await this.client.auth.validateResetPasswordToken({\n signInId: authState.sid,\n token: resetToken,\n });\n\n if (error) {\n authStore.setFieldError(\"resetPassword\", error);\n authStore.setStep(\"reset-password\");\n authStore.setLoading(false);\n return;\n }\n }\n\n authStore.setResetToken(resetToken);\n authStore.setStep(\"reset-password\");\n authStore.setLoading(false);\n }\n\n handleSocialAuthRedirect(): void {\n const url = new URL(window.location.href);\n const params = url.searchParams;\n const error = params.get(\"error\");\n\n // Not a social auth redirect (normal page load)\n if (!error && !params.has(\"sid\")) {\n return;\n }\n\n // Handle successful social auth redirect\n if (!error && params.has(\"sid\") && params.has(\"id_token\")) {\n authStore.setSignInId(clearUrlParam(\"sid\"));\n\n const idToken = clearUrlParam(\"id_token\");\n\n if (idToken) {\n authStore.setToken(idToken);\n this.handleAuthSuccess({ jwt: idToken } as TokenResponse);\n } else {\n this.logger.error(\"No ID token found in the URL on social auth redirect\");\n }\n\n return;\n }\n\n // Handle missing required fields\n if (error !== \"missing_required_fields\") {\n this.logger.error(\"Social auth redirect error:\", error);\n return;\n }\n\n const fieldsFromUrl = clearUrlParam(\"fields\");\n const sid = clearUrlParam(\"sid\");\n clearUrlParam(\"error\");\n\n if (!fieldsFromUrl || !sid) {\n return;\n }\n\n try {\n const fields = JSON.parse(fieldsFromUrl);\n authStore.setSignInId(sid);\n\n this.handleMissingFields(fields);\n } catch (e) {\n this.logger.error(\"Failed to parse missing fields payload:\", e);\n authStore.setGlobalError(\"auth\", \"invalid_required_fields_payload\");\n }\n }\n\n private handleAuthError(error: string, response: unknown, fallbackField?: \"email\" | \"password\" | \"magicCode\") {\n switch (error) {\n case \"account_not_found\":\n authStore.setFieldError(\"email\", error);\n break;\n\n case \"missing_required_fields\": {\n const { fields, sid } = response as RequiredFieldsResponse;\n this.handleMissingFields(fields);\n if (sid) {\n authStore.setSignInId(sid);\n }\n break;\n }\n\n default:\n if (fallbackField === \"password\") {\n authStore.setFieldError(\"password\", error);\n } else if (fallbackField === \"magicCode\") {\n authStore.setFieldError(\"magicCode\", error);\n } else if (fallbackField === \"email\") {\n authStore.setFieldError(\"email\", error);\n } else {\n // e.g. \"account_locked\", \"internal_server_error\"\n authStore.setGlobalError(\"auth\", error);\n }\n break;\n }\n\n authStore.setLoading(false);\n }\n\n private handleMissingFields(fields: RequiredFieldsResponse[\"fields\"]) {\n authStore.setMissingFields(fields);\n profileState.data = fields as ProfileRaw;\n authStore.setStep(\"missing-fields\");\n authStore.setLoading(false);\n }\n\n private handleAuthSuccess(response: TokenResponse) {\n authStore.setToken(response.jwt);\n authStore.setLoading(false);\n authStore.getRootComponentRef()?.onAuth(response);\n }\n}\n"]}
|
|
@@ -45,6 +45,7 @@ export class Auth {
|
|
|
45
45
|
}
|
|
46
46
|
Auth.instance = new Auth(client);
|
|
47
47
|
Auth.instance.helpers.handleSocialAuthRedirect();
|
|
48
|
+
Auth.instance.helpers.extractSidFromUrl();
|
|
48
49
|
await Auth.instance.helpers.handleResetPasswordRedirect();
|
|
49
50
|
if (Auth.instance.isTokenValid(authState.token)) {
|
|
50
51
|
authStore.setAuthenticated(true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { jwtDecode } from \"jwt-decode\";\nimport type { UnidyClient } from \"../api\";\nimport { getUnidyClient } from \"../api\";\nimport { t } from \"../i18n\";\nimport { waitForConfig } from \"../shared/store/unidy-store\";\nimport { AuthHelpers } from \"./auth-helpers\";\nimport { authState, authStore } from \"./store/auth-store\";\n\nconst DEFAULT_TOKEN_EXPIRATION_BUFFER_SECONDS = 10;\n\nexport interface TokenPayload {\n sub: string; // unidy id\n sid: string; // sign-in id\n exp: number;\n iat: number;\n iss: string;\n aud: string;\n nonce: string;\n auth_time: number;\n email: string;\n email_verified: boolean;\n [key: string]: unknown;\n}\n\nexport type AuthError = Error & {\n code: \"TOKEN_EXPIRED\" | \"REFRESH_FAILED\" | \"NO_TOKEN\" | \"INVALID_TOKEN\" | \"SIGN_IN_NOT_FOUND\" | \"SIGN_OUT_FAILED\";\n requiresReauth: boolean;\n};\n\nexport class Auth {\n private static instance: Auth;\n\n readonly helpers: AuthHelpers;\n\n private constructor(client: UnidyClient) {\n this.helpers = new AuthHelpers(client);\n }\n\n static Errors = {\n email: {\n NOT_FOUND: \"account_not_found\",\n },\n magicCode: {\n RECENTLY_CREATED: \"magic_code_recently_created\",\n NOT_VALID: \"magic_code_not_valid\",\n EXPIRED: \"magic_code_expired\",\n USED: \"magic_code_used\",\n },\n password: {\n INVALID: \"invalid_password\",\n NOT_SET: \"password_not_set\",\n RESET_PASSWORD_ALREADY_SENT: \"reset_password_already_sent\",\n },\n general: {\n ACCOUNT_LOCKED: \"account_locked\",\n SIGN_IN_EXPIRED: \"sign_in_expired\",\n },\n } as const;\n\n static async getInstance(): Promise<Auth> {\n if (!Auth.isInitialized()) {\n await waitForConfig();\n\n return Auth.initialize(getUnidyClient());\n }\n\n return Auth.instance;\n }\n\n static async initialize(client: UnidyClient): Promise<Auth> {\n if (Auth.instance) {\n return Auth.instance;\n }\n\n Auth.instance = new Auth(client);\n\n Auth.instance.helpers.handleSocialAuthRedirect();\n await Auth.instance.helpers.handleResetPasswordRedirect();\n\n if (Auth.instance.isTokenValid(authState.token)) {\n authStore.setAuthenticated(true);\n }\n\n return Auth.instance;\n }\n\n static isInitialized(): boolean {\n return !!Auth.instance;\n }\n\n /**\n * Checks whether a JWT token is valid and not expired.\n *\n * @param token - The JWT token to validate. Can be a raw JWT string, a decoded TokenPayload, or null.\n * @param expirationBuffer - Number of seconds before actual expiration to consider the token invalid, used to prevent race conditions with preemptive token refresh. Defaults to 10 seconds.\n * @returns `true` if the token is valid and won't expire within the buffer period, `false` otherwise.\n * @throws Error if expirationBuffer is not positive number\n */\n isTokenValid(token: string | TokenPayload | null, expirationBuffer = DEFAULT_TOKEN_EXPIRATION_BUFFER_SECONDS): boolean {\n if (!Number.isFinite(expirationBuffer) || expirationBuffer <= 0) {\n throw new Error(\"expirationBuffer must be a positive finite number\");\n }\n\n try {\n let decoded: TokenPayload | null;\n\n if (typeof token === \"string\") {\n decoded = jwtDecode<TokenPayload>(token);\n } else {\n decoded = token;\n }\n\n if (!decoded) return false;\n\n if (typeof decoded.exp !== \"number\" || !Number.isFinite(decoded.exp)) {\n return false;\n }\n\n const currentTime = Date.now() / 1000;\n return decoded.exp > currentTime + expirationBuffer;\n } catch (error) {\n Sentry.captureException(error);\n return false;\n }\n }\n\n async isAuthenticated(): Promise<boolean> {\n const token = await this.getToken();\n return typeof token === \"string\";\n }\n\n async getToken(): Promise<string | AuthError> {\n const currentToken = authState.token;\n\n if (currentToken && this.isTokenValid(currentToken)) {\n return currentToken;\n }\n\n await this.helpers.refreshToken();\n\n if (authState.globalErrors.auth || !authState.token) {\n return this.createAuthError(t(\"errors.refresh_failed\"), \"REFRESH_FAILED\", true);\n }\n\n return authState.token as string;\n }\n\n async userData(): Promise<TokenPayload | null> {\n const token = await this.getToken();\n\n if (typeof token !== \"string\") {\n return null;\n }\n\n if (!token) {\n return null;\n }\n\n try {\n return jwtDecode<TokenPayload>(token);\n } catch (error) {\n Sentry.captureException(error);\n return null;\n }\n }\n\n async logout(): Promise<boolean | AuthError> {\n const [error, _] = await this.helpers.logout();\n\n if (error) {\n return this.createAuthError(t(\"errors.sign_out_failed\", { reason: error }), \"SIGN_OUT_FAILED\", false);\n }\n\n authStore.reset();\n\n return true;\n }\n\n getEmail(): string | null {\n return authState.email;\n }\n\n private createAuthError(message: string, code: AuthError[\"code\"], requiresReauth = false): AuthError {\n const error = new Error(message) as AuthError;\n error.code = code;\n error.requiresReauth = requiresReauth;\n\n return error;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,CAAC,EAAE,MAAM,SAAS,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,uCAAuC,GAAG,EAAE,CAAC;AAqBnD,MAAM,OAAO,IAAI;IACP,MAAM,CAAC,QAAQ,CAAO;IAErB,OAAO,CAAc;IAE9B,YAAoB,MAAmB;QACrC,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,MAAM,GAAG;QACd,KAAK,EAAE;YACL,SAAS,EAAE,mBAAmB;SAC/B;QACD,SAAS,EAAE;YACT,gBAAgB,EAAE,6BAA6B;YAC/C,SAAS,EAAE,sBAAsB;YACjC,OAAO,EAAE,oBAAoB;YAC7B,IAAI,EAAE,iBAAiB;SACxB;QACD,QAAQ,EAAE;YACR,OAAO,EAAE,kBAAkB;YAC3B,OAAO,EAAE,kBAAkB;YAC3B,2BAA2B,EAAE,6BAA6B;SAC3D;QACD,OAAO,EAAE;YACP,cAAc,EAAE,gBAAgB;YAChC,eAAe,EAAE,iBAAiB;SACnC;KACO,CAAC;IAEX,MAAM,CAAC,KAAK,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;YAC1B,MAAM,aAAa,EAAE,CAAC;YAEtB,OAAO,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAmB;QACzC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAA2B,EAAE,CAAC;QAE1D,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,aAAa;QAClB,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,KAAmC,EAAE,gBAAgB,GAAG,uCAAuC;QAC1G,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,CAAC;YACH,IAAI,OAA4B,CAAC;YAEjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,GAAG,SAAS,CAAe,KAAK,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YAED,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAC;YAE3B,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrE,OAAO,KAAK,CAAC;YACf,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACtC,OAAO,OAAO,CAAC,GAAG,GAAG,WAAW,GAAG,gBAAgB,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;QAErC,IAAI,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC;YACpD,OAAO,YAAY,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAElC,IAAI,SAAS,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YACpD,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,uBAAuB,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAClF,CAAC;QAED,OAAO,SAAS,CAAC,KAAe,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEpC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,OAAO,SAAS,CAAe,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAE/C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACxG,CAAC;QAED,SAAS,CAAC,KAAK,EAAE,CAAC;QAElB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,IAAuB,EAAE,cAAc,GAAG,KAAK;QACtF,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAc,CAAC;QAC9C,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QAClB,KAAK,CAAC,cAAc,GAAG,cAAc,CAAC;QAEtC,OAAO,KAAK,CAAC;IACf,CAAC","sourcesContent":["import * as Sentry from \"@sentry/browser\";\nimport { jwtDecode } from \"jwt-decode\";\nimport type { UnidyClient } from \"../api\";\nimport { getUnidyClient } from \"../api\";\nimport { t } from \"../i18n\";\nimport { waitForConfig } from \"../shared/store/unidy-store\";\nimport { AuthHelpers } from \"./auth-helpers\";\nimport { authState, authStore } from \"./store/auth-store\";\n\nconst DEFAULT_TOKEN_EXPIRATION_BUFFER_SECONDS = 10;\n\nexport interface TokenPayload {\n sub: string; // unidy id\n sid: string; // sign-in id\n exp: number;\n iat: number;\n iss: string;\n aud: string;\n nonce: string;\n auth_time: number;\n email: string;\n email_verified: boolean;\n [key: string]: unknown;\n}\n\nexport type AuthError = Error & {\n code: \"TOKEN_EXPIRED\" | \"REFRESH_FAILED\" | \"NO_TOKEN\" | \"INVALID_TOKEN\" | \"SIGN_IN_NOT_FOUND\" | \"SIGN_OUT_FAILED\";\n requiresReauth: boolean;\n};\n\nexport class Auth {\n private static instance: Auth;\n\n readonly helpers: AuthHelpers;\n\n private constructor(client: UnidyClient) {\n this.helpers = new AuthHelpers(client);\n }\n\n static Errors = {\n email: {\n NOT_FOUND: \"account_not_found\",\n },\n magicCode: {\n RECENTLY_CREATED: \"magic_code_recently_created\",\n NOT_VALID: \"magic_code_not_valid\",\n EXPIRED: \"magic_code_expired\",\n USED: \"magic_code_used\",\n },\n password: {\n INVALID: \"invalid_password\",\n NOT_SET: \"password_not_set\",\n RESET_PASSWORD_ALREADY_SENT: \"reset_password_already_sent\",\n },\n general: {\n ACCOUNT_LOCKED: \"account_locked\",\n SIGN_IN_EXPIRED: \"sign_in_expired\",\n },\n } as const;\n\n static async getInstance(): Promise<Auth> {\n if (!Auth.isInitialized()) {\n await waitForConfig();\n\n return Auth.initialize(getUnidyClient());\n }\n\n return Auth.instance;\n }\n\n static async initialize(client: UnidyClient): Promise<Auth> {\n if (Auth.instance) {\n return Auth.instance;\n }\n\n Auth.instance = new Auth(client);\n\n Auth.instance.helpers.handleSocialAuthRedirect();\n Auth.instance.helpers.extractSidFromUrl();\n await Auth.instance.helpers.handleResetPasswordRedirect();\n\n if (Auth.instance.isTokenValid(authState.token)) {\n authStore.setAuthenticated(true);\n }\n\n return Auth.instance;\n }\n\n static isInitialized(): boolean {\n return !!Auth.instance;\n }\n\n /**\n * Checks whether a JWT token is valid and not expired.\n *\n * @param token - The JWT token to validate. Can be a raw JWT string, a decoded TokenPayload, or null.\n * @param expirationBuffer - Number of seconds before actual expiration to consider the token invalid, used to prevent race conditions with preemptive token refresh. Defaults to 10 seconds.\n * @returns `true` if the token is valid and won't expire within the buffer period, `false` otherwise.\n * @throws Error if expirationBuffer is not positive number\n */\n isTokenValid(token: string | TokenPayload | null, expirationBuffer = DEFAULT_TOKEN_EXPIRATION_BUFFER_SECONDS): boolean {\n if (!Number.isFinite(expirationBuffer) || expirationBuffer <= 0) {\n throw new Error(\"expirationBuffer must be a positive finite number\");\n }\n\n try {\n let decoded: TokenPayload | null;\n\n if (typeof token === \"string\") {\n decoded = jwtDecode<TokenPayload>(token);\n } else {\n decoded = token;\n }\n\n if (!decoded) return false;\n\n if (typeof decoded.exp !== \"number\" || !Number.isFinite(decoded.exp)) {\n return false;\n }\n\n const currentTime = Date.now() / 1000;\n return decoded.exp > currentTime + expirationBuffer;\n } catch (error) {\n Sentry.captureException(error);\n return false;\n }\n }\n\n async isAuthenticated(): Promise<boolean> {\n const token = await this.getToken();\n return typeof token === \"string\";\n }\n\n async getToken(): Promise<string | AuthError> {\n const currentToken = authState.token;\n\n if (currentToken && this.isTokenValid(currentToken)) {\n return currentToken;\n }\n\n await this.helpers.refreshToken();\n\n if (authState.globalErrors.auth || !authState.token) {\n return this.createAuthError(t(\"errors.refresh_failed\"), \"REFRESH_FAILED\", true);\n }\n\n return authState.token as string;\n }\n\n async userData(): Promise<TokenPayload | null> {\n const token = await this.getToken();\n\n if (typeof token !== \"string\") {\n return null;\n }\n\n if (!token) {\n return null;\n }\n\n try {\n return jwtDecode<TokenPayload>(token);\n } catch (error) {\n Sentry.captureException(error);\n return null;\n }\n }\n\n async logout(): Promise<boolean | AuthError> {\n const [error, _] = await this.helpers.logout();\n\n if (error) {\n return this.createAuthError(t(\"errors.sign_out_failed\", { reason: error }), \"SIGN_OUT_FAILED\", false);\n }\n\n authStore.reset();\n\n return true;\n }\n\n getEmail(): string | null {\n return authState.email;\n }\n\n private createAuthError(message: string, code: AuthError[\"code\"], requiresReauth = false): AuthError {\n const error = new Error(message) as AuthError;\n error.code = code;\n error.requiresReauth = requiresReauth;\n\n return error;\n }\n}\n"]}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { h
|
|
2
|
-
import { Auth } from "../../auth";
|
|
3
|
-
import { authState, onChange } from "../../store/auth-store";
|
|
1
|
+
import { h } from "@stencil/core";
|
|
4
2
|
import { getUnidyClient } from "../../../api";
|
|
5
|
-
import { unidyState } from "../../../shared/store/unidy-store";
|
|
6
3
|
import { t } from "../../../i18n";
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { UnidyComponent } from "../../../shared/base/component";
|
|
5
|
+
import { HasSlotContent } from "../../../shared/base/has-slot-content";
|
|
6
|
+
import { slotFallbackText } from "../../../shared/component-utils";
|
|
7
|
+
import { redirectWithToken } from "../../../shared/utils/redirect-with-token";
|
|
8
|
+
import { Auth } from "../../auth";
|
|
9
|
+
import { authState } from "../../store/auth-store";
|
|
10
|
+
export class JumpToService extends UnidyComponent(HasSlotContent) {
|
|
11
|
+
constructor() {
|
|
12
|
+
super();
|
|
13
|
+
}
|
|
9
14
|
/**
|
|
10
15
|
* The OAuth Application ID (service ID) to jump to.
|
|
11
16
|
* @example "2"
|
|
@@ -35,18 +40,6 @@ export class JumpToService {
|
|
|
35
40
|
*/
|
|
36
41
|
skipOauthAuthorization = false;
|
|
37
42
|
loading = false;
|
|
38
|
-
// TODO: Figure out a way to share this across components
|
|
39
|
-
unsubscribe;
|
|
40
|
-
connectedCallback() {
|
|
41
|
-
this.unsubscribe = onChange("authenticated", () => {
|
|
42
|
-
forceUpdate(this);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
disconnectedCallback() {
|
|
46
|
-
if (this.unsubscribe) {
|
|
47
|
-
this.unsubscribe();
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
43
|
handleClick = async (event) => {
|
|
51
44
|
event.preventDefault();
|
|
52
45
|
if (!this.serviceId) {
|
|
@@ -54,21 +47,19 @@ export class JumpToService {
|
|
|
54
47
|
return;
|
|
55
48
|
}
|
|
56
49
|
const auth = await Auth.getInstance();
|
|
57
|
-
|
|
58
|
-
if (!isAuthenticated) {
|
|
50
|
+
if (!(await auth.isAuthenticated())) {
|
|
59
51
|
console.error("[u-jump-to-service] User is not authenticated. Please log in first.");
|
|
60
52
|
return;
|
|
61
53
|
}
|
|
62
54
|
const userData = await auth.userData();
|
|
63
|
-
if (!userData
|
|
55
|
+
if (!userData?.email) {
|
|
64
56
|
console.error("Failed to get user email from authentication token");
|
|
65
57
|
return;
|
|
66
58
|
}
|
|
67
59
|
this.loading = true;
|
|
68
60
|
try {
|
|
69
61
|
const client = getUnidyClient();
|
|
70
|
-
|
|
71
|
-
const scopesArray = this.scopes ? this.scopes.split(",").map((s) => s.trim()) : undefined;
|
|
62
|
+
const scopesArray = this.scopes?.split(",").map((s) => s.trim());
|
|
72
63
|
const [error, token] = await client.auth.jumpToService(this.serviceId, {
|
|
73
64
|
email: userData.email,
|
|
74
65
|
redirect_uri: this.redirectUri,
|
|
@@ -77,22 +68,13 @@ export class JumpToService {
|
|
|
77
68
|
});
|
|
78
69
|
if (error) {
|
|
79
70
|
console.error("Failed to get jump token:", error);
|
|
80
|
-
this.loading = false;
|
|
81
71
|
return;
|
|
82
72
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
const finalUrl = redirectUrl.toString();
|
|
90
|
-
if (this.newtab) {
|
|
91
|
-
window.open(finalUrl, "_blank");
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
window.location.href = finalUrl;
|
|
95
|
-
}
|
|
73
|
+
redirectWithToken({
|
|
74
|
+
token: token,
|
|
75
|
+
newTab: this.newtab,
|
|
76
|
+
extraParams: this.redirectUri ? { redirect_uri: this.redirectUri } : undefined,
|
|
77
|
+
});
|
|
96
78
|
}
|
|
97
79
|
catch (error) {
|
|
98
80
|
console.error("Error jumping to service:", error);
|
|
@@ -105,8 +87,7 @@ export class JumpToService {
|
|
|
105
87
|
return !authState.authenticated || this.loading || !this.serviceId;
|
|
106
88
|
}
|
|
107
89
|
render() {
|
|
108
|
-
|
|
109
|
-
return (h("button", { key: '3f0526c3a12b73cada7b044dfe55fd74757031cf', type: "button", disabled: this.isDisabled(), class: this.componentClassName, onClick: this.handleClick, "aria-live": "polite" }, this.loading ? h("u-spinner", null) : hasSlot ? h("slot", null) : t("buttons.jump_to_service")));
|
|
90
|
+
return (h("button", { key: 'dc593d260c7b74bbfa108c1201b02c1ed7a414c0', type: "button", disabled: this.isDisabled(), class: this.componentClassName, onClick: this.handleClick, "aria-live": "polite" }, slotFallbackText(t("buttons.jump_to_service"), { hasSlot: this.hasSlot, loading: this.loading })));
|
|
110
91
|
}
|
|
111
92
|
static get is() { return "u-jump-to-service"; }
|
|
112
93
|
static get properties() {
|
|
@@ -241,6 +222,5 @@ export class JumpToService {
|
|
|
241
222
|
"loading": {}
|
|
242
223
|
};
|
|
243
224
|
}
|
|
244
|
-
static get elementRef() { return "el"; }
|
|
245
225
|
}
|
|
246
226
|
//# sourceMappingURL=jump-to-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jump-to-service.js","sourceRoot":"","sources":["../../../../src/auth/components/jump-to-service/jump-to-service.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"jump-to-service.js","sourceRoot":"","sources":["../../../../src/auth/components/jump-to-service/jump-to-service.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State } from \"@stencil/core\";\nimport { getUnidyClient } from \"../../../api\";\nimport { t } from \"../../../i18n\";\nimport { UnidyComponent } from \"../../../shared/base/component\";\nimport { HasSlotContent } from \"../../../shared/base/has-slot-content\";\nimport { slotFallbackText } from \"../../../shared/component-utils\";\nimport { redirectWithToken } from \"../../../shared/utils/redirect-with-token\";\nimport { Auth } from \"../../auth\";\nimport { authState } from \"../../store/auth-store\";\n\n@Component({\n tag: \"u-jump-to-service\",\n shadow: false,\n})\nexport class JumpToService extends UnidyComponent(HasSlotContent) {\n /**\n * The OAuth Application ID (service ID) to jump to.\n * @example \"2\"\n */\n @Prop({ attribute: \"service-id\" }) serviceId!: string;\n\n /**\n * If true, opens the URL in a new tab. Defaults to false.\n */\n @Prop() newtab = false;\n\n /**\n * Custom CSS class name(s) to apply to the button element.\n */\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n /**\n * Optional redirect URI for the OAuth flow.\n * Must match one of the application's allowed redirect URIs.\n */\n @Prop({ attribute: \"redirect-uri\" }) redirectUri?: string;\n\n /**\n * Comma-separated list of OAuth scopes to request.\n * Defaults to [\"openid\"] if not provided.\n * @example \"openid,profile\"\n */\n @Prop() scopes?: string;\n\n /**\n * If true, skips the OAuth authorization step (if already authorized once). Defaults to false.\n */\n @Prop({ attribute: \"skip-oauth-authorization\" }) skipOauthAuthorization = false;\n\n @State() loading = false;\n\n private handleClick = async (event: Event) => {\n event.preventDefault();\n\n if (!this.serviceId) {\n console.error(\"[u-jump-to-service] service-id is required\");\n return;\n }\n\n const auth = await Auth.getInstance();\n if (!(await auth.isAuthenticated())) {\n console.error(\"[u-jump-to-service] User is not authenticated. Please log in first.\");\n return;\n }\n\n const userData = await auth.userData();\n if (!userData?.email) {\n console.error(\"Failed to get user email from authentication token\");\n return;\n }\n\n this.loading = true;\n\n try {\n const client = getUnidyClient();\n const scopesArray = this.scopes?.split(\",\").map((s) => s.trim());\n\n const [error, token] = await client.auth.jumpToService(this.serviceId, {\n email: userData.email,\n redirect_uri: this.redirectUri,\n scopes: scopesArray,\n skip_oauth_authorization: this.skipOauthAuthorization,\n });\n\n if (error) {\n console.error(\"Failed to get jump token:\", error);\n return;\n }\n\n redirectWithToken({\n token: token as string,\n newTab: this.newtab,\n extraParams: this.redirectUri ? { redirect_uri: this.redirectUri } : undefined,\n });\n } catch (error) {\n console.error(\"Error jumping to service:\", error);\n } finally {\n this.loading = false;\n }\n };\n\n private isDisabled(): boolean {\n return !authState.authenticated || this.loading || !this.serviceId;\n }\n\n render() {\n return (\n <button type=\"button\" disabled={this.isDisabled()} class={this.componentClassName} onClick={this.handleClick} aria-live=\"polite\">\n {slotFallbackText(t(\"buttons.jump_to_service\"), { hasSlot: this.hasSlot, loading: this.loading })}\n </button>\n );\n }\n}\n"]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import { h
|
|
2
|
-
import { Auth } from "../../auth";
|
|
3
|
-
import { authState, onChange } from "../../store/auth-store";
|
|
1
|
+
import { h } from "@stencil/core";
|
|
4
2
|
import { getUnidyClient } from "../../../api";
|
|
5
|
-
import { unidyState } from "../../../shared/store/unidy-store";
|
|
6
3
|
import { t } from "../../../i18n";
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
import { UnidyComponent } from "../../../shared/base/component";
|
|
5
|
+
import { HasSlotContent } from "../../../shared/base/has-slot-content";
|
|
6
|
+
import { slotFallbackText } from "../../../shared/component-utils";
|
|
7
|
+
import { unidyState } from "../../../shared/store/unidy-store";
|
|
8
|
+
import { redirectWithToken } from "../../../shared/utils/redirect-with-token";
|
|
9
|
+
import { Auth } from "../../auth";
|
|
10
|
+
import { authState } from "../../store/auth-store";
|
|
11
|
+
export class JumpToUnidy extends UnidyComponent(HasSlotContent) {
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
}
|
|
9
15
|
/**
|
|
10
16
|
* The Unidy path to redirect to. Must start with "/".
|
|
11
17
|
* @example "/subscriptions"
|
|
@@ -26,11 +32,6 @@ export class JumpToUnidy {
|
|
|
26
32
|
*/
|
|
27
33
|
componentClassName = "";
|
|
28
34
|
loading = false;
|
|
29
|
-
unsubscribe;
|
|
30
|
-
/**
|
|
31
|
-
* Validates that the path prop is valid (not empty and starts with "/").
|
|
32
|
-
* @returns true if path is valid, false otherwise
|
|
33
|
-
*/
|
|
34
35
|
isValidPath() {
|
|
35
36
|
return !!this.path && this.path.startsWith("/");
|
|
36
37
|
}
|
|
@@ -39,17 +40,6 @@ export class JumpToUnidy {
|
|
|
39
40
|
console.error(`[u-jump-to-unidy] Invalid path prop: "${this.path}". Path must be provided and start with "/".`);
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
|
-
// TODO: Figure out a way to share this across components
|
|
43
|
-
connectedCallback() {
|
|
44
|
-
this.unsubscribe = onChange("authenticated", () => {
|
|
45
|
-
forceUpdate(this);
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
disconnectedCallback() {
|
|
49
|
-
if (this.unsubscribe) {
|
|
50
|
-
this.unsubscribe();
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
43
|
handleClick = async (event) => {
|
|
54
44
|
event.preventDefault();
|
|
55
45
|
if (!this.isValidPath()) {
|
|
@@ -68,13 +58,12 @@ export class JumpToUnidy {
|
|
|
68
58
|
return;
|
|
69
59
|
}
|
|
70
60
|
const auth = await Auth.getInstance();
|
|
71
|
-
|
|
72
|
-
if (!isAuthenticated) {
|
|
61
|
+
if (!(await auth.isAuthenticated())) {
|
|
73
62
|
console.error("[u-jump-to-unidy] User is not authenticated. Please log in first.");
|
|
74
63
|
return;
|
|
75
64
|
}
|
|
76
65
|
const userData = await auth.userData();
|
|
77
|
-
if (!userData
|
|
66
|
+
if (!userData?.email) {
|
|
78
67
|
console.error("Failed to get user email from authentication token");
|
|
79
68
|
return;
|
|
80
69
|
}
|
|
@@ -87,19 +76,13 @@ export class JumpToUnidy {
|
|
|
87
76
|
});
|
|
88
77
|
if (error) {
|
|
89
78
|
console.error("Failed to get jump token:", error);
|
|
90
|
-
this.loading = false;
|
|
91
79
|
return;
|
|
92
80
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
window.open(finalUrl, "_blank");
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
window.location.href = finalUrl;
|
|
102
|
-
}
|
|
81
|
+
redirectWithToken({
|
|
82
|
+
// @ts-expect-error - TOKEN IS A STRING, BUT we need to enable strict for it to work
|
|
83
|
+
token,
|
|
84
|
+
newTab: this.newtab,
|
|
85
|
+
});
|
|
103
86
|
}
|
|
104
87
|
catch (error) {
|
|
105
88
|
console.error("Error jumping to Unidy:", error);
|
|
@@ -115,8 +98,7 @@ export class JumpToUnidy {
|
|
|
115
98
|
return !authState.authenticated || this.loading || !this.isValidPath();
|
|
116
99
|
}
|
|
117
100
|
render() {
|
|
118
|
-
|
|
119
|
-
return (h("button", { key: 'bcf35a95e8ea304da27320e6f4406dd57e94aaf7', type: "button", disabled: this.isDisabled(), class: this.componentClassName, onClick: this.handleClick, "aria-live": "polite" }, this.loading ? h("u-spinner", null) : hasSlot ? h("slot", null) : t("buttons.jump_to_unidy")));
|
|
101
|
+
return (h("button", { key: 'b5747e752d731be9281f82ca0487841ee7baf2d3', type: "button", disabled: this.isDisabled(), class: this.componentClassName, onClick: this.handleClick, "aria-live": "polite" }, slotFallbackText(t("buttons.jump_to_unidy"), { hasSlot: this.hasSlot, loading: this.loading })));
|
|
120
102
|
}
|
|
121
103
|
static get is() { return "u-jump-to-unidy"; }
|
|
122
104
|
static get properties() {
|
|
@@ -213,6 +195,5 @@ export class JumpToUnidy {
|
|
|
213
195
|
"loading": {}
|
|
214
196
|
};
|
|
215
197
|
}
|
|
216
|
-
static get elementRef() { return "el"; }
|
|
217
198
|
}
|
|
218
199
|
//# sourceMappingURL=jump-to-unidy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jump-to-unidy.js","sourceRoot":"","sources":["../../../../src/auth/components/jump-to-unidy/jump-to-unidy.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"jump-to-unidy.js","sourceRoot":"","sources":["../../../../src/auth/components/jump-to-unidy/jump-to-unidy.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, h, Prop, State } from \"@stencil/core\";\nimport { getUnidyClient } from \"../../../api\";\nimport { t } from \"../../../i18n\";\nimport { UnidyComponent } from \"../../../shared/base/component\";\nimport { HasSlotContent } from \"../../../shared/base/has-slot-content\";\nimport { slotFallbackText } from \"../../../shared/component-utils\";\nimport { unidyState } from \"../../../shared/store/unidy-store\";\nimport { redirectWithToken } from \"../../../shared/utils/redirect-with-token\";\nimport { Auth } from \"../../auth\";\nimport { authState } from \"../../store/auth-store\";\n\n@Component({\n tag: \"u-jump-to-unidy\",\n shadow: false,\n})\nexport class JumpToUnidy extends UnidyComponent(HasSlotContent) {\n /**\n * The Unidy path to redirect to. Must start with \"/\".\n * @example \"/subscriptions\"\n * @example \"/tickets\"\n */\n @Prop() path!: string;\n\n /**\n * If true, opens the URL in a new tab. Defaults to false.\n */\n @Prop() newtab = false;\n\n /**\n * If true, skips authentication and redirects directly to the Unidy path.\n * Useful for public pages like terms of service.\n */\n @Prop({ attribute: \"no-auth\" }) noAuth = false;\n\n /**\n * Custom CSS class name(s) to apply to the button element.\n */\n @Prop({ attribute: \"class-name\" }) componentClassName = \"\";\n\n @State() loading = false;\n\n private isValidPath(): boolean {\n return !!this.path && this.path.startsWith(\"/\");\n }\n\n componentWillLoad() {\n if (!this.isValidPath()) {\n console.error(`[u-jump-to-unidy] Invalid path prop: \"${this.path}\". Path must be provided and start with \"/\".`);\n }\n }\n\n private handleClick = async (event: Event) => {\n event.preventDefault();\n\n if (!this.isValidPath()) {\n console.error(`[u-jump-to-unidy] Invalid path: \"${this.path}\". Path must be provided and start with \"/\".`);\n return;\n }\n\n // If no-auth mode, redirect directly to the path without authentication\n if (this.noAuth) {\n const finalUrl = new URL(this.path, unidyState.baseUrl).toString();\n if (this.newtab) {\n window.open(finalUrl, \"_blank\");\n } else {\n window.location.href = finalUrl;\n }\n return;\n }\n\n const auth = await Auth.getInstance();\n if (!(await auth.isAuthenticated())) {\n console.error(\"[u-jump-to-unidy] User is not authenticated. Please log in first.\");\n return;\n }\n\n const userData = await auth.userData();\n if (!userData?.email) {\n console.error(\"Failed to get user email from authentication token\");\n return;\n }\n\n this.loading = true;\n\n try {\n const client = getUnidyClient();\n const [error, token] = await client.auth.jumpToUnidy({\n email: userData.email,\n path: this.path,\n });\n\n if (error) {\n console.error(\"Failed to get jump token:\", error);\n return;\n }\n\n redirectWithToken({\n // @ts-expect-error - TOKEN IS A STRING, BUT we need to enable strict for it to work\n token,\n newTab: this.newtab,\n });\n } catch (error) {\n console.error(\"Error jumping to Unidy:\", error);\n } finally {\n this.loading = false;\n }\n };\n\n private isDisabled(): boolean {\n if (this.noAuth) {\n return this.loading || !this.isValidPath();\n }\n return !authState.authenticated || this.loading || !this.isValidPath();\n }\n\n render() {\n return (\n <button type=\"button\" disabled={this.isDisabled()} class={this.componentClassName} onClick={this.handleClick} aria-live=\"polite\">\n {slotFallbackText(t(\"buttons.jump_to_unidy\"), { hasSlot: this.hasSlot, loading: this.loading })}\n </button>\n );\n }\n}\n"]}
|
|
@@ -1,18 +1,15 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { t } from "../../../i18n";
|
|
3
|
-
import {
|
|
3
|
+
import { UnidyComponent } from "../../../shared/base/component";
|
|
4
|
+
import { HasSlotContent } from "../../../shared/base/has-slot-content";
|
|
4
5
|
import { Auth } from "../../auth";
|
|
5
|
-
export class LogoutButton {
|
|
6
|
-
|
|
6
|
+
export class LogoutButton extends UnidyComponent(HasSlotContent) {
|
|
7
|
+
constructor() {
|
|
8
|
+
super();
|
|
9
|
+
}
|
|
7
10
|
componentClassName = "";
|
|
8
11
|
reloadOnSuccess = true;
|
|
9
12
|
logout;
|
|
10
|
-
hasSlot = false;
|
|
11
|
-
async componentWillLoad() {
|
|
12
|
-
// this needs to be evaluated on load, bc doing it on render will evaluate the generated dom for "shadow: false"
|
|
13
|
-
// components and always return true on re-render
|
|
14
|
-
this.hasSlot = hasSlotContent(this.el);
|
|
15
|
-
}
|
|
16
13
|
handleLogout = async () => {
|
|
17
14
|
const authInstance = await Auth.getInstance();
|
|
18
15
|
const result = await authInstance.logout();
|
|
@@ -24,7 +21,7 @@ export class LogoutButton {
|
|
|
24
21
|
}
|
|
25
22
|
};
|
|
26
23
|
render() {
|
|
27
|
-
return (h("button", { key: '
|
|
24
|
+
return (h("button", { key: '07163c43a269a3f25dcc84451cbd6d52ecb28b0b', type: "button", class: this.componentClassName, onClick: this.handleLogout, "aria-live": "polite" }, this.hasSlot ? h("slot", null) : t("buttons.logout")));
|
|
28
25
|
}
|
|
29
26
|
static get is() { return "u-logout-button"; }
|
|
30
27
|
static get properties() {
|
|
@@ -89,6 +86,5 @@ export class LogoutButton {
|
|
|
89
86
|
}
|
|
90
87
|
}];
|
|
91
88
|
}
|
|
92
|
-
static get elementRef() { return "el"; }
|
|
93
89
|
}
|
|
94
90
|
//# sourceMappingURL=logout-button.js.map
|