From 0029086b3f6a8876c18e5f4ae15177eed97b947d Mon Sep 17 00:00:00 2001 From: pfych Date: Sat, 12 Oct 2024 14:08:09 +1100 Subject: [PATCH] Init --- .eslintrc.js | 26 + .github/workflows/build-lint.yml | 59 + .github/workflows/deploy.yml | 70 + .gitignore | 66 + .prettierrc.js | 8 + .vscode/launch.json | 20 + LICENSE | 21 + README.md | 80 + baseline-core-architecture.png | Bin 0 -> 293838 bytes commands/add-object/add-object.js | 287 + commands/add-object/package.json | 14 + commands/add-object/template/api/blank-api.ts | 102 + .../template/api/blank-dynamodb.yml | 16 + .../template/api/blank-functions.yml | 37 + .../add-object/template/api/blank.seed.json | 3 + .../add-object/template/api/blank.service.ts | 14 + commands/add-object/template/api/blank.ts | 7 + .../add-object/template/client-api/blank.ts | 70 + commands/add-object/template/types/blank.d.ts | 3 + package.json | 54 + packages/admin/.eslintrc.js | 19 + packages/admin/.prettierrc.js | 8 + packages/admin/.stylelintrc.json | 20 + packages/admin/index.html | 30 + packages/admin/package.json | 72 + .../admin/public/android-chrome-192x192.png | Bin 0 -> 6511 bytes .../admin/public/android-chrome-512x512.png | Bin 0 -> 26506 bytes packages/admin/public/apple-touch-icon.png | Bin 0 -> 5852 bytes packages/admin/public/favicon-16x16.png | Bin 0 -> 390 bytes packages/admin/public/favicon-32x32.png | Bin 0 -> 723 bytes packages/admin/public/favicon.ico | Bin 0 -> 15406 bytes packages/admin/public/icons/asset.svg | 7 + packages/admin/public/icons/gear.svg | 3 + packages/admin/public/icons/home.svg | 3 + packages/admin/public/icons/post.svg | 5 + packages/admin/public/icons/screen.svg | 3 + packages/admin/public/icons/tag.svg | 3 + packages/admin/public/icons/users.svg | 3 + packages/admin/public/logo.png | Bin 0 -> 14368 bytes packages/admin/public/manifest.json | 25 + packages/admin/public/placeholder.svg | 1 + packages/admin/public/robots.txt | 2 + packages/admin/scripts/deploy.sh | 18 + packages/admin/serverless.yml | 177 + packages/admin/src/App.tsx | 132 + .../components/add-admin/AddAdmin.module.scss | 12 + .../admin/components/add-admin/AddAdmin.tsx | 74 + .../admin-list/AdminList.module.scss | 69 + .../admin/components/admin-list/AdminList.tsx | 56 + .../src/baseblocks/admin/pages/Admins.tsx | 26 + .../chart-detail/ChartDetail.module.scss | 7 + .../components/chart-detail/ChartDetail.tsx | 35 + .../chart-list/ChartList.module.scss | 7 + .../chart/components/chart-list/ChartList.tsx | 32 + .../create-chart-modal/CreateChartModal.tsx | 183 + .../edit-chart-modal/EditChartModal.tsx | 175 + .../src/baseblocks/chart/pages/Chart.tsx | 16 + .../src/baseblocks/chart/pages/charts.tsx | 13 + .../DashboardContent.module.scss | 55 + .../dashboard-content/DashboardContent.tsx | 17 + .../baseblocks/dashboard/pages/Dashboard.tsx | 11 + .../baseblocks/home/pages/Home.module.scss | 22 + .../admin/src/baseblocks/home/pages/Home.tsx | 16 + .../baseblocks/login/pages/Login.module.scss | 22 + .../src/baseblocks/login/pages/Login.tsx | 14 + .../not-admin/pages/NotAdmin.module.scss | 26 + .../baseblocks/not-admin/pages/NotAdmin.tsx | 31 + .../user-settings/UserSettings.module.scss | 52 + .../components/user-settings/UserSettings.tsx | 128 + .../admin/src/baseblocks/user/pages/User.tsx | 34 + .../confirm-delete/ConfirmDelete.module.scss | 19 + .../confirm-delete/ConfirmDelete.tsx | 88 + .../admin/src/components/layout/Layout.tsx | 25 + .../page-content/PageContent.module.scss | 20 + .../components/page-content/PageContent.tsx | 20 + .../page-content/loader/Loader.module.scss | 51 + .../components/page-content/loader/Loader.tsx | 70 + .../components/sidebar/Sidebar.module.scss | 112 + .../admin/src/components/sidebar/Sidebar.tsx | 74 + packages/admin/src/index.scss | 39 + packages/admin/src/index.tsx | 11 + packages/admin/src/react-app-env.d.ts | 1 + packages/admin/src/styles/_global.scss | 90 + packages/admin/src/styles/fonts.scss | 2 + packages/admin/src/swr/chart.ts | 75 + packages/admin/src/vite-env.d.ts | 5 + packages/admin/tsconfig.json | 27 + packages/admin/vite.config.ts | 41 + packages/api/.eslintrc.js | 3 + packages/api/package.json | 55 + packages/api/scripts/add-cognito-user.sh | 115 + packages/api/scripts/deploy.sh | 25 + packages/api/scripts/run-api-local-debug.sh | 38 + packages/api/scripts/run-api-local.sh | 48 + packages/api/serverless.yml | 109 + .../api/src/baseblocks/admin/admin-api.ts | 181 + .../src/baseblocks/admin/admin-dynamodb.yml | 16 + .../src/baseblocks/admin/admin-functions.yml | 37 + .../api/src/baseblocks/admin/admin.seed.json | 14 + .../api/src/baseblocks/admin/admin.service.ts | 27 + packages/api/src/baseblocks/admin/admin.ts | 9 + .../src/baseblocks/chart/chart-admin-api.ts | 114 + .../src/baseblocks/chart/chart-dynamodb.yml | 41 + .../src/baseblocks/chart/chart-functions.yml | 67 + .../src/baseblocks/chart/chart-public-api.ts | 43 + .../api/src/baseblocks/chart/chart.seed.json | 3 + .../api/src/baseblocks/chart/chart.service.ts | 65 + packages/api/src/baseblocks/chart/chart.ts | 14 + .../baseblocks/cognito/cognito-resources.yml | 105 + .../src/baseblocks/cognito/cognito.service.ts | 151 + packages/api/src/middleware/is-admin.ts | 19 + packages/api/src/middleware/log-route.ts | 11 + .../src/util/create-authenticated-handler.ts | 19 + packages/api/src/util/error-message.ts | 9 + packages/api/src/util/express-app.ts | 22 + packages/api/src/util/paging.ts | 23 + packages/api/src/util/request-context.type.ts | 15 + packages/api/src/util/service-object.ts | 178 + packages/api/tsconfig.json | 27 + pnpm-lock.yaml | 12831 ++++++++++++++++ pnpm-workspace.yaml | 5 + scripts/README.md | 57 + scripts/add-env-var.sh | 131 + scripts/deploy.sh | 31 + scripts/experimental-install-requirements.sh | 183 + scripts/generate-env-vars.sh | 55 + scripts/get-stack-outputs.sh | 86 + scripts/project-urls.sh | 18 + scripts/project-variables-github.sh | 8 + scripts/project-variables.sh | 10 + scripts/set-region.sh | 11 + scripts/setup-aws-profile.sh | 56 + scripts/setup-aws.sh | 90 + scripts/setup-npm.sh | 18 + scripts/setup.sh | 95 + shared/client-api/.eslintrc.js | 3 + shared/client-api/README.md | 39 + shared/client-api/admin.ts | 61 + shared/client-api/chart.ts | 64 + shared/client-api/package.json | 13 + shared/client-api/request-handler.ts | 86 + shared/types/.eslintrc.js | 3 + shared/types/README.md | 33 + shared/types/admin.d.ts | 4 + shared/types/chart.ts | 19 + shared/types/package.json | 12 + shared/types/paging.d.ts | 10 + tsconfig.json | 21 + 148 files changed, 19047 insertions(+) create mode 100644 .eslintrc.js create mode 100644 .github/workflows/build-lint.yml create mode 100644 .github/workflows/deploy.yml create mode 100644 .gitignore create mode 100644 .prettierrc.js create mode 100644 .vscode/launch.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 baseline-core-architecture.png create mode 100755 commands/add-object/add-object.js create mode 100644 commands/add-object/package.json create mode 100644 commands/add-object/template/api/blank-api.ts create mode 100644 commands/add-object/template/api/blank-dynamodb.yml create mode 100644 commands/add-object/template/api/blank-functions.yml create mode 100644 commands/add-object/template/api/blank.seed.json create mode 100644 commands/add-object/template/api/blank.service.ts create mode 100644 commands/add-object/template/api/blank.ts create mode 100644 commands/add-object/template/client-api/blank.ts create mode 100644 commands/add-object/template/types/blank.d.ts create mode 100644 package.json create mode 100644 packages/admin/.eslintrc.js create mode 100644 packages/admin/.prettierrc.js create mode 100644 packages/admin/.stylelintrc.json create mode 100644 packages/admin/index.html create mode 100644 packages/admin/package.json create mode 100644 packages/admin/public/android-chrome-192x192.png create mode 100644 packages/admin/public/android-chrome-512x512.png create mode 100644 packages/admin/public/apple-touch-icon.png create mode 100644 packages/admin/public/favicon-16x16.png create mode 100644 packages/admin/public/favicon-32x32.png create mode 100644 packages/admin/public/favicon.ico create mode 100644 packages/admin/public/icons/asset.svg create mode 100644 packages/admin/public/icons/gear.svg create mode 100644 packages/admin/public/icons/home.svg create mode 100644 packages/admin/public/icons/post.svg create mode 100644 packages/admin/public/icons/screen.svg create mode 100644 packages/admin/public/icons/tag.svg create mode 100644 packages/admin/public/icons/users.svg create mode 100644 packages/admin/public/logo.png create mode 100644 packages/admin/public/manifest.json create mode 100644 packages/admin/public/placeholder.svg create mode 100644 packages/admin/public/robots.txt create mode 100755 packages/admin/scripts/deploy.sh create mode 100644 packages/admin/serverless.yml create mode 100644 packages/admin/src/App.tsx create mode 100644 packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.module.scss create mode 100644 packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.tsx create mode 100644 packages/admin/src/baseblocks/admin/components/admin-list/AdminList.module.scss create mode 100644 packages/admin/src/baseblocks/admin/components/admin-list/AdminList.tsx create mode 100644 packages/admin/src/baseblocks/admin/pages/Admins.tsx create mode 100644 packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.module.scss create mode 100644 packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.tsx create mode 100644 packages/admin/src/baseblocks/chart/components/chart-list/ChartList.module.scss create mode 100644 packages/admin/src/baseblocks/chart/components/chart-list/ChartList.tsx create mode 100644 packages/admin/src/baseblocks/chart/components/create-chart-modal/CreateChartModal.tsx create mode 100644 packages/admin/src/baseblocks/chart/components/edit-chart-modal/EditChartModal.tsx create mode 100644 packages/admin/src/baseblocks/chart/pages/Chart.tsx create mode 100644 packages/admin/src/baseblocks/chart/pages/charts.tsx create mode 100644 packages/admin/src/baseblocks/dashboard/components/dashboard-content/DashboardContent.module.scss create mode 100644 packages/admin/src/baseblocks/dashboard/components/dashboard-content/DashboardContent.tsx create mode 100644 packages/admin/src/baseblocks/dashboard/pages/Dashboard.tsx create mode 100644 packages/admin/src/baseblocks/home/pages/Home.module.scss create mode 100644 packages/admin/src/baseblocks/home/pages/Home.tsx create mode 100644 packages/admin/src/baseblocks/login/pages/Login.module.scss create mode 100644 packages/admin/src/baseblocks/login/pages/Login.tsx create mode 100644 packages/admin/src/baseblocks/not-admin/pages/NotAdmin.module.scss create mode 100644 packages/admin/src/baseblocks/not-admin/pages/NotAdmin.tsx create mode 100644 packages/admin/src/baseblocks/user/components/user-settings/UserSettings.module.scss create mode 100644 packages/admin/src/baseblocks/user/components/user-settings/UserSettings.tsx create mode 100644 packages/admin/src/baseblocks/user/pages/User.tsx create mode 100644 packages/admin/src/components/confirm-delete/ConfirmDelete.module.scss create mode 100644 packages/admin/src/components/confirm-delete/ConfirmDelete.tsx create mode 100644 packages/admin/src/components/layout/Layout.tsx create mode 100644 packages/admin/src/components/page-content/PageContent.module.scss create mode 100644 packages/admin/src/components/page-content/PageContent.tsx create mode 100644 packages/admin/src/components/page-content/loader/Loader.module.scss create mode 100644 packages/admin/src/components/page-content/loader/Loader.tsx create mode 100644 packages/admin/src/components/sidebar/Sidebar.module.scss create mode 100644 packages/admin/src/components/sidebar/Sidebar.tsx create mode 100644 packages/admin/src/index.scss create mode 100644 packages/admin/src/index.tsx create mode 100644 packages/admin/src/react-app-env.d.ts create mode 100644 packages/admin/src/styles/_global.scss create mode 100644 packages/admin/src/styles/fonts.scss create mode 100644 packages/admin/src/swr/chart.ts create mode 100644 packages/admin/src/vite-env.d.ts create mode 100644 packages/admin/tsconfig.json create mode 100644 packages/admin/vite.config.ts create mode 100644 packages/api/.eslintrc.js create mode 100644 packages/api/package.json create mode 100755 packages/api/scripts/add-cognito-user.sh create mode 100755 packages/api/scripts/deploy.sh create mode 100755 packages/api/scripts/run-api-local-debug.sh create mode 100755 packages/api/scripts/run-api-local.sh create mode 100644 packages/api/serverless.yml create mode 100644 packages/api/src/baseblocks/admin/admin-api.ts create mode 100644 packages/api/src/baseblocks/admin/admin-dynamodb.yml create mode 100644 packages/api/src/baseblocks/admin/admin-functions.yml create mode 100644 packages/api/src/baseblocks/admin/admin.seed.json create mode 100644 packages/api/src/baseblocks/admin/admin.service.ts create mode 100644 packages/api/src/baseblocks/admin/admin.ts create mode 100644 packages/api/src/baseblocks/chart/chart-admin-api.ts create mode 100644 packages/api/src/baseblocks/chart/chart-dynamodb.yml create mode 100644 packages/api/src/baseblocks/chart/chart-functions.yml create mode 100644 packages/api/src/baseblocks/chart/chart-public-api.ts create mode 100644 packages/api/src/baseblocks/chart/chart.seed.json create mode 100644 packages/api/src/baseblocks/chart/chart.service.ts create mode 100644 packages/api/src/baseblocks/chart/chart.ts create mode 100644 packages/api/src/baseblocks/cognito/cognito-resources.yml create mode 100644 packages/api/src/baseblocks/cognito/cognito.service.ts create mode 100644 packages/api/src/middleware/is-admin.ts create mode 100644 packages/api/src/middleware/log-route.ts create mode 100644 packages/api/src/util/create-authenticated-handler.ts create mode 100644 packages/api/src/util/error-message.ts create mode 100644 packages/api/src/util/express-app.ts create mode 100644 packages/api/src/util/paging.ts create mode 100644 packages/api/src/util/request-context.type.ts create mode 100644 packages/api/src/util/service-object.ts create mode 100644 packages/api/tsconfig.json create mode 100644 pnpm-lock.yaml create mode 100644 pnpm-workspace.yaml create mode 100644 scripts/README.md create mode 100755 scripts/add-env-var.sh create mode 100755 scripts/deploy.sh create mode 100755 scripts/experimental-install-requirements.sh create mode 100755 scripts/generate-env-vars.sh create mode 100755 scripts/get-stack-outputs.sh create mode 100755 scripts/project-urls.sh create mode 100755 scripts/project-variables-github.sh create mode 100755 scripts/project-variables.sh create mode 100755 scripts/set-region.sh create mode 100755 scripts/setup-aws-profile.sh create mode 100755 scripts/setup-aws.sh create mode 100755 scripts/setup-npm.sh create mode 100755 scripts/setup.sh create mode 100644 shared/client-api/.eslintrc.js create mode 100644 shared/client-api/README.md create mode 100644 shared/client-api/admin.ts create mode 100644 shared/client-api/chart.ts create mode 100644 shared/client-api/package.json create mode 100644 shared/client-api/request-handler.ts create mode 100644 shared/types/.eslintrc.js create mode 100644 shared/types/README.md create mode 100644 shared/types/admin.d.ts create mode 100644 shared/types/chart.ts create mode 100644 shared/types/package.json create mode 100644 shared/types/paging.d.ts create mode 100644 tsconfig.json diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..d02124e --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,26 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + parserOptions: { + tsconfigRootDir: __dirname, + project: [ + './tsconfig.json', + './packages/web/tsconfig.json', + './packages/api/tsconfig.json', + './packages/admin/tsconfig.json', + ], + }, + plugins: ['@typescript-eslint'], + extends: [ + 'prettier', + 'eslint:recommended', + 'plugin:@typescript-eslint/recommended', + 'plugin:@typescript-eslint/recommended-requiring-type-checking', + ], + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-unsafe-assignment': 'warn', + }, +}; diff --git a/.github/workflows/build-lint.yml b/.github/workflows/build-lint.yml new file mode 100644 index 0000000..669e504 --- /dev/null +++ b/.github/workflows/build-lint.yml @@ -0,0 +1,59 @@ +name: Build & Lint +on: + push: + branches: [ '**' ] + pull_request: + branches: [ '**' ] + workflow_dispatch: + +permissions: + id-token: write + contents: read + +jobs: + build-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Project Variables + run: ./scripts/project-variables-github.sh + - uses: actions/setup-node@v4 + with: + node-version: 20 + - uses: pnpm/action-setup@v3 + with: + version: 9 + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies + run: pnpm install + - name: AWS Assume Role + id: aws-assume + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: ${{ env.AWS_REGION }} + role-to-assume: arn:aws:iam::123456789123:role/GitHub-Deploy + output-credentials: true + - name: AWS Configure + id: aws-configure + shell: bash + run: | + echo "Configuring AWS Profile ${{ env.AWS_PROFILE_GITHUB }}" + aws configure set region ${{ env.AWS_REGION }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_access_key_id ${{ env.AWS_ACCESS_KEY_ID }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_secret_access_key ${{ env.AWS_SECRET_ACCESS_KEY }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_session_token ${{ env.AWS_SESSION_TOKEN }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws sts get-caller-identity --query "Account" --output text --profile "${{ env.AWS_PROFILE_GITHUB }}" + - name: Build + run: pnpm build + - name: Lint + run: pnpm lint diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..8f13369 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,70 @@ +name: Deploy +on: + push: + branches: [ main, prod ] + pull_request: + branches: [ main, prod ] + workflow_dispatch: + +permissions: + id-token: write + contents: read + +jobs: + setup: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Project Variables + run: ./scripts/project-variables-github.sh + - uses: actions/setup-node@v4 + with: + node-version: 20 + - uses: pnpm/action-setup@v3 + with: + version: 9 + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies + run: pnpm install + - name: Set Role ARN + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + echo "ROLE_ARN=arn:aws:iam::123456789123:role/GitHub-Deploy" >> $GITHUB_ENV + elif [[ "${{ github.ref }}" == "refs/heads/prod" ]]; then + echo "ROLE_ARN=arn:aws:iam::123456789123:role/GitHub-Deploy" >> $GITHUB_ENV + fi + - name: AWS Assume Role + id: aws-assume + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-region: ${{ env.AWS_REGION }} + role-to-assume: ${{ env.ROLE_ARN }} + output-credentials: true + - name: AWS Configure + id: aws-configure + shell: bash + run: | + echo "Configuring AWS Profile ${{ env.AWS_PROFILE_GITHUB }}" + aws configure set region ${{ env.AWS_REGION }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_access_key_id ${{ env.AWS_ACCESS_KEY_ID }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_secret_access_key ${{ env.AWS_SECRET_ACCESS_KEY }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws configure set aws_session_token ${{ env.AWS_SESSION_TOKEN }} --profile ${{ env.AWS_PROFILE_GITHUB }} + aws sts get-caller-identity --query "Account" --output text --profile "${{ env.AWS_PROFILE_GITHUB }}" + - name: Deploy + run: | + if [[ ${{ github.ref }} == 'refs/heads/main' ]]; then + pnpm run deploy:staging + elif [[ ${{ github.ref }} == 'refs/heads/prod' ]]; then + pnpm run deploy:prod + fi + \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5964802 --- /dev/null +++ b/.gitignore @@ -0,0 +1,66 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +*/node_modules +**/node_modules +/.pnp +.pnp.js + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +.build +build +dist + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* + +# local env files +.env.local +.env.development +.env.development.local +.env.test.local +.env.production +.env.production.local + +# vercel +.vercel + +# serverless +.serverless +.serverless_nextjs + +# IDE Specific +.idea +.vscode/* +!.vscode/launch.json + +# Setup specific +.gitconfig + +# dynamodb +.dynamodb + +#esbuild +.esbuild +tsconfig.tsbuildinfo + +# eslint +.eslintcache + +# vite +.dist + +# logs +*.log \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..122b902 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'all', + arrowParens: 'always', + printWidth: 80, +}; diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..58e5ea5 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "runtimeVersion": "20", + "request": "launch", + "name": "Debug Local API", + "cwd": "${workspaceFolder}/packages/api", + "runtimeExecutable": "npm", + "runtimeArgs": ["run", "debug"], + "sourceMaps": true, + "outFiles": ["${workspaceFolder}/packages/api/.esbuild/src/**/*.js"], + "resolveSourceMapLocations": ["${workspaceFolder}/packages/api/**"] + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..4b78fa9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Baseline + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..bceb0a3 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +# BMS Repository + +An extremely simple serverless application that manages BMS Zip files. Clients can request download URLs by providing either `md5` or `sha256` of the requested chart. + +This service also offers a basic admin dashboard for managing charts in the system. + +The system is **not designed** to provide any UI/UX to end users for listing and downloading charts. + +This README will be updated as the application is developed. + +--- + +## Local Requirements + +These must be installed before following the setup instructions. + +- Macos/Linux OS/Windows Subsystem for Linux + - Node.js v20 (v20 or higher) & npm@10.5.0 or higher [(we suggest installing and using nvm)](https://github.com/nvm-sh/nvm#install--update-script) follow instructions in the link to install, you will generally need to create a new terminal session after installing. If you already have nvm update it before proceeding. + - If nvm is installed you can switch versions with `nvm install 20 && nvm use 20 && nvm alias default 20 && nvm install-latest-npm` + - If not using nvm you can manually install node and npm, download from alternatively use the operating system package manager or any other appropriate tool to install node + - Current versions can be checked with `node -v`, `npm -v` + - pnpm version 9, version can be checked with `pnpm -v`, install with `npm install -g pnpm@9` [or other methods](https://pnpm.io/installation) + - [AWS CLI v2](https://aws.amazon.com/cli) + - Homebrew, for Mac users only, follow install instructions [here](https://brew.sh/) + - [jq](https://stedolan.github.io/jq/download/) for extracting Cloudformation outputs + - Install on mac `brew install jq` + - Install on Linux `sudo yum install jq` or `sudo apt-get install jq`, or other appropriate methods + - Java Runtime Environment (JRE) version 8.x or newer, it is only required for [DynamoDB local](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.html) + - Install on mac `brew install java` + - Install on linux `sudo yum install java` or `sudo apt-get install openjdk-8-jdk`, or other appropriate methods + - DynamoDB local will automatically install in the project when the api is started, java needs to installed before this occurs + - curl which is used in some of the bash scripts, [curl install instructions](https://everything.curl.dev/get) + - An IDE such as [Visual Studio Code](https://code.visualstudio.com/) +- Internet connectivity +- AWS Account +- IAM credentials be sure to follow [Security best practices in IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) + +## Run Locally + +If the project is already setup and you are trying run the project locally make sure you run `pnpm run aws:profile` first so that you have the correct credentials for AWS configured locally. + +### Commands + +Start the api, admin and web in their own terminal windows/tabs with the following commands. + +1. `pnpm run generate:env:local` to generate the env files for the frontend clients +2. `pnpm run start:api` +3. `pnpm run start:admin` + +### Running locally Limitations + +- API, Web & Admin: No S3, you will need to rely on AWS staging S3 +- API: No local Cognito Authorizer, the deployed staging cognito can be used (see `packages/api/serverless.yml`) or the payload set by `AUTHORIZER` in `packages/api/scripts/run-api-local.sh`. +- Admin: Cognito UI relies on an active AWS Cognito user pool, use deployed staging + +## Deploy a Change + +Swap `staging` to `prod` to deploy to production. All environment variables will be automatically set in the process. + +1. `pnpm run deploy:staging` to deploy api/web/admin + +## Remove Stack + +To destroy the deployed cloudformation stacks so it is no longer on AWS run `pnpm run remove:staging`. This will likely destroy all data associated with the application. + +# Built using BaselineJS + +![1688515420018](https://github.com/Baseline-JS/core/assets/151841910/620fa869-4bca-418d-af2c-3a3f8b2d2719) + +BaselineJS is an open-source, fullstack TypeScript, serverless first framework designed to make building cloud native applications easier. Our framework utilizes a combination of modern technologies, architectures and operational processes to help teams to efficiently build and deploy robust applications + +If you like BaselineJS give us a ⭐️ + +[Website](https://baselinejs.com/) | +[Documentation](https://docs.baselinejs.com/) | +[Discord](https://discord.gg/beCj9VDeMm) | +[LinkedIn](https://www.linkedin.com/company/baselinejs) | +[YouTube](https://www.youtube.com/@Baseline-JS) + +Startups, want $10k USD of AWS Credits to Get Started? [Apply Here](https://share.hsforms.com/1P6p_G9Q_Q-SJAESAYtLftgqm3as) diff --git a/baseline-core-architecture.png b/baseline-core-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..32fa0152f8f273cf08779a6a98a36305986c1f80 GIT binary patch literal 293838 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

