@atproto/oauth-provider 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -0
- package/dist/account/account-manager.d.ts +7 -5
- package/dist/account/account-manager.d.ts.map +1 -1
- package/dist/account/account-manager.js +34 -25
- package/dist/account/account-manager.js.map +1 -1
- package/dist/account/account-store.d.ts +13 -5
- package/dist/account/account-store.d.ts.map +1 -1
- package/dist/account/account-store.js +24 -8
- package/dist/account/account-store.js.map +1 -1
- package/dist/account/account.d.ts +1 -11
- package/dist/account/account.d.ts.map +1 -1
- package/dist/account/{sign-up-data.d.ts → sign-up-input.d.ts} +5 -5
- package/dist/account/sign-up-input.d.ts.map +1 -0
- package/dist/account/{sign-up-data.js → sign-up-input.js} +3 -3
- package/dist/account/sign-up-input.js.map +1 -0
- package/dist/assets/assets-middleware.d.ts +2 -0
- package/dist/assets/assets-middleware.d.ts.map +1 -1
- package/dist/assets/assets-middleware.js +12 -14
- package/dist/assets/assets-middleware.js.map +1 -1
- package/dist/errors/invalid-invite-code-error.d.ts +5 -0
- package/dist/errors/invalid-invite-code-error.d.ts.map +1 -0
- package/dist/errors/invalid-invite-code-error.js +11 -0
- package/dist/errors/invalid-invite-code-error.js.map +1 -0
- package/dist/errors/oauth-error.d.ts +2 -2
- package/dist/errors/oauth-error.js.map +1 -1
- package/dist/lib/csp/index.d.ts +5 -6
- package/dist/lib/csp/index.d.ts.map +1 -1
- package/dist/lib/csp/index.js +14 -11
- package/dist/lib/csp/index.js.map +1 -1
- package/dist/lib/hcaptcha.d.ts +5 -3
- package/dist/lib/hcaptcha.d.ts.map +1 -1
- package/dist/lib/hcaptcha.js +7 -4
- package/dist/lib/hcaptcha.js.map +1 -1
- package/dist/lib/html/build-document.d.ts +2 -2
- package/dist/lib/html/build-document.d.ts.map +1 -1
- package/dist/lib/html/build-document.js +11 -7
- package/dist/lib/html/build-document.js.map +1 -1
- package/dist/lib/html/html.d.ts.map +1 -1
- package/dist/lib/html/html.js +10 -13
- package/dist/lib/html/html.js.map +1 -1
- package/dist/lib/html/util.d.ts +0 -1
- package/dist/lib/html/util.d.ts.map +1 -1
- package/dist/lib/html/util.js +0 -4
- package/dist/lib/html/util.js.map +1 -1
- package/dist/lib/http/response.d.ts +3 -1
- package/dist/lib/http/response.d.ts.map +1 -1
- package/dist/lib/http/response.js +3 -0
- package/dist/lib/http/response.js.map +1 -1
- package/dist/lib/http/security-headers.d.ts +48 -0
- package/dist/lib/http/security-headers.d.ts.map +1 -0
- package/dist/lib/http/security-headers.js +62 -0
- package/dist/lib/http/security-headers.js.map +1 -0
- package/dist/lib/util/type.d.ts +8 -0
- package/dist/lib/util/type.d.ts.map +1 -1
- package/dist/lib/util/type.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 +4 -25
- package/dist/oauth-hooks.d.ts.map +1 -1
- package/dist/oauth-provider.d.ts.map +1 -1
- package/dist/oauth-provider.js +26 -25
- package/dist/oauth-provider.js.map +1 -1
- package/dist/output/backend-data.d.ts +4 -0
- package/dist/output/backend-data.d.ts.map +1 -0
- package/dist/output/backend-data.js +19 -0
- package/dist/output/backend-data.js.map +1 -0
- package/dist/output/build-authorize-data.d.ts +3 -19
- package/dist/output/build-authorize-data.d.ts.map +1 -1
- package/dist/output/build-authorize-data.js.map +1 -1
- package/dist/output/build-customization-data.d.ts +11 -18
- package/dist/output/build-customization-data.d.ts.map +1 -1
- package/dist/output/build-customization-data.js +1 -1
- package/dist/output/build-customization-data.js.map +1 -1
- package/dist/output/build-error-data.d.ts +3 -0
- package/dist/output/build-error-data.d.ts.map +1 -0
- package/dist/output/build-error-data.js +10 -0
- package/dist/output/build-error-data.js.map +1 -0
- package/dist/output/build-error-payload.d.ts +2 -1
- package/dist/output/build-error-payload.d.ts.map +1 -1
- package/dist/output/build-error-payload.js.map +1 -1
- package/dist/output/output-manager.d.ts +10 -4
- package/dist/output/output-manager.d.ts.map +1 -1
- package/dist/output/output-manager.js +68 -39
- package/dist/output/output-manager.js.map +1 -1
- package/dist/output/send-web-page.d.ts +6 -10
- package/dist/output/send-web-page.d.ts.map +1 -1
- package/dist/output/send-web-page.js +27 -47
- package/dist/output/send-web-page.js.map +1 -1
- package/dist/signer/signed-token-payload.d.ts +3 -3
- package/dist/signer/signer.d.ts +2 -2
- package/package.json +7 -39
- package/src/account/account-manager.ts +55 -34
- package/src/account/account-store.ts +29 -6
- package/src/account/account.ts +1 -14
- package/src/account/{sign-up-data.ts → sign-up-input.ts} +2 -2
- package/src/assets/assets-middleware.ts +11 -17
- package/src/errors/invalid-invite-code-error.ts +10 -0
- package/src/errors/oauth-error.ts +1 -1
- package/src/lib/csp/index.ts +16 -13
- package/src/lib/hcaptcha.ts +10 -7
- package/src/lib/html/build-document.ts +15 -8
- package/src/lib/html/html.ts +11 -18
- package/src/lib/html/util.ts +0 -4
- package/src/lib/http/response.ts +9 -1
- package/src/lib/http/security-headers.ts +91 -0
- package/src/lib/util/type.ts +18 -0
- package/src/oauth-errors.ts +1 -0
- package/src/oauth-hooks.ts +4 -25
- package/src/oauth-provider.ts +40 -34
- package/src/output/backend-data.ts +18 -0
- package/src/output/build-authorize-data.ts +3 -26
- package/src/output/build-customization-data.ts +2 -13
- package/src/output/build-error-data.ts +8 -0
- package/src/output/build-error-payload.ts +4 -2
- package/src/output/output-manager.ts +86 -47
- package/src/output/send-web-page.ts +29 -58
- package/tsconfig.backend.json +1 -2
- package/tsconfig.backend.tsbuildinfo +1 -1
- package/tsconfig.json +1 -5
- package/.linguirc +0 -57
- package/dist/account/sign-up-data.d.ts.map +0 -1
- package/dist/account/sign-up-data.js.map +0 -1
- package/dist/assets/app/bundle-manifest.json +0 -614
- package/dist/assets/app/index-ItwwtJ8r.js +0 -36
- package/dist/assets/app/index-ItwwtJ8r.js.map +0 -1
- package/dist/assets/app/main-B_dNxQo_.js +0 -4
- package/dist/assets/app/main-B_dNxQo_.js.map +0 -1
- package/dist/assets/app/main-CSatvmRR.css +0 -3
- package/dist/assets/app/main-CSatvmRR.js +0 -306
- package/dist/assets/app/main-CSatvmRR.js.map +0 -1
- package/dist/assets/app/messages-BQeltXSF.js +0 -4
- package/dist/assets/app/messages-BQeltXSF.js.map +0 -1
- package/dist/assets/app/messages-BQkEhfjg.js +0 -4
- package/dist/assets/app/messages-BQkEhfjg.js.map +0 -1
- package/dist/assets/app/messages-BUjKj_UJ.js +0 -4
- package/dist/assets/app/messages-BUjKj_UJ.js.map +0 -1
- package/dist/assets/app/messages-BWIQa8fO.js +0 -4
- package/dist/assets/app/messages-BWIQa8fO.js.map +0 -1
- package/dist/assets/app/messages-BaNVb0bp.js +0 -4
- package/dist/assets/app/messages-BaNVb0bp.js.map +0 -1
- package/dist/assets/app/messages-BaizVXcF.js +0 -4
- package/dist/assets/app/messages-BaizVXcF.js.map +0 -1
- package/dist/assets/app/messages-BfoClA1Y.js +0 -4
- package/dist/assets/app/messages-BfoClA1Y.js.map +0 -1
- package/dist/assets/app/messages-BsKGDZnC.js +0 -4
- package/dist/assets/app/messages-BsKGDZnC.js.map +0 -1
- package/dist/assets/app/messages-Bu-TJhml.js +0 -4
- package/dist/assets/app/messages-Bu-TJhml.js.map +0 -1
- package/dist/assets/app/messages-BvOKnBQk.js +0 -4
- package/dist/assets/app/messages-BvOKnBQk.js.map +0 -1
- package/dist/assets/app/messages-BxDzCiWz.js +0 -4
- package/dist/assets/app/messages-BxDzCiWz.js.map +0 -1
- package/dist/assets/app/messages-CDgFOy4S.js +0 -4
- package/dist/assets/app/messages-CDgFOy4S.js.map +0 -1
- package/dist/assets/app/messages-CLbTz0o9.js +0 -4
- package/dist/assets/app/messages-CLbTz0o9.js.map +0 -1
- package/dist/assets/app/messages-CNwSh0t7.js +0 -4
- package/dist/assets/app/messages-CNwSh0t7.js.map +0 -1
- package/dist/assets/app/messages-CSMNJ6P8.js +0 -4
- package/dist/assets/app/messages-CSMNJ6P8.js.map +0 -1
- package/dist/assets/app/messages-CZQUw3mp.js +0 -4
- package/dist/assets/app/messages-CZQUw3mp.js.map +0 -1
- package/dist/assets/app/messages-CZT41oVp.js +0 -4
- package/dist/assets/app/messages-CZT41oVp.js.map +0 -1
- package/dist/assets/app/messages-C_b-d3t8.js +0 -4
- package/dist/assets/app/messages-C_b-d3t8.js.map +0 -1
- package/dist/assets/app/messages-C_u3MTc2.js +0 -4
- package/dist/assets/app/messages-C_u3MTc2.js.map +0 -1
- package/dist/assets/app/messages-Cn8nHZic.js +0 -4
- package/dist/assets/app/messages-Cn8nHZic.js.map +0 -1
- package/dist/assets/app/messages-CtDywJUm.js +0 -4
- package/dist/assets/app/messages-CtDywJUm.js.map +0 -1
- package/dist/assets/app/messages-CurtIjBF.js +0 -4
- package/dist/assets/app/messages-CurtIjBF.js.map +0 -1
- package/dist/assets/app/messages-Cv6zIbaP.js +0 -4
- package/dist/assets/app/messages-Cv6zIbaP.js.map +0 -1
- package/dist/assets/app/messages-D1eLQuPE.js +0 -4
- package/dist/assets/app/messages-D1eLQuPE.js.map +0 -1
- package/dist/assets/app/messages-D8vHEaYW.js +0 -4
- package/dist/assets/app/messages-D8vHEaYW.js.map +0 -1
- package/dist/assets/app/messages-DJ1Q4GeC.js +0 -4
- package/dist/assets/app/messages-DJ1Q4GeC.js.map +0 -1
- package/dist/assets/app/messages-DRL3exqd.js +0 -4
- package/dist/assets/app/messages-DRL3exqd.js.map +0 -1
- package/dist/assets/app/messages-DWLPQRTp.js +0 -4
- package/dist/assets/app/messages-DWLPQRTp.js.map +0 -1
- package/dist/assets/app/messages-DjVaE9YE.js +0 -4
- package/dist/assets/app/messages-DjVaE9YE.js.map +0 -1
- package/dist/assets/app/messages-DqpMfFJR.js +0 -4
- package/dist/assets/app/messages-DqpMfFJR.js.map +0 -1
- package/dist/assets/app/messages-ETjhJBEN.js +0 -4
- package/dist/assets/app/messages-ETjhJBEN.js.map +0 -1
- package/dist/assets/app/messages-EUKrgrGn.js +0 -4
- package/dist/assets/app/messages-EUKrgrGn.js.map +0 -1
- package/dist/assets/app/messages-QQrOUcPW.js +0 -4
- package/dist/assets/app/messages-QQrOUcPW.js.map +0 -1
- package/dist/assets/app/messages-e2QGqFL6.js +0 -4
- package/dist/assets/app/messages-e2QGqFL6.js.map +0 -1
- package/dist/assets/app/messages-p61py7gD.js +0 -4
- package/dist/assets/app/messages-p61py7gD.js.map +0 -1
- package/dist/assets/asset.d.ts +0 -9
- package/dist/assets/asset.d.ts.map +0 -1
- package/dist/assets/asset.js +0 -3
- package/dist/assets/asset.js.map +0 -1
- package/dist/assets/index.d.ts +0 -5
- package/dist/assets/index.d.ts.map +0 -1
- package/dist/assets/index.js +0 -78
- package/dist/assets/index.js.map +0 -1
- package/rollup.config.js +0 -98
- package/src/assets/app/app.tsx +0 -43
- package/src/assets/app/backend-data.ts +0 -27
- package/src/assets/app/backend-types.ts +0 -66
- package/src/assets/app/components/forms/button-toggle-visibility.tsx +0 -43
- package/src/assets/app/components/forms/button.tsx +0 -60
- package/src/assets/app/components/forms/fieldset.tsx +0 -55
- package/src/assets/app/components/forms/form-card-async.tsx +0 -103
- package/src/assets/app/components/forms/form-card.tsx +0 -49
- package/src/assets/app/components/forms/input-checkbox.tsx +0 -73
- package/src/assets/app/components/forms/input-container.tsx +0 -107
- package/src/assets/app/components/forms/input-email-address.tsx +0 -66
- package/src/assets/app/components/forms/input-new-password.tsx +0 -62
- package/src/assets/app/components/forms/input-password.tsx +0 -88
- package/src/assets/app/components/forms/input-text.tsx +0 -76
- package/src/assets/app/components/forms/input-token.tsx +0 -94
- package/src/assets/app/components/forms/wizard-card.tsx +0 -116
- package/src/assets/app/components/layouts/layout-title-page.tsx +0 -77
- package/src/assets/app/components/layouts/layout-welcome.tsx +0 -73
- package/src/assets/app/components/utils/account-identifier.tsx +0 -23
- package/src/assets/app/components/utils/account-image.tsx +0 -33
- package/src/assets/app/components/utils/admonition.tsx +0 -52
- package/src/assets/app/components/utils/client-name.tsx +0 -45
- package/src/assets/app/components/utils/error-card.tsx +0 -93
- package/src/assets/app/components/utils/error-message.tsx +0 -62
- package/src/assets/app/components/utils/help-card.tsx +0 -46
- package/src/assets/app/components/utils/icons.tsx +0 -88
- package/src/assets/app/components/utils/link-anchor.tsx +0 -28
- package/src/assets/app/components/utils/link-title.tsx +0 -26
- package/src/assets/app/components/utils/multi-lang-string.tsx +0 -56
- package/src/assets/app/components/utils/password-strength-label.tsx +0 -37
- package/src/assets/app/components/utils/password-strength-meter.tsx +0 -58
- package/src/assets/app/components/utils/url-viewer.tsx +0 -73
- package/src/assets/app/cookies.ts +0 -11
- package/src/assets/app/hooks/use-api.ts +0 -178
- package/src/assets/app/hooks/use-async-action.ts +0 -120
- package/src/assets/app/hooks/use-bound-dispatch.ts +0 -5
- package/src/assets/app/hooks/use-browser-color-scheme.ts +0 -31
- package/src/assets/app/hooks/use-csrf-token.ts +0 -5
- package/src/assets/app/hooks/use-random-string.ts +0 -37
- package/src/assets/app/hooks/use-stepper.ts +0 -87
- package/src/assets/app/index.html +0 -182
- package/src/assets/app/lib/api.ts +0 -267
- package/src/assets/app/lib/clsx.ts +0 -6
- package/src/assets/app/lib/json-client.ts +0 -94
- package/src/assets/app/lib/password.ts +0 -98
- package/src/assets/app/lib/ref.ts +0 -17
- package/src/assets/app/lib/util.ts +0 -13
- package/src/assets/app/locales/an/messages.po +0 -492
- package/src/assets/app/locales/ast/messages.po +0 -492
- package/src/assets/app/locales/ca/messages.po +0 -492
- package/src/assets/app/locales/da/messages.po +0 -492
- package/src/assets/app/locales/de/messages.po +0 -492
- package/src/assets/app/locales/el/messages.po +0 -492
- package/src/assets/app/locales/en/messages.po +0 -492
- package/src/assets/app/locales/en-GB/messages.po +0 -492
- package/src/assets/app/locales/es/messages.po +0 -492
- package/src/assets/app/locales/eu/messages.po +0 -492
- package/src/assets/app/locales/fi/messages.po +0 -492
- package/src/assets/app/locales/fr/messages.po +0 -492
- package/src/assets/app/locales/ga/messages.po +0 -492
- package/src/assets/app/locales/gl/messages.po +0 -492
- package/src/assets/app/locales/hi/messages.po +0 -492
- package/src/assets/app/locales/hu/messages.po +0 -492
- package/src/assets/app/locales/ia/messages.po +0 -492
- package/src/assets/app/locales/id/messages.po +0 -492
- package/src/assets/app/locales/it/messages.po +0 -492
- package/src/assets/app/locales/ja/messages.po +0 -492
- package/src/assets/app/locales/km/messages.po +0 -492
- package/src/assets/app/locales/ko/messages.po +0 -492
- package/src/assets/app/locales/load.ts +0 -8
- package/src/assets/app/locales/locale-context.ts +0 -19
- package/src/assets/app/locales/locale-provider.tsx +0 -112
- package/src/assets/app/locales/locale-selector.tsx +0 -58
- package/src/assets/app/locales/locales.ts +0 -168
- package/src/assets/app/locales/ne/messages.po +0 -492
- package/src/assets/app/locales/nl/messages.po +0 -492
- package/src/assets/app/locales/pl/messages.po +0 -492
- package/src/assets/app/locales/pt-BR/messages.po +0 -492
- package/src/assets/app/locales/ro/messages.po +0 -492
- package/src/assets/app/locales/ru/messages.po +0 -492
- package/src/assets/app/locales/sv/messages.po +0 -492
- package/src/assets/app/locales/th/messages.po +0 -492
- package/src/assets/app/locales/tr/messages.po +0 -492
- package/src/assets/app/locales/uk/messages.po +0 -492
- package/src/assets/app/locales/vi/messages.po +0 -492
- package/src/assets/app/locales/zh-CN/messages.po +0 -492
- package/src/assets/app/locales/zh-HK/messages.po +0 -492
- package/src/assets/app/locales/zh-TW/messages.po +0 -492
- package/src/assets/app/main.css +0 -33
- package/src/assets/app/main.tsx +0 -44
- package/src/assets/app/views/authorize/accept/accept-form.tsx +0 -150
- package/src/assets/app/views/authorize/accept/accept-view.tsx +0 -70
- package/src/assets/app/views/authorize/authorize-view.tsx +0 -180
- package/src/assets/app/views/authorize/reset-password/reset-password-confirm-form.tsx +0 -88
- package/src/assets/app/views/authorize/reset-password/reset-password-request-form.tsx +0 -80
- package/src/assets/app/views/authorize/reset-password/reset-password-view.tsx +0 -127
- package/src/assets/app/views/authorize/sign-in/sign-in-form.tsx +0 -244
- package/src/assets/app/views/authorize/sign-in/sign-in-picker.tsx +0 -116
- package/src/assets/app/views/authorize/sign-in/sign-in-view.tsx +0 -145
- package/src/assets/app/views/authorize/sign-up/sign-up-account-form.tsx +0 -140
- package/src/assets/app/views/authorize/sign-up/sign-up-disclaimer.tsx +0 -51
- package/src/assets/app/views/authorize/sign-up/sign-up-handle-form.tsx +0 -289
- package/src/assets/app/views/authorize/sign-up/sign-up-hcaptcha-form.tsx +0 -108
- package/src/assets/app/views/authorize/sign-up/sign-up-view.tsx +0 -158
- package/src/assets/app/views/authorize/welcome/welcome-view.tsx +0 -56
- package/src/assets/app/views/error/error-view.tsx +0 -31
- package/src/assets/asset.ts +0 -9
- package/src/assets/index.ts +0 -86
- package/tailwind.config.js +0 -31
- package/tsconfig.frontend.json +0 -11
- package/tsconfig.frontend.tsbuildinfo +0 -1
- package/tsconfig.tools.json +0 -8
- package/tsconfig.tools.tsbuildinfo +0 -1
- package/vite.config.mjs +0 -16
package/rollup.config.js
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
/* eslint-env node */
|
2
|
-
|
3
|
-
const { default: commonjs } = require('@rollup/plugin-commonjs')
|
4
|
-
const {
|
5
|
-
default: dynamicImportVars,
|
6
|
-
} = require('@rollup/plugin-dynamic-import-vars')
|
7
|
-
const { default: nodeResolve } = require('@rollup/plugin-node-resolve')
|
8
|
-
const { default: swc } = require('@rollup/plugin-swc')
|
9
|
-
const { defineConfig } = require('rollup')
|
10
|
-
const {
|
11
|
-
default: manifest,
|
12
|
-
} = require('@atproto-labs/rollup-plugin-bundle-manifest')
|
13
|
-
const postcss = ((m) => m.default || m)(require('rollup-plugin-postcss'))
|
14
|
-
|
15
|
-
module.exports = defineConfig((commandLineArguments) => {
|
16
|
-
const NODE_ENV =
|
17
|
-
process.env['NODE_ENV'] ??
|
18
|
-
(commandLineArguments.watch ? 'development' : 'production')
|
19
|
-
|
20
|
-
const devMode = NODE_ENV === 'development'
|
21
|
-
|
22
|
-
return {
|
23
|
-
input: ['src/assets/app/main.tsx', 'src/assets/app/main.css'],
|
24
|
-
output: {
|
25
|
-
manualChunks: undefined,
|
26
|
-
sourcemap: true,
|
27
|
-
dir: 'dist/assets/app',
|
28
|
-
format: 'module',
|
29
|
-
entryFileNames: 'main-[hash].js',
|
30
|
-
},
|
31
|
-
plugins: [
|
32
|
-
{
|
33
|
-
name: 'resolve-swc-helpers',
|
34
|
-
resolveId(src) {
|
35
|
-
// For some reason, "nodeResolve" doesn't resolve these:
|
36
|
-
if (src.startsWith('@swc/helpers/')) return require.resolve(src)
|
37
|
-
},
|
38
|
-
},
|
39
|
-
nodeResolve({
|
40
|
-
preferBuiltins: false,
|
41
|
-
browser: true,
|
42
|
-
exportConditions: ['browser', 'module', 'import', 'default'],
|
43
|
-
}),
|
44
|
-
commonjs(),
|
45
|
-
postcss({ config: true, extract: true, minimize: !devMode }),
|
46
|
-
swc({
|
47
|
-
swc: {
|
48
|
-
swcrc: false,
|
49
|
-
configFile: false,
|
50
|
-
sourceMaps: true,
|
51
|
-
minify: !devMode,
|
52
|
-
jsc: {
|
53
|
-
experimental: {
|
54
|
-
// @NOTE Because of the experimental nature of SWC plugins, A
|
55
|
-
// very particular version of @swc/core needs to be used. The
|
56
|
-
// link below allows to determine with version of @swc/core is
|
57
|
-
// compatible based on the version of @lingui/swc-plugin used
|
58
|
-
// (click on the swc_core version in the right column to see
|
59
|
-
// which version of the @swc/core is compatible)
|
60
|
-
//
|
61
|
-
// https://github.com/lingui/swc-plugin?tab=readme-ov-file#compatibility
|
62
|
-
plugins: [['@lingui/swc-plugin', {}]],
|
63
|
-
},
|
64
|
-
minify: {
|
65
|
-
compress: true,
|
66
|
-
mangle: true,
|
67
|
-
},
|
68
|
-
externalHelpers: true,
|
69
|
-
target: 'es2020',
|
70
|
-
parser: { syntax: 'typescript', tsx: true },
|
71
|
-
transform: {
|
72
|
-
useDefineForClassFields: true,
|
73
|
-
react: { runtime: 'automatic' },
|
74
|
-
optimizer: {
|
75
|
-
simplify: true,
|
76
|
-
globals: {
|
77
|
-
vars: { 'process.env.NODE_ENV': JSON.stringify(NODE_ENV) },
|
78
|
-
},
|
79
|
-
},
|
80
|
-
},
|
81
|
-
},
|
82
|
-
},
|
83
|
-
}),
|
84
|
-
dynamicImportVars({ errorWhenNoFilesFound: true }),
|
85
|
-
|
86
|
-
// Change `data` to `true` to include assets data in the manifest,
|
87
|
-
// allowing for easier bundling of the backend code (eg. using esbuild) as
|
88
|
-
// bundlers know how to bundle JSON files but not how to bundle assets
|
89
|
-
// referenced at runtime.
|
90
|
-
manifest({ data: false }),
|
91
|
-
],
|
92
|
-
onwarn(warning, warn) {
|
93
|
-
// 'use client' directives are fine
|
94
|
-
if (warning.code === 'MODULE_LEVEL_DIRECTIVE') return
|
95
|
-
warn(warning)
|
96
|
-
},
|
97
|
-
}
|
98
|
-
})
|
package/src/assets/app/app.tsx
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
import { ErrorBoundary } from 'react-error-boundary'
|
2
|
-
import type {
|
3
|
-
AuthorizeData,
|
4
|
-
AvailableLocales,
|
5
|
-
CustomizationData,
|
6
|
-
ErrorData,
|
7
|
-
} from './backend-types.ts'
|
8
|
-
import { LocaleProvider } from './locales/locale-provider.tsx'
|
9
|
-
import { AuthorizeView } from './views/authorize/authorize-view.tsx'
|
10
|
-
import { ErrorView } from './views/error/error-view.tsx'
|
11
|
-
|
12
|
-
export type AppProps = {
|
13
|
-
availableLocales?: AvailableLocales
|
14
|
-
authorizeData?: AuthorizeData
|
15
|
-
customizationData?: CustomizationData
|
16
|
-
errorData?: ErrorData
|
17
|
-
}
|
18
|
-
|
19
|
-
export function App({
|
20
|
-
availableLocales,
|
21
|
-
authorizeData,
|
22
|
-
customizationData,
|
23
|
-
errorData,
|
24
|
-
}: AppProps) {
|
25
|
-
return (
|
26
|
-
<LocaleProvider availableLocales={availableLocales}>
|
27
|
-
<ErrorBoundary
|
28
|
-
fallbackRender={({ error }) => (
|
29
|
-
<ErrorView error={error} customizationData={customizationData} />
|
30
|
-
)}
|
31
|
-
>
|
32
|
-
{errorData || !authorizeData ? (
|
33
|
-
<ErrorView error={errorData} customizationData={customizationData} />
|
34
|
-
) : (
|
35
|
-
<AuthorizeView
|
36
|
-
customizationData={customizationData}
|
37
|
-
authorizeData={authorizeData}
|
38
|
-
/>
|
39
|
-
)}
|
40
|
-
</ErrorBoundary>
|
41
|
-
</LocaleProvider>
|
42
|
-
)
|
43
|
-
}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
AuthorizeData,
|
3
|
-
AvailableLocales,
|
4
|
-
CustomizationData,
|
5
|
-
ErrorData,
|
6
|
-
} from './backend-types.ts'
|
7
|
-
|
8
|
-
function readBackendData<T>(key: string): T | undefined {
|
9
|
-
const value = window[key] as T | undefined
|
10
|
-
delete window[key] // Prevent accidental usage / potential leaks to dependencies
|
11
|
-
return value
|
12
|
-
}
|
13
|
-
|
14
|
-
// These values are injected by the backend when it builds the
|
15
|
-
// page HTML. See "declareBackendData()" in the backend.
|
16
|
-
|
17
|
-
/** @deprecated Do not import directly. Only import this from main.tsx */
|
18
|
-
export const availableLocales =
|
19
|
-
readBackendData<AvailableLocales>('__availableLocales')
|
20
|
-
/** @deprecated Do not import directly. Only import this from main.tsx */
|
21
|
-
export const customizationData = readBackendData<CustomizationData>(
|
22
|
-
'__customizationData',
|
23
|
-
)
|
24
|
-
/** @deprecated Do not import directly. Only import this from main.tsx */
|
25
|
-
export const errorData = readBackendData<ErrorData>('__errorData')
|
26
|
-
/** @deprecated Do not import directly. Only import this from main.tsx */
|
27
|
-
export const authorizeData = readBackendData<AuthorizeData>('__authorizeData')
|
@@ -1,66 +0,0 @@
|
|
1
|
-
import type { OAuthClientMetadata } from '@atproto/oauth-types'
|
2
|
-
|
3
|
-
// @TODO: Find a way to share these types with the backend code
|
4
|
-
|
5
|
-
export type Account = {
|
6
|
-
sub: string
|
7
|
-
aud: string | [string, ...string[]]
|
8
|
-
|
9
|
-
email?: string
|
10
|
-
email_verified?: boolean
|
11
|
-
name?: string
|
12
|
-
preferred_username?: string
|
13
|
-
picture?: string
|
14
|
-
}
|
15
|
-
|
16
|
-
export type Session = {
|
17
|
-
account: Account
|
18
|
-
info?: never // Prevent relying on this in the frontend
|
19
|
-
|
20
|
-
selected: boolean
|
21
|
-
loginRequired: boolean
|
22
|
-
consentRequired: boolean
|
23
|
-
}
|
24
|
-
|
25
|
-
export type LocalizedString = string | ({ en: string } & Record<string, string>)
|
26
|
-
|
27
|
-
export type AvailableLocales = readonly string[]
|
28
|
-
|
29
|
-
export type LinkDefinition = {
|
30
|
-
title: LocalizedString
|
31
|
-
href: string
|
32
|
-
rel?: string
|
33
|
-
}
|
34
|
-
|
35
|
-
export type CustomizationData = {
|
36
|
-
// Functional customization
|
37
|
-
hcaptchaSiteKey?: string
|
38
|
-
inviteCodeRequired?: boolean
|
39
|
-
availableUserDomains?: string[]
|
40
|
-
|
41
|
-
// Aesthetic customization
|
42
|
-
name?: string
|
43
|
-
logo?: string
|
44
|
-
links?: LinkDefinition[]
|
45
|
-
}
|
46
|
-
|
47
|
-
export type ErrorData = {
|
48
|
-
error: string
|
49
|
-
error_description: string
|
50
|
-
}
|
51
|
-
|
52
|
-
export type ScopeDetail = {
|
53
|
-
scope: string
|
54
|
-
description?: string
|
55
|
-
}
|
56
|
-
|
57
|
-
export type AuthorizeData = {
|
58
|
-
clientId: string
|
59
|
-
clientMetadata: OAuthClientMetadata
|
60
|
-
clientTrusted: boolean
|
61
|
-
requestUri: string
|
62
|
-
loginHint?: string
|
63
|
-
scopeDetails?: ScopeDetail[]
|
64
|
-
newSessionsRequireConsent: boolean
|
65
|
-
sessions: Session[]
|
66
|
-
}
|
@@ -1,43 +0,0 @@
|
|
1
|
-
import { useLingui } from '@lingui/react/macro'
|
2
|
-
import { Override } from '../../lib/util.ts'
|
3
|
-
import { EyeIcon, EyeSlashIcon } from '../utils/icons.tsx'
|
4
|
-
import { Button, ButtonProps } from './button.tsx'
|
5
|
-
|
6
|
-
export type ButtonToggleVisibilityProps = Override<
|
7
|
-
Omit<ButtonProps, 'aria-label' | 'square'>,
|
8
|
-
{
|
9
|
-
visible: boolean
|
10
|
-
toggleVisible: () => void
|
11
|
-
}
|
12
|
-
>
|
13
|
-
|
14
|
-
/**
|
15
|
-
* Generic button to toggle visibility of an item (e.g. password).
|
16
|
-
*/
|
17
|
-
export function ButtonToggleVisibility({
|
18
|
-
visible,
|
19
|
-
toggleVisible,
|
20
|
-
|
21
|
-
// button
|
22
|
-
onClick,
|
23
|
-
...props
|
24
|
-
}: ButtonToggleVisibilityProps) {
|
25
|
-
const { t } = useLingui()
|
26
|
-
return (
|
27
|
-
<Button
|
28
|
-
{...props}
|
29
|
-
square
|
30
|
-
onClick={(event) => {
|
31
|
-
onClick?.(event)
|
32
|
-
if (!event.defaultPrevented) toggleVisible()
|
33
|
-
}}
|
34
|
-
aria-label={visible ? t`Hide` : t`Make visible`}
|
35
|
-
>
|
36
|
-
{visible ? (
|
37
|
-
<EyeIcon className="w-5" aria-hidden />
|
38
|
-
) : (
|
39
|
-
<EyeSlashIcon className="w-5" aria-hidden />
|
40
|
-
)}
|
41
|
-
</Button>
|
42
|
-
)
|
43
|
-
}
|
@@ -1,60 +0,0 @@
|
|
1
|
-
import { JSX } from 'react'
|
2
|
-
import { clsx } from '../../lib/clsx.ts'
|
3
|
-
import { Override } from '../../lib/util.ts'
|
4
|
-
|
5
|
-
export type ButtonProps = Override<
|
6
|
-
JSX.IntrinsicElements['button'],
|
7
|
-
{
|
8
|
-
color?: 'brand' | 'grey'
|
9
|
-
loading?: boolean
|
10
|
-
transparent?: boolean
|
11
|
-
square?: boolean
|
12
|
-
}
|
13
|
-
>
|
14
|
-
|
15
|
-
export function Button({
|
16
|
-
color = 'grey',
|
17
|
-
transparent = false,
|
18
|
-
loading = undefined,
|
19
|
-
square = false,
|
20
|
-
|
21
|
-
// button
|
22
|
-
children,
|
23
|
-
className,
|
24
|
-
type = 'button',
|
25
|
-
role = 'Button',
|
26
|
-
disabled = false,
|
27
|
-
...props
|
28
|
-
}: ButtonProps) {
|
29
|
-
return (
|
30
|
-
<button
|
31
|
-
role={role}
|
32
|
-
type={type}
|
33
|
-
disabled={disabled || loading === true}
|
34
|
-
{...props}
|
35
|
-
className={clsx(
|
36
|
-
'rounded-lg truncate cursor-pointer touch-manipulation tracking-wide overflow-hidden',
|
37
|
-
square ? 'p-2' : 'py-2 px-6',
|
38
|
-
color === 'brand'
|
39
|
-
? clsx(
|
40
|
-
'accent-slate-100',
|
41
|
-
transparent
|
42
|
-
? 'bg-transparent text-brand'
|
43
|
-
: 'bg-brand text-brand-c',
|
44
|
-
)
|
45
|
-
: color === 'grey'
|
46
|
-
? clsx(
|
47
|
-
'accent-brand',
|
48
|
-
'text-slate-600 dark:text-slate-300',
|
49
|
-
'hover:bg-gray-200 dark:hover:bg-gray-700',
|
50
|
-
transparent ? 'bg-transparent' : 'bg-gray-100 dark:bg-gray-800',
|
51
|
-
)
|
52
|
-
: undefined,
|
53
|
-
'disabled:opacity-50',
|
54
|
-
className,
|
55
|
-
)}
|
56
|
-
>
|
57
|
-
{children}
|
58
|
-
</button>
|
59
|
-
)
|
60
|
-
}
|
@@ -1,55 +0,0 @@
|
|
1
|
-
import { JSX, ReactNode, createContext, useMemo } from 'react'
|
2
|
-
import { useRandomString } from '../../hooks/use-random-string.ts'
|
3
|
-
import { Override } from '../../lib/util.ts'
|
4
|
-
|
5
|
-
export type FieldsetContextValue = {
|
6
|
-
disabled: boolean
|
7
|
-
labelId?: string
|
8
|
-
}
|
9
|
-
|
10
|
-
export const FieldsetContext = createContext<FieldsetContextValue>({
|
11
|
-
disabled: false,
|
12
|
-
})
|
13
|
-
FieldsetContext.displayName = 'FieldsetContext'
|
14
|
-
|
15
|
-
export type FieldsetCardProps = Override<
|
16
|
-
Omit<JSX.IntrinsicElements['fieldset'], 'aria-labelledby'>,
|
17
|
-
{
|
18
|
-
label?: ReactNode
|
19
|
-
}
|
20
|
-
>
|
21
|
-
|
22
|
-
export function Fieldset({
|
23
|
-
label,
|
24
|
-
children,
|
25
|
-
disabled,
|
26
|
-
...props
|
27
|
-
}: FieldsetCardProps) {
|
28
|
-
const labelId = useRandomString({ prefix: 'fieldset-' })
|
29
|
-
|
30
|
-
const contextValue = useMemo(
|
31
|
-
() => ({
|
32
|
-
disabled: disabled ?? false,
|
33
|
-
labelId: label ? labelId : undefined,
|
34
|
-
}),
|
35
|
-
[disabled, label, labelId],
|
36
|
-
)
|
37
|
-
|
38
|
-
return (
|
39
|
-
<fieldset {...props} aria-labelledby={labelId} disabled={disabled}>
|
40
|
-
{label && (
|
41
|
-
<legend
|
42
|
-
id={labelId}
|
43
|
-
key="title"
|
44
|
-
className="mb-1 text-slate-600 dark:text-slate-400 text-sm font-medium"
|
45
|
-
>
|
46
|
-
{label}
|
47
|
-
</legend>
|
48
|
-
)}
|
49
|
-
|
50
|
-
<div className="flex flex-col space-y-4">
|
51
|
-
<FieldsetContext value={contextValue}>{children}</FieldsetContext>
|
52
|
-
</div>
|
53
|
-
</fieldset>
|
54
|
-
)
|
55
|
-
}
|
@@ -1,103 +0,0 @@
|
|
1
|
-
import { Trans } from '@lingui/react/macro'
|
2
|
-
import { FormEvent, ReactNode, useCallback } from 'react'
|
3
|
-
import {
|
4
|
-
UseAsyncActionOptions,
|
5
|
-
useAsyncAction,
|
6
|
-
} from '../../hooks/use-async-action.ts'
|
7
|
-
import { Override } from '../../lib/util.ts'
|
8
|
-
import { ErrorCard } from '../utils/error-card.tsx'
|
9
|
-
import { Button } from './button.tsx'
|
10
|
-
import { FormCard, FormCardProps } from './form-card.tsx'
|
11
|
-
|
12
|
-
export type { AsyncActionController } from '../../hooks/use-async-action.ts'
|
13
|
-
|
14
|
-
export type ErrorRender = (data: { error: Error }) => ReactNode
|
15
|
-
export const errorRenderDefault: ErrorRender = ({ error }) => (
|
16
|
-
<ErrorCard error={error} />
|
17
|
-
)
|
18
|
-
|
19
|
-
export type FormCardAsyncProps = Override<
|
20
|
-
Override<
|
21
|
-
Omit<FormCardProps, 'cancel' | 'actions' | 'prepend'>,
|
22
|
-
Pick<UseAsyncActionOptions, 'ref' | 'onLoading' | 'onError'>
|
23
|
-
>,
|
24
|
-
{
|
25
|
-
invalid?: boolean
|
26
|
-
disabled?: boolean
|
27
|
-
|
28
|
-
onSubmit: (signal: AbortSignal) => void | PromiseLike<void>
|
29
|
-
submitLabel?: ReactNode
|
30
|
-
|
31
|
-
onCancel?: () => void
|
32
|
-
cancelLabel?: ReactNode
|
33
|
-
|
34
|
-
errorRender?: ErrorRender
|
35
|
-
}
|
36
|
-
>
|
37
|
-
|
38
|
-
export function FormCardAsync({
|
39
|
-
invalid,
|
40
|
-
disabled,
|
41
|
-
|
42
|
-
onSubmit,
|
43
|
-
submitLabel,
|
44
|
-
|
45
|
-
onCancel = undefined,
|
46
|
-
cancelLabel,
|
47
|
-
|
48
|
-
errorRender = errorRenderDefault,
|
49
|
-
|
50
|
-
// UseAsyncActionOptions
|
51
|
-
ref,
|
52
|
-
onLoading,
|
53
|
-
onError,
|
54
|
-
|
55
|
-
// FormCardProps
|
56
|
-
children,
|
57
|
-
...props
|
58
|
-
}: FormCardAsyncProps) {
|
59
|
-
const { run, loading, error } = useAsyncAction(onSubmit, {
|
60
|
-
ref,
|
61
|
-
onError,
|
62
|
-
onLoading,
|
63
|
-
})
|
64
|
-
|
65
|
-
const doSubmit = useCallback(
|
66
|
-
(event: FormEvent<HTMLFormElement>) => {
|
67
|
-
event.preventDefault()
|
68
|
-
|
69
|
-
if (!event.currentTarget.reportValidity()) return
|
70
|
-
|
71
|
-
if (!disabled && !invalid) void run()
|
72
|
-
},
|
73
|
-
[disabled, invalid, run],
|
74
|
-
)
|
75
|
-
|
76
|
-
return (
|
77
|
-
<FormCard
|
78
|
-
{...props}
|
79
|
-
onSubmit={doSubmit}
|
80
|
-
disabled={disabled || loading}
|
81
|
-
prepend={error != null ? errorRender({ error }) : undefined}
|
82
|
-
cancel={
|
83
|
-
onCancel && (
|
84
|
-
<Button onClick={onCancel}>
|
85
|
-
{cancelLabel || <Trans>Cancel</Trans>}
|
86
|
-
</Button>
|
87
|
-
)
|
88
|
-
}
|
89
|
-
actions={
|
90
|
-
<Button
|
91
|
-
color="brand"
|
92
|
-
type="submit"
|
93
|
-
loading={loading}
|
94
|
-
disabled={disabled}
|
95
|
-
>
|
96
|
-
{submitLabel || <Trans>Submit</Trans>}
|
97
|
-
</Button>
|
98
|
-
}
|
99
|
-
>
|
100
|
-
{children}
|
101
|
-
</FormCard>
|
102
|
-
)
|
103
|
-
}
|
@@ -1,49 +0,0 @@
|
|
1
|
-
import { JSX, ReactNode } from 'react'
|
2
|
-
import { Override } from '../../lib/util.ts'
|
3
|
-
|
4
|
-
export type FormCardProps = Override<
|
5
|
-
JSX.IntrinsicElements['form'],
|
6
|
-
{
|
7
|
-
disabled?: boolean
|
8
|
-
append?: ReactNode
|
9
|
-
prepend?: ReactNode
|
10
|
-
cancel?: ReactNode
|
11
|
-
actions?: ReactNode
|
12
|
-
}
|
13
|
-
>
|
14
|
-
|
15
|
-
export function FormCard({
|
16
|
-
actions,
|
17
|
-
cancel,
|
18
|
-
append,
|
19
|
-
children,
|
20
|
-
prepend,
|
21
|
-
disabled,
|
22
|
-
|
23
|
-
// form
|
24
|
-
inert = disabled,
|
25
|
-
...props
|
26
|
-
}: FormCardProps) {
|
27
|
-
return (
|
28
|
-
<form {...props} inert={inert} className="flex flex-col space-y-4">
|
29
|
-
{prepend && <div key="prepend">{prepend}</div>}
|
30
|
-
|
31
|
-
<div key="children" className="space-y-4">
|
32
|
-
{children}
|
33
|
-
</div>
|
34
|
-
|
35
|
-
{append && <div key="append">{append}</div>}
|
36
|
-
|
37
|
-
{(actions || cancel) && (
|
38
|
-
<div
|
39
|
-
key="buttons"
|
40
|
-
className="flex flex-wrap flex-row-reverse items-center justify-end space-x-reverse space-x-2"
|
41
|
-
>
|
42
|
-
{actions}
|
43
|
-
<div className="flex-auto" />
|
44
|
-
{cancel}
|
45
|
-
</div>
|
46
|
-
)}
|
47
|
-
</form>
|
48
|
-
)
|
49
|
-
}
|
@@ -1,73 +0,0 @@
|
|
1
|
-
import { JSX, ReactNode, useContext, useRef } from 'react'
|
2
|
-
import { useRandomString } from '../../hooks/use-random-string.ts'
|
3
|
-
import { clsx } from '../../lib/clsx.ts'
|
4
|
-
import { mergeRefs } from '../../lib/ref.ts'
|
5
|
-
import { Override } from '../../lib/util.ts'
|
6
|
-
import { FieldsetContext } from './fieldset.tsx'
|
7
|
-
import { InputContainer } from './input-container.tsx'
|
8
|
-
|
9
|
-
export type InputCheckboxProps = Override<
|
10
|
-
Omit<JSX.IntrinsicElements['input'], 'className' | 'type' | 'children'>,
|
11
|
-
{
|
12
|
-
className?: string
|
13
|
-
children?: ReactNode
|
14
|
-
}
|
15
|
-
>
|
16
|
-
|
17
|
-
export function InputCheckbox({
|
18
|
-
className,
|
19
|
-
children,
|
20
|
-
|
21
|
-
// input
|
22
|
-
id,
|
23
|
-
ref,
|
24
|
-
disabled,
|
25
|
-
'aria-labelledby': ariaLabelledBy,
|
26
|
-
...props
|
27
|
-
}: InputCheckboxProps) {
|
28
|
-
const htmlFor = useRandomString('input-checkbox-')
|
29
|
-
const containerRef = useRef<HTMLDivElement>(null)
|
30
|
-
const inputRef = useRef<HTMLInputElement>(null)
|
31
|
-
const ctx = useContext(FieldsetContext)
|
32
|
-
|
33
|
-
const inputId = id ?? htmlFor
|
34
|
-
|
35
|
-
return (
|
36
|
-
<InputContainer
|
37
|
-
ref={containerRef}
|
38
|
-
className={clsx('cursor-pointer', className)}
|
39
|
-
icon={
|
40
|
-
<input
|
41
|
-
{...props}
|
42
|
-
disabled={disabled ?? ctx.disabled}
|
43
|
-
aria-labelledby={
|
44
|
-
children
|
45
|
-
? // Prefer the local "<label>" element (through "htmlFor") over the wrapping "<fieldset>" to describe the checkbox.
|
46
|
-
undefined
|
47
|
-
: ariaLabelledBy ?? ctx.labelId
|
48
|
-
}
|
49
|
-
ref={mergeRefs([ref, inputRef])}
|
50
|
-
id={inputId}
|
51
|
-
className="accent-brand outline-none"
|
52
|
-
type="checkbox"
|
53
|
-
/>
|
54
|
-
}
|
55
|
-
tabIndex={-1}
|
56
|
-
onClick={(event) => {
|
57
|
-
if (event.target === containerRef.current && !event.defaultPrevented) {
|
58
|
-
inputRef.current?.click()
|
59
|
-
inputRef.current?.focus()
|
60
|
-
}
|
61
|
-
}}
|
62
|
-
>
|
63
|
-
{children && (
|
64
|
-
<label
|
65
|
-
htmlFor={inputId}
|
66
|
-
className="block w-full leading-[1.6] select-none cursor-pointer"
|
67
|
-
>
|
68
|
-
{children}
|
69
|
-
</label>
|
70
|
-
)}
|
71
|
-
</InputContainer>
|
72
|
-
)
|
73
|
-
}
|