@atproto/oauth-provider 0.3.1 → 0.5.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/.linguirc +57 -0
- package/CHANGELOG.md +29 -0
- package/LICENSE.txt +1 -1
- package/dist/account/account-manager.d.ts +17 -3
- package/dist/account/account-manager.d.ts.map +1 -1
- package/dist/account/account-manager.js +102 -8
- package/dist/account/account-manager.js.map +1 -1
- package/dist/account/account-store.d.ts +81 -15
- package/dist/account/account-store.d.ts.map +1 -1
- package/dist/account/account-store.js +70 -19
- package/dist/account/account-store.js.map +1 -1
- package/dist/account/sign-in-data.d.ts +28 -0
- package/dist/account/sign-in-data.d.ts.map +1 -0
- package/dist/account/sign-in-data.js +16 -0
- package/dist/account/sign-in-data.js.map +1 -0
- package/dist/account/sign-up-data.d.ts +26 -0
- package/dist/account/sign-up-data.d.ts.map +1 -0
- package/dist/account/sign-up-data.js +11 -0
- package/dist/account/sign-up-data.js.map +1 -0
- package/dist/assets/app/bundle-manifest.json +598 -6
- package/dist/assets/app/index-ItwwtJ8r.js +36 -0
- package/dist/assets/app/index-ItwwtJ8r.js.map +1 -0
- package/dist/assets/app/main-B_dNxQo_.js +4 -0
- package/dist/assets/app/main-B_dNxQo_.js.map +1 -0
- package/dist/assets/app/main-CSatvmRR.css +3 -0
- package/dist/assets/app/main-CSatvmRR.js +306 -0
- package/dist/assets/app/main-CSatvmRR.js.map +1 -0
- package/dist/assets/app/messages-BQeltXSF.js +4 -0
- package/dist/assets/app/messages-BQeltXSF.js.map +1 -0
- package/dist/assets/app/messages-BQkEhfjg.js +4 -0
- package/dist/assets/app/messages-BQkEhfjg.js.map +1 -0
- package/dist/assets/app/messages-BUjKj_UJ.js +4 -0
- package/dist/assets/app/messages-BUjKj_UJ.js.map +1 -0
- package/dist/assets/app/messages-BWIQa8fO.js +4 -0
- package/dist/assets/app/messages-BWIQa8fO.js.map +1 -0
- package/dist/assets/app/messages-BaNVb0bp.js +4 -0
- package/dist/assets/app/messages-BaNVb0bp.js.map +1 -0
- package/dist/assets/app/messages-BaizVXcF.js +4 -0
- package/dist/assets/app/messages-BaizVXcF.js.map +1 -0
- package/dist/assets/app/messages-BfoClA1Y.js +4 -0
- package/dist/assets/app/messages-BfoClA1Y.js.map +1 -0
- package/dist/assets/app/messages-BsKGDZnC.js +4 -0
- package/dist/assets/app/messages-BsKGDZnC.js.map +1 -0
- package/dist/assets/app/messages-Bu-TJhml.js +4 -0
- package/dist/assets/app/messages-Bu-TJhml.js.map +1 -0
- package/dist/assets/app/messages-BvOKnBQk.js +4 -0
- package/dist/assets/app/messages-BvOKnBQk.js.map +1 -0
- package/dist/assets/app/messages-BxDzCiWz.js +4 -0
- package/dist/assets/app/messages-BxDzCiWz.js.map +1 -0
- package/dist/assets/app/messages-CDgFOy4S.js +4 -0
- package/dist/assets/app/messages-CDgFOy4S.js.map +1 -0
- package/dist/assets/app/messages-CLbTz0o9.js +4 -0
- package/dist/assets/app/messages-CLbTz0o9.js.map +1 -0
- package/dist/assets/app/messages-CNwSh0t7.js +4 -0
- package/dist/assets/app/messages-CNwSh0t7.js.map +1 -0
- package/dist/assets/app/messages-CSMNJ6P8.js +4 -0
- package/dist/assets/app/messages-CSMNJ6P8.js.map +1 -0
- package/dist/assets/app/messages-CZQUw3mp.js +4 -0
- package/dist/assets/app/messages-CZQUw3mp.js.map +1 -0
- package/dist/assets/app/messages-CZT41oVp.js +4 -0
- package/dist/assets/app/messages-CZT41oVp.js.map +1 -0
- package/dist/assets/app/messages-C_b-d3t8.js +4 -0
- package/dist/assets/app/messages-C_b-d3t8.js.map +1 -0
- package/dist/assets/app/messages-C_u3MTc2.js +4 -0
- package/dist/assets/app/messages-C_u3MTc2.js.map +1 -0
- package/dist/assets/app/messages-Cn8nHZic.js +4 -0
- package/dist/assets/app/messages-Cn8nHZic.js.map +1 -0
- package/dist/assets/app/messages-CtDywJUm.js +4 -0
- package/dist/assets/app/messages-CtDywJUm.js.map +1 -0
- package/dist/assets/app/messages-CurtIjBF.js +4 -0
- package/dist/assets/app/messages-CurtIjBF.js.map +1 -0
- package/dist/assets/app/messages-Cv6zIbaP.js +4 -0
- package/dist/assets/app/messages-Cv6zIbaP.js.map +1 -0
- package/dist/assets/app/messages-D1eLQuPE.js +4 -0
- package/dist/assets/app/messages-D1eLQuPE.js.map +1 -0
- package/dist/assets/app/messages-D8vHEaYW.js +4 -0
- package/dist/assets/app/messages-D8vHEaYW.js.map +1 -0
- package/dist/assets/app/messages-DJ1Q4GeC.js +4 -0
- package/dist/assets/app/messages-DJ1Q4GeC.js.map +1 -0
- package/dist/assets/app/messages-DRL3exqd.js +4 -0
- package/dist/assets/app/messages-DRL3exqd.js.map +1 -0
- package/dist/assets/app/messages-DWLPQRTp.js +4 -0
- package/dist/assets/app/messages-DWLPQRTp.js.map +1 -0
- package/dist/assets/app/messages-DjVaE9YE.js +4 -0
- package/dist/assets/app/messages-DjVaE9YE.js.map +1 -0
- package/dist/assets/app/messages-DqpMfFJR.js +4 -0
- package/dist/assets/app/messages-DqpMfFJR.js.map +1 -0
- package/dist/assets/app/messages-ETjhJBEN.js +4 -0
- package/dist/assets/app/messages-ETjhJBEN.js.map +1 -0
- package/dist/assets/app/messages-EUKrgrGn.js +4 -0
- package/dist/assets/app/messages-EUKrgrGn.js.map +1 -0
- package/dist/assets/app/messages-QQrOUcPW.js +4 -0
- package/dist/assets/app/messages-QQrOUcPW.js.map +1 -0
- package/dist/assets/app/messages-e2QGqFL6.js +4 -0
- package/dist/assets/app/messages-e2QGqFL6.js.map +1 -0
- package/dist/assets/app/messages-p61py7gD.js +4 -0
- package/dist/assets/app/messages-p61py7gD.js.map +1 -0
- package/dist/assets/asset.d.ts +1 -0
- package/dist/assets/asset.d.ts.map +1 -1
- package/dist/assets/assets-middleware.d.ts.map +1 -1
- package/dist/assets/assets-middleware.js +12 -7
- package/dist/assets/assets-middleware.js.map +1 -1
- package/dist/assets/index.d.ts +3 -2
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +13 -1
- package/dist/assets/index.js.map +1 -1
- package/dist/client/client-store.d.ts +3 -3
- package/dist/client/client-store.d.ts.map +1 -1
- package/dist/client/client-store.js +6 -5
- package/dist/client/client-store.js.map +1 -1
- package/dist/device/device-manager.d.ts +12 -13
- package/dist/device/device-manager.d.ts.map +1 -1
- package/dist/device/device-manager.js +5 -3
- package/dist/device/device-manager.js.map +1 -1
- package/dist/device/device-store.d.ts +3 -3
- package/dist/device/device-store.d.ts.map +1 -1
- package/dist/device/device-store.js +10 -9
- package/dist/device/device-store.js.map +1 -1
- package/dist/dpop/dpop-manager.d.ts +15 -7
- package/dist/dpop/dpop-manager.d.ts.map +1 -1
- package/dist/dpop/dpop-manager.js +17 -3
- package/dist/dpop/dpop-manager.js.map +1 -1
- package/dist/dpop/dpop-nonce.d.ts +11 -5
- package/dist/dpop/dpop-nonce.d.ts.map +1 -1
- package/dist/dpop/dpop-nonce.js +47 -38
- package/dist/dpop/dpop-nonce.js.map +1 -1
- package/dist/errors/handle-unavailable-error.d.ts +11 -0
- package/dist/errors/handle-unavailable-error.d.ts.map +1 -0
- package/dist/errors/handle-unavailable-error.js +19 -0
- package/dist/errors/handle-unavailable-error.js.map +1 -0
- package/dist/errors/invalid-request-error.d.ts +6 -8
- package/dist/errors/invalid-request-error.d.ts.map +1 -1
- package/dist/errors/invalid-request-error.js +10 -8
- package/dist/errors/invalid-request-error.js.map +1 -1
- package/dist/lib/csp/index.d.ts +18 -0
- package/dist/lib/csp/index.d.ts.map +1 -0
- package/dist/lib/csp/index.js +72 -0
- package/dist/lib/csp/index.js.map +1 -0
- package/dist/lib/hcaptcha.d.ts +177 -0
- package/dist/lib/hcaptcha.d.ts.map +1 -0
- package/dist/lib/hcaptcha.js +155 -0
- package/dist/lib/hcaptcha.js.map +1 -0
- package/dist/lib/html/build-document.d.ts +11 -3
- package/dist/lib/html/build-document.d.ts.map +1 -1
- package/dist/lib/html/build-document.js +51 -15
- package/dist/lib/html/build-document.js.map +1 -1
- package/dist/lib/http/middleware.d.ts.map +1 -1
- package/dist/lib/http/middleware.js +4 -1
- package/dist/lib/http/middleware.js.map +1 -1
- package/dist/lib/http/request.d.ts +18 -3
- package/dist/lib/http/request.d.ts.map +1 -1
- package/dist/lib/http/request.js +56 -23
- package/dist/lib/http/request.js.map +1 -1
- package/dist/lib/http/response.d.ts +4 -2
- package/dist/lib/http/response.d.ts.map +1 -1
- package/dist/lib/http/response.js +23 -5
- package/dist/lib/http/response.js.map +1 -1
- package/dist/lib/locale.d.ts +15 -0
- package/dist/lib/locale.d.ts.map +1 -0
- package/dist/lib/locale.js +17 -0
- package/dist/lib/locale.js.map +1 -0
- package/dist/lib/util/function.d.ts +2 -2
- package/dist/lib/util/function.d.ts.map +1 -1
- package/dist/lib/util/function.js.map +1 -1
- package/dist/lib/util/type.d.ts +88 -1
- package/dist/lib/util/type.d.ts.map +1 -1
- package/dist/lib/util/type.js +41 -0
- package/dist/lib/util/type.js.map +1 -1
- package/dist/metadata/build-metadata.d.ts +2 -2
- package/dist/metadata/build-metadata.d.ts.map +1 -1
- package/dist/metadata/build-metadata.js.map +1 -1
- package/dist/oauth-errors.d.ts +1 -0
- package/dist/oauth-errors.d.ts.map +1 -1
- package/dist/oauth-errors.js +3 -1
- package/dist/oauth-errors.js.map +1 -1
- package/dist/oauth-hooks.d.ts +60 -3
- package/dist/oauth-hooks.d.ts.map +1 -1
- package/dist/oauth-hooks.js +3 -3
- package/dist/oauth-hooks.js.map +1 -1
- package/dist/oauth-provider.d.ts +28 -22
- package/dist/oauth-provider.d.ts.map +1 -1
- package/dist/oauth-provider.js +212 -211
- package/dist/oauth-provider.js.map +1 -1
- package/dist/oauth-verifier.d.ts +1 -1
- package/dist/oauth-verifier.d.ts.map +1 -1
- package/dist/oauth-verifier.js +2 -1
- package/dist/oauth-verifier.js.map +1 -1
- package/dist/output/build-authorize-data.d.ts +0 -1
- package/dist/output/build-authorize-data.d.ts.map +1 -1
- package/dist/output/build-authorize-data.js +0 -1
- package/dist/output/build-authorize-data.js.map +1 -1
- package/dist/output/build-customization-data.d.ts +232 -0
- package/dist/output/build-customization-data.d.ts.map +1 -0
- package/dist/output/build-customization-data.js +145 -0
- package/dist/output/build-customization-data.js.map +1 -0
- package/dist/output/output-manager.d.ts +16 -9
- package/dist/output/output-manager.d.ts.map +1 -1
- package/dist/output/output-manager.js +78 -42
- package/dist/output/output-manager.js.map +1 -1
- package/dist/output/send-authorize-redirect.d.ts +9 -6
- package/dist/output/send-authorize-redirect.d.ts.map +1 -1
- package/dist/output/send-authorize-redirect.js +20 -14
- package/dist/output/send-authorize-redirect.js.map +1 -1
- package/dist/output/send-web-page.d.ts +7 -2
- package/dist/output/send-web-page.d.ts.map +1 -1
- package/dist/output/send-web-page.js +37 -21
- package/dist/output/send-web-page.js.map +1 -1
- package/dist/request/request-manager.d.ts +1 -1
- package/dist/request/request-manager.d.ts.map +1 -1
- package/dist/request/request-manager.js +4 -4
- package/dist/request/request-manager.js.map +1 -1
- package/dist/request/request-store.d.ts +3 -3
- package/dist/request/request-store.d.ts.map +1 -1
- package/dist/request/request-store.js +11 -10
- package/dist/request/request-store.js.map +1 -1
- package/dist/token/token-store.d.ts +4 -4
- package/dist/token/token-store.d.ts.map +1 -1
- package/dist/token/token-store.js +13 -12
- package/dist/token/token-store.js.map +1 -1
- package/package.json +46 -21
- package/rollup.config.js +61 -17
- package/src/account/account-manager.ts +159 -8
- package/src/account/account-store.ts +127 -32
- package/src/account/sign-in-data.ts +15 -0
- package/src/account/sign-up-data.ts +11 -0
- package/src/assets/app/app.tsx +31 -16
- package/src/assets/app/backend-data.ts +15 -60
- package/src/assets/app/backend-types.ts +66 -0
- package/src/assets/app/components/forms/button-toggle-visibility.tsx +43 -0
- package/src/assets/app/components/forms/button.tsx +60 -0
- package/src/assets/app/components/forms/fieldset.tsx +55 -0
- package/src/assets/app/components/forms/form-card-async.tsx +103 -0
- package/src/assets/app/components/forms/form-card.tsx +49 -0
- package/src/assets/app/components/forms/input-checkbox.tsx +73 -0
- package/src/assets/app/components/forms/input-container.tsx +107 -0
- package/src/assets/app/components/forms/input-email-address.tsx +66 -0
- package/src/assets/app/components/forms/input-new-password.tsx +62 -0
- package/src/assets/app/components/forms/input-password.tsx +88 -0
- package/src/assets/app/components/forms/input-text.tsx +76 -0
- package/src/assets/app/components/forms/input-token.tsx +94 -0
- package/src/assets/app/components/forms/wizard-card.tsx +116 -0
- package/src/assets/app/components/layouts/layout-title-page.tsx +77 -0
- package/src/assets/app/components/layouts/layout-welcome.tsx +73 -0
- package/src/assets/app/components/utils/account-identifier.tsx +23 -0
- package/src/assets/app/components/utils/account-image.tsx +33 -0
- package/src/assets/app/components/utils/admonition.tsx +52 -0
- package/src/assets/app/components/utils/client-name.tsx +45 -0
- package/src/assets/app/components/utils/error-card.tsx +93 -0
- package/src/assets/app/components/utils/error-message.tsx +62 -0
- package/src/assets/app/components/utils/help-card.tsx +46 -0
- package/src/assets/app/components/utils/icons.tsx +88 -0
- package/src/assets/app/components/utils/link-anchor.tsx +28 -0
- package/src/assets/app/components/utils/link-title.tsx +26 -0
- package/src/assets/app/components/utils/multi-lang-string.tsx +56 -0
- package/src/assets/app/components/utils/password-strength-label.tsx +37 -0
- package/src/assets/app/components/utils/password-strength-meter.tsx +58 -0
- package/src/assets/app/components/{url-viewer.tsx → utils/url-viewer.tsx} +9 -6
- package/src/assets/app/hooks/use-api.ts +128 -55
- package/src/assets/app/hooks/use-async-action.ts +120 -0
- package/src/assets/app/hooks/use-browser-color-scheme.ts +31 -0
- package/src/assets/app/hooks/use-csrf-token.ts +1 -1
- package/src/assets/app/hooks/use-random-string.ts +37 -0
- package/src/assets/app/hooks/use-stepper.ts +87 -0
- package/src/assets/app/index.html +182 -0
- package/src/assets/app/lib/api.ts +248 -79
- package/src/assets/app/lib/clsx.ts +5 -8
- package/src/assets/app/lib/json-client.ts +94 -0
- package/src/assets/app/lib/password.ts +98 -0
- package/src/assets/app/lib/ref.ts +17 -0
- package/src/assets/app/locales/an/messages.po +492 -0
- package/src/assets/app/locales/ast/messages.po +492 -0
- package/src/assets/app/locales/ca/messages.po +492 -0
- package/src/assets/app/locales/da/messages.po +492 -0
- package/src/assets/app/locales/de/messages.po +492 -0
- package/src/assets/app/locales/el/messages.po +492 -0
- package/src/assets/app/locales/en/messages.po +492 -0
- package/src/assets/app/locales/en-GB/messages.po +492 -0
- package/src/assets/app/locales/es/messages.po +492 -0
- package/src/assets/app/locales/eu/messages.po +492 -0
- package/src/assets/app/locales/fi/messages.po +492 -0
- package/src/assets/app/locales/fr/messages.po +492 -0
- package/src/assets/app/locales/ga/messages.po +492 -0
- package/src/assets/app/locales/gl/messages.po +492 -0
- package/src/assets/app/locales/hi/messages.po +492 -0
- package/src/assets/app/locales/hu/messages.po +492 -0
- package/src/assets/app/locales/ia/messages.po +492 -0
- package/src/assets/app/locales/id/messages.po +492 -0
- package/src/assets/app/locales/it/messages.po +492 -0
- package/src/assets/app/locales/ja/messages.po +492 -0
- package/src/assets/app/locales/km/messages.po +492 -0
- package/src/assets/app/locales/ko/messages.po +492 -0
- package/src/assets/app/locales/load.ts +8 -0
- package/src/assets/app/locales/locale-context.ts +19 -0
- package/src/assets/app/locales/locale-provider.tsx +112 -0
- package/src/assets/app/locales/locale-selector.tsx +58 -0
- package/src/assets/app/locales/locales.ts +168 -0
- package/src/assets/app/locales/ne/messages.po +492 -0
- package/src/assets/app/locales/nl/messages.po +492 -0
- package/src/assets/app/locales/pl/messages.po +492 -0
- package/src/assets/app/locales/pt-BR/messages.po +492 -0
- package/src/assets/app/locales/ro/messages.po +492 -0
- package/src/assets/app/locales/ru/messages.po +492 -0
- package/src/assets/app/locales/sv/messages.po +492 -0
- package/src/assets/app/locales/th/messages.po +492 -0
- package/src/assets/app/locales/tr/messages.po +492 -0
- package/src/assets/app/locales/uk/messages.po +492 -0
- package/src/assets/app/locales/vi/messages.po +492 -0
- package/src/assets/app/locales/zh-CN/messages.po +492 -0
- package/src/assets/app/locales/zh-HK/messages.po +492 -0
- package/src/assets/app/locales/zh-TW/messages.po +492 -0
- package/src/assets/app/main.css +23 -2
- package/src/assets/app/main.tsx +24 -8
- package/src/assets/app/views/authorize/accept/accept-form.tsx +150 -0
- package/src/assets/app/views/authorize/accept/accept-view.tsx +70 -0
- package/src/assets/app/views/authorize/authorize-view.tsx +180 -0
- package/src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx +88 -0
- package/src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx +80 -0
- package/src/assets/app/views/authorize/reset-password/reset-password-view.tsx +127 -0
- package/src/assets/app/views/authorize/sign-in/sign-in-form.tsx +244 -0
- package/src/assets/app/views/authorize/sign-in/sign-in-picker.tsx +116 -0
- package/src/assets/app/views/authorize/sign-in/sign-in-view.tsx +145 -0
- package/src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx +140 -0
- package/src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx +51 -0
- package/src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx +289 -0
- package/src/assets/app/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +108 -0
- package/src/assets/app/views/authorize/sign-up/sign-up-view.tsx +158 -0
- package/src/assets/app/views/authorize/welcome/welcome-view.tsx +56 -0
- package/src/assets/app/views/error/error-view.tsx +31 -0
- package/src/assets/asset.ts +1 -0
- package/src/assets/assets-middleware.ts +13 -8
- package/src/assets/index.ts +15 -2
- package/src/client/client-store.ts +10 -12
- package/src/device/device-manager.ts +14 -15
- package/src/device/device-store.ts +9 -15
- package/src/dpop/dpop-manager.ts +20 -8
- package/src/dpop/dpop-nonce.ts +58 -40
- package/src/errors/handle-unavailable-error.ts +18 -0
- package/src/errors/invalid-request-error.ts +10 -8
- package/src/lib/csp/index.ts +98 -0
- package/src/lib/hcaptcha.ts +182 -0
- package/src/lib/html/build-document.ts +60 -16
- package/src/lib/http/middleware.ts +4 -3
- package/src/lib/http/request.ts +81 -28
- package/src/lib/http/response.ts +22 -9
- package/src/lib/locale.ts +21 -0
- package/src/lib/util/function.ts +0 -3
- package/src/lib/util/type.ts +130 -1
- package/src/metadata/build-metadata.ts +2 -1
- package/src/oauth-errors.ts +1 -0
- package/src/oauth-hooks.ts +69 -3
- package/src/oauth-provider.ts +410 -315
- package/src/oauth-verifier.ts +3 -1
- package/src/output/build-authorize-data.ts +1 -3
- package/src/output/build-customization-data.ts +189 -0
- package/src/output/output-manager.ts +111 -48
- package/src/output/send-authorize-redirect.ts +43 -36
- package/src/output/send-web-page.ts +40 -26
- package/src/request/request-manager.ts +4 -4
- package/src/request/request-store.ts +12 -16
- package/src/token/token-store.ts +14 -18
- package/tailwind.config.js +5 -0
- package/tsconfig.backend.tsbuildinfo +1 -1
- package/tsconfig.frontend.tsbuildinfo +1 -1
- package/tsconfig.tools.tsbuildinfo +1 -1
- package/vite.config.mjs +16 -0
- package/.postcssrc.yml +0 -3
- package/dist/assets/app/main.css +0 -3
- package/dist/assets/app/main.js +0 -20
- package/dist/assets/app/main.js.map +0 -1
- package/dist/output/customization.d.ts +0 -27
- package/dist/output/customization.d.ts.map +0 -1
- package/dist/output/customization.js +0 -88
- package/dist/output/customization.js.map +0 -1
- package/src/assets/app/components/accept-form.tsx +0 -137
- package/src/assets/app/components/account-identifier.tsx +0 -18
- package/src/assets/app/components/account-picker.tsx +0 -127
- package/src/assets/app/components/button.tsx +0 -34
- package/src/assets/app/components/client-name.tsx +0 -37
- package/src/assets/app/components/fieldset.tsx +0 -26
- package/src/assets/app/components/form-card.tsx +0 -47
- package/src/assets/app/components/help-card.tsx +0 -42
- package/src/assets/app/components/icons/alert-icon.tsx +0 -5
- package/src/assets/app/components/icons/at-symbol-icon.tsx +0 -5
- package/src/assets/app/components/icons/caret-right-icon.tsx +0 -5
- package/src/assets/app/components/icons/lock-icon.tsx +0 -5
- package/src/assets/app/components/icons/token-icon.tsx +0 -5
- package/src/assets/app/components/icons/util.tsx +0 -17
- package/src/assets/app/components/info-card.tsx +0 -45
- package/src/assets/app/components/input-checkbox.tsx +0 -47
- package/src/assets/app/components/input-container.tsx +0 -37
- package/src/assets/app/components/input-layout.tsx +0 -47
- package/src/assets/app/components/input-text.tsx +0 -69
- package/src/assets/app/components/layout-title-page.tsx +0 -60
- package/src/assets/app/components/layout-welcome.tsx +0 -74
- package/src/assets/app/components/sign-in-form.tsx +0 -337
- package/src/assets/app/components/sign-up-account-form.tsx +0 -194
- package/src/assets/app/components/sign-up-disclaimer.tsx +0 -44
- package/src/assets/app/views/accept-view.tsx +0 -55
- package/src/assets/app/views/authorize-view.tsx +0 -106
- package/src/assets/app/views/error-view.tsx +0 -36
- package/src/assets/app/views/sign-in-view.tsx +0 -111
- package/src/assets/app/views/sign-up-view.tsx +0 -86
- package/src/assets/app/views/welcome-view.tsx +0 -54
- package/src/output/customization.ts +0 -118
@@ -4,23 +4,20 @@ exports.InvalidRequestError = void 0;
|
|
4
4
|
const oauth_error_js_1 = require("./oauth-error.js");
|
5
5
|
/**
|
6
6
|
* @see
|
7
|
-
* {@link https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 | RFC6749 - Issuing an Access Token
|
8
|
-
*
|
9
|
-
* The request is missing a required parameter, includes an unsupported
|
7
|
+
* {@link https://datatracker.ietf.org/doc/html/rfc6749#section-5.2 | RFC6749 - Issuing an Access Token}
|
8
|
+
* : The request is missing a required parameter, includes an unsupported
|
10
9
|
* parameter value (other than grant type), repeats a parameter, includes
|
11
10
|
* multiple credentials, utilizes more than one mechanism for authenticating the
|
12
11
|
* client, or is otherwise malformed.
|
13
12
|
*
|
14
13
|
* @see
|
15
14
|
* {@link https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.2.1 | RFC6749 - Authorization Code Grant, Authorization Request}
|
16
|
-
*
|
17
|
-
* The request is missing a required parameter, includes an invalid parameter
|
15
|
+
* : The request is missing a required parameter, includes an invalid parameter
|
18
16
|
* value, includes a parameter more than once, or is otherwise malformed.
|
19
17
|
*
|
20
18
|
* @see
|
21
|
-
* {@link https://datatracker.ietf.org/doc/html/rfc6750#section-3.1 | RFC6750 - The WWW-Authenticate Response Header Field
|
22
|
-
*
|
23
|
-
* The request is missing a required parameter, includes an unsupported
|
19
|
+
* {@link https://datatracker.ietf.org/doc/html/rfc6750#section-3.1 | RFC6750 - The WWW-Authenticate Response Header Field}
|
20
|
+
* : The request is missing a required parameter, includes an unsupported
|
24
21
|
* parameter or parameter value, repeats the same parameter, uses more than one
|
25
22
|
* method for including an access token, or is otherwise malformed. The resource
|
26
23
|
* server SHOULD respond with the HTTP 400 (Bad Request) status code.
|
@@ -29,6 +26,11 @@ class InvalidRequestError extends oauth_error_js_1.OAuthError {
|
|
29
26
|
constructor(error_description, cause) {
|
30
27
|
super('invalid_request', error_description, 400, cause);
|
31
28
|
}
|
29
|
+
static from(err, message = 'Invalid request data') {
|
30
|
+
if (err instanceof oauth_error_js_1.OAuthError)
|
31
|
+
return err;
|
32
|
+
return new InvalidRequestError(message, err);
|
33
|
+
}
|
32
34
|
}
|
33
35
|
exports.InvalidRequestError = InvalidRequestError;
|
34
36
|
//# sourceMappingURL=invalid-request-error.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"invalid-request-error.js","sourceRoot":"","sources":["../../src/errors/invalid-request-error.ts"],"names":[],"mappings":";;;AAAA,qDAA6C;AAE7C
|
1
|
+
{"version":3,"file":"invalid-request-error.js","sourceRoot":"","sources":["../../src/errors/invalid-request-error.ts"],"names":[],"mappings":";;;AAAA,qDAA6C;AAE7C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,mBAAoB,SAAQ,2BAAU;IACjD,YAAY,iBAAyB,EAAE,KAAe;QACpD,KAAK,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;IACzD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAY,EAAE,OAAO,GAAG,sBAAsB;QACxD,IAAI,GAAG,YAAY,2BAAU;YAAE,OAAO,GAAG,CAAA;QACzC,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC9C,CAAC;CACF;AATD,kDASC"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import { Simplify } from '../util/type.js';
|
2
|
+
export type CspValue = `data:` | `https:${string}` | `'none'` | `'self'` | `'sha256-${string}'` | `'nonce-${string}'` | `'unsafe-inline'` | `'unsafe-eval'` | `'strict-dynamic'` | `'report-sample'` | `'unsafe-hashes'`;
|
3
|
+
declare const STRING_DIRECTIVES: readonly ["base-uri"];
|
4
|
+
declare const BOOLEAN_DIRECTIVES: readonly ["upgrade-insecure-requests", "block-all-mixed-content"];
|
5
|
+
declare const ARRAY_DIRECTIVES: readonly ["connect-src", "default-src", "form-action", "frame-ancestors", "frame-src", "img-src", "script-src", "style-src"];
|
6
|
+
export type CspConfig = Simplify<{
|
7
|
+
[K in (typeof BOOLEAN_DIRECTIVES)[number]]?: boolean;
|
8
|
+
} & {
|
9
|
+
[K in (typeof STRING_DIRECTIVES)[number]]?: CspValue;
|
10
|
+
} & {
|
11
|
+
[K in (typeof ARRAY_DIRECTIVES)[number]]?: readonly CspValue[];
|
12
|
+
}>;
|
13
|
+
export declare function buildCsp(config: CspConfig): string;
|
14
|
+
export declare function mergeCsp(a: CspConfig, b?: CspConfig): CspConfig;
|
15
|
+
export declare function mergeCsp(a: CspConfig | undefined, b: CspConfig): CspConfig;
|
16
|
+
export declare function mergeCsp(a?: CspConfig, b?: CspConfig): CspConfig | undefined;
|
17
|
+
export {};
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/csp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAE1C,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,SAAS,MAAM,EAAE,GACjB,QAAQ,GACR,QAAQ,GACR,WAAW,MAAM,GAAG,GACpB,UAAU,MAAM,GAAG,GACnB,iBAAiB,GACjB,eAAe,GACf,kBAAkB,GAClB,iBAAiB,GACjB,iBAAiB,CAAA;AAErB,QAAA,MAAM,iBAAiB,uBAAwB,CAAA;AAC/C,QAAA,MAAM,kBAAkB,mEAGd,CAAA;AACV,QAAA,MAAM,gBAAgB,8HASZ,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,QAAQ,CAC9B;KACG,CAAC,IAAI,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO;CACrD,GAAG;KACD,CAAC,IAAI,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ;CACrD,GAAG;KACD,CAAC,IAAI,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE;CAC/D,CACF,CAAA;AAID,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAgBlD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;AAChE,wBAAgB,QAAQ,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAAA;AAC3E,wBAAgB,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA"}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.buildCsp = buildCsp;
|
4
|
+
exports.mergeCsp = mergeCsp;
|
5
|
+
const STRING_DIRECTIVES = ['base-uri'];
|
6
|
+
const BOOLEAN_DIRECTIVES = [
|
7
|
+
'upgrade-insecure-requests',
|
8
|
+
'block-all-mixed-content',
|
9
|
+
];
|
10
|
+
const ARRAY_DIRECTIVES = [
|
11
|
+
'connect-src',
|
12
|
+
'default-src',
|
13
|
+
'form-action',
|
14
|
+
'frame-ancestors',
|
15
|
+
'frame-src',
|
16
|
+
'img-src',
|
17
|
+
'script-src',
|
18
|
+
'style-src',
|
19
|
+
];
|
20
|
+
const NONE = "'none'";
|
21
|
+
function buildCsp(config) {
|
22
|
+
const values = [];
|
23
|
+
for (const name of BOOLEAN_DIRECTIVES) {
|
24
|
+
if (config[name] === true)
|
25
|
+
values.push(name);
|
26
|
+
}
|
27
|
+
for (const name of STRING_DIRECTIVES) {
|
28
|
+
if (config[name])
|
29
|
+
values.push(`${name} ${config[name]}`);
|
30
|
+
}
|
31
|
+
for (const name of ARRAY_DIRECTIVES) {
|
32
|
+
if (config[name]?.length)
|
33
|
+
values.push(`${name} ${config[name].join(' ')}`);
|
34
|
+
}
|
35
|
+
return values.join('; ');
|
36
|
+
}
|
37
|
+
function mergeCsp(a, b) {
|
38
|
+
if (!a)
|
39
|
+
return b;
|
40
|
+
if (!b)
|
41
|
+
return a;
|
42
|
+
const result = {};
|
43
|
+
for (const name of BOOLEAN_DIRECTIVES) {
|
44
|
+
if (a[name] || b[name]) {
|
45
|
+
result[name] = true;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
for (const name of STRING_DIRECTIVES) {
|
49
|
+
if (a[name] || b[name]) {
|
50
|
+
const aNotNone = a[name] === NONE ? undefined : a[name];
|
51
|
+
const bNotNone = b[name] === NONE ? undefined : b[name];
|
52
|
+
// @NOTE b takes precedence
|
53
|
+
result[name] = bNotNone || aNotNone || NONE;
|
54
|
+
}
|
55
|
+
}
|
56
|
+
for (const name of ARRAY_DIRECTIVES) {
|
57
|
+
if (a[name] && b[name]) {
|
58
|
+
const set = new Set(a[name]);
|
59
|
+
if (b[name])
|
60
|
+
for (const value of b[name])
|
61
|
+
set.add(value);
|
62
|
+
if (set.size > 1 && set.has(NONE))
|
63
|
+
set.delete(NONE);
|
64
|
+
result[name] = [...set];
|
65
|
+
}
|
66
|
+
else if (a[name] || b[name]) {
|
67
|
+
result[name] = Array.from((a[name] || b[name]));
|
68
|
+
}
|
69
|
+
}
|
70
|
+
return result;
|
71
|
+
}
|
72
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/csp/index.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,177 @@
|
|
1
|
+
import { z } from 'zod';
|
2
|
+
import { Fetch, FetchBound } from '@atproto-labs/fetch';
|
3
|
+
export declare const hcaptchaTokenSchema: z.ZodString;
|
4
|
+
export type HcaptchaToken = z.infer<typeof hcaptchaTokenSchema>;
|
5
|
+
export declare const hcaptchaConfigSchema: z.ZodObject<{
|
6
|
+
/**
|
7
|
+
* The hCaptcha site key to use for the sign-up form.
|
8
|
+
*/
|
9
|
+
siteKey: z.ZodString;
|
10
|
+
/**
|
11
|
+
* The hCaptcha secret key to use for the sign-up form.
|
12
|
+
*/
|
13
|
+
secretKey: z.ZodString;
|
14
|
+
/**
|
15
|
+
* A salt to use when hashing client tokens.
|
16
|
+
*/
|
17
|
+
tokenSalt: z.ZodString;
|
18
|
+
/**
|
19
|
+
* The risk score over which the user is considered a threat and will be
|
20
|
+
* denied access. This will be ignored if the enterprise features are not
|
21
|
+
* available.
|
22
|
+
*/
|
23
|
+
scoreThreshold: z.ZodOptional<z.ZodNumber>;
|
24
|
+
}, "strip", z.ZodTypeAny, {
|
25
|
+
siteKey: string;
|
26
|
+
secretKey: string;
|
27
|
+
tokenSalt: string;
|
28
|
+
scoreThreshold?: number | undefined;
|
29
|
+
}, {
|
30
|
+
siteKey: string;
|
31
|
+
secretKey: string;
|
32
|
+
tokenSalt: string;
|
33
|
+
scoreThreshold?: number | undefined;
|
34
|
+
}>;
|
35
|
+
export type HcaptchaConfig = z.infer<typeof hcaptchaConfigSchema>;
|
36
|
+
/**
|
37
|
+
* @see {@link https://docs.hcaptcha.com/#verify-the-user-response-server-side hCaptcha API}
|
38
|
+
*/
|
39
|
+
export declare const hcaptchaVerifyResultSchema: z.ZodObject<{
|
40
|
+
/**
|
41
|
+
* is the passcode valid, and does it meet security criteria you specified, e.g. sitekey?
|
42
|
+
*/
|
43
|
+
success: z.ZodBoolean;
|
44
|
+
/**
|
45
|
+
* timestamp of the challenge (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
|
46
|
+
*/
|
47
|
+
challenge_ts: z.ZodString;
|
48
|
+
/**
|
49
|
+
* the hostname of the site where the challenge was passed
|
50
|
+
*/
|
51
|
+
hostname: z.ZodString;
|
52
|
+
/**
|
53
|
+
* optional: any error codes
|
54
|
+
*/
|
55
|
+
'error-codes': z.ZodArray<z.ZodString, "many">;
|
56
|
+
/**
|
57
|
+
* ENTERPRISE feature: a score denoting malicious activity. Value ranges from
|
58
|
+
* 0.0 (no risk) to 1.0 (confirmed threat).
|
59
|
+
*/
|
60
|
+
score: z.ZodOptional<z.ZodNumber>;
|
61
|
+
/**
|
62
|
+
* ENTERPRISE feature: reason(s) for score.
|
63
|
+
*/
|
64
|
+
score_reason: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
65
|
+
/**
|
66
|
+
* sitekey of the request
|
67
|
+
*/
|
68
|
+
sitekey: z.ZodOptional<z.ZodString>;
|
69
|
+
/**
|
70
|
+
* obj of form: {'ip_device': 1, .. etc}
|
71
|
+
*/
|
72
|
+
behavior_counts: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
73
|
+
/**
|
74
|
+
* how similar is this? (0.0 - 1.0, -1 on err)
|
75
|
+
*/
|
76
|
+
similarity: z.ZodOptional<z.ZodNumber>;
|
77
|
+
/**
|
78
|
+
* count of similar_tokens not processed
|
79
|
+
*/
|
80
|
+
similarity_failures: z.ZodOptional<z.ZodNumber>;
|
81
|
+
/**
|
82
|
+
* array of strings for any similarity errors
|
83
|
+
*/
|
84
|
+
similarity_error_details: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
85
|
+
/**
|
86
|
+
* encoded clientID
|
87
|
+
*/
|
88
|
+
scoped_uid_0: z.ZodOptional<z.ZodString>;
|
89
|
+
/**
|
90
|
+
* encoded IP
|
91
|
+
*/
|
92
|
+
scoped_uid_1: z.ZodOptional<z.ZodString>;
|
93
|
+
/**
|
94
|
+
* encoded IP (APT)
|
95
|
+
*/
|
96
|
+
scoped_uid_2: z.ZodOptional<z.ZodString>;
|
97
|
+
/**
|
98
|
+
* Risk Insights (APT + RI)
|
99
|
+
*/
|
100
|
+
risk_insights: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
101
|
+
/**
|
102
|
+
* Advanced Threat Signatures (APT)
|
103
|
+
*/
|
104
|
+
sigs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
105
|
+
/**
|
106
|
+
* tags added via Rules
|
107
|
+
*/
|
108
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
109
|
+
}, "strip", z.ZodTypeAny, {
|
110
|
+
hostname: string;
|
111
|
+
success: boolean;
|
112
|
+
challenge_ts: string;
|
113
|
+
'error-codes': string[];
|
114
|
+
score?: number | undefined;
|
115
|
+
score_reason?: string[] | undefined;
|
116
|
+
sitekey?: string | undefined;
|
117
|
+
behavior_counts?: Record<string, unknown> | undefined;
|
118
|
+
similarity?: number | undefined;
|
119
|
+
similarity_failures?: number | undefined;
|
120
|
+
similarity_error_details?: string[] | undefined;
|
121
|
+
scoped_uid_0?: string | undefined;
|
122
|
+
scoped_uid_1?: string | undefined;
|
123
|
+
scoped_uid_2?: string | undefined;
|
124
|
+
risk_insights?: Record<string, unknown> | undefined;
|
125
|
+
sigs?: Record<string, unknown> | undefined;
|
126
|
+
tags?: string[] | undefined;
|
127
|
+
}, {
|
128
|
+
hostname: string;
|
129
|
+
success: boolean;
|
130
|
+
challenge_ts: string;
|
131
|
+
'error-codes': string[];
|
132
|
+
score?: number | undefined;
|
133
|
+
score_reason?: string[] | undefined;
|
134
|
+
sitekey?: string | undefined;
|
135
|
+
behavior_counts?: Record<string, unknown> | undefined;
|
136
|
+
similarity?: number | undefined;
|
137
|
+
similarity_failures?: number | undefined;
|
138
|
+
similarity_error_details?: string[] | undefined;
|
139
|
+
scoped_uid_0?: string | undefined;
|
140
|
+
scoped_uid_1?: string | undefined;
|
141
|
+
scoped_uid_2?: string | undefined;
|
142
|
+
risk_insights?: Record<string, unknown> | undefined;
|
143
|
+
sigs?: Record<string, unknown> | undefined;
|
144
|
+
tags?: string[] | undefined;
|
145
|
+
}>;
|
146
|
+
export type HcaptchaVerifyResult = z.infer<typeof hcaptchaVerifyResultSchema>;
|
147
|
+
export declare class HCaptchaClient {
|
148
|
+
private readonly hostname;
|
149
|
+
private readonly config;
|
150
|
+
protected readonly fetch: FetchBound;
|
151
|
+
constructor(hostname: string, config: HcaptchaConfig, fetch?: Fetch);
|
152
|
+
verify(behaviorType: 'login' | 'signup', response: string, remoteip: string, handle: string, userAgent?: string): Promise<{
|
153
|
+
allowed: boolean;
|
154
|
+
result: {
|
155
|
+
hostname: string;
|
156
|
+
success: boolean;
|
157
|
+
challenge_ts: string;
|
158
|
+
'error-codes': string[];
|
159
|
+
score?: number | undefined;
|
160
|
+
score_reason?: string[] | undefined;
|
161
|
+
sitekey?: string | undefined;
|
162
|
+
behavior_counts?: Record<string, unknown> | undefined;
|
163
|
+
similarity?: number | undefined;
|
164
|
+
similarity_failures?: number | undefined;
|
165
|
+
similarity_error_details?: string[] | undefined;
|
166
|
+
scoped_uid_0?: string | undefined;
|
167
|
+
scoped_uid_1?: string | undefined;
|
168
|
+
scoped_uid_2?: string | undefined;
|
169
|
+
risk_insights?: Record<string, unknown> | undefined;
|
170
|
+
sigs?: Record<string, unknown> | undefined;
|
171
|
+
tags?: string[] | undefined;
|
172
|
+
};
|
173
|
+
}>;
|
174
|
+
isAllowed({ success, hostname, score }: HcaptchaVerifyResult): boolean;
|
175
|
+
hashToken(value: string): string;
|
176
|
+
}
|
177
|
+
//# sourceMappingURL=hcaptcha.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hcaptcha.d.ts","sourceRoot":"","sources":["../../src/lib/hcaptcha.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,KAAK,EACL,UAAU,EAKX,MAAM,qBAAqB,CAAA;AAG5B,eAAO,MAAM,mBAAmB,aAAoB,CAAA;AACpD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAE/D,eAAO,MAAM,oBAAoB;IAC/B;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;;OAIG;;;;;;;;;;;;EAEH,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,0BAA0B;IACrC;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEH,CAAA;AAEF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAQ7E,qBAAa,cAAc;IAGvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHzB,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAA;gBAEjB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACvC,KAAK,GAAE,KAAwB;IAK3B,MAAM,CACV,YAAY,EAAE,OAAO,GAAG,QAAQ,EAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;IA2BpB,SAAS,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,oBAAoB;IAa5D,SAAS,CAAC,KAAK,EAAE,MAAM;CAMxB"}
|
@@ -0,0 +1,155 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.HCaptchaClient = exports.hcaptchaVerifyResultSchema = exports.hcaptchaConfigSchema = exports.hcaptchaTokenSchema = void 0;
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
5
|
+
const zod_1 = require("zod");
|
6
|
+
const fetch_1 = require("@atproto-labs/fetch");
|
7
|
+
const pipe_1 = require("@atproto-labs/pipe");
|
8
|
+
exports.hcaptchaTokenSchema = zod_1.z.string().min(1);
|
9
|
+
exports.hcaptchaConfigSchema = zod_1.z.object({
|
10
|
+
/**
|
11
|
+
* The hCaptcha site key to use for the sign-up form.
|
12
|
+
*/
|
13
|
+
siteKey: zod_1.z.string().min(1),
|
14
|
+
/**
|
15
|
+
* The hCaptcha secret key to use for the sign-up form.
|
16
|
+
*/
|
17
|
+
secretKey: zod_1.z.string().min(1),
|
18
|
+
/**
|
19
|
+
* A salt to use when hashing client tokens.
|
20
|
+
*/
|
21
|
+
tokenSalt: zod_1.z.string().min(1),
|
22
|
+
/**
|
23
|
+
* The risk score over which the user is considered a threat and will be
|
24
|
+
* denied access. This will be ignored if the enterprise features are not
|
25
|
+
* available.
|
26
|
+
*/
|
27
|
+
scoreThreshold: zod_1.z.number().optional(),
|
28
|
+
});
|
29
|
+
/**
|
30
|
+
* @see {@link https://docs.hcaptcha.com/#verify-the-user-response-server-side hCaptcha API}
|
31
|
+
*/
|
32
|
+
exports.hcaptchaVerifyResultSchema = zod_1.z.object({
|
33
|
+
/**
|
34
|
+
* is the passcode valid, and does it meet security criteria you specified, e.g. sitekey?
|
35
|
+
*/
|
36
|
+
success: zod_1.z.boolean(),
|
37
|
+
/**
|
38
|
+
* timestamp of the challenge (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
|
39
|
+
*/
|
40
|
+
challenge_ts: zod_1.z.string(),
|
41
|
+
/**
|
42
|
+
* the hostname of the site where the challenge was passed
|
43
|
+
*/
|
44
|
+
hostname: zod_1.z.string(),
|
45
|
+
/**
|
46
|
+
* optional: any error codes
|
47
|
+
*/
|
48
|
+
'error-codes': zod_1.z.array(zod_1.z.string()),
|
49
|
+
/**
|
50
|
+
* ENTERPRISE feature: a score denoting malicious activity. Value ranges from
|
51
|
+
* 0.0 (no risk) to 1.0 (confirmed threat).
|
52
|
+
*/
|
53
|
+
score: zod_1.z.number().optional(),
|
54
|
+
/**
|
55
|
+
* ENTERPRISE feature: reason(s) for score.
|
56
|
+
*/
|
57
|
+
score_reason: zod_1.z.array(zod_1.z.string()).optional(),
|
58
|
+
/**
|
59
|
+
* sitekey of the request
|
60
|
+
*/
|
61
|
+
sitekey: zod_1.z.string().optional(),
|
62
|
+
/**
|
63
|
+
* obj of form: {'ip_device': 1, .. etc}
|
64
|
+
*/
|
65
|
+
behavior_counts: zod_1.z.record(zod_1.z.unknown()).optional(),
|
66
|
+
/**
|
67
|
+
* how similar is this? (0.0 - 1.0, -1 on err)
|
68
|
+
*/
|
69
|
+
similarity: zod_1.z.number().optional(),
|
70
|
+
/**
|
71
|
+
* count of similar_tokens not processed
|
72
|
+
*/
|
73
|
+
similarity_failures: zod_1.z.number().optional(),
|
74
|
+
/**
|
75
|
+
* array of strings for any similarity errors
|
76
|
+
*/
|
77
|
+
similarity_error_details: zod_1.z.array(zod_1.z.string()).optional(),
|
78
|
+
/**
|
79
|
+
* encoded clientID
|
80
|
+
*/
|
81
|
+
scoped_uid_0: zod_1.z.string().optional(),
|
82
|
+
/**
|
83
|
+
* encoded IP
|
84
|
+
*/
|
85
|
+
scoped_uid_1: zod_1.z.string().optional(),
|
86
|
+
/**
|
87
|
+
* encoded IP (APT)
|
88
|
+
*/
|
89
|
+
scoped_uid_2: zod_1.z.string().optional(),
|
90
|
+
/**
|
91
|
+
* Risk Insights (APT + RI)
|
92
|
+
*/
|
93
|
+
risk_insights: zod_1.z.record(zod_1.z.unknown()).optional(),
|
94
|
+
/**
|
95
|
+
* Advanced Threat Signatures (APT)
|
96
|
+
*/
|
97
|
+
sigs: zod_1.z.record(zod_1.z.unknown()).optional(),
|
98
|
+
/**
|
99
|
+
* tags added via Rules
|
100
|
+
*/
|
101
|
+
tags: zod_1.z.array(zod_1.z.string()).optional(),
|
102
|
+
});
|
103
|
+
const fetchSuccessHandler = (0, pipe_1.pipe)((0, fetch_1.fetchOkProcessor)(), (0, fetch_1.fetchJsonProcessor)(), (0, fetch_1.fetchJsonZodProcessor)(exports.hcaptchaVerifyResultSchema));
|
104
|
+
class HCaptchaClient {
|
105
|
+
hostname;
|
106
|
+
config;
|
107
|
+
fetch;
|
108
|
+
constructor(hostname, config, fetch = globalThis.fetch) {
|
109
|
+
this.hostname = hostname;
|
110
|
+
this.config = config;
|
111
|
+
this.fetch = (0, fetch_1.bindFetch)(fetch);
|
112
|
+
}
|
113
|
+
async verify(behaviorType, response, remoteip, handle, userAgent) {
|
114
|
+
const result = await this.fetch('https://api.hcaptcha.com/siteverify', {
|
115
|
+
method: 'POST',
|
116
|
+
headers: {
|
117
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
118
|
+
},
|
119
|
+
body: new URLSearchParams({
|
120
|
+
secret: this.config.secretKey,
|
121
|
+
sitekey: this.config.siteKey,
|
122
|
+
behavior_type: behaviorType,
|
123
|
+
response,
|
124
|
+
remoteip,
|
125
|
+
client_tokens: JSON.stringify({
|
126
|
+
hashedIp: this.hashToken(remoteip),
|
127
|
+
hashedHandle: this.hashToken(handle),
|
128
|
+
hashedUserAgent: userAgent ? this.hashToken(userAgent) : undefined,
|
129
|
+
}),
|
130
|
+
}).toString(),
|
131
|
+
}).then(fetchSuccessHandler);
|
132
|
+
return {
|
133
|
+
allowed: this.isAllowed(result),
|
134
|
+
result,
|
135
|
+
};
|
136
|
+
}
|
137
|
+
isAllowed({ success, hostname, score }) {
|
138
|
+
return (success &&
|
139
|
+
// Fool-proofing: If this is false, the user is trying to use a token
|
140
|
+
// generated for the same siteKey, but on another domain.
|
141
|
+
hostname === this.hostname &&
|
142
|
+
// Ignore if enterprise feature is not enabled
|
143
|
+
score != null &&
|
144
|
+
this.config.scoreThreshold != null &&
|
145
|
+
score < this.config.scoreThreshold);
|
146
|
+
}
|
147
|
+
hashToken(value) {
|
148
|
+
const hash = (0, node_crypto_1.createHash)('sha256');
|
149
|
+
hash.update(this.config.tokenSalt);
|
150
|
+
hash.update(value);
|
151
|
+
return hash.digest().toString('base64');
|
152
|
+
}
|
153
|
+
}
|
154
|
+
exports.HCaptchaClient = HCaptchaClient;
|
155
|
+
//# sourceMappingURL=hcaptcha.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hcaptcha.js","sourceRoot":"","sources":["../../src/lib/hcaptcha.ts"],"names":[],"mappings":"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"}
|
@@ -5,9 +5,16 @@ export type AssetRef = {
|
|
5
5
|
sha256: string;
|
6
6
|
};
|
7
7
|
export type Attrs = Record<string, boolean | string | undefined>;
|
8
|
-
|
8
|
+
/**
|
9
|
+
* @see {@link https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/rel}
|
10
|
+
*/
|
11
|
+
declare const ALLOWED_LINK_REL_VALUES: readonly ["alternate", "author", "canonical", "dns-prefetch", "external", "expect", "help", "icon", "license", "manifest", "me", "modulepreload", "next", "pingback", "preconnect", "prefetch", "preload", "prerender", "prev", "privacy-policy", "search", "stylesheet", "terms-of-service"];
|
12
|
+
export type LinkRel = (typeof ALLOWED_LINK_REL_VALUES)[number];
|
13
|
+
export declare const isLinkRel: (rel: unknown) => rel is LinkRel;
|
14
|
+
export type LinkAttrs = Attrs & {
|
9
15
|
href: string;
|
10
|
-
|
16
|
+
rel: LinkRel;
|
17
|
+
};
|
11
18
|
export type MetaAttrs = {
|
12
19
|
name: string;
|
13
20
|
content: string;
|
@@ -24,8 +31,9 @@ export type BuildDocumentOptions = {
|
|
24
31
|
title?: HtmlValue;
|
25
32
|
scripts?: readonly (Html | AssetRef)[];
|
26
33
|
styles?: readonly (Html | AssetRef)[];
|
27
|
-
body
|
34
|
+
body?: HtmlValue;
|
28
35
|
bodyAttrs?: Attrs;
|
29
36
|
};
|
30
37
|
export declare const buildDocument: ({ htmlAttrs, head, title, body, bodyAttrs, base, meta, links, scripts, styles, }: BuildDocumentOptions) => Html;
|
38
|
+
export {};
|
31
39
|
//# sourceMappingURL=build-document.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"build-document.d.ts","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"build-document.d.ts","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhC,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC,CAAA;AAEhE;;GAEG;AACH,QAAA,MAAM,uBAAuB,+RAwBlB,CAAA;AACX,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,CAAA;AAC9D,eAAO,MAAM,SAAS,QAAS,OAAO,KAAG,GAAG,IAAI,OACe,CAAA;AAE/D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,OAAO,CAAA;CACb,CAAA;AACD,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAO7C,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,KAAK,CAAA;IACjB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC5B,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,OAAO,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACtC,MAAM,CAAC,EAAE,SAAS,CAAC,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAA;IACrC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,SAAS,CAAC,EAAE,KAAK,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,aAAa,qFAWvB,oBAAoB,SAef,CAAA"}
|
@@ -1,8 +1,38 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.buildDocument = void 0;
|
3
|
+
exports.buildDocument = exports.isLinkRel = void 0;
|
4
4
|
const html_js_1 = require("./html.js");
|
5
5
|
const tags_js_1 = require("./tags.js");
|
6
|
+
/**
|
7
|
+
* @see {@link https://developer.mozilla.org/fr/docs/Web/HTML/Attributes/rel}
|
8
|
+
*/
|
9
|
+
const ALLOWED_LINK_REL_VALUES = Object.freeze([
|
10
|
+
'alternate',
|
11
|
+
'author',
|
12
|
+
'canonical',
|
13
|
+
'dns-prefetch',
|
14
|
+
'external',
|
15
|
+
'expect',
|
16
|
+
'help',
|
17
|
+
'icon',
|
18
|
+
'license',
|
19
|
+
'manifest',
|
20
|
+
'me',
|
21
|
+
'modulepreload',
|
22
|
+
'next',
|
23
|
+
'pingback',
|
24
|
+
'preconnect',
|
25
|
+
'prefetch',
|
26
|
+
'preload',
|
27
|
+
'prerender',
|
28
|
+
'prev',
|
29
|
+
'privacy-policy',
|
30
|
+
'search',
|
31
|
+
'stylesheet',
|
32
|
+
'terms-of-service',
|
33
|
+
]);
|
34
|
+
const isLinkRel = (rel) => ALLOWED_LINK_REL_VALUES.includes(rel);
|
35
|
+
exports.isLinkRel = isLinkRel;
|
6
36
|
const defaultViewport = (0, tags_js_1.html) `<meta
|
7
37
|
name="viewport"
|
8
38
|
content="width=device-width, initial-scale=1.0"
|
@@ -15,22 +45,23 @@ const buildDocument = ({ htmlAttrs, head, title, body, bodyAttrs, base, meta, li
|
|
15
45
|
${base && (0, tags_js_1.html) `<base href="${base.href}" />`}
|
16
46
|
${meta?.some(isViewportMeta) ? null : defaultViewport}
|
17
47
|
${meta?.map(metaToHtml)}
|
48
|
+
${styles?.map(linkPreload('style'))}
|
49
|
+
${scripts?.map(linkPreload('script'))}
|
18
50
|
${links?.map(linkToHtml)}
|
19
|
-
${head}
|
51
|
+
${head}
|
52
|
+
${styles?.map(styleToHtml)}
|
20
53
|
</head>
|
21
|
-
<body${attrsToHtml(bodyAttrs)}>
|
22
|
-
${body} ${scripts?.map(scriptToHtml)}
|
23
|
-
</body>
|
54
|
+
<body${attrsToHtml(bodyAttrs)}>${body}${scripts?.map(scriptToHtml)}</body>
|
24
55
|
</html>`;
|
25
56
|
exports.buildDocument = buildDocument;
|
26
57
|
function isViewportMeta(attrs) {
|
27
58
|
return 'name' in attrs && attrs.name === 'viewport';
|
28
59
|
}
|
29
|
-
function
|
30
|
-
|
60
|
+
function linkToHtml(attrs) {
|
61
|
+
return (0, tags_js_1.html) `<link${attrsToHtml(attrs)} />`;
|
31
62
|
}
|
32
|
-
function
|
33
|
-
|
63
|
+
function metaToHtml(attrs) {
|
64
|
+
return (0, tags_js_1.html) `<meta${attrsToHtml(attrs)} />`;
|
34
65
|
}
|
35
66
|
function* attrsToHtml(attrs) {
|
36
67
|
if (attrs) {
|
@@ -46,16 +77,21 @@ function* attrsToHtml(attrs) {
|
|
46
77
|
}
|
47
78
|
}
|
48
79
|
}
|
49
|
-
function
|
50
|
-
|
80
|
+
function linkPreload(as) {
|
81
|
+
return (style) => style instanceof html_js_1.Html
|
82
|
+
? undefined
|
83
|
+
: (0, tags_js_1.html) `<link rel="preload" href="${style.url}" as="${as}" />`;
|
84
|
+
}
|
85
|
+
function scriptToHtml(script) {
|
86
|
+
return script instanceof html_js_1.Html
|
51
87
|
? // prettier-ignore
|
52
88
|
(0, tags_js_1.html) `<script>${script}</script>` // hash validity requires no space around the content
|
53
|
-
: (0, tags_js_1.html) `<script type="module" src="${script.url}
|
89
|
+
: (0, tags_js_1.html) `<script type="module" src="${script.url}"></script>`;
|
54
90
|
}
|
55
|
-
function
|
56
|
-
|
91
|
+
function styleToHtml(style) {
|
92
|
+
return style instanceof html_js_1.Html
|
57
93
|
? // prettier-ignore
|
58
94
|
(0, tags_js_1.html) `<style>${style}</style>` // hash validity requires no space around the content
|
59
|
-
: (0, tags_js_1.html) `<link rel="stylesheet" href="${style.url}
|
95
|
+
: (0, tags_js_1.html) `<link rel="stylesheet" href="${style.url}" />`;
|
60
96
|
}
|
61
97
|
//# sourceMappingURL=build-document.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"build-document.js","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":";;;AACA,uCAAgC;AAChC,uCAAgC;
|
1
|
+
{"version":3,"file":"build-document.js","sourceRoot":"","sources":["../../../src/lib/html/build-document.ts"],"names":[],"mappings":";;;AACA,uCAAgC;AAChC,uCAAgC;AAShC;;GAEG;AACH,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,WAAW;IACX,QAAQ;IACR,WAAW;IACX,cAAc;IACd,UAAU;IACV,QAAQ;IACR,MAAM;IACN,MAAM;IACN,SAAS;IACT,UAAU;IACV,IAAI;IACJ,eAAe;IACf,MAAM;IACN,UAAU;IACV,YAAY;IACZ,UAAU;IACV,SAAS;IACT,WAAW;IACX,MAAM;IACN,gBAAgB;IAChB,QAAQ;IACR,YAAY;IACZ,kBAAkB;CACV,CAAC,CAAA;AAEJ,MAAM,SAAS,GAAG,CAAC,GAAY,EAAkB,EAAE,CACvD,uBAA8C,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;AADlD,QAAA,SAAS,aACyC;AAU/D,MAAM,eAAe,GAAG,IAAA,cAAI,EAAA;;;GAGzB,CAAA;AAeI,MAAM,aAAa,GAAG,CAAC,EAC5B,SAAS,EACT,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,OAAO,EACP,MAAM,GACe,EAAE,EAAE,CAAC,IAAA,cAAI,EAAA;OACzB,WAAW,CAAC,SAAS,CAAC;;;MAGvB,KAAK,IAAI,IAAA,cAAI,EAAA,UAAU,KAAK,UAAU;MACtC,IAAI,IAAI,IAAA,cAAI,EAAA,eAAe,IAAI,CAAC,IAAI,MAAM;MAC1C,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;MACnD,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC;MACrB,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;MACjC,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;MACnC,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC;MACtB,IAAI;MACJ,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC;;SAErB,WAAW,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC;QAC5D,CAAA;AA1BK,QAAA,aAAa,iBA0BlB;AAER,SAAS,cAAc,CACrB,KAAQ;IAER,OAAO,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAA;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,OAAO,IAAA,cAAI,EAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,CAAA;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,OAAO,IAAA,cAAI,EAAA,QAAQ,WAAW,CAAC,KAAK,CAAC,KAAK,CAAA;AAC5C,CAAC;AAED,QAAQ,CAAC,CAAC,WAAW,CAAC,KAAa;IACjC,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAClD,IAAI,KAAK,IAAI,IAAI;gBAAE,SAAQ;iBACtB,IAAI,KAAK,KAAK,KAAK;gBAAE,SAAQ;iBAC7B,IAAI,KAAK,KAAK,IAAI;gBAAE,MAAM,IAAA,cAAI,EAAA,IAAI,IAAI,EAAE,CAAA;;gBACxC,MAAM,IAAA,cAAI,EAAA,IAAI,IAAI,KAAK,KAAK,GAAG,CAAA;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,EAAsB;IACzC,OAAO,CAAC,KAAsB,EAAE,EAAE,CAChC,KAAK,YAAY,cAAI;QACnB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,IAAA,cAAI,EAAA,6BAA6B,KAAK,CAAC,GAAG,SAAS,EAAE,MAAM,CAAA;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB;IAC3C,OAAO,MAAM,YAAY,cAAI;QAC3B,CAAC,CAAC,kBAAkB;YAClB,IAAA,cAAI,EAAA,WAAW,MAAM,WAAW,CAAC,qDAAqD;QACxF,CAAC,CAAC,IAAA,cAAI,EAAA,8BAA8B,MAAM,CAAC,GAAG,aAAa,CAAA;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,KAAsB;IACzC,OAAO,KAAK,YAAY,cAAI;QAC1B,CAAC,CAAC,kBAAkB;YAClB,IAAA,cAAI,EAAA,UAAU,KAAK,UAAU,CAAC,qDAAqD;QACrF,CAAC,CAAC,IAAA,cAAI,EAAA,gCAAgC,KAAK,CAAC,GAAG,MAAM,CAAA;AACzD,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/lib/http/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/lib/http/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAEhE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9D,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EACpE,WAAW,EAAE,QAAQ,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,EAC3C,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC,CAAC,CAAA;AAuCJ,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,IACvD,CAAC,SAAS,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,MAAM,GAAG,CAAC,GAC/C,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GACpB,KAAK,CAAA;AAEX;;;GAGG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC3D,UAAU,EAAE,CAAC,EACb,OAAO,CAAC,EAAE,mBAAmB,GASxB,SAAS,CAAC,CAAC,CAAC,CAClB;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,YAAY,CAqBd;AA4CD,wBAAgB,IAAI,CAAC,CAAC,SAAS,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAQvD"}
|