{=o7QhjN1${U11A4)yTKabyCq7vB z+`Y}$=6k`YZ1AY$Q6x(k>qaE6?vfDi5w3m@P`$?@6={+Gg1C(K@X#!I>qOctj}LjX z&mT8fM8n^mI>49dRZ~Z$O)M_SgUe=TSth7f;&aNOk{E_i{2e|rj~`hFtx3QGcP|YX ztRyd4&t zpKt*vt-)x-@%eweXU994@@JeXriS4wNri$om1XaDAj|pPzlqEvS9jPsg?3s_Rh`6>CQMGkNSwD<|G2&Xj!zl9W zj`ymoq}Q~Vz?^?%=w|=C?7m7=<(0%8?}+NB9}b>&w4`mwH&8TktwLLG{nJ9(XR#LA z4E_%bNeuhU_kOM<$~pN5dkKciy2&@?e4hr$gA&B(sJ~MGau6f@B=cZ6r-EN7q#&p1 z8fPVO&dKl)&Q}Gm^cR=o)-79_Ml0v?IFB5m)5-x|4D$5JI!s`&S0*hZ3mDtb-zQ1T zPbItuV)4hSW72B6EL3DoqEA^m(P?qz7SS}ydnq(z*SveZQ^4!Q#T@E;-aaE?JjL_0+31eauswCRf}1M5 zN1V;1Uq(x;roc+65wbNf?Sv4{xzygElLFK%Rgf+7FpvHJ!`E9tMcs98po)c{NHc&) zOG`>hNGjb(j(~Kx+YfcdSctfq?dL+_k4IP+ zCXFe8j8W+^_00c5?K>>g*8dH)|0g<+lKn_Z=0NK~LSHt*SXhH&xLE?Y>fv0kXV{F9 zWLxmIzwbvgca52g-uDhYy!u>6P+uk$vS$+nHh7T4A=E&W1lln>DS7`58K0PnRDL ztd$JEIK8+yt8lre#EEu!UX4QDZ8Wph=?%2pVa)hVDojiz)ZqgQ3zD57TJ^MDCNN(E zy_Sh%Lta`m6{JCuVg2DLrGmB!do-ZeeD8k#Ta^4KrP}(_P7(62VOJK5dVYB2mC5xu z(S6+<4E~=4UX<_>iO_AvrX>PzHA&_4PvpBI(+6orgCRyF$!!qRDduPa-U`?>l$RZ6 zWwa_$oMpJ{5wrxvAcljPQa+pX+gq;g4n>;x?<-zu961qvd3r)%oSYXhx=aS&HtXv< ziug^7IfT+qwuLAInxN6{vHxwwya3fK>#_?5rM|Yau|`TOkfWJ1ro2<585Al*X0bJi zdt3JRQ2RAET~V?e@`-I$SCX+ zqGmn3Qupp~bQK0)ycX17_g=Wj-T25T%etC%#i53prP0ovsM3+kl+fz*RMl|W*~NY6 z3hjc^AWvQWg#vL2n{A4al18WkB(-b+Bh0K1#f~-EOQ?ox ztllh%Mv_s8n^`C5Xfa{3G=|9Ru$<-;o5p0lV@_&`FVBt!NA1Q~Sf*|D)2bo}(vqP9 zimZdd+?X<4_(_Q!8ejCE%z5-Ur;Ph5kyv_C^%xQREn$~eKiE}Dy3z`obmqYp(z>Mg@7AYLK=ZAk4%ogI)y5 zD588%qbYZPu;e?Y-pn%gezRZJ0tIt)ZIk)fZn+)vINY%SJGzTDux%P9UfOJMDBQ!(`Uk7S~dukT;mK@e{>c@Gc6hg|9rr(Abw zN5gl6c??SPEX>cXRtgvE=c=y!U#;%Ny+{MH+uw4J&{XT{!iPbPKY%QOkMIY_1eGG> zCW*$Ny$l75TsNsk*^f7P9cE_G+ol5e1p>Yfp&~#+^l54?m+^Kxzk=h2zEnx>@aP^i zAzY&&zL;@MF8bN&E5|0(wcvgu4r5A9@4PBRJUYU8Wn!p=ga-N{{in&?I=5)H=tCif z4g6aHT4EIy&H=Mq9ObaoBF4y(iUF0mvy%~AxJ#OKP`_~8=fFSo_kY0V-&K%+2?y=s zoiRY0D7fq`z4CLEats>wbD4(L{lp^|!80j<4?`Xa>^9^amWAQM%@s)9nKN=zlJ%`a zZ*7v@pWS~{mfn_Dc0fJoPao%#PGMi=Z|+nBsHm6LeQ*M=ks7Id!tG|Vy`7Tcz_X)d zr%CP9J+G3_D~Az6lC>UgUk+e{`OJf{A&v%YZJpL@&F5x#LLNQR%q#jCGGF*4oqFT zDXwsOB-J(#djP2^zZY8j8WcbD=QVkKl18wZ^|OLeLj`>JuHa^C|5H*^w^tdqn@jIn z2rca{O{VbFe%ZHV)zwSux%k= zqwk->4t)eAMf5LgctI&{@5@W9YwSjA%*^m)wQ}1O4 zZ~BY}Fv&T?V5aTchs=1#+ps7b5+#U3_XVYLPnoI#u8{D4&c1hPcXPz;QgNPuq##N` zpJPu%k2k++Km}bg=A$vX>si7eC?T?mPi6`G`Mtl$KD~M_;_Im#;V|Y&2MmI^q{n6T-WZ0lyCwm(_1~Rz2~rBv(@;m!?rnj`7~a3)H_Ar zamCv-Gbz6&b@MR!B~~O_Bz^B1(4V@&YK4~WW)wp) zEtQQ9;@&6<#Z%ewu7lJq1=@`Vm?J)DkoL5o-u)Ve0a)pQtMN!Dekpx@v)O~Q7a}62 z0+s;-TRVqmNAChEH;}D&qhQnNDt&t9Z7+EyKJ4gIpY!In|O(>_PeVzRfb~fDv7PofnDPx zR@3q~2v(ONj^pos(^a?`W+YZYn{T~qFHkRXa7s{*t@zD4|DITS@UFK++ZO;u59iVO z==A>u3LH5A6ktc>!H)2TlUP|Oe$Av?VR(*kdmY~Y5Xi_VkMCO=2;QMJ<~`IeIR#>( z3e!TdB>|Sm3eWC^qQ}#E;(}pbju-}|7x9Tw4 z>h<$G^&z|JT<<9AvHGt4f>!esj^oqQdC$gUd)fQa7zItl^+-jTK?Q|M_c^f{9sm1?=$Y&`O?8tjuse+`7 zIa1#RG+PnxB8xG1r-U}7L92IzvyoQs#SPr|_wTQKee=G~=6MZHf!b%TCKdxo5s55y zsFOM*Ua+alEu_EgXTgjbupcKmpb(Jc`uul?*@esO{}5>me`J|J>L7R#DORds`sCYX zMUDPF6VygtFdxy{6rMbVFFEY)mFkX{C85%vRqj4&%`GRpH~mD^UY5aBAhINEDYng& zkK3?2*~Sc?d7B>bf(KLNr44+U(3dva%%(wcPQG7yMDl6~Q+()c{o|~tIUi8H&X-7c z4%X27%JExgZ}T)I{vv_?i4SJ5)X;7B)IR3p6Q<%zYU3S5mJM^aj{1rzn9SEW065gI zrmrkU{1VKAsCMw%q;d z%Oc2rgX6;sJ;;5X{zV{~bH@Lg0kIvGBlRetoMw}N)usoXUNVhy4j400o>BCE_yu?7 zb?Cy8&EW8WDPz2!O7fY&L8&q1eyW>7hkLw*9wh2OL=zGvBFX*LqWl)_2d{gYYEv3| zyzDQH@XoHK-6p-e{n8E(rn>M9r_pp372JRI$xM`xHY7g0KjLrNRt@%=tEw=GS(yRQtYAeUn z);_&vg?!pvo7K9$kltUF+ej^RLnFg(V^eifV@_8;ZIiW#Wz>iB zM4%QHyx;!A+5gw=5aNX4hQ3*j&b*Qc>WtbK9-piRD2l_1QUi)csK+FU5KL{w7bpc4 zWV=<`VmOynWpyYwMuq)a(6t`E>`ZateI>7>z=hzNizQUS{kbS5MEY(Y_(29hNfl9R zq6|@?iouPoWo46Io%7<{nugiTMUkjIxlznRWz{(LA(UGg;(xYFriyEG%ozC^(LgBw z?l`mQT>BqkuD~CV4*!#R{@4ELFB5~&Dy!=x>+8 z{1mP~{%pcLK|##nFP-%;EjVcGIO*!Bo2C(}WF@Ho#A-O=EGKp+{B*2mn<6f6_cP4u(DJeoO;?kDqa)wXaA5t6|;gl(7dAP!l| zz{rSfyfuBcrZ_wA5T9~%j@HfyAmQbB?clMwJs026s+%NUf7@Aq z(lc1?r1kGU(-E5U9zrL`3fWOorI(>2hcuk}i)yIc=X4tn{=D04E6?95Ko5PUyw6!A z#<57l*<@`j1{I>C9wQLL(Ci}Dc81G*iVI&jJS4=0lQRVpo-2C<%47TFamD}Tfu(}_ zIn6m#An|)8S&kQznN6q{<*&cRGMf_+M$T-_c})bA%Dm)e&7#PWBFD75CWd@^gn&qX z@CZnKRr;)p+-XdAz>!p>4*Blg-(=latlrh}%2%?JJy zyCBrpvzj6;ghYuUDl0#qRgZdt@Yv-oAt_NvvLX&y>4Wt#1*`De3q#)R!V28=+X zz}ZFjnxqvBslG)35p5c!(MI2!uzezV74??$Y9sYxEC5>&{7>{OgUiG~x30;*l##!i z_{-r5h2rj<-Jr^nN8&6$5?>Im$^lYY?iHG7R#68ZIJ(S3TgjNHkAGt_mG*Aq-CEPG zZeb-~U4!NK_r}WyxM&Qi#Tg?fK9HH6j})n}vP$}aKfKme9KukQ7Z_E0ZHP1-QDBvr z0}9twbs;IoS>QWr#42S2H}en#3I|Co(2?g@nwg5+Bqd5? z?)w?sk}wXFTA|TAIU4>ksX0T7^gCWjUCD?1A@YOz`5jm0lhd$9xx+3i0^O0E>pG6? zH=*VL(v#+^l`?&a>C2HC?DEZM*P#A#HOcebeV`&3%45qK@o$fO07{`zxvy(oiuDX5 zhFCkAv`|YEl?`snk1DLwk83jY_q(WEP!Uo`00+E%#Sx}8HzpJ6Oj3@TqtJRf*sOKz zHBZu#&iju2r$PO)^_|lY)AA|)N5|(m6>{Kr^q0IB|2JU64V1l%M1mA)$11W`TsL{6 z93N7%K-6XviXxl%Uofo6FViyFPGN~%+yS=213GmaT-JQ1kWtG(FAtE*+mT9}w zWf)>5VYj1)?#|1foGbLt&I+in94oF7-Cl$qJh#|P*yBYk=%4X(4QIrt>ilxsJMn~ZI86IY`OQFV6BJ?pMSw{CezLosR7idcZ5jZid$_}b@^0N zEdMiLX2{;FSAwAMuV-TdLaHQOy>i}v!JwZ-TvaO1Xxqn%sEiRCQ~kF23{kV=j}@D#`3wDE10CUUDdpf$4P%vA^CMh?5w=AqaDp zqyDER^WUf)dkBn73&BJigXLU9A=?$I`b9}MagubiCTq3>g|H0Gi?z=l72|0`CGDee zYijoDc2gzZA!&!%BUk#~oxXW(tOnlSCOYcVk7Hr*PeyOm&CLGhD3>IXdj~kUiS%AU zMMzYgM3eP?45-V?p6S2fJ?9nGO|f{wO!_Z)@_XdH@#@-YoZ11!bF1Iu8qzm^zX>1r zBxyg~nhlNA%BI?cvO-tWnXSSP`|!zp6-XN_o`2i*AlmMtugYWY6@f3KV~S>c8T(K4 zH`-odV#76RV*c>mKmrS7UF-*miviKK_pBlb8ZGQ-aW*Nu0(j3{N^W^e)SCebfB6x2 z)|rgjv;bXXTFt0k*p@j%qhb2Yc*2ZfpO0Y!|55T2jKbJqEy5KRpxhe6V;jyCaNaSw zGGT4s?q6*GB8)?ajk1R$(BnSbulQP0w3;e}X0A)A_)t@}Y+#eigw5c&q)&W7Rg*wf z;{1ckfU3?Q4V$c0GuI%`gWyY5^Oe6*Tvc|(y+gr({c)9s9fL%?11SAYXE!7r>Rpa$ zU2Pw=E}4{M&5~G&qj+!qx-Sb7#Q2Rur&Yx-?@&sZgr$&&SEv~yb)8+usm|{Rb^w)z z?B)$Z)>)S(JRCwEg%_A;k@wGEzDW35&ovdUQ5_fl_3+g-b|SXvQq5ip@lRfP@7<19 z>}n$(uTC-J#djtDM++b`mEYGyUtVWdXj{1*EkB3M215|C@Ja)iNMftj?vlYL_haK) zp;YvSq@qAC+DqZ@KE;w3w5fT@AQgKOtQV=uw#>~Q)atdmUAMm_HeXovz$)@?9kd0p zQIg4>$mbf(V<7*XLHloGl=>=+rKTSJ8%$u0AdAn@+H@$0m7Q7+q7uJ>BW=kCb8Q1H zH>2E6g?kpHDqU0r(~+9Wxfe1`9V;MvXcimCfqn(mui&BU$TtG*oat$HUX zv&*>2KTnsAPm{wo`do!1%+-KWOGvguOsN3dv0+TAc+>wIbofa}AD2~6SH;UBYExh5 z66Vr)ykVnw+mq06j&5CH5K4X)2Zc|oSOKfYuJJ=&B9n}f@7?x7Y5qoF!Vc^-HI8q! z2mi9Hi$LWE+e`J$rh&Ry@h1JEb8rVl2yo{=XE+oUR}F~-BU<4lb4Xkl)avPOxW;C} zZoqi_v_5LQ z+P|5etI!^x>9uEBJm;Wo6wM=gN-}fWOZ7$NqqO!+2xFxD*`kcS$z$PF>Fi!^n+Jf& z@M3AQ&N$=z3OTo!TpnynM*MFn*@wx}2o&wHG5zO_+=hDRc2tVg+vvWlu5C;DY2p2B zgF`P#RHJrAPm5jh$M5Z0`6^1wO&R%Z^Tdx2(l~}EA3a(@R=WMR6yLwe0xW*LI#^<3w(3di(noO<2N3#?MFdoe zA~KtDH@H1#*{29i%bQ5L_s$>9msrf5ru*+6(rx(WR95P$qzG%AU=U|qOTI-FBbtWx zrNP@dIt99=b3bn8sHWyG_9UbHjyf1)w80EkRattsw9g3*F2&VG94~O= zJ9>SOWnOu!aEC2i*0pNkyYHqij48h!AKrDass>J z8cVkKkLKMl(_VVqh-24)UM)58ti4Gm#7ha2=fAF0jGFkinkZcETP?0r-Cds)qN{B@ z+NiTFD5`YzbNKx2>PiH6W9WJn)s2~{2YNkO`22^+nluin2&&+Hd*=~4W(K%d_0%+a zd0T8sTtfXmdnJQ=r~ao6+-(}mgu5`G8=zeGYqLR`sAYF13rwHGJkN^OJE3f-aUwnA zoHYh4#Vbin^K?0z3N&C<9PAnfY*vkBboF^Qiv$>=ih3N3@6C2m3cM0;SQTP$ z%Dfu`%!7W_tYQO+K=-I17N*83pw>vH6zCoE*T4-;f_)J4m@zjJiB1 z;8*LnBxyL9cU8$o?|+&tL#$EZ_eCoOh&z$^T|VJ zD=SsNFsI9hrp3F@DnugrIwk2nx|qfq+xh)#egmTpNh#X*ms~RvGQN+ z{jFR{o4j^wwJb4quNKMc?6qvKj`3^nhzUEn0kaW;-VjO`(QDveU9Bw(dbd4%qSNK3 zYoCq_Z^d;v@3wNEVUhmJKa+j_kZ-e%UhbyuU<&sY!_{zWmf2LX0B{+31`66nP)l^f zfmnVaMK909xc+&mjP%4x3bZ}Icak>}Z8uq`$lMydoq@UsT{x9{wu6_bYB(|Xz`+LpcRxzrLV%@m zq+-0ML(E!N+!`6DhEMq5 zWwK4X#=Z^W1!|D{KP9=+Igi8&)h5ANd>HVhFx@x6R!0g#^8mbWQ12-v*3hnp{nyaU^zvEAvU1C01v%8ZC)UwHL#ku}4(YamP)TNFLv6CyHS5gQ7?P9-*~c zWeUG&ht=Dllf~%IwOaFdt{Y1f#jLh;B!@m6Im$YKGV{_R&sZUn^&#;(3JhRJ;7+Bu*j}DWSEAP}KT+F-|6RmDvRBQWojkfR(?AWDZ zy>c=iz_N<5-)8GdcCw>u@$SknkjG6I6xS-=q<&xUgV;rNqS140OvC^8w`;waOjixr zub=73qC@WZWbHu?gM`c&|%LrQQ zo@e0Hu*=|mx<41=ZOBV}QD^ZC{7sFn1n$1RRb)dQqnU|&zuXlLhdHK=`FCo%UP$j8 z^TV%~ZspQ=O=&n(j$0n&5x>H1FlEdG6XSwfXKqOze;hG#Q)$27Wc|zjaceGyQ?ZJa zXC+dl7^TSkZcAS*^L|liVuaJ3JISz+$F7Uk>bG|fdEe6J*^`+LiDhc;yqZ(}o)CU_ z8etd1LxoyTEPDuv>SNDi#?G=`Z~)?444d1nbK$o=-mTV->2q_5vM|GAbSRtEs_ zJn&-gS&nYyO(pbhCcD zS4#-_9KPLvZ164MHE#>DRQFT6l z!&_tPSwmukraM!gjQzKKr6{SwJ+|FBR(X`Axd;Tqz4Hf|<1 z+n}b!1z)>%F4lb{4FdP;ML3lJ2c>5JkY^z1W3g#n0ylGQzs$TmCvHAOCg1STvGHKh zHiX7g{Thw?o0Y+w7(5brtKO95u?|8F^@*X{;fP}HhTsxyKSgRokp#DrhCSEI`jp~6 zJI*6x&doQ6>%F&!K&+Er+^{#{_ek@5?Vzfdh|Ae3^vrdHN`Q5=SSzRrpS%7CQ2-26 zHzNY2xM#FfF!5mRbMsJMPFntmv6nHk%Pm@o2her)_%CHveZ3I_rSG!hsKh)An-$u? zoac@GcwVy>-1|?zUO=H|&p`Bf%OhDEBEFpYZm1;;=yy_hlbEy=!+1~xm?dcm6z+$` z(r@Fh;>w4135W!z$*WyPNleRo#xD(rvkk8Fk=`dQ!OcjXf$K%6>Hzg*RLPH%GKWy% zl(lFs?$wKRi212Uz5VfN{65?1tG%{2>l!VpK(Ar1pH%}6=<-LLWPRj0>==u2JL3HV z#;deQ1%qXIeE7{)JqkV$7pxzG3$g6q2dLD}?+SOknba^Z@$dZ(iv|-+xZLFC-DU#$c$FdXXs?Z_aUwp8 zM`FlJw;udRkR#%iD~xmbPr!3fmx5uNEr^^3_X0KSXnvk}#I9{&OvxausJy}I*_KOm)d z96{<7kc%&pR+x1T-KZ;0r>cZ8Mss=aJ*_edu8+)Y+Il}(rH#5dJyKQ1`A5()bGmh> z5#mY)r)5T}P3#T=`4!UXs2m7l(kdq-qI(U)cQdvmrOkckDBZTm;5N^fPdWWLsUC0w zSEtbX@*JYSko!Y3fi6NYJ{m;jrPo{h(Mx1-7m7D~1q|gCAi|Pt<=FV{ow9L|VUiBS zd*uW1?`!!EF=({5qE9<-`)&9}9a;iqs3vicIRQI6Nkt$I7L!+kNK~Cq1Hd*Fkf=T2 z{d|SUJ!`lq62$Lqd3YWQ^rr5o#|JBVh{JgES}^^cjfmN!|4Fe*lE8N&JBvrdIoiW_ zDUlwTH%rT}?p1Pl_BoQJCz$x;)gG=CT-pGW24X7~{IrQu8!nla^L!IouPWBFe?a!s zkr@IN4}X7A!l74$5d`mKaOl*7^8W1~i)&Bq8A1b`yV(vpzk+#myLfPqtoXMv=D&S_ z;<%h=#VdXaHgy0>n^OlObpx#lZLkl(1EjvPVOKd8H7wytdR?-?{k^YGu~H6FG{5#m z=p1B!gaF7k3ov^dRvoeMMCSx+8Me z;hNrT86R)h4SQ|1J~gUIeZkFp(A{q8+Oo@abtc;l}NQubd?j_oE6E` zv;@xb$7qQ|Yb%pDI<`@Xvtzf4%{FQ=PtAtI(<3xRRF9qWxJAN3YcEGhz2 zez0+L8WCFKs+#YWNhEJk6mhSXwQqbkgvUVGzeK4ucPG=`S7@sO&}sO2RAesh{ZUnd z26sk~9#+Gf$f?A3V5Z0A;7|QmuPMGpTr++ zo3jT5X=pKRp3ipT7_mW^e#C!+FwLrghL!vRX}R{hDoMGjsiGqB?`Xt4Z!oWs$?Fvv zkP%Kj(*&0cjn>D%)m*5V2{;m2o$^IDtc;n*c%0tL_=M|oNJ!+~6m;FTGmcG_xggY+ zA$Nr_jEB9F0_s;fC*5LDBB&8T!R?tHx>ShY2@N>NVwA0$ z8@Ec=0YA3N>3Rtd`)sN9+UuJl2|9c9cI7sMcZaTmOlmJPsvuChqcAu~=e}g2t@f9B z?P#Px`L}I)tM{+NGO|Khlu4tH0@xJl1_Kz2+y})?e>GYAfa*D9GkipGlqIqj$I9D3 zid>%BleRUu|Jf!TsGc(u%6Dz9Kkhznziik5{?R{!C9(8%U^SWsD6|xRM3#L9S_VSrx$}{llxG;&S%M_LmTVt3lAwrAp=MuqX%157CDj;gcrOcC zpR6jO;zDLS%`#f2jU5iS&XcB88x1QsCM6j%qdiIg{XdtBG!DQ_x0m9fe5?WGKq zlYyQW+M4Mam>`QNFMO^>b`5gN^tP%Dl$*dFD_m( zoAGd!Sef>kp_xS9C)EWJRZpJ`L?x1E_i|AG&=Q{-=|jz+$NmCw!c@%RiVv_QSX&?M z3Z5jw>`+UT4d^{F-j^K+YJB$r%usxs^2CywJ<>;RjktxH`L$2N)^#|W*$=n)COJ9P zhmfL<@-J-XaEb0Nz@-l#!xLM{Si=u~iDGf78jDNz#PSwSCr21Pkm$Nr9sq}x7b9`_ zDAl!-trrDy=RA`Jp98|R@sc6q z6nh1PnGq3^@29_5bZupnD8DIF6q<5w{!w#wf`+BKDNnzz12H8uK#dP*Ajn-A<;x~L z^S1}9txoUnCBBNPI3>qSQ?f^gv(_wS8;Z|njvw1U-$+!<*KKa|6<5>bFiF*o@%^!us%y8MU--<1 zu}Gr}54KSS;+XD=IkBA|GBg*3dLiOIE=FTrXhJDv;oyW%O#J0-CB7~?TA~U z0JOnVkv(gbV94V%WoS2lvqQvD6NdtG^MI}wK<0d(UxMR_uMX>_U*;BKOw{s7{d>lI z4i7=$DLcNR`EtFPS|e@(y8GCmVZHL%?z6$vWTrG8)16QK_$gKLR4_i4?}u5Rx$j0= zhH>XXR`_=CdTmA(AU9#6V3tS2{p$1M#Txiqf?5>I|Ga1VjxPN$Am&|b)W)?9SQ__T9q=z!>YgbuGpSNmJA>3 zLq{cNu8-30t{@u|qCzunMeDzrNI&w0Jl^A0%zy0r%lmoyUZel+^g_+lcKn-|F|Ub- z>@serv$`SSMc|&X2Np1=zJ1Z%!+YudTE{hf+gcgN4d7}37{T~Ix5)gbNctuXoH-xQ z#>Bru-ErMW#g*dP6?TtO(#a_wTpuY)PU5$U_5s|? za8`oJ%JyK68twgO9dC{gQY26J;Rbd^6utc0I}@%^NiD?7UM1 zC|b9&QTZSID~uE%Memi%)XsxiB*+au9sM&^^*7| zz6MXvTnUyXj@Go^bOA6PTCbYfDATWY{>1pKQ+PI%aY*Kt__c_LTdszl-^A)2}sWq+(;e^@OuU{VmQQaX3ll{J+%2YXY3zy37 z=q-(w&^DZ%9%U5k2o~nh`5*3lqL+Cc8Ux4*wbhX#5`;{oqN$$da{6%?COh^8E-`7~ z&TzhZ+D2*^tdq38vMQRvH%jE5)1a@c{V;Ws>)AJ&Pc|KQi`)wjw^P%qouXHe-@ZyX z4V8ZGP~TxudTY4IFI{!!-^R4~pi1(Tdlbg9S+U)Q_Mnz}dZKoNcw#k?8sF0GaSBI4 za(lnzV)v-)W{3#B`m4l>8#?>}n3^x&N9oq4UqEgik$${HcLC?`k15jy-hAA~!jI}h zx0_yEzvd1*&2XMOPO4tBGdOHpb^!!*RUfGKNg7?0W`Ie_Q?S%JrDS&d!y85 zLlAtYw?_j?-1>Wgeb*KwzU0PnUBM%DcBJUGN*u}8QCb)o4jMgAo+M#WRe#T^pR1h6caJhxuf&85=S{G6 zZ;A*TNOvDUfmS;Q3OYGB++fSi4D7V&F_I}vf!SY+Jah9l1=)rQ;lDDK&%)Mv! zVFj~}b2l_b^c6zH0`3k=i3(_&i7nh})ooka)`^VNAS+{`g>T|N=4Y@dw)`dHm0~Bj z6r}T*Uw(SEqoq=dhC^bp#_U_SNA-R(WhdpQ$&th|7a1W}ObwoK*Pi2bvmxa6D`X%z z3V(f;n87g#bt=4$CpSh27E6bV^Tg}rix8!UU-2)N#&6Kbw1xG%m?%?9+@ek287@#i zw2fzzspt%FO6=l`>-zNz-XwwGWs&#hn0AINiOtLrlksVN-_nn@r(U(wcvjPX)=h&* zxckIDs|y|CX7r89pM&?%GzS*+&B@Qo*9;mN*%wvhqEGI0hO&QBBNb`TN7a(MHXZ5n z_gMyC_dmK|rrlpCtiZA2rey0_&eh3%t3hY?!$o3FBx@9`sifyWZqLP z%%&Hl<|Vd`!zuP}4Df`DU=G+|&vT#{t4zIs;?AuW`sYd4;I9|^^xu48wb-OkHodrb zfrIHkT7V@6d6^+t494Zcx==u=v-<7I&C2HM(Paj$Xd{8Xbmil)0=ujH6&k)=E!IP- zTvxB2Gd()Ghu~pxVwK5o@hBB@FX7OAjJ+^I6E8r7f0_9Dacar)N4<^sC)q`xkWA$3 z-yvgLA!b^UR9+#QJ@}Z_r%Y^0{oZqXcxqM&oBLhck4uL?!(NUNe%x+bCqb1?xEzz{ zJ&ZIsIifKmh3)>mm*DFbzKh`4mfd>z36}|L^^Zut)-p!nkv;s%jkCH%zFi=}{z{7H zGJA_boArW)s*$|(CzgO;hxN~bIkhwV$We(&jf;BEBBLkYWg1i;I=Q!`?@=S1tA?H* z6sq3?(3DlQ+8cV=x~?bP`xshWykK`|w&fPu{~^Wm2Gw6C1kC9t0rp9%a4rWkyuk&p zfKKJYYP0~m_T`HR+~d@$52>C8QNyV&=9W{u9P%eBHaE2VDIc$Zp*}H;564(dSDZes zZwvdvOpvZcqBz%ftBdTf{yNHFxw4el|C9vp-cGBe;n)s6th|Xh@(sRIZ;W9(ig_hh5%2yxNFB6-B?`2+p zI{j8YIGpY$#YJ*>MoTLZ^9RkZzo{MwOx+?g(*SFTDz~yA&ooM*jN4nwo@ofLbV;-* znc>OU#|iCcO*6W2^ZZ-=$^sUc9y-r1rQYEp%|&?Oq6aX9T=TF;bWiVo9wCH(#lfMc zBebK0uLI76ATQ``5>8mak;j=|MYbw#W9!?|%PrRPJ(NB-&Y#$i(cr-u-V>6BOEKKQ zeepuzVxibTt~$}>V}=X7D-`#%31X$}!!^vUbbC7%#SKWjZ0|dZdOEhEev(X`T;#QF zka`$-wZ?hQ6+F>jpTN+&0A8#Q=~zhvWg*}jHUM2RH9j%m?#n$@*u{WboyJ98sk>xY;*#>#5AlnLd$Q%r-Nm`I^3-f)1F!3!Fa*} z&pIQ78+>M9JqKtnq=E=vKy(B&{%tLv1-*#ucWgR;@?X9aurhu@aHPfhNKvV!zoG4I z!~U{xEye8}=MUxNhRX&g_=ILdC6f5+l;?MVuJey~P{+mlk9Pp3ZKIuwixWWfjY|=Q5x}YjMjJJqgy9*YYE}DdYrP`@)yj8k_cK@8-@M{ic6KTP`nmmpw7A?hy@v0 zoH2nrTMI|ZH~9o!jz5cJa5*1;oRA zW{Ft)9KV$Xq9Ti+ix&w)opC-Hc>$;Vkl(WVBM3nTKpI&eJJ&q`0-fri#0TDd6@Wpq zp6zFlr);T1H*$QD1MHJ3NP05j*tD+pT)Q|#2o8#STQhybQkUr!0xP_sEf2! z4tRuXOi9@~ethcml@)QvZ0K+%0=(Q)6DiWaYy{X#Uvqnm@v66aFVu6DpMJjiM zhWrzVmdMKkPImP`Ej^?@))&;`5Om*#DI4G2cPdnJQM*yGUpl`$8r%xh_TN_&SfAQBY9d)2MS?Kwv&}bdOm)q zEL}?X{O+KDC_@>XQL++|)h||kX#+cI=@Kd+*3AG%P74IetsbYL{TzD5gb@b4-Q5Y? z>7gXFwCDkebpJyjJkUhed$*#lYAvf8XxDqJk~_>arV4u|@>#ITyuNX#IZ=);CaMb1 z%94RPB6uMPlBI{;gt@K^;IJAdKsov3>80tVJwnwP%SNgZ*{4O82_e>oZ|LOV4)VNr z&YzEqFn~FSGF?j3SlBU^14tUkN>3Q>k>faBTMla857!2=l;Q*(3}SYk;C^{3@I@9> zr8p~*4&z_4s^a=I5sxake0&KHfw^?YUE2@fSc9;MNGbP8P~?G4COJd z{1!=(JpTQP@SXgPfHSa<*+*!^3|}uGg_c3ZE}IrMzl|zX0=1CkpWj~1%9KG)X3kC( z04qm~7P1?OwCqi>p?pz=u`rz|G8Bq&s0Rt-P?ZxDg}S{8s)EENBKVbdqs6lrxI&C( z+5_(vwAzEspf`=aduyeUT?6mRtT?oD-^{zc&%bo_1|hnPZh_xGqeAZtyj&dS{#NlGHQ?6VD`K;He%`=U? zmEkV$>}=l~ZsMnrWm4eKbADlMkECSG%&&P)43|&6BkrRP5P0dwCz&C@Yb2~`6gMZr zxf^zfH%0QxEPEJ`f@7>HCrQB7Y--9!QjL~gpb@YpB;zvB4xPjxeftt0+I5&=T-^3- z0m;!a$@wTMa*VZBhtZL>0}@ru7O_OoZqSxX2xp}uWWecwR9wBuOO-)Q*z>oIgRjS8 zu}ie+KflDB|I1^qn{lG=`0r@M?Cjs}E7UI&l@xNS6SL~QZ99+|wjaqasIN_B^_q&p ze!5o2zM?C5VHV(hP_;lONbT}GR!8n7enhsgI{oT09HO!SM_?#dgArxd%WmOqw-Mq! z`P9u`pVt7Se*Kb2)iGAU3Bbe2I7Fc{)h>+R$GA=EmmY+a`yFhxjD8GC_zE4z53ago zEuM{w4Yv!9V4-;jtxubko=!+cyA5aYe6X`(pE6-KdO7GMO+}oa8FUoE}53 zAA>6Cp<8dwz@RrAI>G~Bl#DO}UYzqt7Wfq``f6|Qg5vZ`X$>K4dQBIOyJX_^oO%*y z<#5fgX*Q?+m*<(Fcyu4g7!WNezxRtkkTa`U1-LF%{qbxSYOFA`3k6Cjw*bJ&)wdg> zEW6(Kd@0ISNge>`)@qg3vb3{2m_!p3< z43SoKtZ5}&XtCbu<&yuOZcp4N9YDkjD&F=7UGmby<1|NPKN(LnStS zH)mUIj`r5?$dr;=h;+8TgDiAwmE|tfTJm;UB@~-9h(4zN_AC<6fMo&>69QcUU7;Fo zch|r>P{GzSB!x97E;lK@$YSl%xJL*#O~n%+z$Pr3;8bPtd;;(EZ{IH!M~sd5OKYzL zXE=8n%~Z>4)4fkibOyl{l1_W^B~UerLbM5& zL#vd`db&<^gjmc|z-ebz|Ke&u3QMq`%5--E7-{J2lmK{|s4#VCp;R;)@k}qOwGM-= z9)Xp;eyv%P&&Ad?$n@?xIubZ+7GMRCtr4T=zZ^EugbJaj>ec|k-Q?`G5ct<}X^_f! zfG=ttsOzsA0QD)%!R5iQasdcl3qyNLy~Ci` zAxX?_^6Ks=NY5l9t{?WB&2V6eoQ4QQ6k>PU(-2W2Oa`kKMk=yWh4o{@oHIlZu)z8f z!1_A&HjOubSs#eZ+ep9c+E|IM48o?`HtW8@P9pH?Jz6smLkEGSnQ692yOM!jx2BJA zW~R|a9SHbohkwef_|SI=ESjN5n-jERMF1{)0TC8-A9f_RGq>_5f>nY9oPCGFRRVnr zc!pe}Tg7~{kWm9dUe|(^D!hfgNG9V&L)-{4aBmj~0F(LGJo5KRBn=qC)I#x?QMd?P zfZ+WqQ>)(IRHyP~gsbgPw%kaKwJvkR@;>iZnxBAC<^Ug0n4;@&8NMedl88?x0bW=Q@kgk?|H}9P9Zg64|IFzB#`(Z3 z|5a+%grW54g1L>7#lLlWh(wEksbL0%Dhl-~q2i!T&jFOfi7=Z^7V(?@xpv)+Rav5LfLV zh|3Sik|E!_rN$poeMWWdA;AA!d5FdVJGEIC*d@`1;qZ6kjLbN!a1MlPqdksN&ykn2 z*5wa-KP%&`Rl74S)p}VjkDjIS=|W>=kc8rn-#Ts?bks4|p z?c@RbiE&3G;Dpi2M5&JzClzSJ&Z05;AUTT_8_@>eUx^lc_A=Fj4DQu)R4wmBv}JIn^D(2)hDR_^ zL5z*lx#a(S8<8v#$b1|9ufiV{HVV>lpYp6&Vm|?2XziWN?eRS)Ptkj*C{pjuixSNi zm#yL0oK==`Wvxf{52)=*P<$&_;Ogx``qC?P%3|+jC<|@esANM%Tk*1e(O}h(kh|~iwVB-*cy;#|{4?^0;u-%}#Z!Vx7CDvgY^L~> zu0m$!M{YRL(i2sVE&>dDnpc8bla*2HeAX+HemsQNSJp`Fot^$~A;@!msmiu3!hJb! zIyc1RGdxdfOp9J}olO??4;OJ(DXQ&!Zdc$nI&e+i`^vVf{l&d{b@9_>+94I>@Cj2} zK1FHpJ;W9J=O1ify@TL?z5h3lRpl{Yy&fHTWp_58jx()eer}`keF5tjB)p#+8r?d( zWlFNQOSo`cCPoRtdRj!M81P0f@L-K?V;^choSlGMQfo7ptDe`dk~~r%+7Y`Qmlz6? zd!{-RuC|>jC}N|(v1Tt8%O`bq5XYvir=rir?Np@6p{&gf&7$-^({9r}o>6FR7xjQWx{s^Ig4-JpIy%W*2d%t;@*%iKa3ubN8K+HtRy|2Bp*s_OI`n2PPOX z)sE6*M)rL;)ec$k^^BBKx&2>$)qN5*k}pp_B_<^W@qW}=rpI1Wv{XEK-Wx|SKBEh! zwH3Q;&&nL82y#0mIW#z$=MP)jf;as(T{gVKI$nq(x-{IWP0Mncnlz0Qsb8E{10{-D zMG5>5Hg^Ir2!D|%9^d_=M058qC7K%`WPiNr9PtWg^3BIG)~AE}X&zz6x#5?x!M&Je z2e^Aty=UUy?+@1WDkT!HD*Oz#m$7p-S!NR-o9vylkpTC#e6NpwQh)$jyW3oNp5LuK zL2=#P6%va%X4U69io=_0#sz)kNcHBu&K7%{VPeqO^M}?KvZ^~nIlUwG<2P2m6?1qO ze5o8M+E9Q;-NrbNYe^OIzemU>@z8cA>*gIS-N=>m?hN&Enm3+Doq8|6F&eLhg$$>r zE-uEZClxxiZ^$q84vpWJp$}P!BC;MWFM3BxFjADzZ`a{RbZD8J&1yW8fT#ui>*WAq z)gOh;?0-@H|150YK#D;5`C6Y=FTk1lxe0!Sh;F?jK|7-YglC04Yy2FG;4lztT_%E5 zz$8tz&nRwgv0u2x@)2_kW8RC5aN4VBCN^1ZULaOQ6L1)8SB8@agreM*edoA^S~%OR!n)#@|&`%iLmbFYs_Q@$Do#k;e2bmrT{>ucYjR zJ=1fw{7yJoi`VM2*Pck@AKx3crK`33koy&r^ zZK8-%d^|LUE3ZDxtS@o6U8bMc<1;-EpIqnk>;vd}GLJ)&@czo){%6~Ki53wKtsYRe z54|*>upP-6zhP&+B}0+TDMs-l{3h4Br8Dw5*@pA;=~wu_1VG0>0$|kN1V9N|B$4Oi zsDznmD19*{>YZaFuzj?J%KwVL8Q87j&#Gy>4%=T5T7Vd57Gc3_6DO5rKhffV#b-AA z=mK8hwAN$}caZ$b{lOgOelY*BC2KapTDV}4hrE5KGB*NeB6s;SaY^b#&(8kJY)?K{ ztl5v1`_lLXHD6{u{7>e#I+auLbZW&%rs++h6N^7n;rkXYqP(A)VOo zvNfUHL|;xFcq#>lv+Gy9tE6bl??XQ|yt7er-S_I&FB^35#|9<-euHv-9wwe)kx(0O zCJT0(vOb$-8SlE#+g&`46V}39aeB!mQ9X1C?=LlIgd9J$GkIqZVS)xGE9_iR z2J;AijfthFu#M=w#w^v#Og%A=>rE^hV4a!E#`h_4!bx~KT<5yRIZ~fTs}QrOoN;nD zM=4&uDZSN9juld=N-K#OaUMA_#9~?%G!x`dg$-D*n zr5@0qvLN>q(@l+@HGI|Mc1rBaJ~?r<>jrX7!2+!^YI*n6F-MZ{D1DrE_?d;jIOT;B zrF)^BS7ISHjQht$nZMJN&&xXGUjP|s_yK@S;lHxGLCl?`e|P~929ST0_^94T-=O$l z84xz0gdCyUB9T(Nja}9mdGYa0UsSKRgU#9*BuZ<@qy4DRWHpqMT*Nc(O88aq)l9>eq{~%y*5OpAo}|M4R&r%Q2NRbg zw}WqT2fNVw&G(+{6MPo`nk4B$*wD)iLHp6KAkKLr)IIYB8n6dCVOLz;8^8A1$JSyl zJ1BlN{Xu9bw9+o>Kjz7PT=00XF_t%;M~0up-Q|({$)`e&l{yl9YRDlQ^0V5*SJE2) zj&gjvs1T*7^uJbYU%!SRyM8Ri;gCc_7Ixms>CCX;l!mR&yfND?mV*Of$0A8@vPLQZGlbtdqGa!1=WT#iIt z)53<%YvWNNi(@sH-J@{147F4HW1;p{FH?o#<5+R!&#c&77VwcnJ|uD-am7pbmi1x= zhmQQRci6BN)LTb_V_P5V=2?FEB&&aX5(?_S)SmzKlSs)#W^x%S5w=#IRIxze=?*;| zr#uWQ1q;&Be1u$QPbqQ^X3zho0e$H7gQg=?*UIzjrkXyf(ckpOJohbxTa%z=18w{@}>kU@ZB264fG9hTZ;%_klVBw z#tq-6LgEA+Acm+I2X%hsDg!IjbvZDtuJ zAKLm`CNwt9YyueBUQ@YEudPQmqe(?M)8LgtQoAZU<-ARB$Ph*RXla|BzOeGf_QRi2 zXEt!Gg~Jg$O7&6s{tyUX>J7qw~MTTs02m@_P%;!h`Y z{Kb+YA&dZY!T<9$vk4Cp^IB%p^sXv@|1l{mm217k>coYW&+@V&f2c}T^z7Ah!zClf z(bf#;?;k@7CZ?-r%SE@>ok&+F zR<2i?0(n#_O?qUnttM%>rR#YM4O1YVKNBh=<+&^p>M7Az6~CtN{+ztN8{3+L1@UB9 zM<@Okl+0I%#l^z6IA0LpBrGyL_zSrIgGsX_-}xJ=_h$kiUCb0@t=O58LU|LCfteFT zk-r&_nz5)2GjI@c-wepFwcg@B+lm@JFdA=JIBYHQ&KfCDt8aU7Wo)K$Z7`B$E|u7S zhCwEe;IF1T%yN~vg7ASK{1ERe`Unc)?i>!=x$~zx90$)wi{*n!}JZoT;28p*Wh-6u;gf-k`G$-FLd@f<(-!I_kh%N4SwYuBeLnMA_;;r)^v zqIay->)$j#@Ib$xk)sgOQNMN~efTS^U_)F|-t*rDAZvy1U4x4N9da}{Ukc6WHlW~l zC3fbN>AGxY353Ex^bDy~y2)bsx`b^B5XFCu;sY4 zu8GhI@R>E%i4!u44>?#m!{ z8cHm*5j=6EFN)nw$`cxVgaJc+h!i~ds$asY8jFiWci)=A8b(1Ff*Z^f8H|e?ys!Yg zf>kqE`w)}h8P1f2XsK`((5EZgopf4ovJ^x?iic=nf;Gd zyU7MG!gl&Fn2e={I_~{P5+4l#4!oo%5I+2h9JiDg|8wNg7wqi%L*Srk<9>O zl|NjWC*x`}6IctXwWfxsN>DvUS;kPN%u2{=B?i0afc_gcuY=|b^!p(+eSXf>HjT&%cY)c|vdWG*Lj=R;-16_=mC8oy(CAoA9LN~cc?9>Sc$$?vFbq%d>U)ix0 zd*rZ=2<3wM0VOf)>ieD!p^*lT{O|6%4yvc%mM{sgV^y#|$UA2yt5c3HnT>jrh`@zG zDwt5mk;q6omh)og5UoKR8}^9y@r_#`GO@lU`a~TGw?|cJ3{f$Z#ZV2kQZvl{Sr1IW zc*l}Vpf(a1Q`0rFSoDLCad_wUcdos+_upNscD$`6F2RrlY)Sif+u3s$o#cqwOVBAW z_(>Cq@p=zEL}a$aW5F*6^<&EFYccI@ z=Kzkw_&J*(j7n()$nj{h{8jY5^k+hAVB(8HHMR|=gpVD6^wm(_{w z(5B{}wUx`m*=s!JJ6AX1XP!0d>Jc02=TE;f%N!LiTo%m1b8TBPIK3&)yYIw3R4%1M zmx)MvEY5Kmj}YzvML}rHtQiU@=&9h4ew>h=jAwgH%g!@G*|A(H7cIArRsSs?jf;eI z-zrg6GJMjML2@n%QkLfO5}Ab9_hhXL@7A3|GQ@G{{NIm*MA%W9`OKLjjjrSA#hS@Q zBk$Y5rx*2slP>FPheH#?ooY!#^s6T!u?Xd{x1mEDc77!+%jvQq(|EL5S?ppsF?7%_ zv!i}wrQNmyP=MSWOp06(4`2Y73zumh^-|Idk1|b-v*!U`y&J=$+dFPX1y}Z})FQN) zTW4PA`zCfXaG=jEOe8Yr)hFbGnIHX34!Pk~M;VF-PlDiC917$7{k%@~+X(UVDl;%E zA{k37ubfsK6@{}D82LA9Aa(qxyN@a;CfRpvO!Jp-J72W^C31X zsTf7ySnzfG8Q`?83^SpwpE{F1JHTXK6af{U0sl9=pvoS3i6WmfK)-nsYk2j=&6|-v zOFf!}I*lR0?ZjyaMEK?&!F$@y$YDyK(#(gqG4aajH%fw>MP?qSoY}x)A4jBrvqL)Qy&3)_HKvwpM-Jtq#_W}HwJv&1-)kU%dD5nvtHvD}R%jw>-vwREtl(QNPDimtbgl_}# zQG?!|=gRECMyTe3*Z$M`bU2az2UlXJjYaJ0`w$;lEb(XU^s{lcF9(JFWkQe9Gfz7~ z%-DwWx4t}`_;Bg~w|1>>i6-u8t&}y*Oa{u74p69QW@{@6R9bzdfC;LqYI((t1Db5m z;`yd<)SLz7XK#OXR{FIAss`Xk`W%Vk-pO+H_AgzIT)w}JR!VAEE6Yfox@Jjxf`S$b zZtwe_6Wd1QlDt~?W%xxDAZfZI$xHd=OJyuC?me<-)aCm@?ni_nxcANm+lbdWuaz21 zdBkpSk6vu0ZR2#spm5&~x<$*=xt*xE+XXfd3DkpsX$JUbfuJPrBZyL~A$b{uT!uSG z+|2_mISQT$KB=nf1sVmel!~M~Z)5db0OBxWo$bNzskiFx<=&0owjBy>9SeP;n2-S3 zrGvPk&E&Ke%hIStY@AFF$Vc(wa(Xzs`5Jh)@aZ=@M{JjsA6~0YC46n0fZ>b;C$72p|>-~t^9p}sU^phztNba7ECt2!ohlxJg_1#8%@|4@a7 z!Ys$j)W>Ic=+-7OEUyS?M%W+`@`M})S@A_Web+mecEP8CgsTx%~ z+3d8zA784c+mwE?rsBTp+rzQ-s$-Lr^(sp-r8cZm;ab@7-I(q4Lh)j{X|L|y-dIz7 zPhw6PVLg_v6(YN0`nB+*L}#WR}MPE&-`=ROq0cziYO)&8i5(o<~m z{@o03s1But&cuRw1ZWH=ii3R-^!pe));+A0^p6@@AEMc z6ui_!H5bX)Qpbf$=x|Dq_aK%_>8=I70wml%!8GLF821RvOW0YpdD|V^kf^???^pZh zSiGJi&q(%{9Nj@}T%c>p}CgzC{5>cK$WQD#{N(E0ws=!$WVP z97Qdv-RwhBb{`dPz$+@xR}riLnNQb8GRWP0vanaw4QmCVt>hc7JGtmI=Es>k{JhKAVwsp%!qe>bkC$hvnt zqma6*T`c>8nz8lW15Fm=xPBTI=WAM;r`<-<`NoaVrlYk|WVZs(dJk#x+4ZBr+mUBz zt>-cB$JY`jb|fot_D2j*yS%)hYMtdyHzd#uMZEDUk~S`_{$iRDs-u z1W%f$=*9P;%aOzMic9% zF(l?|MtI~L{U!d=K=;o&(^IAI{x}(f0o`+quO#GvA*P=Iw1o++b4599wTZ(XG7kYFsX|4a1=REUTvM2O- z8EKG%HZN(m|5?f6kYr_ib=If7urH#0V3)g+%^9fPy&%mtCFs3}SMJCQN8<}q6)TG4 zp)INTu~cGSG-g9n8apAMNV;ASuom>!Nl25YKQjxO;N{wNOY?6WsV|v~OCm299k!fm&W{r6+Xz!lC7Sk{I%A=^i zZu6&*=GreG4%a`qf4KTk*3+OBPK!_xX?h)jG~cs=i8PAyv7sa~2QG`9bv1|qd0RoY z#HJRv3VORp^!Lq=2SH5s3OqP0dz3hQ=10qoT8HyYfQ9uP6ZnQgRJy;Z+z-g!!1~7b zS=x*p<(Wi9FmKOymot^ao+W7phU><|=~FbxpLWg#)YA2(njK87*Be>Hah%E=IFZt{ zQ1Eu#O1)|N`3vdZ)#{d;?a+PbllN-vVWD%!o99vMViS;yD^Q4AKv#vI@QQiloa<>~3F|7IG9E=Wa$dHjS696pdsa4(lvqJ{rXa z8x;tHGx^F6KI_JgpU3p(j>~Gr1Ww=n@-zr4mqp$LsQs>w$4`bm6H6G`=O_Ah%}Ec1A(56`#ao9fXsGz)+G84 z6y!H?GjeDNE740{84?$2t-L_6(lDYlL0g>WS)UL4XNXes;3DJN$4_4tM8#Mgr{FWd z$8Xgo?6q2oe5waWS?U+CbQ;|g%$ohPB-y?*omg=kmkqen&{>3T>Xzr>=>zuTXCZ+rqDo-CEP*N=Gr zcyzX4EEAZoDqtMPBNI_!zsA;+B$|>?FQvic|fb7mCYYG1}?x#Z%yDFsONUk42sBjRR4~dEra9VR#A+ zo`MF3)}OcCpGyoo5?#G_De0Q||;Qo=acdQ{BeS&fhV=`}nPqrT&~A zZRYJZGrB&tg998RUiampxo9FIUXI9XQtDj`;ntUf-IpFUEsH+rn(ShirmF@%XINSR zhO>44rUg=2lSxpf^V(OuHA5IjSKOtbrS;hXRj#prG9zZzo^n`u3pA!Ernl^gvG^{xhGW+R#^}1 zt3$22&Y;;oDgU{zC&$e94HDiRs@W7EUxUIXi%?_8w|fZuc|+9>)h8$aA$1SU+v~ep z^Ti6n>Ei`4c6Hyf^sj;Dd)A3o?N1A0A6ctxOT(w4JhGWqT1c8t`P6E4*Odv*nJY;& z28sC_9tF@H?vmc}vtr9_qY1RB;Ss|Mw+%s#p!;2p@RvZrb_G&BuU!v15D9|>Z282r zD^ORRtXyz5YMPhlC|`7bj?T%CcRgTKVnY4Kl`=ZFsVW>vjpsnf4&X7Q_X(s!0JKjS zr#l{0JX%o?5zZ$OUYh(4Od2tmE$`&VZWVOL+hQy?c6DjWt5Fp=Ijkm)9ebYuhVHd}$HyeMjBRjc z=V5jK$L)i*QX^G-mnkHfAU&{!3xTNgK)6&Hs?pNLFc4+tCf-_D5uiPoxNYtaM_*!7 zG}c?V=qC?Z@lA$))a&p2#KIGATJov;l5AK4>U4&cxMNkH^372AYtZ`nLXdLhozQ#Z z^*9KGqVPL}avLcH_rz#{m*lAX8Fc5wYSfUxTgrSWyT&|fkevt6;G;T9jUGXGKoyM0 zbZ9A;toqKYT7&!_w!KJM>L^^HDO7R5j3y;FWnf)SgyAw@Vz0|5ORDmcDNK=r<~$}i zd_0rlepIHFT_=C*MdPS*#3N+rtb`={zM4jj)wG>|?)57*67UGdZj8#v&V2r=d!ZsH zVrY!6Dejl1Z@BniL8iymZwaS+Tq+#0w<&D^3hA`AaE-&dtKLq{H+#fT*<&_}944re zQbhTtT*k+&51+F*?IH8|pLq~tO{RYvz7SU8+WXHqGK-y}4UxqS z$$VEiF#D!_f~3vN3hq${0Zn=wd-Jx(cCkc!N+f*lIeXRL#E#)d<;$vJY=gH5+Y{

SiA$7F<$Q~2g@kQpzcP-I30IM_`MEb3-cl|npA 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 literal 0 HcmV?d00001 diff --git a/commands/add-object/add-object.js b/commands/add-object/add-object.js new file mode 100755 index 0000000..c925e57 --- /dev/null +++ b/commands/add-object/add-object.js @@ -0,0 +1,287 @@ +#!/usr/bin/env node + +// Template Fields +// - nameFirst +// - nameCamel +// - nameSnakeUpper +// - nameUpper +// - nameLower +// - nameKebab +// - apiCreateFields "field1, field2, field3" +// - apiUpdateFields "blankId, field1, field2, field3" +// - primaryKey "blankId" +// - seedData {"blankId": "", "field1": ""},{"blankId": "", "field1": ""} +// - mapperFields blankId: data?.blankId, field1: data?.field1 +// - typeFields blankId: string; field1: string; + +const fs = require('fs'); +const readlineSync = require('readline-sync'); +const YAML = require('js-yaml'); + +const functionNames = [ + 'And', + 'Base64', + 'Cidr', + 'Condition', + 'Equals', + 'FindInMap', + 'GetAtt', + 'GetAZs', + 'If', + 'ImportValue', + 'Join', + 'Not', + 'Or', + 'Ref', + 'Select', + 'Split', + 'Sub', +]; + +class CustomTag { + constructor(type, data) { + this.type = type; + this.data = data; + } +} + +function yamlType(name, kind) { + const functionName = ['Ref', 'Condition'].includes(name) ? name : `!${name}`; + return new YAML.Type(`${functionName}`, { + kind, + multi: true, + representName: function (object) { + return object.type; + }, + represent: function (object) { + return object.data; + }, + instanceOf: CustomTag, + construct: function (data, type) { + return new CustomTag(type, data); + }, + }); +} + +function generateTypes() { + const types = functionNames + .map((functionName) => + ['mapping', 'scalar', 'sequence'].map((kind) => + yamlType(functionName, kind), + ), + ) + .flat(); + return types; +} + +const writeServerlessApiYaml = () => { + const yamlTypes = generateTypes(); + const schema = YAML.DEFAULT_SCHEMA.extend(yamlTypes); + + const serverlessFile = fs.readFileSync( + `${projectRoot}/packages/api/serverless.yml`, + 'utf8', + ); + const yamlJson = YAML.load(serverlessFile, { schema: schema }); + const filenameName = `${toKebabCase(name.toLowerCase())}`; + + const newFunction = `\${file(./src/baseblocks/${filenameName}/${filenameName}-functions.yml)}`; + const newResource = `\${file(./src/baseblocks/${filenameName}/${filenameName}-dynamodb.yml)}`; + if ( + yamlJson.functions.find((i) => i === newFunction) || + yamlJson.resources.find((i) => i === newResource) + ) { + console.log('Conflicting resource/function in serverless.yml, not saving.'); + return; + } + + yamlJson.functions.push(newFunction); + yamlJson.resources.push(newResource); + yamlJson.provider.iam.role.statements[0].Resource.push( + new CustomTag('!Sub', `\${${toCamelCase(name)}Table.Arn}`), + new CustomTag('!Sub', `\${${toCamelCase(name)}Table.Arn}/index/*`), + ); + yamlJson.custom['serverless-dynamodb'].seed.local.sources.push({ + table: `\${env:APP_NAME}-\${opt:stage}-${filenameName}`, + sources: [`./src/baseblocks/${filenameName}/${filenameName}.seed.json`], + }); + + const yamlResult = YAML.dump(yamlJson, { + schema, + }); + + fs.writeFileSync(`${projectRoot}/packages/api/serverless.yml`, yamlResult); +}; + +const toCamelCase = (str) => { + return str + .replace(/(?:^\w|[A-Z]|\b\w)/g, function (word, index) { + return index === 0 ? word.toLowerCase() : word.toUpperCase(); + }) + .replace(/\s+/g, ''); +}; + +const toKebabCase = (str) => + str && + str + .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) + .map((x) => x.toLowerCase()) + .join('-'); + +const cwd = process.cwd(); +// console.log(`Current Working Dir: ${cwd}`); +const projectRoot = cwd.split('/commands')[0]; +// console.log(`Project Root: ${projectRoot}`); +const templatePath = `${cwd}/template`; +// console.log(`Template Path: ${templatePath}`); + +let name = readlineSync.question('What is the name of the new object? '); + +console.log(`Creating new object [${name}]`); + +// Support multi words in kebab case, pascal case or snake case +if (name.includes('-')) { + name = name.split('-').join(' '); +} else if (name.includes('_')) { + name = name.split('_').join(' '); +} else { + name = name + .replace(/([A-Z][a-z])/g, ' $1') + .replace(/(\d)/g, ' $1') + .trim(); +} + +const primaryKey = `${toCamelCase(name)}Id`; +const inputFields = []; +var fieldName = ''; +do { + console.log('Current Fields:', [ + primaryKey, + ...inputFields.map((i) => i.name), + ]); + fieldName = readlineSync.question('New field name (or enter to finish): '); + if (fieldName) { + const tsTypes = ['string', 'number', 'boolean', 'any', 'string[]']; + const index = readlineSync.keyInSelect(tsTypes, 'Type?'); + const tsType = tsTypes[index]; + const isRequired = readlineSync.keyInYN('is field required?'); + console.log( + `Added field [${fieldName}${isRequired ? '' : '?'}: ${tsType}]\n`, + ); + inputFields.push({ + name: fieldName, + tsType: tsType, + isRequired: isRequired, + }); + } +} while (fieldName); + +const fields = inputFields.map((field) => field.name); +const allFields = [primaryKey, ...fields]; + +let dataTypeFields = ` ${primaryKey}: string;`; +inputFields.forEach((field) => { + dataTypeFields = `${dataTypeFields}\n ${field.name}${ + field.isRequired ? '' : '?' + }: ${field.tsType};`; +}); + +let dataMapperFields = ''; +allFields.forEach((field) => { + dataMapperFields = `${dataMapperFields}\n ${field}: data?.${field},`; +}); + +const data = { + name, + nameFirst: `${name[0].toUpperCase()}${toCamelCase(name.slice(1))}`, + nameCamel: `${toCamelCase(name)}`, + nameSnakeUpper: `${name.replace(/\s/g, '_').toUpperCase()}`, + nameUpper: `${name.toUpperCase()}`, + nameLower: `${name.toLowerCase()}`, + nameKebab: `${toKebabCase(name.toLowerCase())}`, + apiCreateFields: fields.join(', '), + apiUpdateFields: allFields.join(', '), + primaryKey: `${toCamelCase(name)}Id`, + seedData: ``, + mapperFields: dataMapperFields, + typeFields: dataTypeFields, +}; + +const renderTemplate = (template) => { + let generatedContent = template; + Object.keys(data).forEach((key) => { + generatedContent = generatedContent.replace( + new RegExp(`{{ ${key} }}`, 'g'), + data[key], + ); + }); + return generatedContent; +}; + +const apiOutputPath = `${projectRoot}/packages/api/src/baseblocks/${toKebabCase( + name.toLowerCase(), +)}`; +const filenameName = `${toKebabCase(name.toLowerCase())}`; +const files = [ + { + templateFile: `${templatePath}/api/blank.ts`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}.ts`, + }, + { + templateFile: `${templatePath}/api/blank.service.ts`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}.service.ts`, + }, + { + templateFile: `${templatePath}/api/blank.seed.json`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}.seed.json`, + }, + { + templateFile: `${templatePath}/api/blank-functions.yml`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}-functions.yml`, + }, + { + templateFile: `${templatePath}/api/blank-dynamodb.yml`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}-dynamodb.yml`, + }, + { + templateFile: `${templatePath}/api/blank-api.ts`, + outputPath: apiOutputPath, + outputFilename: `${apiOutputPath}/${filenameName}-api.ts`, + }, + { + templateFile: `${templatePath}/types/blank.d.ts`, + outputPath: `${projectRoot}/shared/types`, + outputFilename: `${projectRoot}/shared/types/${filenameName}.d.ts`, + }, + { + templateFile: `${templatePath}/client-api/blank.ts`, + outputPath: `${projectRoot}/shared/client-api`, + outputFilename: `${projectRoot}/shared/client-api/${filenameName}.ts`, + }, +]; + +const fileOperations = async (file) => { + const templateFileData = fs.readFileSync(file.templateFile).toString(); + const result = renderTemplate(templateFileData); + await fs.promises.mkdir(file.outputPath, { + recursive: true, + }); + console.log(`Creating ${file.outputFilename}`); + fs.writeFileSync(file.outputFilename, result); +}; + +(async () => { + console.log('Creating files...'); + for (let filePos = 0; filePos < files.length; filePos++) { + const file = files[filePos]; + await fileOperations(file); + } + console.log('Updating api serverless.yml'); + writeServerlessApiYaml(); + console.log('Done!'); +})(); diff --git a/commands/add-object/package.json b/commands/add-object/package.json new file mode 100644 index 0000000..1ca084d --- /dev/null +++ b/commands/add-object/package.json @@ -0,0 +1,14 @@ +{ + "name": "@baseline/add-object", + "version": "1.0.0", + "main": "add-object.js", + "scripts": { + "start": "./add-object.js", + "lint": "echo 'No linting'", + "pretty": "npx prettier --write '*.{ts,tsx,js,json,css,scss,md,yml,yaml,html}'" + }, + "devDependencies": { + "readline-sync": "1.4.10", + "js-yaml": "4.1.0" + } +} diff --git a/commands/add-object/template/api/blank-api.ts b/commands/add-object/template/api/blank-api.ts new file mode 100644 index 0000000..3d5d2ad --- /dev/null +++ b/commands/add-object/template/api/blank-api.ts @@ -0,0 +1,102 @@ +import { Response } from 'express'; +import { {{ nameCamel }}Mapper } from './{{ nameKebab }}'; +import { isAdmin } from '../../middleware/is-admin'; +import { RequestContext } from '../../util/request-context.type'; +import { {{ nameFirst }} } from '@baseline/types/{{ nameKebab }}'; +import { getErrorMessage } from '../../util/error-message'; +import createApp from '../../util/express-app'; +import createAuthenticatedHandler from '../../util/create-authenticated-handler'; +import { {{ nameCamel }}Service } from './{{ nameKebab }}.service'; + +const app = createApp(); +// app.use(isAdmin); // All private endpoints require the user to be an admin +export const handler = createAuthenticatedHandler(app); + +app.post('/{{ nameKebab }}', [ + isAdmin, + async (req: RequestContext, res: Response) => { + try { + const { {{ apiCreateFields }} } = req.body as {{ nameFirst }}; + const {{ nameCamel }}Data: Partial<{{ nameFirst }}> = { + {{ apiCreateFields }}, + }; + const {{ nameCamel }} = await {{ nameCamel }}Service.create({{ nameCamel }}Data); + res.json({{ nameCamel }}Mapper({{ nameCamel }})); + } catch (error) { + const message = getErrorMessage(error); + console.error(`Failed to create {{ nameLower }} ${message}`); + res.status(400).json({ error: 'Failed to create {{ nameLower }}' }); + } + }, +]); + +app.patch('/{{ nameKebab }}', [ + isAdmin, + async (req: RequestContext, res: Response) => { + try { + const { {{ apiUpdateFields }} } = req.body as {{ nameFirst }}; + const {{ nameCamel }}Data: Partial<{{ nameFirst }}> = { + {{ apiUpdateFields }} + }; + const {{ nameCamel }} = await {{ nameCamel }}Service.update({{ nameCamel }}Data); + res.json({{ nameCamel }}Mapper({{ nameCamel }})); + } catch (error) { + const message = getErrorMessage(error); + console.error(`Failed to update {{ nameLower }}: ${message}`); + res.status(400).json({ + error: 'Failed to update {{ nameLower }}', + }); + } + }, +]); + +app.delete('/{{ nameKebab }}/:{{ primaryKey }}', [ + isAdmin, + async (req: RequestContext, res: Response) => { + try { + const {{ primaryKey }} = req.params.{{ primaryKey }}; + await {{ nameCamel }}Service.delete({{ primaryKey }}); + res.status(200); + res.send(); + } catch (error) { + const message = getErrorMessage(error); + console.error(`Failed to delete {{ nameLower }}: ${message}`); + res.status(400).json({ + error: 'Failed to delete {{ nameLower }}', + }); + } + }, +]); + +app.get('/{{ nameKebab }}/list', [ + isAdmin, + async (req: RequestContext, res: Response) => { + try { + const {{ nameCamel }}s = await {{ nameCamel }}Service.getAll(); + const formatted{{ nameFirst }}s = {{ nameCamel }}s.map({{ nameCamel }}Mapper); + res.json(formatted{{ nameFirst }}s); + } catch (error) { + const message = getErrorMessage(error); + console.error(`Failed to get {{ nameLower }}s: ${message}`); + res.status(400).json({ + error: 'Failed to get {{ nameLower }}s', + }); + } + }, +]); + +app.get('/{{ nameKebab }}/:{{ primaryKey }}', [ + isAdmin, + async (req: RequestContext, res: Response) => { + try { + const {{ nameCamel }} = await {{ nameCamel }}Service.get(req.params.{{ primaryKey }}); + res.json({{ nameCamel }}Mapper({{ nameCamel }})); + } catch (error) { + const message = getErrorMessage(error); + console.error(`Failed to get {{ nameLower }}: ${message}`); + res.status(400).json({ + error: 'Failed to get {{ nameLower }}', + }); + } + }, +]); diff --git a/commands/add-object/template/api/blank-dynamodb.yml b/commands/add-object/template/api/blank-dynamodb.yml new file mode 100644 index 0000000..e3fa372 --- /dev/null +++ b/commands/add-object/template/api/blank-dynamodb.yml @@ -0,0 +1,16 @@ +Resources: + {{ nameCamel }}Table: + Type: AWS::DynamoDB::Table + DeletionPolicy: ${self:custom.deletionPolicy.${opt:stage}} + UpdateReplacePolicy: ${self:custom.updatePolicy.${opt:stage}} + Properties: + TableName: ${env:APP_NAME}-${opt:stage}-{{ nameKebab }} + AttributeDefinitions: + - AttributeName: {{ primaryKey }} + AttributeType: S + KeySchema: + - AttributeName: {{ primaryKey }} + KeyType: HASH + BillingMode: PAY_PER_REQUEST + PointInTimeRecoverySpecification: + PointInTimeRecoveryEnabled: true diff --git a/commands/add-object/template/api/blank-functions.yml b/commands/add-object/template/api/blank-functions.yml new file mode 100644 index 0000000..07787d8 --- /dev/null +++ b/commands/add-object/template/api/blank-functions.yml @@ -0,0 +1,37 @@ +Api{{ nameFirst }}: + handler: src/baseblocks/{{ nameKebab }}/{{ nameKebab }}-api.handler + events: + - http: + path: /{{ nameKebab }}/{any+} + method: ANY + authorizer: # https://www.serverless.com/framework/docs/providers/aws/events/apigateway#http-endpoints-with-aws_iam-authorizers + type: COGNITO_USER_POOLS + authorizerId: + Ref: ApiGatewayAuthorizer + cors: + origin: ${self:custom.apiCorsOrigin} + headers: + - Content-Type + - X-Amz-Date + - Authorization + - X-Api-Key + - X-Amz-Security-Token + - X-Amz-User-Agent + allowCredentials: false + - http: + path: /{{ nameKebab }} + method: ANY + authorizer: # https://www.serverless.com/framework/docs/providers/aws/events/apigateway#http-endpoints-with-aws_iam-authorizers + type: COGNITO_USER_POOLS + authorizerId: + Ref: ApiGatewayAuthorizer + cors: + origin: ${self:custom.apiCorsOrigin} + headers: + - Content-Type + - X-Amz-Date + - Authorization + - X-Api-Key + - X-Amz-Security-Token + - X-Amz-User-Agent + allowCredentials: false \ No newline at end of file diff --git a/commands/add-object/template/api/blank.seed.json b/commands/add-object/template/api/blank.seed.json new file mode 100644 index 0000000..80d0616 --- /dev/null +++ b/commands/add-object/template/api/blank.seed.json @@ -0,0 +1,3 @@ +[ + {{ seedData }} +] diff --git a/commands/add-object/template/api/blank.service.ts b/commands/add-object/template/api/blank.service.ts new file mode 100644 index 0000000..c9b9e26 --- /dev/null +++ b/commands/add-object/template/api/blank.service.ts @@ -0,0 +1,14 @@ +import { {{ nameFirst }} } from '@baseline/types/{{ nameKebab }}'; +import { getDynamodbConnection } from '@baselinejs/dynamodb'; +import { ServiceObject } from '../../util/service-object'; + +const dynamoDb = getDynamodbConnection({ + region: `${process.env.API_REGION}`, +}); + +export const {{ nameCamel }}Service = new ServiceObject<{{ nameFirst }}>({ + dynamoDb: dynamoDb, + objectName: '{{ nameFirst }}', + table: `${process.env.APP_NAME}-${process.env.NODE_ENV}-{{ nameKebab }}`, + primaryKey: '{{ primaryKey }}', +}); diff --git a/commands/add-object/template/api/blank.ts b/commands/add-object/template/api/blank.ts new file mode 100644 index 0000000..c01813f --- /dev/null +++ b/commands/add-object/template/api/blank.ts @@ -0,0 +1,7 @@ +import { {{ nameFirst }} } from '@baseline/types/{{ nameKebab }}'; + +export const {{ nameCamel }}Mapper = (data: {{ nameFirst }}): {{ nameFirst }} => { + const {{ nameCamel }}: {{ nameFirst }} = {{{ mapperFields }} + }; + return {{ nameCamel }}; +}; diff --git a/commands/add-object/template/client-api/blank.ts b/commands/add-object/template/client-api/blank.ts new file mode 100644 index 0000000..401d902 --- /dev/null +++ b/commands/add-object/template/client-api/blank.ts @@ -0,0 +1,70 @@ +import { {{ nameFirst }} } from '@baseline/types/{{ nameKebab }}'; +import { RequestHandler } from './request-handler'; + +export const get{{ nameFirst }} = async (requestHandler: RequestHandler, {{ nameCamel }}Id: string): Promise<{{ nameFirst }}> => { + const response = await requestHandler.request<{{ nameFirst }}>({ + method: 'GET', + url: `{{ nameKebab }}/${{{ nameCamel }}Id}`, + hasAuthentication: true, + }); + if ('data' in response) { + return response.data; + } + throw response; +}; + +export const getAll{{ nameFirst }}s = async (requestHandler: RequestHandler): Promise<{{ nameFirst }}[]> => { + const response = await requestHandler.request<{{ nameFirst }}[]>({ + method: 'GET', + url: `{{ nameKebab }}/list`, + hasAuthentication: true, + }); + if ('data' in response) { + return response.data; + } + throw response; +}; + +export const delete{{ nameFirst }} = async (requestHandler: RequestHandler, {{ nameCamel }}Id: string): Promise => { + const response = await requestHandler.request({ + method: 'DELETE', + url: `{{ nameKebab }}/${{{ nameCamel }}Id}`, + hasAuthentication: true, + }); + if ('data' in response) { + return response.data; + } + throw response; +}; + +export const create{{ nameFirst }} = async ( + requestHandler: RequestHandler, + {{ nameCamel }}: Partial<{{ nameFirst }}>, +): Promise<{{ nameFirst }}> => { + const response = await requestHandler.request<{{ nameFirst }}>({ + method: 'POST', + url: `{{ nameKebab }}`, + hasAuthentication: true, + data: {{ nameCamel }}, + }); + if ('data' in response) { + return response.data; + } + throw response; +}; + +export const update{{ nameFirst }} = async ( + requestHandler: RequestHandler, + {{ nameCamel }}: Partial<{{ nameFirst }}>, +): Promise<{{ nameFirst }}> => { + const response = await requestHandler.request<{{ nameFirst }}>({ + method: 'PATCH', + url: `{{ nameKebab }}`, + hasAuthentication: true, + data: {{ nameCamel }}, + }); + if ('data' in response) { + return response.data; + } + throw response; +}; diff --git a/commands/add-object/template/types/blank.d.ts b/commands/add-object/template/types/blank.d.ts new file mode 100644 index 0000000..efc4e23 --- /dev/null +++ b/commands/add-object/template/types/blank.d.ts @@ -0,0 +1,3 @@ +export interface {{ nameFirst }} { +{{ typeFields }} +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..59cdb62 --- /dev/null +++ b/package.json @@ -0,0 +1,54 @@ +{ + "name": "@baselinejs/core", + "version": "0.0.13", + "engines": { + "node": ">=20", + "pnpm": ">=9" + }, + "homepage": "https://baselinejs.com", + "repository": { + "type": "git", + "url": "https://github.com/Baseline-JS/core.git" + }, + "author": "Baseline JS", + "description": "Baseline JS is a serverless first full-stack JavaScript framework for building modern web applications.", + "license": "MIT", + "workspaces": [ + "packages/*", + "shared/*", + "commands/*" + ], + "scripts": { + "region": "./scripts/set-region.sh", + "aws:profile": "./scripts/setup-aws-profile.sh", + "setup": "./scripts/setup.sh", + "add:env:local": "./scripts/add-env-var.sh local", + "add:env:staging": "./scripts/add-env-var.sh staging", + "add:env:prod": "./scripts/add-env-var.sh prod", + "generate:env:local": "./scripts/generate-env-vars.sh local", + "generate:env:staging": "./scripts/generate-env-vars.sh staging", + "generate:env:prod": "./scripts/generate-env-vars.sh prod", + "urls:staging": "./scripts/project-urls.sh staging", + "urls:prod": "./scripts/project-urls.sh prod", + "lint": "pnpm --if-present --recursive --parallel run lint", + "build": "pnpm --if-present --recursive --parallel run build", + "pretty": "pnpm --if-present --recursive --parallel run pretty", + "add:object": "pnpm --filter @baseline/add-object start", + "add:user:staging": "pnpm --filter @baseline/api run add:user:staging", + "add:user:prod": "pnpm --filter @baseline/api run add:user:prod", + "deploy:staging": "pnpm --filter @baseline/api run deploy:staging && pnpm --filter @baseline/admin --if-present --recursive --parallel run deploy:staging", + "remove:staging": "pnpm --filter @baseline/api --filter @baseline/admin --if-present --recursive --parallel run remove:staging", + "deploy:prod": "pnpm --filter @baseline/api run deploy:prod && pnpm --filter @baseline/admin --if-present --recursive --parallel run deploy:prod", + "remove:prod": "pnpm --filter @baseline/api --filter @baseline/admin --if-present --recursive --parallel run remove:prod", + "start:api": "pnpm --filter @baseline/api run start", + "start:admin": "pnpm --filter @baseline/admin run start", + "install:requirements": "./scripts/experimental-install-requirements.sh" + }, + "devDependencies": { + "@typescript-eslint/eslint-plugin": "7.2.0", + "@typescript-eslint/parser": "7.2.0", + "eslint": "8.57.0", + "eslint-config-prettier": "9.1.0" + }, + "resolutions": {} +} diff --git a/packages/admin/.eslintrc.js b/packages/admin/.eslintrc.js new file mode 100644 index 0000000..dbc3d32 --- /dev/null +++ b/packages/admin/.eslintrc.js @@ -0,0 +1,19 @@ +module.exports = { + extends: [ + '../../.eslintrc.js', + 'plugin:react/recommended', + 'plugin:react-hooks/recommended', + ], + rules: { + '@typescript-eslint/no-unused-vars': 'warn', + 'react/jsx-curly-brace-presence': [ + 'error', + { props: 'never', children: 'never' }, + ], + }, + settings: { + react: { + version: 'detect', + }, + }, +}; diff --git a/packages/admin/.prettierrc.js b/packages/admin/.prettierrc.js new file mode 100644 index 0000000..122b902 --- /dev/null +++ b/packages/admin/.prettierrc.js @@ -0,0 +1,8 @@ +module.exports = { + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'all', + arrowParens: 'always', + printWidth: 80, +}; diff --git a/packages/admin/.stylelintrc.json b/packages/admin/.stylelintrc.json new file mode 100644 index 0000000..5d12e70 --- /dev/null +++ b/packages/admin/.stylelintrc.json @@ -0,0 +1,20 @@ +{ + "extends": [ + "stylelint-config-sass-guidelines", + "stylelint-config-css-modules" + ], + "plugins": ["stylelint-order"], + "configBaseDir": "./", + "customSyntax": "postcss-scss", + "rules": { + "order/properties-alphabetical-order": null, + "max-nesting-depth": null, + "selector-no-qualifying-type": null, + "selector-class-pattern": "(^[a-z]+([A-Z]|-)+\\w+$)+|(^([a-z]|-)+\\w+$)", + "scss/at-mixin-pattern": "(^[a-z]+([A-Z]|-)+\\w+$)+|(^([a-z]|-)+\\w+$)", + "scss/dollar-variable-pattern": "(^[a-z]+([A-Z]|-)+\\w+$)+|(^([a-z]|-)+\\w+$)", + "selector-max-compound-selectors": 8, + "scss/at-extend-no-missing-placeholder": null, + "at-rule-no-unknown": null + } +} diff --git a/packages/admin/index.html b/packages/admin/index.html new file mode 100644 index 0000000..a57bdb1 --- /dev/null +++ b/packages/admin/index.html @@ -0,0 +1,30 @@ + + + + Baseline Core + + + + + + + + + + + +

+ + + + diff --git a/packages/admin/package.json b/packages/admin/package.json new file mode 100644 index 0000000..bae82bf --- /dev/null +++ b/packages/admin/package.json @@ -0,0 +1,72 @@ +{ + "name": "@baseline/admin", + "version": "1.0.0", + "type": "commonjs", + "scripts": { + "deploy:staging": "./scripts/deploy.sh staging", + "remove:staging": ". ../../scripts/project-variables.sh && npx serverless remove --stage staging --region $REGION", + "deploy:prod": "./scripts/deploy.sh prod", + "remove:prod": ". ../../scripts/project-variables.sh && npx serverless remove --stage prod --region $REGION", + "aws:profile": "../../scripts/setup-aws-profile.sh", + "start": "npx vite", + "build": "pnpm run generate:env:staging && npx vite build", + "build:deploy": "npx vite build", + "preview": "npx vite preview", + "generate:env:local": "pnpm -w run generate:env:local", + "generate:env:staging": "pnpm -w run generate:env:staging", + "generate:env:prod": "pnpm -w run generate:env:prod", + "lint": "npx stylelint --config '.stylelintrc.json' 'src/**/*.scss' && npx eslint --config '.eslintrc.js' 'src/**/*.{ts,tsx,js}'", + "pretty": "npx prettier --write 'src/**/*.{ts,tsx,js,json,css,scss,md,yml,yaml,html}' && npx prettier --write 'public/**/*.{ts,tsx,js,json,css,scss,md,yml,yaml,html}' && npx prettier --write '*.{ts,tsx,js,json,css,scss,md,yml,yaml,html}'" + }, + "dependencies": { + "@aws-amplify/ui-react": "6.1.6", + "@baseline/client-api": "workspace:1.0.0", + "@baseline/types": "workspace:1.0.0", + "@vitejs/plugin-react": "4.2.1", + "aws-amplify": "6.0.20", + "axios": "1.7.7", + "formik": "^2.4.6", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-helmet": "6.1.0", + "react-router-dom": "6.22.3", + "react-select": "5.8.0", + "reactstrap": "9.2.2", + "swr": "^2.2.5", + "typescript": "5.4.2", + "vite": "5.2.6", + "vite-plugin-environment": "1.1.3", + "yup": "^1.4.0" + }, + "devDependencies": { + "@types/react": "18.2.67", + "@types/react-dom": "18.2.22", + "eslint-plugin-react": "7.34.0", + "eslint-plugin-react-hooks": "4.6.0", + "postcss": "8.4.35", + "postcss-scss": "4.0.9", + "prettier": "2.4.1", + "sass": "1.43.4", + "serverless": "3.38.0", + "serverless-baseline-invalidate-cloudfront": "0.1.1", + "serverless-s3-sync": "3.1.0", + "stylelint": "16.2.1", + "stylelint-config-css-modules": "4.4.0", + "stylelint-config-sass-guidelines": "11.1.0", + "stylelint-config-standard": "36.0.0", + "stylelint-config-standard-scss": "13.0.0", + "stylelint-order": "6.0.4" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/packages/admin/public/android-chrome-192x192.png b/packages/admin/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..a31fbae54911e1be43f6163e66793340dcc12629 GIT binary patch literal 6511 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 literal 0 HcmV?d00001 diff --git a/packages/admin/public/android-chrome-512x512.png b/packages/admin/public/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..595d1d7a3df2f142c32e21c20ff8895682db52d7 GIT binary patch literal 26506 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 z�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 literal 0 HcmV?d00001 diff --git a/packages/admin/public/apple-touch-icon.png b/packages/admin/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d41255126efb0f4b050528b7b93e9c50f7c4674d GIT binary patch literal 5852 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 literal 0 HcmV?d00001 diff --git a/packages/admin/public/favicon-16x16.png b/packages/admin/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..5769832c9f15bdcb820ea1e27cb91c8e8ea5ff18 GIT binary patch literal 390 zcmV;10eSw3P)Px$KuJVFR5(wilf6mc=`6JM2eDBL!NPzM6ccVtcC#ZJB)CSGRj0WyeD};Z!;F#~hAvnc5oUpI!bMRO zTgjf+WmU>rD@s@l_s_2q#i}Z=S&zS{{IyQe1BfphF)>oZfci)aZutSx#cxfv03x0J zBxcV1V%MQ|vV?uU(Et)k1WuEbFm3V9CK(Ij5gj5C#m1%!#nU=5Z5L?k;CX4$3D$A zhWR;y9b9fVDw~5-jklUl<6Iwv2Q-yZ$GO_0dNdE>1_MwE74K@Uk*5|%Bewo=k^Z;J k|2`(~oXZ6(qyBi#@3)znGh-Kct^fc407*qoM6N<$f_H(UX#fBK literal 0 HcmV?d00001 diff --git a/packages/admin/public/favicon-32x32.png b/packages/admin/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..2db46b4f9dad3d8aa6a582e7e0503ffd439eddcb GIT binary patch literal 723 zcmV;^0xbQBP)Px%jY&j7R9HvNmrZCBQ4q)fZ<}V*v?i%vs3&8K2N4e*M2`i7QfwoBoV->1xOh}g zLJlJIpcPSsqM~S3v{Z|NSbG!EdY20IpofY@ZJIRMuWWYYZ8m9RA#YuhjdR#N>@fe| zzL|ON4TEEpf~2mF9CYOYA7i zU5!itNHhZgz#EnuiY(N<;N1QVA;VXI-1;}d&lLa*bt2H!2Qa&7RvHmVnL}~*9mvT2 z6Q?VHKztwM{wLzVdK$*t3n+ZLFZOjj>I+~8CFql9V7i3x3_!VAfCy-51q-h)?`b6j zZ64~K?Vv(lxDuWLlp7mBrfSzkpgRe<_ih!0K7JVH*GV4$>M^CZ%z#a!8$fpiCgIzs1J4nmMPMQXMkFfi!)=; zUJaB01=bJ%uBlI)hB^I6r0;zN)O$ODqHYVY&Thzwn_wNADuUMU=~5aRwE~qkbOc&= z3?SGuv?NCsl;JHPEnO4Aa|%`h97nL{N|l&$Ybz)}*BAhGWDj6EDTu`(@4XJz&by&x zl>Y(c_BMcujR6qlwlFmaDF z$hco~;j%J$*}jlXR)*7X$Qbc!KCBu}%S3!gJ=cWs{10PdP4G@)_ap!S002ovPDHLk FV1fr5J{kZ3 literal 0 HcmV?d00001 diff --git a/packages/admin/public/favicon.ico b/packages/admin/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..650c2e9a0c6d95e5b86b53a7e2f26eef11e0914b GIT binary patch literal 15406 zcmeHNYiv|S6du7pCa~LD@j*yvKoOdlRE@-_82_3WML>QU5)(BdiN+s|F(!@CM3aVg zmx6+}LL(R;r65sj@ewgmLRwG}TObjL7O9S379ypY+sz+sQQV zB-}dv^@kFk+D{}oPiojN{+HvBtrz}*zn*k4nN|6Ja97+@`?rp!_|_AXO5-&30lj*m zuj>(Q-~2J<+7^A^8jkW+dlLL{E#rOZ4oA9P=8YMHGLPJNvi(0b2V+IgU+YCdycFw9 zJ>@4TV|{W>&CPRy;rKe@sV~qPy=Kds_*#@NQ?<{&U^udl5iKL0+ddeb9|*<1kWSMM zE71Z?1w%8RLv#<9jrKIA!;EM{9zM`kbfeMk^NT*wEzMY)mT~?VG?$lRoSSJ#_{Q4z zP*`K_?M%o`2v^%bc&a!a8x%OZ}U$Pya*HfIg)4t$kUl$pB&mE!-&qF#koaJ{& zl!aINfcpM1_cMVA@2F!%|KZQ#9A_HjHKdM-lq3ndoOp9E(3H9ev2Xp+n72A4u@wNWT34yqYa~zL|Am#lK0^1)nc{<9?R?&no9db3es?ThTX;|Mj#!nK3-M z-~CK4ipPyU?4PUgd;~A{mRA2d|FAut|FV$(H3v&e{~wxff0ONVC6+6Y{a7N$@A6<< zy6M46{sj|GD}WX@9+Ag8u!+(ir)_fM5ixtpjc4P3tfQ||zni|b&iDt63%AKxZ;iA| z{_f`)P_v0j&ZGU=PO-=QqOaS6WwrfuS&$6~`wKRpVtRHpCSR8DNwov_HzvjLjU0?z>V6?&>*qpqZ{tr<5NxMEOpnNje7V8g&`BEbfn%se1 znr%?Zz98o*JKa)kQ3+nD5h7p#s7Wg?Vk$$f_ApEu^j%pa}zn< zMDaoR5k+F01@l(I*m>_4HO^_o=H(qR&hIW{_^RFRG1f}N4_& zD)u#Lt|P{-UwWKA0c0tOuwRt9-Q#s`$uNFh z8#-eA%$PO)Pfw-!?PZ(;#o&L$M*dibaMz}e;-MnCmr=(FKlUZ~!S%e5e9jFt{(Jw@ zF6ZcjMtjE7@_oZ@JUZe3d@#+s=pK}w_YS4`XDzreW6Q&aujIz1M0DT&vr1bAJcbdko2 zRoX>+uP9wv^}OK6zPgs;wpeehQp@qmlK&e&q?C9kVxEXi0v}?+RtcrgkR2^cuA==o z$sgwdW5#`EyL9s3Y+28pI)6_1?Xa55$7w#V?kT_Q!NW}PBc_gXLpjgPy6o|Mw@Cj3 zhSI6g9DkPN?iY68e~kPduyOYb=6zHzL}z^5IrI~^Q3tc{66~#N_Cag$)v6r_T5Pyl z@gsgz?eROrAgeikia2)l#jj)iQ}Jsp5RaHV;@UJ9DmjjAd4E8^OQ7kYD(`RTJg71G R>byTQ#l!5&tONul@INJ&lIj2e literal 0 HcmV?d00001 diff --git a/packages/admin/public/icons/asset.svg b/packages/admin/public/icons/asset.svg new file mode 100644 index 0000000..60d0f50 --- /dev/null +++ b/packages/admin/public/icons/asset.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/admin/public/icons/gear.svg b/packages/admin/public/icons/gear.svg new file mode 100644 index 0000000..268662a --- /dev/null +++ b/packages/admin/public/icons/gear.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/admin/public/icons/home.svg b/packages/admin/public/icons/home.svg new file mode 100644 index 0000000..07e4e1e --- /dev/null +++ b/packages/admin/public/icons/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/admin/public/icons/post.svg b/packages/admin/public/icons/post.svg new file mode 100644 index 0000000..c95a672 --- /dev/null +++ b/packages/admin/public/icons/post.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/admin/public/icons/screen.svg b/packages/admin/public/icons/screen.svg new file mode 100644 index 0000000..403ee63 --- /dev/null +++ b/packages/admin/public/icons/screen.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/admin/public/icons/tag.svg b/packages/admin/public/icons/tag.svg new file mode 100644 index 0000000..2d793bc --- /dev/null +++ b/packages/admin/public/icons/tag.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/admin/public/icons/users.svg b/packages/admin/public/icons/users.svg new file mode 100644 index 0000000..cd3911c --- /dev/null +++ b/packages/admin/public/icons/users.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/admin/public/logo.png b/packages/admin/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bffc179bda7ab8a22fb575041734a1f72ba0e02b GIT binary patch literal 14368 zcmXv#bwHC}*K|rv5b13+B8^B143Lom(k&g*-8GSv(cRsGbQ+{0-3`*+9pB^6@7*6P zxcA)C_tX=ntRzE#M~R1mfzwP)kQ@|UBGfY+u2YC75n1-UD zfKg{(~1pw7aK>dms2is}jao=Tm_f6OY`L?8KO?(Z|tH!Pz*dWyPGEc*H1Z|8{2M z1a=I#N2k|yC?}osy4lRRw_PkgVw$9wm3j-TFnx`}z`(m?N%;S#h(9L2Jn`{=uy?yY z=*KW6{Oz%Ex~}-x0Y(>yLR=hz0*CX@9g_V&^gs=I2lsY&xh<6q<6xKl9|KEnEEBIN zvCzc9tY~0}?6UOQ|IkkjLy18`Vvt##UI+a>8Q*?aYu#8r#X$+o#|c0%d>~IiNBu{n zB@>$a2B%DSbAxf4`*}mgw++ea^I%z~OjmD$D?5 zoB>R;@&CtZYpA#ialo>gnddvoq%#<#uC>%^J9grM(HEZgX4;zj^(h&R#yCqqh{ zThI262La)`FR#h!UbznV%+SnHkC&Qu^?)IBp}DUB902&}|AU`Q+$g#zSX+O=S-8!n zF3GCBt0av?%H@8Q0ajo@zqVUq)<+osZ?#S!pfXTyp_|!(rIUBLGb+!4bH4*J$H7PW z{ZHoNU;YY~K@5qM`kJc)&PE5&qj3`F1T-GteRj@Y1p!e5P>g`hLjb%`LcwhEe+LXH z1Gs^32^knjJ{Ld1*%U`%korhHg#V9kmMnl4hG76Az|m5}$8Z6ofN~`XH!=T_&PNI` zSt zqrb;dPuVxq*edB-42=JfwS@u36vLNs)yUf@sH7$gKou8%8W@C_GibdXr|h|(DLtHm zrn%Fb?ABG=jb)wt-SnF9<8wlSOcwwp$h$aby)4js*YP+J#e_fVg#S_g*c(Q5?r?AEymV&c67L^(XM)7jWJ8l;IvUr%DGY9k zMaRaH2!$>PwDIPPH<+0lQHvY#0)Ll9QC++(vR*NJ!b{1tiNYx*HKPz^h^n1NDY z8y9C~b+i*Syg5Le7Z6_wXHi&AaWCM8v^vZm)!XIGr&|f3W(hD)v zvk&+J^$Eyj`pX2s=>Y~E6h9;be5-|^fWAMA;U0ldVDJHu zb7d(v@d2(WN&u>ok&jGGAk-au^cPd*U_i4eRkG;;XnZ(;YSw;7Baw~ZwEoZEh0>#d zpd4r}e_4P9MFGWXSq@B<&5sTqJQfJv{--|Tz%F9Q(l9#!KkBbv|9F|6<1S^#;l%gh z#XoBTa{{<~9=)~!4ygqU4XNkk(kAe-I1~SUZ5}~j%gNnjrT>GIeusfb>m`wa!UPll zDf3@DQO;NX?}|7i1HSmoa4iV7dB#;Wnb)3LrZ+Dvn?z^$+WvNVxWd_;(&jyS=&+b; z6xe$}{h=P6ZvW79G9lz`1o!KHdEMhhG18IeZ*rZvs`qnNNv7q&{X*B}`6ZY#aP7)6 zLlCSzB(~#sp1QtT$8Wx}>oTX#g9`#xSYHNE1d0t_To|4n_#fJE6$FY6Xz$GZS=d&v zH!jaRb3IQRoW1!-?!V;AYaS@2aj|%E7kqPn=k9zpJR^Tov?!zb@WgCuFQ>#cj%hy* z42cO>E%WFZt-(Vt61a1$XL%B_iuH#H%SwRl(Zs?jTMxtOAFj47U5i_&%HAXvXiXMd zU)ope=ZRxpSqQvW({8n#X4>lDac(%o!kM zn<2mbRc?p_hRE`z_rdbs81jc*eHKqe#~1#IuSbtLBJmhEj-6}I6A6WxuE;W)m_Rz^ zZRRsKiZ=$hAXSM#YagB*^6?J)n-Gzn9^M;lD2-okOw1oU4G-o>2rd(W)v%S8( zqR@l-CujIQi@T?W>D{RvjY|vDM2f>+fG*ZJH(N`n?MG9M?dbb_1z;OnZ+$J|6IDd&f}rCf>kQ=>c#ke06PEmeI$5go#VSWP$2v@COIE*v_cm@EVW3W0pZ zZcgZ&*tn)3=TmUc*$XSXDf2T=sKwlmwf!Z#_`(n7lck|A2LkgwtvIephppv>%+h4x zcpJYGDfkO7<6DtF;XzTG ze5E5dT4jAHv@1N6KF0mIw}k{eJt^oCMV0Z3^&iCRQ~q=R z>PGrm#3Y_cv7z}8aP${5xP`cwT83~cjaY3`=J>RHnej;eLHw-bn{YffYBzZr84;0___S9&F#Gk+1 z%~Th9hE1&Dds(ccuUs8Ry#Q84Ecm!;~g2uq*e8^!L^R}o2JhK%A5#;Th0APimdWb z@i;hG1T3<09l%v)bzWRK=xKEAG;;>yr3DZ=fg~SxbOmgajJ)`9^MZ*rF6)L8=pL)f zG|2(y#}hM?Xe+{lM|K}u^LUuvS?`%>_Dx@gsa6HQEv9TfHg8dHRMbQ@%UOz;(-Uz`oyp{%H33;5?)Nw4< zIVS8XU2yamnEUFyDc=TCo#{UWC-yGYXEr1uTJwKQ?C;edG2gU&acLRcklepM7&wWH zfYwyiOPl`U6{sz8%2Hf@Z7bQn{jiYq`5e3b zdSr}rhf#Jk;!x+;huD$IaMFzPTQm{dh7E6**~BaEv+M$R=+|$fW6B(pVmV`>7m6p9 z_UKk_N?U=w+>>YNvpW6v7vFgsyq!**&lBmXFmS^#*lRu5Ku*;%0_7H$w$p|`T?G99 z7|*bHhvcY!Lfr|xW!JA9hErv@y;<)4gQF?|Q$@r?5X>mBl5V$>>oT(99>tC&)4$KU ze)ec<-+>O-@*AuPlvwu>M;?8?$e8g#7KwCvd|LC{)6B?;UGv2d)LvimxVve!{M8yd z144dG{){gZksK`?oc2e3GoHka4%KS3z0|LAVth<#FXa@+cKeH11tTOPT;n});YO9_ zU1cSjlV6o6V;R}I6^FnI256INwU2;v9Ma8mIS5mKXCie;14NeoyYHi+F7=((N4?|U zpFj1A!?v>|@}j*vNnSVX2b3)z9cDt5zuB8o4*vb>1)jJ0UzF4dD_W(7%?xJCRX*MW@~Phv(Ul zToc9X@ISJSe*^rwR7CQcE|IfPJxG=@e@25OW@UwF$B(43R0v~7&n&jL_ANuFe0bzf z-k%2-7F2w<-K&hAc{%hEzLr+WFLBn_EHUQ86PVqnsI*dOYj(dxA0KIDLVVh?I{r@fR+Dx6|B^Z)m+IW|zfkaL>AwRw5VP56($m@IeS%0fNakID|25tt= zx)Q58=%y&eBELU=UuZ&RA!Qj<=tJg~hQ@v`dW2uYtsldo%bxC1{f%O)_f3;fTri?m zguE%dSdA{fGkuOlmA@e~5TTahg}PW9h)`Y~un=*Xx*El?807u<{)qZpEu%mZW`Er! zlzrowuq;euLg#y~x}kd1WYU?T%Pxu+i;D@HhxmhOOA`Y>F6)n<4}_T6l51*SJL2MK z{76Aj@aJ*nE^%0C_LD^*nMmUMG75FsgotW_PC^sehMNHCuRSXOULi4ROED6}kDw$q0 zBLjm+t1UxPEW^1FgW3ZVM?e= zD#CK=r7C6S>=-VFDHY7~Aybu{7;~EASNx^Dy{`sLKGo9FKOx~UJ(ThsghV>n_IvKU z^QdZ8R@LnEBst=FK40|ALjIdwTxZ#SRt6J@pxa)9-ZPx-?C-;U_hYVm zr*&to0CfR^#;ND)Y3}cj3j{Mm8WRC7m2%kq){F%PRKrIo$$)hc;WlH7@RFZ|!iNr`AwYNC|YHMn}Az61@e7M7( z9rL+FCQHa7Gt?e`Dq0|IMoF=c4Dh)%_A1JurJ`jOtC0Rd8E>p7x83hX6^$hrgh1E; zxV_XUkt>`!FuuVnde3f5vX()i%y(@(OHRWK@wQkY!cl+O`$e(1?EZf8YCq=7`6S!o zN}32xzE*r!)l@&azRNS#&!6_BJfDtap$mrIJz4uf?9gqnm+9w6r_t=iibQTt+1`S- zw88?^RrdHvHVz8Bf_{0%($lSCYy(Jt4RUT(L@{B$GBvRRe|YyOdJ%8f6nZ}!kCwLd z0^xC=N&g(50U@I?XpIV_vgNVXA0~_mN-pIXkd0KcqcuYEFuwPc2G_nqUr&A;Ic2Cm zHrmaXN~*H61LfM~Fb0385UA29s;~bXp0Vk7snx-1lhko1vK;iuct5yGeE%eOS{sxL!v$&?fI1|kM{&8m zByGcVb%-M-2#Fz&pqp&l(nn;r9mcefuV+4*UEuch>olHwg5`PuKgKGTCR4AzFK437 zvij5F@y_dq)&|_McU0jnN=<~vBz<(w*`~>ca-9+|i0=Uigh@iPDWS~n%2TzXLgAB` zbQjGvv z1ghO-Xu3a9&=oP-7-jB zu3)~t%cQ6$%G><>g$Ip?H^A*dn)caLI|4cW7Lc=&{aQ5KPwxQ1pg~|3Snm&Kr%BxcK zGs!Qrwxa6=HGZCG_ncOXWfd?nI_>fOc92gjWeMd?GJUu@an|;e@HW5BERPJSO+_HZw~osA@M+EHzP*X((UxJ(M91Z;u8ocPZ@(#$a^)7o6Th>h zntX9oQ8cxjNQg+C^!z}$rKwa>hJQP9!P;60hV;WyHL*dkK!TGP9;|^<^GBrJ4Fl-E z-r#7Is`d4V{xKfx=#z?pE*oNfud_ysoQn?^k+IIO!9%}2O>H7bPZ>_N% zI#aVkZI>mWT8Ybvn@q@6?x_}dHKxrrww8zeC?qX8oKvXsf@#fGtqb#UywYj1m-6fB zmtlGVQ$Z2Mhp$Ocb2L{B?N9Qth}def@u1&5G^}3v5ZKt^jYPxY`9aQ4ica3UggtOi zQnIzvz3(=MUEhR1ZtrU5>mN)Z*?+YQaa*G*i+FRmh!VRhen83FFF z`w&xVU*f&Mpl<$EdQQ&!*w3LU4NEYZKkmx|$3Ix@ak{o>-*_`(n7;Z%LE@R6mVhAYwnIsr zeVe=fD2UsHCjgtZ5>j4Kl)?tilX*cWD1oP{zbQ2;nM@QCgcutS;a_y$Q-B+z)r8h~ zl+MTYHeGa7d3StPl&U8#Fe(wE1;3{fk!=I2owaV2WiQM~I~!!FZW1nC-^-1>N;Fe8 z*bsiAfIeMp%lhP#bv2sNnWb{!s?HJ%dQEK!k%V zUv?(x>viKVE8R-dDQfS=Q9>J@45z0iz{D`3TA$ZA&|B;k%ec=!*v~vv{LYthsxF#^ zzZ(55R8_W6{>2qG&JNy=G2tT=hgq|IZypqe!ES%Yus%ApRb}OLIQk?=U?DX{_nh=i z*G~oZhCc7B1LNV(AK-j&c==dq;vjMCV}7^wMg}E;GQ5Wscgo`v%_w?IT#^g45BR&O z;i~zaQ8Q0iW8x+7GVsW)v}CKPbe|GnAdy_!GD+KLxDXjs8kiW;sS|E!R8#zTZX;Ey zC-L%m<7QLs3c3XI5dAU+?lN+Osr+QJjl?fm9A=VA zUdP&eC+Ec_nHMo)5$?*^Y2k|oqcdsVqGe;_nO|;Bi`~zCjg>~kVQgW~uk%(XU(mhrd!`VuY?>xd!KgBcRN4K9r#$ zlAfo@YzM-S6G!VQJ&*#gkir&++uz<-aax6(;~Sn?_>4A5(l9zG7A`iU0OLu292FDZ zNI!bRLqo^r!3~~E=6serYzh%3v?*v~UiC>Ecml?Na`7IPq5r~Wh z7S5qnE4|VYVM@n8Jl1M)eG#|-cHFnH;>rESMPLxutb^?99S7S`D-dZK_uV-y{31QZ zlQD9Y-SQ1`CXym;u6&XIu&{{41jW*Bs6SW0xjksw$0R>%RAqbeA%4wn)fkx-qNgSH zXaLiL;z?9PAa|&pE}3Mi1$w1teMPn1;|?vC_;_sGX%-wud!9I-L~K?i7$~Z2zucMv z*U|Op>xC7`p+x{t0XJ^VaTAykZ1e3IZY?HP+A^k$C<{T~W|a-?k-R+)(#koEzYqw{ z*h`<&J60n%h)BfI^@tYMj$KPIALef))x{eWg2QtKb6ghVUy1eBVOu9hhw&Auj|U;( z5pi2x2C{!*ZHAFgK7>%^I~mDVb&Xc2o?~0JIyW2)M$8G{KrGax<^p~ZI7!a_;acE- zDoXvw;|cdmf5BXz*#_fWMbmP6P>oLRh*y6dwp_I2`*yzacSvH-!0LQ6*$`#HsJH@)AR@EGm#Yv zQfv41McEzhNm`bzUpdBG65d@X@g zaEe^K@t-(ic}Is?rH6P+?**nwG-@8Kt+J<**U60vBR!J7i(PMDfzYQCw*@D-fPU8u zvR8{dD=n;BT@&v=%Ku&-2$98L#OgP}>;$imV~nG(UcNX)38*2BSx9btvPAsZyunOV zx!wI@;3NA|Tzn{e=WQr$b|g2oO>*tg`dTkHp%jegHx7~*cq>U=Hy4MI$`&c{Nkt-F zp3pUCUWk)K)-^+I`PLaAv@FCVXn|YR&FbOI6>sX8BtO1d=UR|}fmjuwCi*^hOq81X ztnk0Q3x&h=6?;!a;c(h?blnnKf*5+pf9>EOUr|drnS7l|0ZP&NLPMFM|23YU2J6DL z9VMCb<5+%xB#n)_GT*M_<_ehTA+GHt$IUk}s1tqRq1R7b(KV3ZMyts=Gx9p0iP*S_-y08gg; z`a?roKyBf?^`ot8adWARO?76|C@AE={>}o}Z5|qr&CCD-wE9E9z@Q}BwNW_I_Esml z>0De2wz3|qX2s8dFnNrFI^4nTXJ6Pek^I){>#kX^fc7sn1p*R!NVi_xZu?-k%J=Sk z0j5gKMm8xLf4%6n;b!UGg0qrRT9<9%!g$qx&~3UlnBcu~fsT8DV2I<1M5)ULyqDVY z&1>37Dz?*GrQTwHvNGZz1_oI?@!iX&pYrw!diV}BBH`rDQ3Xvo$oxqPt*;Gpmyb(M zs_J%}-7t)XQ=kgnU?3-tdKWwBbdW#k6=$jES^%!-(X-+DCl_A}*XCQ>h|cV~=J%78oAZcd<5&a3Azka@R8Ui?PM>EAb#Xo4SJOvwRQ92WPF4nZ zuXStw*;9Z!(P;)V2MroNJfQHVk!lSpJa6*V3K1201&dcBQEz*=?_w14micCkyZiMu zypGQPEb9a`ecm!v%m03>`%wUnlf=YSUSy27>lDpbPRDw#;z(l-4f}NrYViK+loVnn zOe#f*W01|M$YpPfS8)|Bi=LpB91XWP*r_0XAFk$x_3|TY+BuB*NLK}W^IOoZL{N|( zK9|L$4`TB}N@l63OqbwP4F`wubGxsMUkh#3ohl4Ry3>;Ify~k^2vOcG_n%<591%9g zALSDX#gN1!fzx~9qukO`?W5VC>es~5uv>{6=dgC?=ae8{!}o6`tuxKpEm(C%c}Kov z<(nn6`W9M-nj&}vU)x#+3{zEn+XO}dH06-Qf2%|ieWW=3dwNJDNS`3{P)0(SH=Ao* zx_F6EK%6ICY>&|H6YQq6j@nl4p|G6>e*T6RH|0<6eTX0}s#3dhM{^)8Z(j(_Yka>X$*k|XHADM$l<*~mwnEj6%b00 zP2@txLB|WX?ZrmqrF!$Qd~V*(3~BelvkRAX3#f}l>gVaPq@YIfN&Q*6)RB!PKOPaI zV&ER4wb#T`rLEyzUs*WiXv7Kqs1#fd#Kj3(bK+)^-#UG6=sJ5W@W6ZDf}n{Lr&45W?8>nbY?=nH3tNYE{Lig;)A1dY*ng>2ytO`o zqlaxg6_!C%eeF{6MLd6q7P;#_wU%}|c2Dh)wn*Lp7)7y>(3)}Pz~5Z zC2zT;U7Ajbxr#5tisTs1JI_VWzs8quOm?IC0}3fyRhLTGlo)zJ3?j@^>YsWSx(ff@ z!&LvwwlxsZX%#iqn(qFX!L;D(%L{Stja=2~?%znC0tr~+=ZV-@G8+_Jx^nZroWY`V zL){UVC!x-$iC>+Xe)GU!(R8VjHov1OuSv(TC%xZJI&-X3TQ-`2<&^O7f`O?B7&MrW z!L$xAq-1BJ_}0(N6Mpi1-jpiO;k~?|W2gLO#xpI(#B>Kt1i@LWby!d>BdEr1{6t{r zZeE0X#Af#%gq~Gj@W6P~ix1V13F%ybP>xa_7m~Cn;|sCcwn9LlA}KIrj~SAi^868D z`O7FfJ1ZoTak`{wm`OE^4A2)PNL=QNl}=k+6eUh1U;XS1XXJ~~w8tPaO%t&l-XH31 zvE5d?>Wj0cAstmR;;I8D236acFOK*If}{m)+cHULEw%%9aPg-dG} z-RT5PZ5~%;{7U0DOmp}Sk^7b`y6qB9Ih(gQ@-Abm5eFXAV*zMeuj}E5t9YG(GW)HZ_CPX#hi8 zOd$GpN$sgk8xUr5nahRg?E_Uz0eC1~foTYwOqgR>K~)#fkswP%)CXp{1~#v4i$|31|@jeH#V zT>_Rb02^KU0x=*eEf1cv>8Zc|J6)xAbO45s1(uzs)Y29?bmGcPQ0-tG+f+^Fj_q*5 zd%x=?D5Pl_@RU-DeSd7{__Q=M)D3MVP`(<)ekQzr^CzP9<$=i{qx$T%hJV3|kH+eA z*PU)o5l;2rUA96i0v+USTVby2E`iiUecZh8Hi+HMY;%V^m3_OR`bFe#8-#-w4;-$Z zP=1;L96y83$hjxWUnqx0c)3}1G7qGfV#O??B6?a(^c!=7CGUZW25C?(16hPfQkFZG zKtk)8jz}+KIa_2F|H6I1R&oP;po?va<%vSYC^EK-LMdquM>ejx^vJ%XN&!E zZ3pYpl+fTUV!zE40i+5Csg~lf8ngvtkduVUSzNgh2jA8UE&); z7jp#D)7XDtE$lh@+c)C%ilvXx2yCF^XsuITe5hB~j^{2<2^bKgpWiyID=?BYwawjN z7Z_%I_)VH;CzCGFo3@!=6ZLm(r3+~=$U)z)KQhYO!VdIU?U>dQSIrqzU0t`MWtz;G5k}RDYTD!My zG!2YH^uPGtmJ=jH(Q}%5ePfRmw?o{fplvRHJziK?)mL)Fl=Rkw3JVOGB`&?ZNYzH& z(ZR&sqQxENlEEK)T)^Ko@Ok8Ff6%YfBAn|}&ItqJ34NBo5B0OJ`D+xa;$sSp9+YEtri(P;>lun-SzrO-z)l3@ST4Exs3Z}tJM>t(6M zpF++Obu}&WDX>TB6Auq_!+O;{u$yIIYMaiuEqNDX`x$rOWhrgvBbnN5hm53MpuR6F zUP>otI05Am>FJ)K%dLC1i2c~wdedvPZ2qC;=6U_}tp9#%-Dsx&+1!IO@l9L(aS0rU z7d7R_3&#n)xi{WPbNE(P+1Iyf+9^U8*coQVZ#Le72vY1n%G$ru&NR6lK>IHTV-`&U z;%r%PO!X%?TvN99-o~Wp)tSK$&S~0aYX`$cbZ@5}BN}S0kzYcxF!R>~=+ff5?`UxI zFB2aPziA1kvR9kDx0-tT2W$B?L!1qdUDcg?ysGrWUS-8jo7;(xw1uHAZ^4|jZ%qW% z&dCTX5Iv&R%w0ifmfBYv>o)hD4iI)9h4Zk2j^FMWw{Lk5G&N2sRo^GG3gYztioc64 zn~h?R`Dy>gPOQtfq0NP4d|PobR?m0p!RUs3m~o0ozWZGKhfV|#bB&3^G)x#PdRWiD zuElISp^>%a71s*i@$C7pxNVZLYPNl(%h;h|lvBx4wmwJ`Drw7rLd?QHzL^di48%8F z+)gmdF(5`9Z_T^zzYNeKm5DYd$PU!cY(E!ie0FQ@ zz5(xC=P)*8k`*OtbX&o3iIHX{dZTmnsw>^U{Ijn-#D6`%Gr4P36J~z9xVI4CBFov# z-8Y=IOgTs&H@GGkp_Z6N+s7|kYjRU=;kNYN{?G;&iF{fM{RyRchE{$p4P1)OM01D` zW9A{_hCaw@_o>5D@nx2q(9Om7s*TKIdK1)00bykWF|Kx0 zLM<(jwL(&dh?$jpm22Zm;-BDya;1IR=^iy0S5PWlg*U%RxKbK*7)~m}abW){_41AE zz`ZZ&?KT*>seJ8}v;;1u&revap-zn4O8`Q+8+;&y;|Bs`V$(3hU{Yx8uoMOZ1KNDP z^y3d18@~5DJ{O_iz3wF_Z{wlLNr?ChzlXFCX1`)x*3NJ9rOzUULYBZd(rl%Adp}}T zDpcMfky@Q-znEvpC1Bz(5i|!h%z+=t#xYjaUk`w z+&J$Hq;rc`OKG3b3QAtJm)iX@?o=%-)%nP1(gM`)BD9P=kx21uk8s%?$9d7uczBJi zMR?X}9bwfL60pmo=qm1ESj${Y%H&yKB+a<}$Id^Kv7Fl+UkL=?7a8iLtp9-$gORt^ zD(_<1yU)ZIT}^ z%_ek&hAJ^}W1eL5p7zcvPPofEypqz{ESs&8hk-S*nuJd1QlqgS@k?t4!p-xJl-DZlKz zl^7i{lOE5oMrk7l?om{bo<@-0xe7Fxxn2egtq!eV&DxwVP_F=b$$jseQl*?hF+k$v zN{QbRYQgcb{mTb94$;C<9Zvqcz^k4J)(vuM1`N&i38a=0p-t42AhE6}?QhBz&w&Z9 zgANLX%ALvDHY_A^@2NT)Do7Q#zLX9q=Je2Nx$Z_R28NDFa=-orhMaw_Jm(ihoOhiP zF^+uJcpRhe)k`d3uKt*5QIq?z``a=uqd#WfKlu9m+UW?Ow#iNrtWW}k2`_m00QK_) zyknFs@k2>1t&Pq{38|H{qD$y;jv*2m{!;Tkav<Y_&!YN;Eju|S;F1cANM&66J~(-JSy(;>)LXnzeC_)NcGo&0bnqh%3&FnNCBNfW!a7iVEgpFSqjvdqsVodrx{ZKLA$CEq)a zwpKX9ZxP<_3jd~VtnWZo-hnJnurf35IfjeI@ExkZC1)}x&J(Z-jIn+$kIqD#>p)a35lp4M_IFlaHZ1$dEdQ7%2n7fHKbUQdeB#bJ%LPEE94ED;8h zVhIW)OO!fg%yZ#8v8-!rI#9Gu!RpDr`;LtpY@+qRP&l^aPlZgXO3yBpH?r)$l}-ZC zL|VQNHf6O(fWr_-69=5$3g5ct)(DAJb0hY>sHao! z8hF@hx|3ss(zAjQ{c8s4&$+rkCbW={<)jJsvN}v)6@4vj^7d|bH;+0>BCgfU{FzG^ z;e>)4Hm`#Ai=O5gF-xZLh*!EZ(W*pwYv!yLlzz``*K>O4tc85eo8@l>#|vBkgK#WG z+Mw!q|H;fDZo>x_xdPKQg8*N()ddAkoeaC8DTlSp&lP9=zd0gb&Qi?jIhb^-XZ=h2 z7}n_C@zKd^uBzZod|D;}}g<4{v(pN%Tw8V}U=*|qmjwfE8I21C9 zrI^5Hw^^9eFY*PR5g<&*1^d*VR zkWqKV`aC%qBy-X$w)x#VzBqlrzuDH!SZ=yR`>_8Qe#)b|$|H1K7&0FkfA@lQo6c4a z+jXpZzac7Stv)bzd8TNr%vQ=-mtXP0TlO{ZY=(Z*JorFQ5|`n3R<)Mg>nQJQfh|wn zDAg^;GyMbasGT^zl=~I0s>V^@{E4IP{i2lK9z6~X5q8!Bi27_s0oJ3w-ln0(P&FEj z`GZygUpW#i*AmeJi7 f)NxZTf^WyXtaPN8(s}w+-r`^f^^pRBAu;1Y~xi6f*Xqu zR}gbr)91SR11ay`=4npTkUK9AeZXJU%Mo}qa@+YH!-*+hK^sIp$r$xZ7+dW=0KZD> zr$R9OS&S8ABjY(r&AFz*l&*%Z<9H>_aKr|Em`e&%j&>&R%R}U0ox*n3I%RWy@b_!*?M5~T+9}&Xe=eT9AA+p%*js|8M&}(lVGRt z;H!8s6b&?<9o6X*zeFgOmnmQi=JFMb&`xQ`Z-=kGSpE6zZddTr^Mr`Y-*E?1r?s<#( zxA+_3ZA^C;H;-q9$aC||5b^IZy~X$9D!y)-UN&iokLgd9 ztj&7b-@Q+M{VhCVv21UOLg47NgJr5qXy%KYe(J?(%4N&F-%^Jb6zHqU0`$-8Wh7vS z=x8M*$@)j$Zyr}}*iYt0MSe@>-1X>Sy^&q3BrcG9-lcu#{3qdlv?##i55InA891@a zoF5u&*D1|$0v<2dc(N+@+PqqDLV&M>^0x_{>^(3Vu{36tXpr3iJY$eA{dHExUx4Ui z{K&nRIUTnkr#WGZ&2}5}MPB;qD^l+N9xV7o6DY`?BkL{>k>l~{J!NHD+RnO2z3h{c z6PAb%*QZW+mR@i1F%WHS`gCJ^{ypMbE5Gh9GK%c_P0{SB7)

diff --git a/packages/admin/public/robots.txt b/packages/admin/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/packages/admin/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/packages/admin/scripts/deploy.sh b/packages/admin/scripts/deploy.sh new file mode 100755 index 0000000..dbf6a07 --- /dev/null +++ b/packages/admin/scripts/deploy.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +CURRENT_DIR="$(pwd -P)" +PARENT_PATH="$( + cd "$(dirname "${BASH_SOURCE[0]}")" || exit + pwd -P +)/.." +cd "$PARENT_PATH" || exit + +STAGE=$1 + +pnpm run generate:env:"$STAGE" +. ../../scripts/project-variables.sh +. ../../scripts/get-stack-outputs.sh "$STAGE" >/dev/null +pnpm run build:deploy +npx serverless deploy --verbose --stage "$STAGE" --region "$REGION" + +cd "$CURRENT_DIR" || exit diff --git a/packages/admin/serverless.yml b/packages/admin/serverless.yml new file mode 100644 index 0000000..1174d56 --- /dev/null +++ b/packages/admin/serverless.yml @@ -0,0 +1,177 @@ +service: ${env:APP_NAME}-admin + +frameworkVersion: '>=2.0.0 <4.0.0' + +plugins: + - serverless-s3-sync + - serverless-baseline-invalidate-cloudfront + +custom: + s3Sync: + - bucketNameKey: S3Bucket + localDir: .dist/ + cloudfrontInvalidate: + - distributionIdKey: 'CDNDistributionId' + items: + - '/*' + # domain: + # local: "local-admin.baselinejs.com" + # staging: "staging-admin.baselinejs.com" + # prod: "admin.baselinejs.com" + +provider: + name: aws + runtime: nodejs20.x + profile: ${env:AWS_PROFILE} + stage: ${opt:stage} + deploymentMethod: direct + deploymentPrefix: ${self:service}-${sls:stage} + stackTags: + AppName: ${env:APP_NAME} + Stage: ${opt:stage} + Region: ${opt:region} + Product: Baseline + +# The "Resources" your "Functions" use. Raw AWS CloudFormation goes in here. +resources: + Description: ${env:APP_NAME} ${opt:stage} + Resources: + ## Specifying the S3 Bucket + WebsiteS3Bucket: + Type: AWS::S3::Bucket + Properties: + OwnershipControls: + Rules: + - ObjectOwnership: BucketOwnerPreferred + PublicAccessBlockConfiguration: + BlockPublicAcls: false + BlockPublicPolicy: false + IgnorePublicAcls: false + RestrictPublicBuckets: false + ## Specifying the policies to make sure all files inside the Bucket are available to CloudFront + WebsiteS3BucketPolicy: + Type: AWS::S3::BucketPolicy + Properties: + Bucket: + Ref: WebsiteS3Bucket + PolicyDocument: + Statement: + - Sid: PublicReadGetObject + Effect: Allow + Principal: + Service: cloudfront.amazonaws.com + Action: + - s3:GetObject + Resource: !Join + - '' + - - 'arn:aws:s3:::' + - !Ref WebsiteS3Bucket + - /* + Condition: + StringEquals: + AWS:SourceArn: + !Join [ + '', + [ + 'arn:aws:cloudfront::', + !Ref AWS::AccountId, + ':distribution/', + !Ref WebsiteCloudFrontDistribution, + ], + ] + CloudfrontResponsePolicy: + Type: AWS::CloudFront::ResponseHeadersPolicy + Properties: + ResponseHeadersPolicyConfig: + Name: ${self:service}-${sls:stage}-no-cache-headers + CustomHeadersConfig: + Items: + - Header: 'Cache-Control' + Override: true + Value: 'no-cache' + # OAC Role for the Cloudfront distribution to block direct S3 Access + WebsiteCloudFrontDistributionOriginAccessControl: + Type: AWS::CloudFront::OriginAccessControl + Properties: + OriginAccessControlConfig: + Name: ${self:service}-${sls:stage}-cloudfront-oac + OriginAccessControlOriginType: s3 + SigningBehavior: always + SigningProtocol: sigv4 + ## Specifying the CloudFront Distribution to serve your Web Application + WebsiteCloudFrontDistribution: + Type: AWS::CloudFront::Distribution + Properties: + DistributionConfig: + HttpVersion: http2 + Origins: + - DomainName: !GetAtt WebsiteS3Bucket.RegionalDomainName + ## An identifier for the origin which must be unique within the distribution + Id: !GetAtt WebsiteS3Bucket.RegionalDomainName + OriginAccessControlId: !Ref WebsiteCloudFrontDistributionOriginAccessControl + S3OriginConfig: + OriginAccessIdentity: '' + Enabled: true + ## [Custom Domain] Add the domain alias + # Aliases: + # - ${self:custom.domain.${opt:stage}} + DefaultRootObject: 'index.html' + ## Since the Single Page App is taking care of the routing we need to make sure ever path is served with index.html + ## The only exception are files that actually exist e.h. app.js, reset.css + CustomErrorResponses: + - ErrorCode: 403 + ResponseCode: 200 + ResponsePagePath: '/index.html' + DefaultCacheBehavior: + AllowedMethods: + - GET + - HEAD + CachedMethods: + - HEAD + - GET + Compress: true + DefaultTTL: 1800 + MinTTL: 0 + ## The origin id defined above + TargetOriginId: !GetAtt WebsiteS3Bucket.RegionalDomainName + ## Defining if and how the QueryString and Cookies are forwarded to the origin which in this case is S3 + ForwardedValues: + QueryString: false + Cookies: + Forward: none + ## The protocol that users can use to access the files in the origin. To allow HTTP use `allow-all` + ViewerProtocolPolicy: redirect-to-https + CachePolicyId: 658327ea-f89d-4fab-a63d-7e88639e58f6 + ResponseHeadersPolicyId: !Ref CloudfrontResponsePolicy + ## The certificate to use when viewers use HTTPS to request objects. + ViewerCertificate: + CloudFrontDefaultCertificate: true + ## [Custom Domain] Stop using the cloudfront default certificate, uncomment below and add ACM Certificate ARN + # MinimumProtocolVersion: TLSv1.2_2021 + # SslSupportMethod: sni-only + # AcmCertificateArn: arn:aws:acm:us-east-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # ARN of the AWS certificate + + ## Uncomment the following section in case you want to enable logging for CloudFront requests + # Logging: + # IncludeCookies: 'false' + # Bucket: mylogs.s3.amazonaws.com + # Prefix: myprefix + + ## In order to print out the hosted domain via `serverless info` we need to define the DomainName output for CloudFormation + Outputs: + AdminCloudFrontUrl: + Description: The Admin URL + Value: + 'Fn::GetAtt': [WebsiteCloudFrontDistribution, DomainName] + AdminCloudFrontDistributionId: + Description: CloudFront Distribution Id + Value: + Ref: WebsiteCloudFrontDistribution + CDNDistributionId: + Description: CloudFront Distribution Id for serverless-cloudfront-invalidate + Value: + Ref: WebsiteCloudFrontDistribution + S3Bucket: + Description: S3 Bucket + Value: + Ref: WebsiteS3Bucket diff --git a/packages/admin/src/App.tsx b/packages/admin/src/App.tsx new file mode 100644 index 0000000..99694d5 --- /dev/null +++ b/packages/admin/src/App.tsx @@ -0,0 +1,132 @@ +import React, { useEffect } from 'react'; +import { Amplify } from 'aws-amplify'; +import { fetchAuthSession } from 'aws-amplify/auth'; +import { Hub } from 'aws-amplify/utils'; +import { checkAdmin } from '@baseline/client-api/admin'; +import { + Outlet, + RouterProvider, + createBrowserRouter, + redirect, +} from 'react-router-dom'; +import '@aws-amplify/ui-react/styles.css'; +import Dashboard from './baseblocks/dashboard/pages/Dashboard'; +import User, { userLoader } from './baseblocks/user/pages/User'; +import Admins, { adminListLoader } from './baseblocks/admin/pages/Admins'; +import { + createRequestHandler, + getRequestHandler, +} from '@baseline/client-api/request-handler'; +import { AxiosRequestConfig } from 'axios'; +import Home from './baseblocks/home/pages/Home'; +import Login from './baseblocks/login/pages/Login'; +import NotAdmin from './baseblocks/not-admin/pages/NotAdmin'; +import Layout from './components/layout/Layout'; +import Loader from './components/page-content/loader/Loader'; +import Charts from './baseblocks/chart/pages/charts'; +import Chart from './baseblocks/chart/pages/Chart'; + +Amplify.configure({ + Auth: { + Cognito: { + signUpVerificationMethod: 'code', + identityPoolId: process.env.REACT_APP_COGNITO_IDENTITY_POOL_ID || '', + userPoolId: process.env.REACT_APP_COGNITO_USER_POOL_ID || '', + userPoolClientId: + process.env.REACT_APP_COGNITO_USER_POOL_WEB_CLIENT_ID || '', + }, + }, +}); + +export default function App() { + useEffect(() => { + return Hub.listen('auth', (data) => { + console.debug('auth event', data.payload.event); + switch (data.payload.event) { + case 'signedIn': + router.navigate('/dashboard').catch((e) => console.error(e)); + break; + case 'signedOut': + router.navigate('/').catch((e) => console.error(e)); + break; + case 'signInWithRedirect_failure': + break; + case 'tokenRefresh': + break; + default: + console.debug(`Unhandled event: ${data.payload.event}`); + } + }); + }, []); + + return ( + } + /> + ); +} + +async function protectedLoader() { + console.debug('protected loader'); + if (!getRequestHandler()) { + console.debug('creating request handler'); + createRequestHandler( + async (config: AxiosRequestConfig): Promise => { + const authSession = await fetchAuthSession(); + if (!config.headers) config.headers = {}; + config.headers.Authorization = `Bearer ${authSession?.tokens?.idToken}`; + return config; + }, + ); + } + const authSession = await fetchAuthSession(); + if (!authSession?.tokens?.idToken) { + return redirect('/login'); + } + const isAdmin = await checkAdmin(getRequestHandler()); + if (!isAdmin) { + return redirect('/not-admin'); + } + return null; +} + +async function loginLoader() { + console.debug('login loader'); + const authSession = await fetchAuthSession(); + if (authSession?.tokens?.idToken) { + console.debug('redirecting to dashboard'); + return redirect('/dashboard'); + } + return null; +} + +const router = createBrowserRouter([ + { + id: 'public', + path: '/', + Component: Outlet, + children: [ + { path: '/', Component: Home, index: true }, + { path: '/not-admin', Component: NotAdmin }, + { path: '/login', Component: Login, loader: loginLoader }, + ], + }, + { + id: 'protected', + path: '/', + Component: Layout, + loader: protectedLoader, + children: [ + { path: '/dashboard', Component: Dashboard }, + { + path: '/admins', + Component: Admins, + loader: adminListLoader, + }, + { path: '/settings', Component: User, loader: userLoader }, + { path: '/chart', Component: Charts }, + { path: '/chart/:chartId', Component: Chart }, + ], + }, +]); diff --git a/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.module.scss b/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.module.scss new file mode 100644 index 0000000..624f3ab --- /dev/null +++ b/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.module.scss @@ -0,0 +1,12 @@ +@use '../../../../styles/global'; + +.addUser, +.addUserModal { + .addUserButton { + @include global.smallFont(); + + padding: 6px 12px; + background: unset; + border: 1px solid #bababa; + } +} diff --git a/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.tsx b/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.tsx new file mode 100644 index 0000000..93e9431 --- /dev/null +++ b/packages/admin/src/baseblocks/admin/components/add-admin/AddAdmin.tsx @@ -0,0 +1,74 @@ +import { createAdmin } from '@baseline/client-api/admin'; +import React, { useState } from 'react'; +import { + FormGroup, + Input, + Label, + Modal, + ModalBody, + ModalFooter, + ModalHeader, +} from 'reactstrap'; +import { getRequestHandler } from '@baseline/client-api/request-handler'; +import styles from './AddAdmin.module.scss'; +import { Admin } from '@baseline/types/admin'; + +interface Props { + setAllAdmins: React.Dispatch>; +} + +const AddAdmin = (props: Props) => { + const { setAllAdmins } = props; + const [newEmail, setNewEmail] = useState(''); + const [isModalOpen, setIsModalOpen] = useState(false); + const toggle = () => { + setNewEmail(''); + setIsModalOpen((open) => !open); + }; + + const addUser = async (): Promise => { + const newAdmin = await createAdmin(getRequestHandler(), { + userEmail: newEmail, + }); + setAllAdmins((admins) => [...admins, newAdmin]); + toggle(); + }; + + return ( +

+ + + Add Admin + + + + setNewEmail(e.target.value)} + value={newEmail} + /> + + + + + + +
+ ); +}; + +export default AddAdmin; diff --git a/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.module.scss b/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.module.scss new file mode 100644 index 0000000..0be2472 --- /dev/null +++ b/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.module.scss @@ -0,0 +1,69 @@ +@use '../../../../styles/global'; + +.userList { + .admin, + .header { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + min-width: 0; + padding: 18px 48px; + overflow: hidden; + background: #fff; + border: 1px solid #bababa; + + @media screen and (max-width: global.$lg) { + padding: 12px; + } + + &:not(:last-of-type) { + border-bottom: unset; + } + + .userCount { + @include global.smallFont(); + margin-right: 8px; + } + + .info { + flex: 1 1 auto; + min-width: 0; + + .details { + margin-bottom: 8px; + + .name, + .data { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + + .name { + @include global.largeFont(); + margin-bottom: 8px; + font-weight: bold; + } + + .data { + @include global.mediumFont(); + color: #707070; + } + } + + .pill { + @include global.smallFont(); + width: min-content; + padding: 6px 18px; + border: 1px solid #bababa; + border-radius: 10px; + } + } + + .buttons { + flex: 0 0 auto; + min-width: min-content; + } + } +} diff --git a/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.tsx b/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.tsx new file mode 100644 index 0000000..3ab6d2a --- /dev/null +++ b/packages/admin/src/baseblocks/admin/components/admin-list/AdminList.tsx @@ -0,0 +1,56 @@ +import React, { useState } from 'react'; +import { deleteAdmin } from '@baseline/client-api/admin'; +import ConfirmDelete from '../../../../components/confirm-delete/ConfirmDelete'; +import AddUser from '../add-admin/AddAdmin'; +import styles from './AdminList.module.scss'; +import { getRequestHandler } from '@baseline/client-api/request-handler'; +import { Admin } from '@baseline/types/admin'; + +interface Props { + admins: Admin[]; +} + +const AdminList = (props: Props): JSX.Element => { + const [allAdmins, setAllAdmins] = useState(props?.admins || []); + + const handleDelete = async (adminSub: string): Promise => { + await deleteAdmin(getRequestHandler(), { adminId: adminSub }); + setAllAdmins((admins) => + admins.filter((admin) => admin.userSub !== adminSub), + ); + }; + + return ( +
+
+
+
+ There are {allAdmins.length} people in your team +
+ +
+ {allAdmins.map((admin) => ( +
+
+
+
{admin.userEmail}
+
{admin.userSub}
+
+
Admin
+
+
+ { + await handleDelete(admin.userSub); + }} + /> +
+
+ ))} +
+
+ ); +}; + +export default AdminList; diff --git a/packages/admin/src/baseblocks/admin/pages/Admins.tsx b/packages/admin/src/baseblocks/admin/pages/Admins.tsx new file mode 100644 index 0000000..db7fd2d --- /dev/null +++ b/packages/admin/src/baseblocks/admin/pages/Admins.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { Admin } from '@baseline/types/admin'; +import AdminList from '../components/admin-list/AdminList'; +import { useLoaderData } from 'react-router-dom'; +import { getAllAdmins } from '@baseline/client-api/admin'; +import { getRequestHandler } from '@baseline/client-api/request-handler'; +import PageContent from '../../../components/page-content/PageContent'; + +export async function adminListLoader() { + const admins = await getAllAdmins(getRequestHandler()); + return { + admins: admins, + }; +} + +const Admins = (): JSX.Element => { + const { admins } = useLoaderData() as { admins: Admin[] }; + + return ( + + + + ); +}; + +export default Admins; diff --git a/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.module.scss b/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.module.scss new file mode 100644 index 0000000..ece1f11 --- /dev/null +++ b/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.module.scss @@ -0,0 +1,7 @@ +.chartList { + .header { + display: flex; + justify-content: space-between; + align-items: center; + } +} diff --git a/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.tsx b/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.tsx new file mode 100644 index 0000000..d99066f --- /dev/null +++ b/packages/admin/src/baseblocks/chart/components/chart-detail/ChartDetail.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import styles from './ChartDetail.module.scss'; +import { useChart } from '../../../../swr/chart'; +import Loader from '../../../../components/page-content/loader/Loader'; +import EditChartModal from '../edit-chart-modal/EditChartModal'; + +interface Props { + chartId: string; +} + +const ChartDetail = (props: Props): JSX.Element => { + const { chartId } = props; + const { chart, isLoading, error } = useChart(chartId); + + if (isLoading) { + return ; + } + + if (error) { + return
{JSON.stringify(error)}
; + } + + return ( +
+
+

Charts

+ +
+
+
{JSON.stringify(chart, null, 2)}
+
+ ); +}; + +export default ChartDetail; diff --git a/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.module.scss b/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.module.scss new file mode 100644 index 0000000..ece1f11 --- /dev/null +++ b/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.module.scss @@ -0,0 +1,7 @@ +.chartList { + .header { + display: flex; + justify-content: space-between; + align-items: center; + } +} diff --git a/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.tsx b/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.tsx new file mode 100644 index 0000000..eee5043 --- /dev/null +++ b/packages/admin/src/baseblocks/chart/components/chart-list/ChartList.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import styles from './ChartList.module.scss'; +import CreateChartModal from '../create-chart-modal/CreateChartModal'; +import { useCharts } from '../../../../swr/chart'; +import Loader from '../../../../components/page-content/loader/Loader'; + +const ChartList = (): JSX.Element => { + const { charts, isLoading } = useCharts(); + + if (isLoading) { + return ; + } + + return ( +
+
+

Charts

+ +
+
+ +
+ ); +}; + +export default ChartList; diff --git a/packages/admin/src/baseblocks/chart/components/create-chart-modal/CreateChartModal.tsx b/packages/admin/src/baseblocks/chart/components/create-chart-modal/CreateChartModal.tsx new file mode 100644 index 0000000..bbad78a --- /dev/null +++ b/packages/admin/src/baseblocks/chart/components/create-chart-modal/CreateChartModal.tsx @@ -0,0 +1,183 @@ +import React, { useMemo, useState } from 'react'; +import { Chart, chartSchema } from '@baseline/types/chart'; +import { Formik } from 'formik'; +import * as Yup from 'yup'; +import { + Button, + FormFeedback, + FormGroup, + Input, + Label, + Modal, + ModalBody, + ModalFooter, + ModalHeader, +} from 'reactstrap'; +import { createChart } from '@baseline/client-api/chart'; +import { onChartCreated } from '../../../../swr/chart'; + +const CreateChartModal = (): JSX.Element => { + const [isOpen, setIsOpen] = useState(false); + const toggle = () => setIsOpen(!isOpen); + + const initialValues: Chart = useMemo( + () => ({ + chartId: undefined, + parentChart: 'NO_PARENT', + name: '', + md5: '', + sha256: '', + resourceUri: '', + comment: '', + }), + [], + ); + + return ( + { + setSubmitting(true); + const newChart = await createChart(values); + await onChartCreated(newChart); + + resetForm(); + setIsOpen(false); + }} + > + {({ + values, + handleSubmit, + isValid, + isSubmitting, + resetForm, + errors, + setFieldValue, + handleBlur, + }) => ( + <> + + { + toggle(); + resetForm(); + }} + > + Create Chart + + + + void setFieldValue('name', e.target.value)} + onBlur={handleBlur} + className={errors.name ? 'is-invalid' : ''} + /> + {errors.name} + + + + + void setFieldValue('parentChart', e.target.value) + } + onBlur={handleBlur} + className={errors.parentChart ? 'is-invalid' : ''} + disabled + placeholder="This will be a dropdown at some point" + /> + {errors.parentChart} + + + + void setFieldValue('md5', e.target.value)} + onBlur={handleBlur} + className={errors.md5 ? 'is-invalid' : ''} + /> + {errors.md5} + + + + void setFieldValue('sha256', e.target.value)} + onBlur={handleBlur} + className={errors.sha256 ? 'is-invalid' : ''} + /> + {errors.sha256} + + + + + void setFieldValue('resourceUri', e.target.value) + } + onBlur={handleBlur} + className={errors.resourceUri ? 'is-invalid' : ''} + /> + {errors.resourceUri} + + + +