@darajs/core 0.4.8
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/LICENSE +201 -0
- package/README.md +101 -0
- package/dist/actions/download-variable.d.ts +8 -0
- package/dist/actions/download-variable.d.ts.map +1 -0
- package/dist/actions/download-variable.js +140 -0
- package/dist/actions/download-variable.js.map +1 -0
- package/dist/actions/index.d.ts +7 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/index.js +7 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/navigate-to.d.ts +8 -0
- package/dist/actions/navigate-to.d.ts.map +1 -0
- package/dist/actions/navigate-to.js +37 -0
- package/dist/actions/navigate-to.js.map +1 -0
- package/dist/actions/notify.d.ts +4 -0
- package/dist/actions/notify.d.ts.map +1 -0
- package/dist/actions/notify.js +11 -0
- package/dist/actions/notify.js.map +1 -0
- package/dist/actions/reset-variables.d.ts +8 -0
- package/dist/actions/reset-variables.d.ts.map +1 -0
- package/dist/actions/reset-variables.js +37 -0
- package/dist/actions/reset-variables.js.map +1 -0
- package/dist/actions/trigger-variable.d.ts +8 -0
- package/dist/actions/trigger-variable.d.ts.map +1 -0
- package/dist/actions/trigger-variable.js +14 -0
- package/dist/actions/trigger-variable.js.map +1 -0
- package/dist/actions/update-variable.d.ts +15 -0
- package/dist/actions/update-variable.d.ts.map +1 -0
- package/dist/actions/update-variable.js +56 -0
- package/dist/actions/update-variable.js.map +1 -0
- package/dist/api/core.d.ts +35 -0
- package/dist/api/core.d.ts.map +1 -0
- package/dist/api/core.js +112 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/http.d.ts +29 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +126 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +5 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/websocket.d.ts +222 -0
- package/dist/api/websocket.d.ts.map +1 -0
- package/dist/api/websocket.js +353 -0
- package/dist/api/websocket.js.map +1 -0
- package/dist/assets/causalens-dark.svg +29 -0
- package/dist/assets/causalens-light.svg +29 -0
- package/dist/assets/dara-dark.svg +20 -0
- package/dist/assets/dara-light.svg +15 -0
- package/dist/assets/fonts/Manrope-VariableFont_wght.ttf +0 -0
- package/dist/auth/auth-wrapper.d.ts +15 -0
- package/dist/auth/auth-wrapper.d.ts.map +1 -0
- package/dist/auth/auth-wrapper.js +72 -0
- package/dist/auth/auth-wrapper.js.map +1 -0
- package/dist/auth/auth.d.ts +61 -0
- package/dist/auth/auth.d.ts.map +1 -0
- package/dist/auth/auth.js +163 -0
- package/dist/auth/auth.js.map +1 -0
- package/dist/auth/basic/basic-auth-login.d.ts +6 -0
- package/dist/auth/basic/basic-auth-login.d.ts.map +1 -0
- package/dist/auth/basic/basic-auth-login.js +171 -0
- package/dist/auth/basic/basic-auth-login.js.map +1 -0
- package/dist/auth/basic/basic-auth-logout.d.ts +6 -0
- package/dist/auth/basic/basic-auth-logout.d.ts.map +1 -0
- package/dist/auth/basic/basic-auth-logout.js +18 -0
- package/dist/auth/basic/basic-auth-logout.js.map +1 -0
- package/dist/auth/default/default-auth-login.d.ts +6 -0
- package/dist/auth/default/default-auth-login.d.ts.map +1 -0
- package/dist/auth/default/default-auth-login.js +59 -0
- package/dist/auth/default/default-auth-login.js.map +1 -0
- package/dist/auth/index.d.ts +7 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/use-session-token.d.ts +19 -0
- package/dist/auth/use-session-token.d.ts.map +1 -0
- package/dist/auth/use-session-token.js +30 -0
- package/dist/auth/use-session-token.js.map +1 -0
- package/dist/components/fallback/default.d.ts +5 -0
- package/dist/components/fallback/default.d.ts.map +1 -0
- package/dist/components/fallback/default.js +10 -0
- package/dist/components/fallback/default.js.map +1 -0
- package/dist/components/fallback/dots.d.ts +7 -0
- package/dist/components/fallback/dots.d.ts.map +1 -0
- package/dist/components/fallback/dots.js +78 -0
- package/dist/components/fallback/dots.js.map +1 -0
- package/dist/components/fallback/row.d.ts +5 -0
- package/dist/components/fallback/row.d.ts.map +1 -0
- package/dist/components/fallback/row.js +14 -0
- package/dist/components/fallback/row.js.map +1 -0
- package/dist/components/for/for.d.ts +35 -0
- package/dist/components/for/for.d.ts.map +1 -0
- package/dist/components/for/for.js +44 -0
- package/dist/components/for/for.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/menu/menu.d.ts +14 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.js +58 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/progress-tracker/progress-tracker.d.ts +18 -0
- package/dist/components/progress-tracker/progress-tracker.d.ts.map +1 -0
- package/dist/components/progress-tracker/progress-tracker.js +204 -0
- package/dist/components/progress-tracker/progress-tracker.js.map +1 -0
- package/dist/components/router-content/router-content.d.ts +14 -0
- package/dist/components/router-content/router-content.d.ts.map +1 -0
- package/dist/components/router-content/router-content.js +17 -0
- package/dist/components/router-content/router-content.js.map +1 -0
- package/dist/components/side-bar-frame/side-bar-frame.d.ts +21 -0
- package/dist/components/side-bar-frame/side-bar-frame.d.ts.map +1 -0
- package/dist/components/side-bar-frame/side-bar-frame.js +87 -0
- package/dist/components/side-bar-frame/side-bar-frame.js.map +1 -0
- package/dist/components/top-bar-frame/top-bar-frame.d.ts +16 -0
- package/dist/components/top-bar-frame/top-bar-frame.d.ts.map +1 -0
- package/dist/components/top-bar-frame/top-bar-frame.js +89 -0
- package/dist/components/top-bar-frame/top-bar-frame.js.map +1 -0
- package/dist/dara_core-0.4.8-py3-none-any.whl +0 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.d.ts +17 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.d.ts.map +1 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.js +37 -0
- package/dist/devtools/backend-errors/backend-errors-ctx.js.map +1 -0
- package/dist/devtools/backend-errors/backend-errors.d.ts +6 -0
- package/dist/devtools/backend-errors/backend-errors.d.ts.map +1 -0
- package/dist/devtools/backend-errors/backend-errors.js +57 -0
- package/dist/devtools/backend-errors/backend-errors.js.map +1 -0
- package/dist/devtools/backend-errors/error-display.d.ts +22 -0
- package/dist/devtools/backend-errors/error-display.d.ts.map +1 -0
- package/dist/devtools/backend-errors/error-display.js +101 -0
- package/dist/devtools/backend-errors/error-display.js.map +1 -0
- package/dist/devtools/backend-errors/index.d.ts +3 -0
- package/dist/devtools/backend-errors/index.d.ts.map +1 -0
- package/dist/devtools/backend-errors/index.js +3 -0
- package/dist/devtools/backend-errors/index.js.map +1 -0
- package/dist/devtools/devtools-content.d.ts +12 -0
- package/dist/devtools/devtools-content.d.ts.map +1 -0
- package/dist/devtools/devtools-content.js +73 -0
- package/dist/devtools/devtools-content.js.map +1 -0
- package/dist/devtools/devtools-context.d.ts +7 -0
- package/dist/devtools/devtools-context.d.ts.map +1 -0
- package/dist/devtools/devtools-context.js +9 -0
- package/dist/devtools/devtools-context.js.map +1 -0
- package/dist/devtools/devtools-wrapper.d.ts +8 -0
- package/dist/devtools/devtools-wrapper.d.ts.map +1 -0
- package/dist/devtools/devtools-wrapper.js +64 -0
- package/dist/devtools/devtools-wrapper.js.map +1 -0
- package/dist/devtools/devtools.d.ts +5 -0
- package/dist/devtools/devtools.d.ts.map +1 -0
- package/dist/devtools/devtools.js +10 -0
- package/dist/devtools/devtools.js.map +1 -0
- package/dist/devtools/floating-button.d.ts +23 -0
- package/dist/devtools/floating-button.d.ts.map +1 -0
- package/dist/devtools/floating-button.js +94 -0
- package/dist/devtools/floating-button.js.map +1 -0
- package/dist/devtools/index.d.ts +2 -0
- package/dist/devtools/index.d.ts.map +1 -0
- package/dist/devtools/index.js +2 -0
- package/dist/devtools/index.js.map +1 -0
- package/dist/devtools/resizer.d.ts +18 -0
- package/dist/devtools/resizer.d.ts.map +1 -0
- package/dist/devtools/resizer.js +49 -0
- package/dist/devtools/resizer.js.map +1 -0
- package/dist/devtools/use-move.d.ts +21 -0
- package/dist/devtools/use-move.d.ts.map +1 -0
- package/dist/devtools/use-move.js +56 -0
- package/dist/devtools/use-move.js.map +1 -0
- package/dist/index.css +95 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/jest-setup.d.ts +2 -0
- package/dist/jest-setup.d.ts.map +1 -0
- package/dist/jest-setup.js +18 -0
- package/dist/jest-setup.js.map +1 -0
- package/dist/pages/error-page.d.ts +3 -0
- package/dist/pages/error-page.d.ts.map +1 -0
- package/dist/pages/error-page.js +32 -0
- package/dist/pages/error-page.js.map +1 -0
- package/dist/pages/sso-callback-page.d.ts +6 -0
- package/dist/pages/sso-callback-page.d.ts.map +1 -0
- package/dist/pages/sso-callback-page.js +8 -0
- package/dist/pages/sso-callback-page.js.map +1 -0
- package/dist/run.d.ts +22 -0
- package/dist/run.d.ts.map +1 -0
- package/dist/run.js +40 -0
- package/dist/run.js.map +1 -0
- package/dist/shared/center/center.d.ts +5 -0
- package/dist/shared/center/center.d.ts.map +1 -0
- package/dist/shared/center/center.js +15 -0
- package/dist/shared/center/center.js.map +1 -0
- package/dist/shared/context/direction-context.d.ts +6 -0
- package/dist/shared/context/direction-context.d.ts.map +1 -0
- package/dist/shared/context/direction-context.js +4 -0
- package/dist/shared/context/direction-context.js.map +1 -0
- package/dist/shared/context/display-context.d.ts +13 -0
- package/dist/shared/context/display-context.d.ts.map +1 -0
- package/dist/shared/context/display-context.js +4 -0
- package/dist/shared/context/display-context.js.map +1 -0
- package/dist/shared/context/fallback-context.d.ts +11 -0
- package/dist/shared/context/fallback-context.d.ts.map +1 -0
- package/dist/shared/context/fallback-context.js +4 -0
- package/dist/shared/context/fallback-context.js.map +1 -0
- package/dist/shared/context/global-task-context.d.ts +40 -0
- package/dist/shared/context/global-task-context.d.ts.map +1 -0
- package/dist/shared/context/global-task-context.js +81 -0
- package/dist/shared/context/global-task-context.js.map +1 -0
- package/dist/shared/context/importers-context.d.ts +6 -0
- package/dist/shared/context/importers-context.d.ts.map +1 -0
- package/dist/shared/context/importers-context.js +4 -0
- package/dist/shared/context/importers-context.js.map +1 -0
- package/dist/shared/context/index.d.ts +10 -0
- package/dist/shared/context/index.d.ts.map +1 -0
- package/dist/shared/context/index.js +10 -0
- package/dist/shared/context/index.js.map +1 -0
- package/dist/shared/context/registries-context.d.ts +20 -0
- package/dist/shared/context/registries-context.d.ts.map +1 -0
- package/dist/shared/context/registries-context.js +8 -0
- package/dist/shared/context/registries-context.js.map +1 -0
- package/dist/shared/context/request-extras-context.d.ts +33 -0
- package/dist/shared/context/request-extras-context.d.ts.map +1 -0
- package/dist/shared/context/request-extras-context.js +55 -0
- package/dist/shared/context/request-extras-context.js.map +1 -0
- package/dist/shared/context/variable-context.d.ts +10 -0
- package/dist/shared/context/variable-context.d.ts.map +1 -0
- package/dist/shared/context/variable-context.js +4 -0
- package/dist/shared/context/variable-context.js.map +1 -0
- package/dist/shared/context/websocket-context.d.ts +7 -0
- package/dist/shared/context/websocket-context.d.ts.map +1 -0
- package/dist/shared/context/websocket-context.js +4 -0
- package/dist/shared/context/websocket-context.js.map +1 -0
- package/dist/shared/dynamic-component/clean-props.d.ts +6 -0
- package/dist/shared/dynamic-component/clean-props.d.ts.map +1 -0
- package/dist/shared/dynamic-component/clean-props.js +13 -0
- package/dist/shared/dynamic-component/clean-props.js.map +1 -0
- package/dist/shared/dynamic-component/dynamic-component.d.ts +16 -0
- package/dist/shared/dynamic-component/dynamic-component.d.ts.map +1 -0
- package/dist/shared/dynamic-component/dynamic-component.js +252 -0
- package/dist/shared/dynamic-component/dynamic-component.js.map +1 -0
- package/dist/shared/error-handling/error-display.d.ts +8 -0
- package/dist/shared/error-handling/error-display.d.ts.map +1 -0
- package/dist/shared/error-handling/error-display.js +94 -0
- package/dist/shared/error-handling/error-display.js.map +1 -0
- package/dist/shared/error-handling/index.d.ts +3 -0
- package/dist/shared/error-handling/index.d.ts.map +1 -0
- package/dist/shared/error-handling/index.js +3 -0
- package/dist/shared/error-handling/index.js.map +1 -0
- package/dist/shared/error-handling/types.d.ts +11 -0
- package/dist/shared/error-handling/types.d.ts.map +1 -0
- package/dist/shared/error-handling/types.js +9 -0
- package/dist/shared/error-handling/types.js.map +1 -0
- package/dist/shared/event-bus/event-bus.d.ts +27 -0
- package/dist/shared/event-bus/event-bus.d.ts.map +1 -0
- package/dist/shared/event-bus/event-bus.js +58 -0
- package/dist/shared/event-bus/event-bus.js.map +1 -0
- package/dist/shared/global-state-store.d.ts +54 -0
- package/dist/shared/global-state-store.d.ts.map +1 -0
- package/dist/shared/global-state-store.js +168 -0
- package/dist/shared/global-state-store.js.map +1 -0
- package/dist/shared/index.d.ts +12 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +10 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/interactivity/data-variable.d.ts +78 -0
- package/dist/shared/interactivity/data-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/data-variable.js +218 -0
- package/dist/shared/interactivity/data-variable.js.map +1 -0
- package/dist/shared/interactivity/derived-variable.d.ts +160 -0
- package/dist/shared/interactivity/derived-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/derived-variable.js +446 -0
- package/dist/shared/interactivity/derived-variable.js.map +1 -0
- package/dist/shared/interactivity/filtering.d.ts +9 -0
- package/dist/shared/interactivity/filtering.d.ts.map +1 -0
- package/dist/shared/interactivity/filtering.js +20 -0
- package/dist/shared/interactivity/filtering.js.map +1 -0
- package/dist/shared/interactivity/index.d.ts +10 -0
- package/dist/shared/interactivity/index.d.ts.map +1 -0
- package/dist/shared/interactivity/index.js +9 -0
- package/dist/shared/interactivity/index.js.map +1 -0
- package/dist/shared/interactivity/internal.d.ts +9 -0
- package/dist/shared/interactivity/internal.d.ts.map +1 -0
- package/dist/shared/interactivity/internal.js +11 -0
- package/dist/shared/interactivity/internal.js.map +1 -0
- package/dist/shared/interactivity/nested.d.ts +16 -0
- package/dist/shared/interactivity/nested.d.ts.map +1 -0
- package/dist/shared/interactivity/nested.js +54 -0
- package/dist/shared/interactivity/nested.js.map +1 -0
- package/dist/shared/interactivity/persistence.d.ts +43 -0
- package/dist/shared/interactivity/persistence.d.ts.map +1 -0
- package/dist/shared/interactivity/persistence.js +215 -0
- package/dist/shared/interactivity/persistence.js.map +1 -0
- package/dist/shared/interactivity/plain-variable.d.ts +17 -0
- package/dist/shared/interactivity/plain-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/plain-variable.js +222 -0
- package/dist/shared/interactivity/plain-variable.js.map +1 -0
- package/dist/shared/interactivity/resolve-value.d.ts +13 -0
- package/dist/shared/interactivity/resolve-value.d.ts.map +1 -0
- package/dist/shared/interactivity/resolve-value.js +36 -0
- package/dist/shared/interactivity/resolve-value.js.map +1 -0
- package/dist/shared/interactivity/resolve-variable.d.ts +18 -0
- package/dist/shared/interactivity/resolve-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/resolve-variable.js +46 -0
- package/dist/shared/interactivity/resolve-variable.js.map +1 -0
- package/dist/shared/interactivity/store.d.ts +76 -0
- package/dist/shared/interactivity/store.d.ts.map +1 -0
- package/dist/shared/interactivity/store.js +99 -0
- package/dist/shared/interactivity/store.js.map +1 -0
- package/dist/shared/interactivity/triggers.d.ts +31 -0
- package/dist/shared/interactivity/triggers.d.ts.map +1 -0
- package/dist/shared/interactivity/triggers.js +105 -0
- package/dist/shared/interactivity/triggers.js.map +1 -0
- package/dist/shared/interactivity/url-variable.d.ts +12 -0
- package/dist/shared/interactivity/url-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/url-variable.js +27 -0
- package/dist/shared/interactivity/url-variable.js.map +1 -0
- package/dist/shared/interactivity/use-any-variable.d.ts +8 -0
- package/dist/shared/interactivity/use-any-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-any-variable.js +39 -0
- package/dist/shared/interactivity/use-any-variable.js.map +1 -0
- package/dist/shared/interactivity/use-data-variable.d.ts +18 -0
- package/dist/shared/interactivity/use-data-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-data-variable.js +58 -0
- package/dist/shared/interactivity/use-data-variable.js.map +1 -0
- package/dist/shared/interactivity/use-refresh-selector.d.ts +5 -0
- package/dist/shared/interactivity/use-refresh-selector.d.ts.map +1 -0
- package/dist/shared/interactivity/use-refresh-selector.js +20 -0
- package/dist/shared/interactivity/use-refresh-selector.js.map +1 -0
- package/dist/shared/interactivity/use-server-component.d.ts +24 -0
- package/dist/shared/interactivity/use-server-component.d.ts.map +1 -0
- package/dist/shared/interactivity/use-server-component.js +256 -0
- package/dist/shared/interactivity/use-server-component.js.map +1 -0
- package/dist/shared/interactivity/use-variable-state.d.ts +9 -0
- package/dist/shared/interactivity/use-variable-state.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable-state.js +26 -0
- package/dist/shared/interactivity/use-variable-state.js.map +1 -0
- package/dist/shared/interactivity/use-variable-value.d.ts +33 -0
- package/dist/shared/interactivity/use-variable-value.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable-value.js +94 -0
- package/dist/shared/interactivity/use-variable-value.js.map +1 -0
- package/dist/shared/interactivity/use-variable.d.ts +12 -0
- package/dist/shared/interactivity/use-variable.d.ts.map +1 -0
- package/dist/shared/interactivity/use-variable.js +84 -0
- package/dist/shared/interactivity/use-variable.js.map +1 -0
- package/dist/shared/private-route/private-route.d.ts +19 -0
- package/dist/shared/private-route/private-route.d.ts.map +1 -0
- package/dist/shared/private-route/private-route.js +35 -0
- package/dist/shared/private-route/private-route.js.map +1 -0
- package/dist/shared/template-root/dynamic-context.d.ts +9 -0
- package/dist/shared/template-root/dynamic-context.d.ts.map +1 -0
- package/dist/shared/template-root/dynamic-context.js +29 -0
- package/dist/shared/template-root/dynamic-context.js.map +1 -0
- package/dist/shared/template-root/template-root.d.ts +12 -0
- package/dist/shared/template-root/template-root.d.ts.map +1 -0
- package/dist/shared/template-root/template-root.js +94 -0
- package/dist/shared/template-root/template-root.js.map +1 -0
- package/dist/shared/utils/clean-session-cache.d.ts +9 -0
- package/dist/shared/utils/clean-session-cache.d.ts.map +1 -0
- package/dist/shared/utils/clean-session-cache.js +19 -0
- package/dist/shared/utils/clean-session-cache.js.map +1 -0
- package/dist/shared/utils/embed.d.ts +22 -0
- package/dist/shared/utils/embed.d.ts.map +1 -0
- package/dist/shared/utils/embed.js +43 -0
- package/dist/shared/utils/embed.js.map +1 -0
- package/dist/shared/utils/get-icon.d.ts +9 -0
- package/dist/shared/utils/get-icon.d.ts.map +1 -0
- package/dist/shared/utils/get-icon.js +30 -0
- package/dist/shared/utils/get-icon.js.map +1 -0
- package/dist/shared/utils/hashing.d.ts +14 -0
- package/dist/shared/utils/hashing.d.ts.map +1 -0
- package/dist/shared/utils/hashing.js +26 -0
- package/dist/shared/utils/hashing.js.map +1 -0
- package/dist/shared/utils/index.d.ts +19 -0
- package/dist/shared/utils/index.d.ts.map +1 -0
- package/dist/shared/utils/index.js +17 -0
- package/dist/shared/utils/index.js.map +1 -0
- package/dist/shared/utils/inject-css.d.ts +12 -0
- package/dist/shared/utils/inject-css.d.ts.map +1 -0
- package/dist/shared/utils/inject-css.js +25 -0
- package/dist/shared/utils/inject-css.js.map +1 -0
- package/dist/shared/utils/is-js-component.d.ts +9 -0
- package/dist/shared/utils/is-js-component.d.ts.map +1 -0
- package/dist/shared/utils/is-js-component.js +11 -0
- package/dist/shared/utils/is-js-component.js.map +1 -0
- package/dist/shared/utils/normalization.d.ts +19 -0
- package/dist/shared/utils/normalization.d.ts.map +1 -0
- package/dist/shared/utils/normalization.js +121 -0
- package/dist/shared/utils/normalization.js.map +1 -0
- package/dist/shared/utils/resolve-theme.d.ts +9 -0
- package/dist/shared/utils/resolve-theme.d.ts.map +1 -0
- package/dist/shared/utils/resolve-theme.js +28 -0
- package/dist/shared/utils/resolve-theme.js.map +1 -0
- package/dist/shared/utils/templating.d.ts +24 -0
- package/dist/shared/utils/templating.d.ts.map +1 -0
- package/dist/shared/utils/templating.js +67 -0
- package/dist/shared/utils/templating.js.map +1 -0
- package/dist/shared/utils/use-action-registry.d.ts +11 -0
- package/dist/shared/utils/use-action-registry.d.ts.map +1 -0
- package/dist/shared/utils/use-action-registry.js +18 -0
- package/dist/shared/utils/use-action-registry.js.map +1 -0
- package/dist/shared/utils/use-action.d.ts +34 -0
- package/dist/shared/utils/use-action.d.ts.map +1 -0
- package/dist/shared/utils/use-action.js +314 -0
- package/dist/shared/utils/use-action.js.map +1 -0
- package/dist/shared/utils/use-component-registry.d.ts +11 -0
- package/dist/shared/utils/use-component-registry.d.ts.map +1 -0
- package/dist/shared/utils/use-component-registry.js +57 -0
- package/dist/shared/utils/use-component-registry.js.map +1 -0
- package/dist/shared/utils/use-component-styles.d.ts +24 -0
- package/dist/shared/utils/use-component-styles.d.ts.map +1 -0
- package/dist/shared/utils/use-component-styles.js +69 -0
- package/dist/shared/utils/use-component-styles.js.map +1 -0
- package/dist/shared/utils/use-defer-loadable.d.ts +8 -0
- package/dist/shared/utils/use-defer-loadable.d.ts.map +1 -0
- package/dist/shared/utils/use-defer-loadable.js +44 -0
- package/dist/shared/utils/use-defer-loadable.js.map +1 -0
- package/dist/shared/utils/use-interval.d.ts +9 -0
- package/dist/shared/utils/use-interval.d.ts.map +1 -0
- package/dist/shared/utils/use-interval.js +19 -0
- package/dist/shared/utils/use-interval.js.map +1 -0
- package/dist/shared/utils/use-previous.d.ts +10 -0
- package/dist/shared/utils/use-previous.d.ts.map +1 -0
- package/dist/shared/utils/use-previous.js +17 -0
- package/dist/shared/utils/use-previous.js.map +1 -0
- package/dist/shared/utils/use-url-sync.d.ts +20 -0
- package/dist/shared/utils/use-url-sync.d.ts.map +1 -0
- package/dist/shared/utils/use-url-sync.js +68 -0
- package/dist/shared/utils/use-url-sync.js.map +1 -0
- package/dist/shared/utils/use-window-title.d.ts +3 -0
- package/dist/shared/utils/use-window-title.d.ts.map +1 -0
- package/dist/shared/utils/use-window-title.js +14 -0
- package/dist/shared/utils/use-window-title.js.map +1 -0
- package/dist/shared/variable-state-provider/variable-state-provider.d.ts +10 -0
- package/dist/shared/variable-state-provider/variable-state-provider.d.ts.map +1 -0
- package/dist/shared/variable-state-provider/variable-state-provider.js +29 -0
- package/dist/shared/variable-state-provider/variable-state-provider.js.map +1 -0
- package/dist/shared/wrapper/wrapper.d.ts +7 -0
- package/dist/shared/wrapper/wrapper.d.ts.map +1 -0
- package/dist/shared/wrapper/wrapper.js +14 -0
- package/dist/shared/wrapper/wrapper.js.map +1 -0
- package/dist/types/auth.d.ts +15 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +6 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/core.d.ts +440 -0
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +22 -0
- package/dist/types/core.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/utils.d.ts +56 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utils.js +93 -0
- package/dist/types/utils.js.map +1 -0
- package/dist/umd/dara.core.umd.js +86508 -0
- package/dist/umd/style.css +848 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +20 -0
- package/dist/utils.js.map +1 -0
- package/package.json +121 -0
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
interface AuthWrapperProps {
|
|
3
|
+
/** The children to wrap */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Simple Auth Wrapper component that initializes the token from localStorage,
|
|
8
|
+
* synchronizes token with localStorage and refreshes the token if it's about to expire.
|
|
9
|
+
* Renders the login/logout components and the children wrapped in PrivateRoute.
|
|
10
|
+
*
|
|
11
|
+
* @param props - the component props
|
|
12
|
+
*/
|
|
13
|
+
declare function AuthWrapper(props: AuthWrapperProps): JSX.Element;
|
|
14
|
+
export default AuthWrapper;
|
|
15
|
+
//# sourceMappingURL=auth-wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-wrapper.d.ts","sourceRoot":"","sources":["../../js/auth/auth-wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA2C,MAAM,OAAO,CAAC;AAa3E,UAAU,gBAAgB;IACtB,2BAA2B;IAC3B,QAAQ,EAAE,SAAS,CAAC;CACvB;AAsCD;;;;;;GAMG;AACH,iBAAS,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,GAAG,CAAC,OAAO,CAqCzD;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
import { useContext, useEffect, useRef, useState } from 'react';
|
|
14
|
+
import { Route, Switch } from 'react-router-dom';
|
|
15
|
+
import DefaultFallback from '../components/fallback/default';
|
|
16
|
+
import ErrorPage from '../pages/error-page';
|
|
17
|
+
import Center from '../shared/center/center';
|
|
18
|
+
import { ImportersCtx } from '../shared/context';
|
|
19
|
+
import PrivateRoute from '../shared/private-route/private-route';
|
|
20
|
+
import { getToken } from '../shared/utils';
|
|
21
|
+
import { useAuthConfig } from './auth';
|
|
22
|
+
import { setSessionToken } from './use-session-token';
|
|
23
|
+
/**
|
|
24
|
+
* Simplified version of DynamicComponent, just for the auth components.
|
|
25
|
+
* This is because we can't use the component registry for auth components, since the component registry operates
|
|
26
|
+
* in an authenticated context, and we need to be able to render the login page without being authenticated.
|
|
27
|
+
*/
|
|
28
|
+
function DynamicAuthComponent(props) {
|
|
29
|
+
const importers = useContext(ImportersCtx);
|
|
30
|
+
const [component, setComponent] = useState(() => _jsx(DefaultFallback, {}));
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const importer = importers[props.component.py_module];
|
|
33
|
+
importer()
|
|
34
|
+
.then((moduleContent) => {
|
|
35
|
+
if (!moduleContent) {
|
|
36
|
+
throw new Error(`Failed to import module ${props.component.py_module}`);
|
|
37
|
+
}
|
|
38
|
+
const Component = moduleContent[props.component.js_name];
|
|
39
|
+
if (!Component) {
|
|
40
|
+
throw new Error(`Failed to import component ${props.component.js_name} from module ${props.component.py_module}`);
|
|
41
|
+
}
|
|
42
|
+
setComponent(_jsx(Component, {}));
|
|
43
|
+
})
|
|
44
|
+
.catch((err) => {
|
|
45
|
+
throw new Error(`Failed to import module ${props.component.py_module}`, err);
|
|
46
|
+
});
|
|
47
|
+
}, [props.component, importers]);
|
|
48
|
+
return component;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Simple Auth Wrapper component that initializes the token from localStorage,
|
|
52
|
+
* synchronizes token with localStorage and refreshes the token if it's about to expire.
|
|
53
|
+
* Renders the login/logout components and the children wrapped in PrivateRoute.
|
|
54
|
+
*
|
|
55
|
+
* @param props - the component props
|
|
56
|
+
*/
|
|
57
|
+
function AuthWrapper(props) {
|
|
58
|
+
const { data: authConfig, isLoading } = useAuthConfig();
|
|
59
|
+
const isMounted = useRef(false);
|
|
60
|
+
// set initial token from local storage as soon as we render
|
|
61
|
+
if (!isMounted.current) {
|
|
62
|
+
isMounted.current = true;
|
|
63
|
+
setSessionToken(getToken());
|
|
64
|
+
}
|
|
65
|
+
if (isLoading) {
|
|
66
|
+
return (_jsx(Center, { children: _jsx(DefaultFallback, {}) }));
|
|
67
|
+
}
|
|
68
|
+
const _a = authConfig.auth_components, { login, logout } = _a, extraRoutes = __rest(_a, ["login", "logout"]);
|
|
69
|
+
return (_jsxs(Switch, { children: [_jsx(Route, { path: "/login", children: _jsx(DynamicAuthComponent, { component: login }) }), _jsx(Route, { path: "/logout", children: _jsx(DynamicAuthComponent, { component: logout }) }), Object.entries(extraRoutes).map(([path, component]) => (_jsx(Route, { path: `/${path}`, children: _jsx(DynamicAuthComponent, { component: component }) }, path))), _jsx(Route, { component: ErrorPage, path: "/error" }), _jsx(Route, { path: "/", render: () => _jsx(PrivateRoute, { children: props.children }) })] }));
|
|
70
|
+
}
|
|
71
|
+
export default AuthWrapper;
|
|
72
|
+
//# sourceMappingURL=auth-wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-wrapper.js","sourceRoot":"","sources":["../../js/auth/auth-wrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { UseQueryResult } from '@tanstack/react-query';
|
|
2
|
+
import { RequestError } from '@darajs/ui-utils';
|
|
3
|
+
import { User, UserData } from '../types';
|
|
4
|
+
declare enum AuthenticationErrorReason {
|
|
5
|
+
BAD_REQUEST = "bad_request",
|
|
6
|
+
EXPIRED_TOKEN = "expired",
|
|
7
|
+
INVALID_CREDENTIALS = "invalid_credentials",
|
|
8
|
+
INVALID_TOKEN = "invalid_token",
|
|
9
|
+
OTHER = "other",
|
|
10
|
+
UNAUTHORIZED = "unauthorized"
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Separate from the main component system, since we can't use component registry
|
|
14
|
+
*/
|
|
15
|
+
export interface AuthComponent {
|
|
16
|
+
js_module: string;
|
|
17
|
+
js_name: string;
|
|
18
|
+
py_module: string;
|
|
19
|
+
}
|
|
20
|
+
interface AuthComponents {
|
|
21
|
+
[route: string]: AuthComponent;
|
|
22
|
+
login: AuthComponent;
|
|
23
|
+
logout: AuthComponent;
|
|
24
|
+
}
|
|
25
|
+
interface AuthConfig {
|
|
26
|
+
auth_components: AuthComponents;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Fetch components to use for authentication
|
|
30
|
+
*/
|
|
31
|
+
export declare function useAuthConfig(): UseQueryResult<AuthConfig>;
|
|
32
|
+
interface RedirectResponse {
|
|
33
|
+
redirect_uri: string;
|
|
34
|
+
}
|
|
35
|
+
interface SuccessResponse {
|
|
36
|
+
success: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Revoke the current session
|
|
40
|
+
*/
|
|
41
|
+
export declare function revokeSession(): Promise<RedirectResponse | SuccessResponse>;
|
|
42
|
+
/**
|
|
43
|
+
* Helper function to handle auth errors in a response
|
|
44
|
+
*
|
|
45
|
+
* @param res the response object to check
|
|
46
|
+
* @param toLogin if true, open the login page, else open the error page
|
|
47
|
+
* @param ignoreErrors if specified, certain reasons for an error will be ignored
|
|
48
|
+
*/
|
|
49
|
+
export declare function handleAuthErrors(res: Response, toLogin?: boolean, ignoreErrors?: Array<AuthenticationErrorReason>): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Api call to get user data from the backend
|
|
52
|
+
*/
|
|
53
|
+
export declare function useUser(): UseQueryResult<UserData, RequestError>;
|
|
54
|
+
/** Api call to fetch the session token from the backend */
|
|
55
|
+
export declare function requestSessionToken(body?: User): Promise<string>;
|
|
56
|
+
/** Api call to fetch the session token from the backend */
|
|
57
|
+
export declare function useSession(body?: User): UseQueryResult<string, RequestError>;
|
|
58
|
+
/** Api call to verify the session token from the backend */
|
|
59
|
+
export declare function verifySessionToken(): Promise<boolean>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../js/auth/auth.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAY,MAAM,uBAAuB,CAAC;AAEjE,OAAO,EAAe,YAAY,EAAoB,MAAM,kBAAkB,CAAC;AAK/E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzC,aAAK,yBAAyB;IAC1B,WAAW,gBAAgB;IAC3B,aAAa,YAAY;IACzB,mBAAmB,wBAAwB;IAC3C,aAAa,kBAAkB;IAC/B,KAAK,UAAU;IACf,YAAY,iBAAiB;CAChC;AA2CD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,cAAc;IACpB,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;CACzB;AAED,UAAU,UAAU;IAChB,eAAe,EAAE,cAAc,CAAC;CACnC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,cAAc,CAAC,UAAU,CAAC,CAY1D;AAED,UAAU,gBAAgB;IACtB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,UAAU,eAAe;IACrB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,GAAG,eAAe,CAAC,CAcjF;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAClC,GAAG,EAAE,QAAQ,EACb,OAAO,UAAQ,EACf,YAAY,GAAE,KAAK,CAAC,yBAAyB,CAAQ,GACtD,OAAO,CAAC,OAAO,CAAC,CAqBlB;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAYhE;AAED,2DAA2D;AAC3D,wBAAsB,mBAAmB,CAAC,IAAI,GAAE,IAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB1E;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,IAAI,GAAE,IAAS,GAAG,cAAc,CAAC,MAAM,EAAE,YAAY,CAAC,CAQhF;AAED,4DAA4D;AAC5D,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAK3D"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { useQuery } from '@tanstack/react-query';
|
|
11
|
+
import { HTTP_METHOD, validateResponse } from '@darajs/ui-utils';
|
|
12
|
+
import { request } from '../api/http';
|
|
13
|
+
import { useRequestExtras } from '../shared/context';
|
|
14
|
+
import { getTokenKey } from '../shared/utils/embed';
|
|
15
|
+
var AuthenticationErrorReason;
|
|
16
|
+
(function (AuthenticationErrorReason) {
|
|
17
|
+
AuthenticationErrorReason["BAD_REQUEST"] = "bad_request";
|
|
18
|
+
AuthenticationErrorReason["EXPIRED_TOKEN"] = "expired";
|
|
19
|
+
AuthenticationErrorReason["INVALID_CREDENTIALS"] = "invalid_credentials";
|
|
20
|
+
AuthenticationErrorReason["INVALID_TOKEN"] = "invalid_token";
|
|
21
|
+
AuthenticationErrorReason["OTHER"] = "other";
|
|
22
|
+
AuthenticationErrorReason["UNAUTHORIZED"] = "unauthorized";
|
|
23
|
+
})(AuthenticationErrorReason || (AuthenticationErrorReason = {}));
|
|
24
|
+
/**
|
|
25
|
+
* Whether a message is an authentication error
|
|
26
|
+
*
|
|
27
|
+
* @param message message
|
|
28
|
+
*/
|
|
29
|
+
function isAuthenticationError(message) {
|
|
30
|
+
return (message !== null &&
|
|
31
|
+
message !== undefined &&
|
|
32
|
+
typeof message === 'object' &&
|
|
33
|
+
'reason' in message &&
|
|
34
|
+
Object.values(AuthenticationErrorReason).includes(message.reason));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Whether the error should be ignored
|
|
38
|
+
*
|
|
39
|
+
* @param message error message
|
|
40
|
+
* @param ignoreErrors error types to ignore
|
|
41
|
+
*/
|
|
42
|
+
function shouldIgnoreError(message, ignoreErrors) {
|
|
43
|
+
return ignoreErrors && ignoreErrors.includes(message.reason);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Returns true if the error should redirect to login, otherwise it should redirect to the error page
|
|
47
|
+
*
|
|
48
|
+
* @param message error message
|
|
49
|
+
*/
|
|
50
|
+
function shouldRedirectToLogin(message) {
|
|
51
|
+
return [AuthenticationErrorReason.INVALID_CREDENTIALS, AuthenticationErrorReason.EXPIRED_TOKEN].includes(message.reason);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Fetch components to use for authentication
|
|
55
|
+
*/
|
|
56
|
+
export function useAuthConfig() {
|
|
57
|
+
return useQuery(['auth-config'], () => __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const response = yield request('/api/core/auth-config', {
|
|
59
|
+
method: HTTP_METHOD.GET,
|
|
60
|
+
});
|
|
61
|
+
return response.json();
|
|
62
|
+
}), { refetchOnWindowFocus: false });
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Revoke the current session
|
|
66
|
+
*/
|
|
67
|
+
export function revokeSession() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
try {
|
|
70
|
+
const response = yield request('/api/auth/revoke-session', {
|
|
71
|
+
method: HTTP_METHOD.POST,
|
|
72
|
+
});
|
|
73
|
+
if (response.ok) {
|
|
74
|
+
const responseData = yield response.json();
|
|
75
|
+
return responseData;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch (e) {
|
|
79
|
+
// eslint-disable-next-line no-console
|
|
80
|
+
console.error('Failed to revoke session', e);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Helper function to handle auth errors in a response
|
|
86
|
+
*
|
|
87
|
+
* @param res the response object to check
|
|
88
|
+
* @param toLogin if true, open the login page, else open the error page
|
|
89
|
+
* @param ignoreErrors if specified, certain reasons for an error will be ignored
|
|
90
|
+
*/
|
|
91
|
+
export function handleAuthErrors(res_1) {
|
|
92
|
+
return __awaiter(this, arguments, void 0, function* (res, toLogin = false, ignoreErrors = null) {
|
|
93
|
+
var _a;
|
|
94
|
+
const content = yield res.clone().json();
|
|
95
|
+
if (isAuthenticationError(content === null || content === void 0 ? void 0 : content.detail) && !shouldIgnoreError(content === null || content === void 0 ? void 0 : content.detail, ignoreErrors)) {
|
|
96
|
+
localStorage.removeItem(getTokenKey());
|
|
97
|
+
// use existing referrer if available in case we were already redirected because of e.g. missing token
|
|
98
|
+
const queryParams = new URLSearchParams(window.location.search);
|
|
99
|
+
const referrer = (_a = queryParams.get('referrer')) !== null && _a !== void 0 ? _a : encodeURIComponent(window.location.pathname + window.location.search);
|
|
100
|
+
const path = toLogin || shouldRedirectToLogin(content.detail) ?
|
|
101
|
+
`/login?referrer=${referrer}`
|
|
102
|
+
: `/error?code=${res.status}`;
|
|
103
|
+
window.location.href = `${window.dara.base_url}${path}`;
|
|
104
|
+
return true;
|
|
105
|
+
}
|
|
106
|
+
return false;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Api call to get user data from the backend
|
|
111
|
+
*/
|
|
112
|
+
export function useUser() {
|
|
113
|
+
const extras = useRequestExtras();
|
|
114
|
+
return useQuery({
|
|
115
|
+
queryFn: () => __awaiter(this, void 0, void 0, function* () {
|
|
116
|
+
const res = yield request('/api/auth/user', { method: HTTP_METHOD.GET }, extras);
|
|
117
|
+
yield handleAuthErrors(res);
|
|
118
|
+
yield validateResponse(res, 'Failed to fetch user for this app');
|
|
119
|
+
return res.json();
|
|
120
|
+
}),
|
|
121
|
+
queryKey: ['user'],
|
|
122
|
+
refetchOnWindowFocus: false,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/** Api call to fetch the session token from the backend */
|
|
126
|
+
export function requestSessionToken() {
|
|
127
|
+
return __awaiter(this, arguments, void 0, function* (body = {}) {
|
|
128
|
+
const res = yield request('/api/auth/session', {
|
|
129
|
+
body: JSON.stringify(body),
|
|
130
|
+
method: HTTP_METHOD.POST,
|
|
131
|
+
});
|
|
132
|
+
// check auth errors, but ignore invalid credentials - these will be handled by validateResponse further
|
|
133
|
+
const loggedOut = yield handleAuthErrors(res, false, [AuthenticationErrorReason.INVALID_CREDENTIALS]);
|
|
134
|
+
if (loggedOut) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
yield validateResponse(res, 'Failed to fetch the session token');
|
|
138
|
+
const parsedResponse = yield res.json();
|
|
139
|
+
const { token } = parsedResponse;
|
|
140
|
+
localStorage.setItem(getTokenKey(), token);
|
|
141
|
+
return token;
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
/** Api call to fetch the session token from the backend */
|
|
145
|
+
export function useSession(body = {}) {
|
|
146
|
+
return useQuery({
|
|
147
|
+
queryFn: () => __awaiter(this, void 0, void 0, function* () {
|
|
148
|
+
return requestSessionToken(body);
|
|
149
|
+
}),
|
|
150
|
+
queryKey: ['session'],
|
|
151
|
+
refetchOnMount: false,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/** Api call to verify the session token from the backend */
|
|
155
|
+
export function verifySessionToken() {
|
|
156
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
+
const res = yield request('/api/auth/verify-session', {
|
|
158
|
+
method: HTTP_METHOD.POST,
|
|
159
|
+
});
|
|
160
|
+
return res.ok;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../js/auth/auth.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-auth-login.d.ts","sourceRoot":"","sources":["../../../js/auth/basic/basic-auth-login.tsx"],"names":[],"mappings":"AA8HA;;GAEG;AACH,iBAAS,cAAc,IAAI,GAAG,CAAC,OAAO,CA4GrC;AAED,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
12
|
+
import { transparentize } from 'polished';
|
|
13
|
+
import { useEffect, useState } from 'react';
|
|
14
|
+
import { useHistory, useLocation } from 'react-router-dom';
|
|
15
|
+
import styled from '@darajs/styled-components';
|
|
16
|
+
import { Button } from '@darajs/ui-components';
|
|
17
|
+
import { requestSessionToken } from '../../api';
|
|
18
|
+
import DefaultFallback from '../../components/fallback/default';
|
|
19
|
+
import Center from '../../shared/center/center';
|
|
20
|
+
import { verifySessionToken } from '../auth';
|
|
21
|
+
import { getSessionToken, setSessionToken } from '../use-session-token';
|
|
22
|
+
const Wrapper = styled.div `
|
|
23
|
+
display: flex;
|
|
24
|
+
flex: 1 1 0%;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
justify-content: center;
|
|
27
|
+
|
|
28
|
+
min-height: 100%;
|
|
29
|
+
|
|
30
|
+
background: ${(props) => `radial-gradient(circle closest-corner at 50% 40%, ${transparentize(0.9, props.theme.colors.background)} 0%, ${transparentize(0.8, props.theme.colors.blue4)} 70%),radial-gradient(circle closest-corner at 20% 150%, ${transparentize(0.8, props.theme.colors.error)} 0%, ${transparentize(0.2, props.theme.colors.blue4)} 230%)`};
|
|
31
|
+
`;
|
|
32
|
+
const Card = styled.div `
|
|
33
|
+
padding: 1.5rem;
|
|
34
|
+
|
|
35
|
+
color: ${(props) => props.theme.colors.text};
|
|
36
|
+
|
|
37
|
+
background-color: ${(props) => props.theme.colors.blue1};
|
|
38
|
+
border-radius: 1rem;
|
|
39
|
+
box-shadow: ${(props) => props.theme.shadow.medium};
|
|
40
|
+
|
|
41
|
+
@media (width >= 640px) {
|
|
42
|
+
width: 100%;
|
|
43
|
+
max-width: 24rem;
|
|
44
|
+
margin-right: auto;
|
|
45
|
+
margin-left: auto;
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
48
|
+
const FormWrapper = styled.div `
|
|
49
|
+
margin-top: 1.5rem;
|
|
50
|
+
`;
|
|
51
|
+
const Form = styled.form `
|
|
52
|
+
> * + * {
|
|
53
|
+
margin-top: 1.5rem;
|
|
54
|
+
}
|
|
55
|
+
`;
|
|
56
|
+
const ErrorText = styled.h3 `
|
|
57
|
+
margin: 0;
|
|
58
|
+
|
|
59
|
+
font-size: 0.875rem;
|
|
60
|
+
font-weight: 500;
|
|
61
|
+
line-height: 1.25rem;
|
|
62
|
+
color: ${(props) => props.theme.colors.error};
|
|
63
|
+
letter-spacing: 0.025em;
|
|
64
|
+
|
|
65
|
+
visibility: ${(props) => (props.$hidden ? 'hidden' : 'visible')};
|
|
66
|
+
`;
|
|
67
|
+
const Label = styled.label `
|
|
68
|
+
font-weight: 500;
|
|
69
|
+
line-height: 1.5rem;
|
|
70
|
+
`;
|
|
71
|
+
const StyledInput = styled.input `
|
|
72
|
+
display: flex;
|
|
73
|
+
display: block;
|
|
74
|
+
align-items: center;
|
|
75
|
+
|
|
76
|
+
width: 100%;
|
|
77
|
+
height: 2.5rem;
|
|
78
|
+
margin-top: 0.5rem;
|
|
79
|
+
padding: 0 1rem;
|
|
80
|
+
|
|
81
|
+
font-size: 1rem;
|
|
82
|
+
line-height: 1.5rem;
|
|
83
|
+
color: ${(props) => props.theme.colors.text};
|
|
84
|
+
|
|
85
|
+
background-color: ${(props) => props.theme.colors.blue1};
|
|
86
|
+
border: none;
|
|
87
|
+
border-radius: 0.25rem;
|
|
88
|
+
outline: none;
|
|
89
|
+
box-shadow:
|
|
90
|
+
inset 0 0 0 0 ${(props) => props.theme.colors.blue1},
|
|
91
|
+
inset 0 0 0 1px ${(props) => (props.$error ? props.theme.colors.error : props.theme.colors.grey2)},
|
|
92
|
+
0 1px 2px 0 rgb(0 0 0 / 5%);
|
|
93
|
+
|
|
94
|
+
:active,
|
|
95
|
+
:focus {
|
|
96
|
+
box-shadow:
|
|
97
|
+
inset 0 0 0 0 ${(props) => props.theme.colors.blue1},
|
|
98
|
+
inset 0 0 0 2px ${(props) => (props.$error ? props.theme.colors.error : props.theme.colors.primary)},
|
|
99
|
+
0 1px 2px 0 rgb(0 0 0 / 5%);
|
|
100
|
+
}
|
|
101
|
+
`;
|
|
102
|
+
const StyledButton = styled(Button) `
|
|
103
|
+
width: 100%;
|
|
104
|
+
font-weight: 600;
|
|
105
|
+
line-height: 1.5rem;
|
|
106
|
+
box-shadow: 0 1px 2px 0 rgb(0 0 0 / 5%);
|
|
107
|
+
|
|
108
|
+
:active,
|
|
109
|
+
:focus {
|
|
110
|
+
outline-color: ${(props) => props.theme.colors.primary};
|
|
111
|
+
outline-width: 2px;
|
|
112
|
+
outline-offset: 2px;
|
|
113
|
+
}
|
|
114
|
+
`;
|
|
115
|
+
/**
|
|
116
|
+
* The Login component gets the username and password from the user and generates a session token.
|
|
117
|
+
*/
|
|
118
|
+
function BasicAuthLogin() {
|
|
119
|
+
var _a;
|
|
120
|
+
const [isVerifyingToken, setIsVerifyingToken] = useState(true);
|
|
121
|
+
const [isLoggingIn, setIsLoggingIn] = useState(false);
|
|
122
|
+
const [username, setUsername] = useState('');
|
|
123
|
+
const [password, setPassword] = useState('');
|
|
124
|
+
const [isError, setIsError] = useState(false);
|
|
125
|
+
const history = useHistory();
|
|
126
|
+
const location = useLocation();
|
|
127
|
+
const queryParams = new URLSearchParams(location.search);
|
|
128
|
+
const previousLocation = (_a = queryParams.get('referrer')) !== null && _a !== void 0 ? _a : '/';
|
|
129
|
+
const login = () => __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
setIsLoggingIn(true);
|
|
131
|
+
setIsError(false);
|
|
132
|
+
try {
|
|
133
|
+
const sessionToken = yield requestSessionToken({ password, username });
|
|
134
|
+
if (sessionToken) {
|
|
135
|
+
setSessionToken(sessionToken);
|
|
136
|
+
history.replace(decodeURIComponent(previousLocation));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (_a) {
|
|
140
|
+
setIsError(true);
|
|
141
|
+
}
|
|
142
|
+
setIsLoggingIn(false);
|
|
143
|
+
});
|
|
144
|
+
useEffect(() => {
|
|
145
|
+
// If we landed on this page with a token already, verify it
|
|
146
|
+
if (getSessionToken()) {
|
|
147
|
+
verifySessionToken().then((verified) => {
|
|
148
|
+
// we already have a valid token, redirect
|
|
149
|
+
if (verified) {
|
|
150
|
+
history.replace(decodeURIComponent(previousLocation));
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
setIsVerifyingToken(false);
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
setIsVerifyingToken(false);
|
|
159
|
+
}
|
|
160
|
+
}, []);
|
|
161
|
+
// Don't show the form yet until we check existing token
|
|
162
|
+
if (isVerifyingToken) {
|
|
163
|
+
return (_jsx(Center, { children: _jsx(DefaultFallback, {}) }));
|
|
164
|
+
}
|
|
165
|
+
return (_jsx(Wrapper, { children: _jsx(Card, { children: _jsx(FormWrapper, { children: _jsxs(Form, { onSubmit: (e) => {
|
|
166
|
+
e.preventDefault();
|
|
167
|
+
login();
|
|
168
|
+
}, children: [_jsxs("div", { children: [_jsx(Label, { htmlFor: "username", children: "Username" }), _jsx(StyledInput, { "$error": isError, id: "username", onChange: (e) => setUsername(e.target.value), required: true, type: "text", value: username })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "password", children: "Password" }), _jsx(StyledInput, { "$error": isError, id: "password", onChange: (e) => setPassword(e.target.value), required: true, type: "password", value: password })] }), _jsx(ErrorText, { "$hidden": !isError, style: { marginTop: '1rem' }, children: "Incorrect Username or Password" }), _jsx("div", { children: _jsx(StyledButton, { loading: isLoggingIn, style: { color: 'white' }, styling: "primary", type: "submit", children: "Sign in" }) })] }) }) }) }));
|
|
169
|
+
}
|
|
170
|
+
export default BasicAuthLogin;
|
|
171
|
+
//# sourceMappingURL=basic-auth-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-auth-login.js","sourceRoot":"","sources":["../../../js/auth/basic/basic-auth-login.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-auth-logout.d.ts","sourceRoot":"","sources":["../../../js/auth/basic/basic-auth-logout.tsx"],"names":[],"mappings":"AAOA;;GAEG;AACH,iBAAS,eAAe,IAAI,GAAG,CAAC,OAAO,CAStC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
import { revokeSession } from '../../auth/auth';
|
|
4
|
+
import { setSessionToken } from '../use-session-token';
|
|
5
|
+
/**
|
|
6
|
+
* Auth component that wipes user token in AuthContext on mount and redirects to /login
|
|
7
|
+
*/
|
|
8
|
+
function BasicAuthLogout() {
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
revokeSession().then(() => {
|
|
11
|
+
setSessionToken(null);
|
|
12
|
+
window.location.href = `${window.dara.base_url}/login`;
|
|
13
|
+
});
|
|
14
|
+
}, []);
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
export default BasicAuthLogout;
|
|
18
|
+
//# sourceMappingURL=basic-auth-logout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic-auth-logout.js","sourceRoot":"","sources":["../../../js/auth/basic/basic-auth-logout.tsx"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;GAEG;AACH,SAAS,eAAe;IACpB,SAAS,CAAC,GAAG,EAAE;QACX,aAAa,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACtB,eAAe,CAAC,IAAI,CAAC,CAAC;YACtB,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,QAAQ,CAAC;QAC3D,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-auth-login.d.ts","sourceRoot":"","sources":["../../../js/auth/default/default-auth-login.tsx"],"names":[],"mappings":"AAUA;;GAEG;AACH,iBAAS,gBAAgB,IAAI,GAAG,CAAC,OAAO,CAuCvC;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
/* eslint-disable react-hooks/exhaustive-deps */
|
|
12
|
+
import { useEffect } from 'react';
|
|
13
|
+
import { useHistory, useLocation } from 'react-router-dom';
|
|
14
|
+
import DefaultFallback from '../../components/fallback/default';
|
|
15
|
+
import Center from '../../shared/center/center';
|
|
16
|
+
import { requestSessionToken, verifySessionToken } from '../auth';
|
|
17
|
+
import { getSessionToken, setSessionToken } from '../use-session-token';
|
|
18
|
+
/**
|
|
19
|
+
* The Login component gets a new session token from the backend and stores it in local storage
|
|
20
|
+
*/
|
|
21
|
+
function DefaultAuthLogin() {
|
|
22
|
+
var _a;
|
|
23
|
+
const history = useHistory();
|
|
24
|
+
const location = useLocation();
|
|
25
|
+
const queryParams = new URLSearchParams(location.search);
|
|
26
|
+
const previousLocation = (_a = queryParams.get('referrer')) !== null && _a !== void 0 ? _a : '/';
|
|
27
|
+
function getNewToken() {
|
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
29
|
+
const sessionToken = yield requestSessionToken({});
|
|
30
|
+
// in default auth this always succeeds
|
|
31
|
+
if (sessionToken) {
|
|
32
|
+
setSessionToken(sessionToken);
|
|
33
|
+
history.replace(decodeURIComponent(previousLocation));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
// If we landed on this page with a token already, verify it
|
|
39
|
+
if (getSessionToken()) {
|
|
40
|
+
verifySessionToken().then((verified) => {
|
|
41
|
+
// we already have a valid token, redirect
|
|
42
|
+
if (verified) {
|
|
43
|
+
history.replace(decodeURIComponent(previousLocation));
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Otherwise grab a new token
|
|
47
|
+
getNewToken();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Otherwise grab a new token
|
|
53
|
+
getNewToken();
|
|
54
|
+
}
|
|
55
|
+
}, []);
|
|
56
|
+
return (_jsx(Center, { children: _jsx(DefaultFallback, {}) }));
|
|
57
|
+
}
|
|
58
|
+
export default DefaultAuthLogin;
|
|
59
|
+
//# sourceMappingURL=default-auth-login.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-auth-login.js","sourceRoot":"","sources":["../../../js/auth/default/default-auth-login.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,gDAAgD;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,eAAe,MAAM,+BAA+B,CAAC;AAC5D,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAE5C,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAExE;;GAEG;AACH,SAAS,gBAAgB;;IACrB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEzD,MAAM,gBAAgB,GAAG,MAAA,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAI,GAAG,CAAC;IAE5D,SAAe,WAAW;;YACtB,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,EAAE,CAAC,CAAC;YACnD,uCAAuC;YACvC,IAAI,YAAY,EAAE,CAAC;gBACf,eAAe,CAAC,YAAY,CAAC,CAAC;gBAC9B,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1D,CAAC;QACL,CAAC;KAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACX,4DAA4D;QAC5D,IAAI,eAAe,EAAE,EAAE,CAAC;YACpB,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnC,0CAA0C;gBAC1C,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACJ,6BAA6B;oBAC7B,WAAW,EAAE,CAAC;gBAClB,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACJ,6BAA6B;YAC7B,WAAW,EAAE,CAAC;QAClB,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACH,KAAC,MAAM,cACH,KAAC,eAAe,KAAG,GACd,CACZ,CAAC;AACN,CAAC;AAED,eAAe,gBAAgB,CAAC"}
|