├── .docker ├── .dockerignore ├── base-server.Dockerfile ├── build-images.sh ├── builder.Dockerfile ├── docker-compose-full.env ├── docker-compose-full.yml ├── e2e-tests-nx.json ├── e2e-tests.Dockerfile ├── migrations-package.json ├── migrations.Dockerfile ├── nginx.Dockerfile ├── nginx │ ├── nginx.conf │ └── start.sh ├── nx.json ├── server.Dockerfile └── set-env.sh ├── .dockerignore ├── .editorconfig ├── .eslintignore ├── .eslintrc.base.json ├── .eslintrc.json ├── .github └── workflows │ ├── kubernetes.yml │ └── vercel.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .kubernetes ├── set-env.sh └── templates │ ├── authorizer │ ├── 1.configmap.yaml │ ├── 3.deployment.yaml │ ├── 4.service.yaml │ └── 5.ingress.yaml │ ├── client │ ├── 1.configmap.yaml │ ├── 3.deployment.yaml │ ├── 4.service.yaml │ └── 5.ingress.yaml │ ├── docker-compose-e2e-tests.yml │ ├── docker-compose-infra.yml │ ├── install.sh │ ├── minio │ ├── 1.configmap.yaml │ ├── 2.storage.yaml │ ├── 3.deployment.yaml │ ├── 4.service.yaml │ └── 5.ingress.yaml │ ├── node │ ├── 0.namespace.yaml │ ├── 1.configmap.yaml │ └── 8.issuer.yaml │ ├── redis │ ├── 1.configmap.yaml │ ├── 2.storage.yaml │ ├── 3.deployment.yaml │ └── 4.service.yaml │ └── server │ ├── 1.configmap.yaml │ ├── 3.deployment.yaml │ ├── 4.service.yaml │ └── 5.ws-ingress.yaml ├── .nxignore ├── .nxreleaserc.json ├── .prettierignore ├── .prettierrc ├── .vscode ├── extensions.json └── settings.json ├── README.md ├── app-swagger.json ├── apps ├── client-authorizer-e2e │ ├── .eslintrc.json │ ├── playwright.config.ts │ ├── project.json │ ├── src │ │ ├── dep.jpg │ │ ├── example.spec.ts │ │ ├── profile-as-user.spec.ts │ │ ├── ru-example.spec.ts │ │ ├── ru-validation-with-store-lang-in-db.spec.ts │ │ ├── ru-validation.spec.ts │ │ ├── timezone-profile-as-user.spec.ts │ │ ├── validation.spec.ts │ │ └── webhook-crud-as-user.spec.ts │ └── tsconfig.json ├── client-authorizer │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── app │ │ │ ├── app-initializer.ts │ │ │ ├── app-title.strategy.ts │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.config.server.ts │ │ │ ├── app.config.ts │ │ │ ├── app.constants.ts │ │ │ ├── app.error-handler.ts │ │ │ ├── app.routes.ts │ │ │ ├── integrations │ │ │ │ ├── auth-integration.configuration.ts │ │ │ │ ├── custom-auth-profile-form.service.ts │ │ │ │ ├── custom-auth-profile-mapper.service.ts │ │ │ │ ├── custom-auth.service.ts │ │ │ │ └── transloco-http.loader.ts │ │ │ └── pages │ │ │ │ ├── complete-forgot-password │ │ │ │ ├── complete-forgot-password.component.html │ │ │ │ └── complete-forgot-password.component.ts │ │ │ │ ├── complete-invite │ │ │ │ ├── complete-invite.component.html │ │ │ │ └── complete-invite.component.ts │ │ │ │ ├── complete-sign-up │ │ │ │ ├── complete-sign-up.component.html │ │ │ │ └── complete-sign-up.component.ts │ │ │ │ ├── demo │ │ │ │ ├── demo.component.html │ │ │ │ ├── demo.component.ts │ │ │ │ ├── forms │ │ │ │ │ └── demo-form │ │ │ │ │ │ ├── demo-form.component.html │ │ │ │ │ │ └── demo-form.component.ts │ │ │ │ ├── grids │ │ │ │ │ └── demo-grid │ │ │ │ │ │ ├── demo-grid.component.html │ │ │ │ │ │ └── demo-grid.component.ts │ │ │ │ └── services │ │ │ │ │ ├── demo-mapper.service.ts │ │ │ │ │ └── demo.service.ts │ │ │ │ ├── forgot-password │ │ │ │ ├── forgot-password.component.html │ │ │ │ └── forgot-password.component.ts │ │ │ │ ├── home │ │ │ │ ├── home.component.html │ │ │ │ └── home.component.ts │ │ │ │ ├── profile │ │ │ │ ├── profile.component.html │ │ │ │ └── profile.component.ts │ │ │ │ ├── sign-in │ │ │ │ ├── sign-in.component.html │ │ │ │ └── sign-in.component.ts │ │ │ │ ├── sign-up │ │ │ │ ├── sign-up.component.html │ │ │ │ └── sign-up.component.ts │ │ │ │ └── webhooks │ │ │ │ ├── webhooks.component.html │ │ │ │ └── webhooks.component.ts │ │ ├── assets │ │ │ └── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── en.vendor.json │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ ├── ru.vendor.json │ │ │ │ └── template.pot │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── index.html │ │ ├── main.server.ts │ │ ├── main.ts │ │ ├── styles.scss │ │ └── test-setup.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.server.json │ └── tsconfig.spec.json ├── client-sso-e2e │ ├── .eslintrc.json │ ├── playwright.config.ts │ ├── project.json │ ├── src │ │ ├── dep.jpg │ │ ├── example.spec.ts │ │ ├── profile-as-user.spec.ts │ │ ├── ru-example.spec.ts │ │ ├── ru-validation-with-store-lang-in-db.spec.ts │ │ ├── ru-validation.spec.ts │ │ ├── timezone-profile-as-user.spec.ts │ │ ├── validation.spec.ts │ │ └── webhook-crud-as-user.spec.ts │ └── tsconfig.json ├── client-sso │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── app │ │ │ ├── app-initializer.ts │ │ │ ├── app-title.strategy.ts │ │ │ ├── app.component.html │ │ │ ├── app.component.spec.ts │ │ │ ├── app.component.ts │ │ │ ├── app.config.server.ts │ │ │ ├── app.config.ts │ │ │ ├── app.constants.ts │ │ │ ├── app.error-handler.ts │ │ │ ├── app.routes.ts │ │ │ ├── integrations │ │ │ │ ├── auth-integration.configuration.ts │ │ │ │ ├── custom-auth-profile-form.service.ts │ │ │ │ ├── custom-auth-profile-mapper.service.ts │ │ │ │ ├── custom-auth.service.ts │ │ │ │ └── transloco-http.loader.ts │ │ │ └── pages │ │ │ │ ├── complete-forgot-password │ │ │ │ ├── complete-forgot-password.component.html │ │ │ │ └── complete-forgot-password.component.ts │ │ │ │ ├── complete-invite │ │ │ │ ├── complete-invite.component.html │ │ │ │ └── complete-invite.component.ts │ │ │ │ ├── complete-sign-up │ │ │ │ ├── complete-sign-up.component.html │ │ │ │ └── complete-sign-up.component.ts │ │ │ │ ├── demo │ │ │ │ ├── demo.component.html │ │ │ │ ├── demo.component.ts │ │ │ │ ├── forms │ │ │ │ │ └── demo-form │ │ │ │ │ │ ├── demo-form.component.html │ │ │ │ │ │ └── demo-form.component.ts │ │ │ │ ├── grids │ │ │ │ │ └── demo-grid │ │ │ │ │ │ ├── demo-grid.component.html │ │ │ │ │ │ └── demo-grid.component.ts │ │ │ │ └── services │ │ │ │ │ ├── demo-mapper.service.ts │ │ │ │ │ └── demo.service.ts │ │ │ │ ├── forgot-password │ │ │ │ ├── forgot-password.component.html │ │ │ │ └── forgot-password.component.ts │ │ │ │ ├── home │ │ │ │ ├── home.component.html │ │ │ │ └── home.component.ts │ │ │ │ ├── profile │ │ │ │ ├── profile.component.html │ │ │ │ └── profile.component.ts │ │ │ │ ├── sign-in │ │ │ │ ├── sign-in.component.html │ │ │ │ └── sign-in.component.ts │ │ │ │ ├── sign-up │ │ │ │ ├── sign-up.component.html │ │ │ │ └── sign-up.component.ts │ │ │ │ └── webhooks │ │ │ │ ├── webhooks.component.html │ │ │ │ └── webhooks.component.ts │ │ ├── assets │ │ │ └── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── en.vendor.json │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ ├── ru.vendor.json │ │ │ │ └── template.pot │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── index.html │ │ ├── main.server.ts │ │ ├── main.ts │ │ ├── styles.scss │ │ └── test-setup.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.server.json │ └── tsconfig.spec.json ├── client-supabase-e2e │ ├── .eslintrc.json │ ├── playwright.config.ts │ ├── project.json │ ├── src │ │ ├── dep.jpg │ │ ├── example.spec.ts │ │ ├── profile-as-user.spec.ts │ │ ├── ru-example.spec.ts │ │ ├── ru-validation-with-store-lang-in-db.spec.ts │ │ ├── ru-validation.spec.ts │ │ ├── timezone-profile-as-user.spec.ts │ │ ├── validation.spec.ts │ │ └── webhook-crud-as-user.spec.ts │ └── tsconfig.json ├── client-supabase │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── public │ │ └── favicon.ico │ ├── src │ │ ├── app │ │ │ ├── app-initializer.ts │ │ │ ├── app-title.strategy.ts │ │ │ ├── app.component.html │ │ │ ├── app.component.ts │ │ │ ├── app.config.server.ts │ │ │ ├── app.config.ts │ │ │ ├── app.constants.ts │ │ │ ├── app.error-handler.ts │ │ │ ├── app.routes.ts │ │ │ ├── integrations │ │ │ │ ├── custom-auth-profile-form.service.ts │ │ │ │ ├── custom-auth-profile-mapper.service.ts │ │ │ │ ├── custom-auth.service.ts │ │ │ │ ├── supabase-auth.configuration.ts │ │ │ │ └── transloco-http.loader.ts │ │ │ └── pages │ │ │ │ ├── complete-forgot-password │ │ │ │ ├── complete-forgot-password.component.html │ │ │ │ └── complete-forgot-password.component.ts │ │ │ │ ├── complete-invite │ │ │ │ ├── complete-invite.component.html │ │ │ │ └── complete-invite.component.ts │ │ │ │ ├── complete-sign-up │ │ │ │ ├── complete-sign-up.component.html │ │ │ │ └── complete-sign-up.component.ts │ │ │ │ ├── demo │ │ │ │ ├── demo.component.html │ │ │ │ ├── demo.component.ts │ │ │ │ ├── forms │ │ │ │ │ └── demo-form │ │ │ │ │ │ ├── demo-form.component.html │ │ │ │ │ │ └── demo-form.component.ts │ │ │ │ ├── grids │ │ │ │ │ └── demo-grid │ │ │ │ │ │ ├── demo-grid.component.html │ │ │ │ │ │ └── demo-grid.component.ts │ │ │ │ └── services │ │ │ │ │ ├── demo-mapper.service.ts │ │ │ │ │ └── demo.service.ts │ │ │ │ ├── forgot-password │ │ │ │ ├── forgot-password.component.html │ │ │ │ └── forgot-password.component.ts │ │ │ │ ├── home │ │ │ │ ├── home.component.html │ │ │ │ └── home.component.ts │ │ │ │ ├── profile │ │ │ │ ├── profile.component.html │ │ │ │ └── profile.component.ts │ │ │ │ ├── sign-in │ │ │ │ ├── sign-in.component.html │ │ │ │ └── sign-in.component.ts │ │ │ │ ├── sign-up │ │ │ │ ├── sign-up.component.html │ │ │ │ └── sign-up.component.ts │ │ │ │ └── webhooks │ │ │ │ ├── webhooks.component.html │ │ │ │ └── webhooks.component.ts │ │ ├── assets │ │ │ └── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── en.vendor.json │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ ├── ru.vendor.json │ │ │ │ └── template.pot │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── index.html │ │ ├── main.server.ts │ │ ├── main.ts │ │ ├── styles.scss │ │ └── test-setup.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.editor.json │ ├── tsconfig.json │ ├── tsconfig.server.json │ └── tsconfig.spec.json ├── server-authorizer-e2e │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── project.json │ ├── src │ │ ├── server-authorizer │ │ │ ├── ru-server.spec.ts │ │ │ ├── ru-validation.spec.ts │ │ │ ├── server.spec.ts │ │ │ ├── store-lang-in-db.spec.ts │ │ │ ├── time.spec.ts │ │ │ ├── timezone-time.spec.ts │ │ │ ├── validation.spec.ts │ │ │ ├── webhook-crud-as-admin.spec.ts │ │ │ ├── webhook-crud-as-user.spec.ts │ │ │ └── webhook-logs-as-user.spec.ts │ │ └── support │ │ │ ├── global-setup.ts │ │ │ ├── global-teardown.ts │ │ │ └── test-setup.ts │ ├── tsconfig.json │ └── tsconfig.spec.json ├── server-authorizer │ ├── .eslintrc.json │ ├── INFRASTRUCTURE.MD │ ├── docker-compose-example.yml │ ├── docker-compose-prod.yml │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── src │ │ ├── app │ │ │ ├── app.constants.ts │ │ │ ├── app.filter.ts │ │ │ ├── app.module.ts │ │ │ ├── controllers │ │ │ │ ├── app.controller.spec.ts │ │ │ │ ├── app.controller.ts │ │ │ │ ├── authorizer.controller.ts │ │ │ │ ├── fake-endoint.controller.ts │ │ │ │ └── time.controller.ts │ │ │ ├── filters │ │ │ │ └── authorizer.filter.ts │ │ │ ├── generated │ │ │ │ └── rest │ │ │ │ │ └── dto │ │ │ │ │ ├── app-demo.dto.ts │ │ │ │ │ ├── app-demo.entity.ts │ │ │ │ │ ├── connect-app-demo.dto.ts │ │ │ │ │ ├── connect-migrations-server.dto.ts │ │ │ │ │ ├── create-app-demo.dto.ts │ │ │ │ │ ├── create-migrations-server.dto.ts │ │ │ │ │ ├── migrations-server.dto.ts │ │ │ │ │ ├── migrations-server.entity.ts │ │ │ │ │ ├── update-app-demo.dto.ts │ │ │ │ │ └── update-migrations-server.dto.ts │ │ │ ├── integrations │ │ │ │ ├── authorizer-auth.configuration.ts │ │ │ │ ├── authorizer-with-minio-files.configuration.ts │ │ │ │ └── webhook-with-auth-authorizer.configuration.ts │ │ │ ├── services │ │ │ │ ├── app.service.spec.ts │ │ │ │ └── app.service.ts │ │ │ └── types │ │ │ │ ├── app-data.ts │ │ │ │ ├── app-demo-event-name.ts │ │ │ │ └── app-handler-log.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── i18n │ │ │ │ ├── en.vendor.json │ │ │ │ ├── getText │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ │ │ └── ru.vendor.json │ │ ├── environments │ │ │ └── environment.ts │ │ ├── feature.module.ts │ │ ├── infrastructure.module.ts │ │ ├── integrations │ │ │ └── terminus-health-check-integration.configuration.ts │ │ ├── main.ts │ │ ├── migrations │ │ │ └── V202408112241__NewMigration.sql │ │ ├── prisma │ │ │ └── app-schema.prisma │ │ └── replace-envs.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── webpack.config.js ├── server-sso-e2e │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── project.json │ ├── src │ │ ├── server-authorizer │ │ │ ├── ru-server.spec.ts │ │ │ ├── ru-validation.spec.ts │ │ │ ├── server.spec.ts │ │ │ ├── store-lang-in-db.spec.ts │ │ │ ├── time.spec.ts │ │ │ ├── timezone-time.spec.ts │ │ │ ├── validation.spec.ts │ │ │ ├── webhook-crud-as-admin.spec.ts │ │ │ ├── webhook-crud-as-user.spec.ts │ │ │ └── webhook-logs-as-user.spec.ts │ │ └── support │ │ │ ├── global-setup.ts │ │ │ ├── global-teardown.ts │ │ │ └── test-setup.ts │ ├── tsconfig.json │ └── tsconfig.spec.json ├── server-sso │ ├── .eslintrc.json │ ├── INFRASTRUCTURE.MD │ ├── docker-compose-example.yml │ ├── docker-compose-prod.yml │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── src │ │ ├── app │ │ │ ├── app.constants.ts │ │ │ ├── app.filter.ts │ │ │ ├── app.module.ts │ │ │ ├── controllers │ │ │ │ ├── app.controller.spec.ts │ │ │ │ ├── app.controller.ts │ │ │ │ ├── fake-endoint.controller.ts │ │ │ │ └── time.controller.ts │ │ │ ├── generated │ │ │ │ └── rest │ │ │ │ │ └── dto │ │ │ │ │ ├── app-demo.dto.ts │ │ │ │ │ ├── app-demo.entity.ts │ │ │ │ │ ├── connect-app-demo.dto.ts │ │ │ │ │ ├── connect-migrations-server.dto.ts │ │ │ │ │ ├── create-app-demo.dto.ts │ │ │ │ │ ├── create-migrations-server.dto.ts │ │ │ │ │ ├── migrations-server.dto.ts │ │ │ │ │ ├── migrations-server.entity.ts │ │ │ │ │ ├── update-app-demo.dto.ts │ │ │ │ │ └── update-migrations-server.dto.ts │ │ │ ├── integrations │ │ │ │ ├── sso-auth.configuration.ts │ │ │ │ ├── sso-with-minio-files.configuration.ts │ │ │ │ └── webhook-with-auth-sso.configuration.ts │ │ │ ├── services │ │ │ │ ├── app.service.spec.ts │ │ │ │ └── app.service.ts │ │ │ └── types │ │ │ │ ├── app-data.ts │ │ │ │ ├── app-demo-event-name.ts │ │ │ │ └── app-handler-log.ts │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── i18n │ │ │ │ ├── en.vendor.json │ │ │ │ ├── getText │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ │ │ └── ru.vendor.json │ │ ├── environments │ │ │ └── environment.ts │ │ ├── feature.module.ts │ │ ├── infrastructure.module.ts │ │ ├── integrations │ │ │ └── terminus-health-check-integration.configuration.ts │ │ ├── main.ts │ │ ├── migrations │ │ │ └── V202408112241__NewMigration.sql │ │ ├── prisma │ │ │ └── app-schema.prisma │ │ └── replace-envs.ts │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── webpack.config.js ├── server-supabase-e2e │ ├── .eslintrc.json │ ├── jest.config.ts │ ├── project.json │ ├── src │ │ ├── server-supabase │ │ │ ├── ru-server.spec.ts │ │ │ ├── ru-validation.spec.ts │ │ │ ├── server.spec.ts │ │ │ ├── store-lang-in-db.spec.ts │ │ │ ├── time.spec.ts │ │ │ ├── timezone-time.spec.ts │ │ │ ├── validation.spec.ts │ │ │ ├── webhook-crud-as-admin.spec.ts │ │ │ ├── webhook-crud-as-user.spec.ts │ │ │ └── webhook-logs-as-user.spec.ts │ │ └── support │ │ │ ├── global-setup.ts │ │ │ ├── global-teardown.ts │ │ │ └── test-setup.ts │ ├── tsconfig.json │ └── tsconfig.spec.json └── server-supabase │ ├── .eslintrc.json │ ├── INFRASTRUCTURE.MD │ ├── jest.config.ts │ ├── package.json │ ├── project.json │ ├── src │ ├── app │ │ ├── app.constants.ts │ │ ├── app.filter.ts │ │ ├── app.module.ts │ │ ├── controllers │ │ │ ├── app.controller.spec.ts │ │ │ ├── app.controller.ts │ │ │ ├── fake-endoint.controller.ts │ │ │ └── time.controller.ts │ │ ├── generated │ │ │ └── rest │ │ │ │ └── dto │ │ │ │ ├── app-demo.dto.ts │ │ │ │ ├── app-demo.entity.ts │ │ │ │ ├── connect-app-demo.dto.ts │ │ │ │ ├── connect-migrations-server.dto.ts │ │ │ │ ├── create-app-demo.dto.ts │ │ │ │ ├── create-migrations-server.dto.ts │ │ │ │ ├── migrations-server.dto.ts │ │ │ │ ├── migrations-server.entity.ts │ │ │ │ ├── update-app-demo.dto.ts │ │ │ │ └── update-migrations-server.dto.ts │ │ ├── integrations │ │ │ ├── supabase-auth.configuration.ts │ │ │ ├── supabase-with-minio-files.configuration.ts │ │ │ └── webhook-with-auth-supabase.configuration.ts │ │ ├── services │ │ │ ├── app.service.spec.ts │ │ │ └── app.service.ts │ │ └── types │ │ │ ├── app-data.ts │ │ │ ├── app-demo-event-name.ts │ │ │ └── app-handler-log.ts │ ├── assets │ │ ├── .gitkeep │ │ └── i18n │ │ │ ├── en.vendor.json │ │ │ ├── getText │ │ │ ├── en.json │ │ │ ├── en.po │ │ │ ├── ru.json │ │ │ ├── ru.po │ │ │ └── template.pot │ │ │ └── ru.vendor.json │ ├── environments │ │ └── environment.ts │ ├── feature.module.ts │ ├── infrastructure.module.ts │ ├── integrations │ │ └── terminus-health-check-integration.configuration.ts │ ├── main.ts │ ├── migrations │ │ └── V202408112241__NewMigration.sql │ └── prisma │ │ └── app-schema.prisma │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.spec.json │ └── webpack.config.js ├── ecosystem-prod.config.json ├── ecosystem-sso-prod.config.json ├── ecosystem-sso.config.json ├── ecosystem-supabase-prod.config.json ├── ecosystem-supabase.config.json ├── ecosystem.config.json ├── example-authorizer.env ├── example-sso.env ├── example-supabase.env ├── example.env ├── jest.config.ts ├── jest.preset.js ├── libs ├── core │ ├── auth-angular │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── ng-package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── forms │ │ │ │ │ ├── auth-complete-forgot-password-form │ │ │ │ │ │ ├── auth-complete-forgot-password-form.component.html │ │ │ │ │ │ └── auth-complete-forgot-password-form.component.ts │ │ │ │ │ ├── auth-forgot-password-form │ │ │ │ │ │ ├── auth-forgot-password-form.component.html │ │ │ │ │ │ └── auth-forgot-password-form.component.ts │ │ │ │ │ ├── auth-profile-form │ │ │ │ │ │ └── auth-profile-form.component.ts │ │ │ │ │ ├── auth-sign-in-form │ │ │ │ │ │ ├── auth-sign-in-form.component.html │ │ │ │ │ │ └── auth-sign-in-form.component.ts │ │ │ │ │ └── auth-sign-up-form │ │ │ │ │ │ ├── auth-sign-up-form.component.html │ │ │ │ │ │ └── auth-sign-up-form.component.ts │ │ │ │ ├── pipes │ │ │ │ │ ├── check-user-roles.pipe.ts │ │ │ │ │ └── user.pipe.ts │ │ │ │ └── services │ │ │ │ │ ├── auth-active-lang.service.ts │ │ │ │ │ ├── auth-complete-forgot-password-form.service.ts │ │ │ │ │ ├── auth-complete-guard.service.ts │ │ │ │ │ ├── auth-forgot-password-form.service.ts │ │ │ │ │ ├── auth-guard.service.ts │ │ │ │ │ ├── auth-profile-form.service.ts │ │ │ │ │ ├── auth-profile-mapper.service.ts │ │ │ │ │ ├── auth-sign-in-form.service.ts │ │ │ │ │ ├── auth-sign-in-mapper.service.ts │ │ │ │ │ ├── auth-sign-up-form.service.ts │ │ │ │ │ ├── auth-sign-up-mapper.service.ts │ │ │ │ │ ├── auth.configuration.ts │ │ │ │ │ ├── auth.service.ts │ │ │ │ │ ├── auth.types.ts │ │ │ │ │ └── tokens.service.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.lib.prod.json │ │ └── tsconfig.spec.json │ ├── auth │ │ ├── .eslintrc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── i18n │ │ │ │ └── getText │ │ │ │ │ ├── en.json │ │ │ │ │ ├── en.po │ │ │ │ │ ├── ru.json │ │ │ │ │ ├── ru.po │ │ │ │ │ └── template.pot │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── auth-extra-models.ts │ │ │ │ ├── auth.configuration.ts │ │ │ │ ├── auth.constants.ts │ │ │ │ ├── auth.decorators.ts │ │ │ │ ├── auth.environments.ts │ │ │ │ ├── auth.errors.ts │ │ │ │ ├── auth.filter.ts │ │ │ │ ├── auth.guard.ts │ │ │ │ ├── auth.module.ts │ │ │ │ ├── controllers │ │ │ │ │ ├── auth-users.controller.ts │ │ │ │ │ └── auth.controller.ts │ │ │ │ ├── generated │ │ │ │ │ └── rest │ │ │ │ │ │ └── dto │ │ │ │ │ │ ├── auth-user.dto.ts │ │ │ │ │ │ ├── auth-user.entity.ts │ │ │ │ │ │ ├── connect-auth-user.dto.ts │ │ │ │ │ │ ├── connect-migrations-auth.dto.ts │ │ │ │ │ │ ├── create-auth-user.dto.ts │ │ │ │ │ │ ├── create-migrations-auth.dto.ts │ │ │ │ │ │ ├── migrations-auth.dto.ts │ │ │ │ │ │ ├── migrations-auth.entity.ts │ │ │ │ │ │ ├── update-auth-user.dto.ts │ │ │ │ │ │ └── update-migrations-auth.dto.ts │ │ │ │ ├── interceptors │ │ │ │ │ └── auth-timezone.interceptor.ts │ │ │ │ ├── pipes │ │ │ │ │ └── auth-timezone.pipe.ts │ │ │ │ ├── services │ │ │ │ │ ├── auth-cache.service.ts │ │ │ │ │ ├── auth-default-data-bootstrap.service.ts │ │ │ │ │ └── auth-timezone.service.ts │ │ │ │ └── types │ │ │ │ │ ├── auth-async-local-storage-data.ts │ │ │ │ │ ├── auth-profile.dto.ts │ │ │ │ │ ├── auth-request.ts │ │ │ │ │ ├── auth-webhooks.ts │ │ │ │ │ └── find-many-auth-user-response.ts │ │ │ ├── migrations │ │ │ │ ├── V202412071217__Init.sql │ │ │ │ └── V202412141339__AddFieldLangToAuthUser.sql │ │ │ └── prisma │ │ │ │ └── schema.prisma │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── files-angular │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── ng-package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── formly │ │ │ │ │ ├── formly-fields.ts │ │ │ │ │ └── image-file.component.ts │ │ │ │ └── services │ │ │ │ │ └── files.service.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.lib.prod.json │ │ └── tsconfig.spec.json │ ├── files │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── i18n │ │ │ │ └── getText │ │ │ │ │ ├── en.json │ │ │ │ │ ├── en.po │ │ │ │ │ ├── ru.json │ │ │ │ │ ├── ru.po │ │ │ │ │ └── template.pot │ │ │ ├── index.ts │ │ │ └── lib │ │ │ │ ├── controllers │ │ │ │ └── files.controller.ts │ │ │ │ ├── files-extra-models.ts │ │ │ │ ├── files.configuration.ts │ │ │ │ ├── files.constants.ts │ │ │ │ ├── files.decorators.ts │ │ │ │ ├── files.environments.ts │ │ │ │ ├── files.errors.ts │ │ │ │ ├── files.module.ts │ │ │ │ └── types │ │ │ │ ├── dto.ts │ │ │ │ ├── files-request.ts │ │ │ │ ├── files-role.ts │ │ │ │ └── files-webhooks.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json │ ├── webhook-angular │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── ng-package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── i18n │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── forms │ │ │ │ │ ├── webhook-form │ │ │ │ │ │ ├── webhook-form.component.html │ │ │ │ │ │ └── webhook-form.component.ts │ │ │ │ │ └── webhook-log-form │ │ │ │ │ │ ├── webhook-log-form.component.html │ │ │ │ │ │ └── webhook-log-form.component.ts │ │ │ │ ├── grids │ │ │ │ │ ├── webhook-grid │ │ │ │ │ │ ├── webhook-grid.component.html │ │ │ │ │ │ └── webhook-grid.component.ts │ │ │ │ │ └── webhook-log-grid │ │ │ │ │ │ ├── webhook-log-grid.component.html │ │ │ │ │ │ └── webhook-log-grid.component.ts │ │ │ │ └── services │ │ │ │ │ ├── webhook-auth.service.ts │ │ │ │ │ ├── webhook-events.service.ts │ │ │ │ │ ├── webhook-form.service.ts │ │ │ │ │ ├── webhook-guard.service.ts │ │ │ │ │ ├── webhook-log-form.service.ts │ │ │ │ │ ├── webhook-log-mapper.service.ts │ │ │ │ │ ├── webhook-log.service.ts │ │ │ │ │ ├── webhook-mapper.service.ts │ │ │ │ │ └── webhook.service.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.lib.prod.json │ │ └── tsconfig.spec.json │ └── webhook │ │ ├── .eslintrc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ ├── i18n │ │ │ └── getText │ │ │ │ ├── en.json │ │ │ │ ├── en.po │ │ │ │ ├── ru.json │ │ │ │ ├── ru.po │ │ │ │ └── template.pot │ │ ├── index.ts │ │ ├── lib │ │ │ ├── controllers │ │ │ │ ├── webhook-logs.controller.ts │ │ │ │ └── webhook.controller.ts │ │ │ ├── generated │ │ │ │ └── rest │ │ │ │ │ └── dto │ │ │ │ │ ├── connect-migrations-webhook.dto.ts │ │ │ │ │ ├── connect-webhook-log.dto.ts │ │ │ │ │ ├── connect-webhook-user.dto.ts │ │ │ │ │ ├── connect-webhook.dto.ts │ │ │ │ │ ├── create-migrations-webhook.dto.ts │ │ │ │ │ ├── create-webhook-log.dto.ts │ │ │ │ │ ├── create-webhook-user.dto.ts │ │ │ │ │ ├── create-webhook.dto.ts │ │ │ │ │ ├── migrations-webhook.dto.ts │ │ │ │ │ ├── migrations-webhook.entity.ts │ │ │ │ │ ├── update-migrations-webhook.dto.ts │ │ │ │ │ ├── update-webhook-log.dto.ts │ │ │ │ │ ├── update-webhook-user.dto.ts │ │ │ │ │ ├── update-webhook.dto.ts │ │ │ │ │ ├── webhook-log.dto.ts │ │ │ │ │ ├── webhook-log.entity.ts │ │ │ │ │ ├── webhook-user.dto.ts │ │ │ │ │ ├── webhook-user.entity.ts │ │ │ │ │ ├── webhook.dto.ts │ │ │ │ │ └── webhook.entity.ts │ │ │ ├── services │ │ │ │ ├── webhook-bootstrap.service.ts │ │ │ │ ├── webhook-cache.service.ts │ │ │ │ ├── webhook-tools.service.ts │ │ │ │ ├── webhook-users.service.ts │ │ │ │ └── webhook.service.ts │ │ │ ├── types │ │ │ │ ├── find-many-webhook-log-args.ts │ │ │ │ ├── find-many-webhook-log-response.ts │ │ │ │ ├── find-many-webhook-response.ts │ │ │ │ ├── find-many-webhook-user-response.ts │ │ │ │ ├── webhook-event.ts │ │ │ │ ├── webhook-request.ts │ │ │ │ └── webhook-test-request-response.ts │ │ │ ├── webhook-extra-models.ts │ │ │ ├── webhook.configuration.ts │ │ │ ├── webhook.constants.ts │ │ │ ├── webhook.decorators.ts │ │ │ ├── webhook.environments.ts │ │ │ ├── webhook.errors.ts │ │ │ ├── webhook.filter.ts │ │ │ ├── webhook.guard.ts │ │ │ └── webhook.module.ts │ │ ├── migrations │ │ │ ├── V202409250909__Init.sql │ │ │ └── V202412200905__AddFieldWorkUntilDateToAuthUser.sql │ │ └── prisma │ │ │ └── schema.prisma │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json ├── sdk │ ├── app-angular-rest-sdk │ │ ├── .eslintrc.json │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── ng-package.json │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ │ ├── index.ts │ │ │ ├── lib │ │ │ │ ├── .gitignore │ │ │ │ ├── .openapi-generator-ignore │ │ │ │ ├── .openapi-generator │ │ │ │ │ ├── FILES │ │ │ │ │ └── VERSION │ │ │ │ ├── README.md │ │ │ │ ├── api.module.ts │ │ │ │ ├── api │ │ │ │ │ ├── api.ts │ │ │ │ │ ├── app-rest.service.ts │ │ │ │ │ ├── auth-rest.service.ts │ │ │ │ │ ├── authorizer-rest.service.ts │ │ │ │ │ ├── fake-endpoint-rest.service.ts │ │ │ │ │ ├── files-rest.service.ts │ │ │ │ │ ├── terminus-health-check-rest.service.ts │ │ │ │ │ ├── time-rest.service.ts │ │ │ │ │ └── webhook-rest.service.ts │ │ │ │ ├── configuration.ts │ │ │ │ ├── encoder.ts │ │ │ │ ├── git_push.sh │ │ │ │ ├── index.ts │ │ │ │ ├── model │ │ │ │ │ ├── app-data.interface.ts │ │ │ │ │ ├── app-demo.interface.ts │ │ │ │ │ ├── auth-controller-profile400-response.interface.ts │ │ │ │ │ ├── auth-entities.interface.ts │ │ │ │ │ ├── auth-error-enum.interface.ts │ │ │ │ │ ├── auth-error.interface.ts │ │ │ │ │ ├── auth-profile-dto.interface.ts │ │ │ │ │ ├── auth-role.interface.ts │ │ │ │ │ ├── auth-user-scalar-field-enum.interface.ts │ │ │ │ │ ├── auth-user.interface.ts │ │ │ │ │ ├── authorizer-client-id.interface.ts │ │ │ │ │ ├── create-webhook-dto.interface.ts │ │ │ │ │ ├── files-error-enum.interface.ts │ │ │ │ │ ├── files-error.interface.ts │ │ │ │ │ ├── files-presigned-urls.interface.ts │ │ │ │ │ ├── find-many-auth-user-response.interface.ts │ │ │ │ │ ├── find-many-response-meta.interface.ts │ │ │ │ │ ├── find-many-webhook-log-response.interface.ts │ │ │ │ │ ├── find-many-webhook-response.interface.ts │ │ │ │ │ ├── models.ts │ │ │ │ │ ├── status-response.interface.ts │ │ │ │ │ ├── terminus-health-check-controller-check200-response-info-value.interface.ts │ │ │ │ │ ├── terminus-health-check-controller-check200-response.interface.ts │ │ │ │ │ ├── terminus-health-check-controller-check503-response.interface.ts │ │ │ │ │ ├── update-auth-user-dto.interface.ts │ │ │ │ │ ├── update-webhook-dto.interface.ts │ │ │ │ │ ├── validation-error-enum.interface.ts │ │ │ │ │ ├── validation-error-metadata-constraint.interface.ts │ │ │ │ │ ├── validation-error-metadata.interface.ts │ │ │ │ │ ├── validation-error.interface.ts │ │ │ │ │ ├── webhook-entities.interface.ts │ │ │ │ │ ├── webhook-error-enum.interface.ts │ │ │ │ │ ├── webhook-error.interface.ts │ │ │ │ │ ├── webhook-event.interface.ts │ │ │ │ │ ├── webhook-log-scalar-field-enum.interface.ts │ │ │ │ │ ├── webhook-log.interface.ts │ │ │ │ │ ├── webhook-logs-controller-find-many-logs400-response.interface.ts │ │ │ │ │ ├── webhook-role.interface.ts │ │ │ │ │ ├── webhook-scalar-field-enum.interface.ts │ │ │ │ │ ├── webhook-status.interface.ts │ │ │ │ │ ├── webhook-test-request-response.interface.ts │ │ │ │ │ ├── webhook-user-scalar-field-enum.interface.ts │ │ │ │ │ ├── webhook-user.interface.ts │ │ │ │ │ └── webhook.interface.ts │ │ │ │ ├── param.ts │ │ │ │ └── variables.ts │ │ │ └── test-setup.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ ├── tsconfig.lib.prod.json │ │ └── tsconfig.spec.json │ └── app-rest-sdk │ │ ├── .eslintrc.json │ │ ├── CHANGELOG.md │ │ ├── README.md │ │ ├── jest.config.ts │ │ ├── package.json │ │ ├── project.json │ │ ├── src │ │ ├── index.ts │ │ └── lib │ │ │ ├── .gitignore │ │ │ ├── .npmignore │ │ │ ├── .openapi-generator-ignore │ │ │ ├── .openapi-generator │ │ │ ├── FILES │ │ │ └── VERSION │ │ │ ├── api.ts │ │ │ ├── base.ts │ │ │ ├── common.ts │ │ │ ├── configuration.ts │ │ │ ├── git_push.sh │ │ │ └── index.ts │ │ ├── tsconfig.json │ │ ├── tsconfig.lib.json │ │ └── tsconfig.spec.json └── testing │ ├── .eslintrc.json │ ├── CHANGELOG.md │ ├── README.md │ ├── jest.config.ts │ ├── marker.js │ ├── package.json │ ├── project.json │ ├── src │ ├── index.ts │ └── lib │ │ └── utils │ │ ├── generate-random-user.ts │ │ ├── get-error-data.ts │ │ ├── get-random-external-headers.ts │ │ ├── get-urls.ts │ │ ├── rest-client-helper.ts │ │ └── supabase.service.ts │ ├── tsconfig.json │ ├── tsconfig.lib.json │ └── tsconfig.spec.json ├── migrations.json ├── nx.json ├── openapitools.json ├── package.json ├── packages ├── bridge │ └── bridge-react-webpack-plugin │ │ └── package.json └── runtime-tools │ └── package.json ├── rucken.json ├── steps ├── 2024-08-08 │ ├── en.md │ └── ru.md ├── 2024-08-09 │ ├── en.md │ └── ru.md ├── 2024-08-11 │ ├── en.md │ └── ru.md ├── 2024-08-13 │ ├── en.md │ └── ru.md ├── 2024-08-14-update-nestjs-mod-libs │ ├── en.md │ └── ru.md ├── 2024-08-14 │ ├── en.md │ └── ru.md ├── 2024-08-20 │ ├── en.md │ └── ru.md ├── 2024-08-22 │ ├── en.md │ └── ru.md ├── 2024-08-26 │ ├── en.md │ └── ru.md ├── 2024-09-08 │ ├── en.md │ └── ru.md ├── 2024-09-13 │ ├── en.md │ └── ru.md ├── 2024-09-15 │ ├── en.md │ └── ru.md ├── 2024-09-16 │ ├── en.md │ └── ru.md ├── 2024-09-17 │ ├── en.md │ └── ru.md ├── 2024-10-06 │ ├── en.md │ └── ru.md ├── 2024-10-25 │ ├── en.md │ └── ru.md ├── 2024-11-08 │ ├── en.md │ └── ru.md ├── 2024-11-15 │ ├── en.md │ └── ru.md ├── 2024-11-20 │ ├── en.md │ └── ru.md ├── 2024-11-21 │ ├── en.md │ └── ru.md ├── 2024-11-24 │ ├── en.md │ └── ru.md ├── 2024-12-03 │ ├── en.md │ └── ru.md ├── 2024-12-12 │ ├── en.md │ └── ru.md ├── 2024-12-16 │ ├── en.md │ └── ru.md ├── 2024-12-29 │ ├── en.md │ └── ru.md └── 2025-02-12 │ ├── create-supabase-project-and-link-it-to-vercel.mp4 │ ├── en.md │ └── ru.md ├── transloco.config.js ├── transloco.config.json ├── tsconfig.base.json ├── update-files-for-vercel.ts ├── vercel.json └── yarn.lock /.docker/.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | .angular 3 | .nx -------------------------------------------------------------------------------- /.docker/e2e-tests-nx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/nx/schemas/nx-schema.json", 3 | "namedInputs": { 4 | "default": ["{projectRoot}/**/*", "sharedGlobals"], 5 | "production": [ 6 | "default", 7 | "!{projectRoot}/.eslintrc.json", 8 | "!{projectRoot}/eslint.config.js", 9 | "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", 10 | "!{projectRoot}/tsconfig.spec.json", 11 | "!{projectRoot}/jest.config.[jt]s", 12 | "!{projectRoot}/src/test-setup.[jt]s", 13 | "!{projectRoot}/test-setup.[jt]s" 14 | ], 15 | "sharedGlobals": [] 16 | }, 17 | "plugins": [ 18 | { 19 | "plugin": "@nx/playwright/plugin", 20 | "options": { 21 | "targetName": "e2e" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /.docker/nginx.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:alpine 2 | 3 | # Set server port 4 | ENV SERVER_AUTHORIZER_PORT=8080 5 | # Set nginx port 6 | ENV NGINX_PORT=8080 7 | 8 | # Copy nginx config 9 | COPY --chown=node:node ../.docker/nginx /etc/nginx/conf.d 10 | # Copy frontend 11 | COPY --chown=node:node ../dist/apps/client-authorizer/browser /usr/share/nginx/html 12 | 13 | # Install Bash Shell 14 | RUN apk add --update bash 15 | # Clean up 16 | RUN rm -rf /var/cache/apk/* 17 | 18 | # Add a startup script 19 | COPY --chown=node:node ../.docker/nginx/start.sh /start.sh 20 | RUN chmod 755 /start.sh 21 | 22 | # Expose nginx port 23 | EXPOSE 8080 24 | 25 | CMD ["/start.sh"] 26 | -------------------------------------------------------------------------------- /.docker/nx.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/nx/schemas/nx-schema.json", 3 | "namedInputs": { 4 | "default": [ 5 | "{projectRoot}/**/*", 6 | "sharedGlobals" 7 | ], 8 | "production": [ 9 | "default", 10 | "!{projectRoot}/.eslintrc.json", 11 | "!{projectRoot}/eslint.config.js", 12 | "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", 13 | "!{projectRoot}/tsconfig.spec.json", 14 | "!{projectRoot}/jest.config.[jt]s", 15 | "!{projectRoot}/src/test-setup.[jt]s", 16 | "!{projectRoot}/test-setup.[jt]s" 17 | ], 18 | "sharedGlobals": [] 19 | } 20 | } -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | tmp 3 | .git 4 | .angular 5 | .env 6 | .nx -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | apps/server/src/app/generated/rest/dto 4 | libs/core/webhook/src/lib/generated/rest/dto 5 | libs/core/auth/src/lib/generated/rest/dto 6 | libs/sdk/app-rest-sdk/src/lib 7 | libs/sdk/app-angular-rest-sdk/src/lib -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | cp ./example-authorizer.env ./.env 2 | npm run pm2:dev:docs:infrastructure 3 | git add ./apps/server-authorizer/INFRASTRUCTURE.MD 4 | npx lint-staged 5 | -------------------------------------------------------------------------------- /.kubernetes/templates/authorizer/4.service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | namespace: '%NAMESPACE%' 5 | name: %NAMESPACE%-authorizer 6 | labels: 7 | app: %NAMESPACE%-authorizer 8 | spec: 9 | selector: 10 | app: %NAMESPACE%-authorizer 11 | ports: 12 | - name: '8080' 13 | protocol: TCP 14 | port: 8080 15 | targetPort: 8080 16 | type: ClusterIP 17 | -------------------------------------------------------------------------------- /.kubernetes/templates/client/1.configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-client-config 6 | data: 7 | SERVER_AUTHORIZER_PORT: '%SERVER_PORT%' 8 | NGINX_PORT: '%NGINX_PORT%' 9 | SERVER_AUTHORIZER_CONTAINER_NAME: %NAMESPACE%-server.%NAMESPACE% 10 | CLIENT_AUTHORIZER_URL: 'https://sso.%SERVER_DOMAIN%' 11 | CLIENT_MINIO_URL: 'https://files.%SERVER_DOMAIN%' 12 | 13 | -------------------------------------------------------------------------------- /.kubernetes/templates/client/4.service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-client 6 | labels: 7 | app: %NAMESPACE%-client 8 | spec: 9 | selector: 10 | app: %NAMESPACE%-client 11 | ports: 12 | - name: '%NGINX_PORT%' 13 | protocol: TCP 14 | port: %NGINX_PORT% 15 | targetPort: %NGINX_PORT% 16 | type: ClusterIP 17 | -------------------------------------------------------------------------------- /.kubernetes/templates/minio/1.configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-minio-config 6 | data: 7 | MINIO_ROOT_USER: "%SERVER_MINIO_MINIO_ROOT_USER%" 8 | MINIO_ROOT_PASSWORD: "%SERVER_MINIO_MINIO_ROOT_PASSWORD%" -------------------------------------------------------------------------------- /.kubernetes/templates/minio/2.storage.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-minio-pv-claim 6 | labels: 7 | type: local 8 | app: %NAMESPACE%-minio 9 | spec: 10 | accessModes: 11 | - ReadWriteOnce 12 | resources: 13 | requests: 14 | storage: 10Gi 15 | -------------------------------------------------------------------------------- /.kubernetes/templates/minio/4.service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-minio 6 | labels: 7 | app: %NAMESPACE%-minio 8 | spec: 9 | selector: 10 | app: %NAMESPACE%-minio 11 | ports: 12 | - name: '9000' 13 | protocol: TCP 14 | port: 9000 15 | targetPort: 9000 16 | - name: '9001' 17 | protocol: TCP 18 | port: 9001 19 | targetPort: 9001 20 | type: ClusterIP 21 | -------------------------------------------------------------------------------- /.kubernetes/templates/node/0.namespace.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Namespace 3 | metadata: 4 | name: "%NAMESPACE%" 5 | -------------------------------------------------------------------------------- /.kubernetes/templates/node/1.configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-config 6 | data: 7 | DEBUG: "true" 8 | BITNAMI_DEBUG: "true" -------------------------------------------------------------------------------- /.kubernetes/templates/node/8.issuer.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: cert-manager.io/v1 2 | kind: ClusterIssuer 3 | metadata: 4 | name: letsencrypt-prod 5 | namespace: cert-manager 6 | spec: 7 | acme: 8 | email: nestjs-mod@site15.ru 9 | server: https://acme-v02.api.letsencrypt.org/directory 10 | privateKeySecretRef: 11 | name: letsencrypt-prod 12 | solvers: 13 | - http01: 14 | ingress: 15 | class: public 16 | -------------------------------------------------------------------------------- /.kubernetes/templates/redis/1.configmap.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: ConfigMap 3 | metadata: 4 | namespace: '%NAMESPACE%' 5 | name: %NAMESPACE%-redis-config 6 | data: 7 | REDIS_DATABASE: "0" 8 | REDIS_PASSWORD: '%SERVER_REDIS_REDIS_PASSWORD%' 9 | -------------------------------------------------------------------------------- /.kubernetes/templates/redis/2.storage.yaml: -------------------------------------------------------------------------------- 1 | kind: PersistentVolumeClaim 2 | apiVersion: v1 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-redis-pv-claim 6 | labels: 7 | type: local 8 | app: %NAMESPACE%-redis 9 | spec: 10 | accessModes: 11 | - ReadWriteOnce 12 | resources: 13 | requests: 14 | storage: 10Gi 15 | -------------------------------------------------------------------------------- /.kubernetes/templates/redis/4.service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | namespace: '%NAMESPACE%' 5 | name: %NAMESPACE%-redis 6 | labels: 7 | app: %NAMESPACE%-redis 8 | spec: 9 | selector: 10 | app: %NAMESPACE%-redis 11 | ports: 12 | - protocol: TCP 13 | port: 6379 14 | targetPort: 6379 15 | type: ClusterIP 16 | -------------------------------------------------------------------------------- /.kubernetes/templates/server/4.service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | namespace: "%NAMESPACE%" 5 | name: %NAMESPACE%-server 6 | labels: 7 | app: %NAMESPACE%-server 8 | spec: 9 | selector: 10 | app: %NAMESPACE%-server 11 | ports: 12 | - name: '%SERVER_PORT%' 13 | protocol: TCP 14 | port: %SERVER_PORT% 15 | targetPort: %SERVER_PORT% 16 | type: ClusterIP 17 | -------------------------------------------------------------------------------- /.nxignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | dist 5 | tmp 6 | /out-tsc 7 | 8 | # dependencies 9 | node_modules 10 | 11 | # IDEs and editors 12 | /.idea 13 | .project 14 | .classpath 15 | .c9/ 16 | *.launch 17 | .settings/ 18 | *.sublime-workspace 19 | 20 | # IDE - VSCode 21 | .vscode/* 22 | !.vscode/settings.json 23 | !.vscode/tasks.json 24 | !.vscode/launch.json 25 | !.vscode/extensions.json 26 | 27 | # misc 28 | /.sass-cache 29 | /connect.lock 30 | /coverage 31 | /libpeerconnection.log 32 | npm-debug.log 33 | yarn-error.log 34 | testem.log 35 | /typings 36 | 37 | # System Files 38 | .DS_Store 39 | Thumbs.db 40 | 41 | .clinic 42 | 43 | .nx/cache 44 | .nx/workspace-data 45 | *.env 46 | 47 | -------------------------------------------------------------------------------- /.nxreleaserc.json: -------------------------------------------------------------------------------- 1 | { 2 | "changelog": true, 3 | "npm": true, 4 | "github": true, 5 | "repositoryUrl": "https://github.com/nestjs-mod/nestjs-mod-fullstack", 6 | "branches": [ 7 | "master", 8 | { 9 | "name": "beta", 10 | "prerelease": true 11 | }, 12 | { 13 | "name": "alpha", 14 | "prerelease": true, 15 | "baseBranch": "beta" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Add files here to ignore them from prettier formatting 2 | /dist 3 | /coverage 4 | /.nx/cache 5 | /.nx/workspace-data 6 | .angular 7 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "ms-playwright.playwright", 4 | "esbenp.prettier-vscode", 5 | "firsttris.vscode-jest-runner" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "workbench.colorCustomizations": { 3 | "activityBar.background": "#0a0808", 4 | "titleBar.activeBackground": "#E0234E", 5 | "titleBar.activeForeground": "#FEFBFB" 6 | }, 7 | "cSpell.words": [ 8 | "Supabase" 9 | ], 10 | "httpProxyToggle.office": "", 11 | "httpProxyToggle.home": "" 12 | } -------------------------------------------------------------------------------- /apps/client-authorizer-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:playwright/recommended", "../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["src/**/*.{ts,js,tsx,jsx}"], 19 | "rules": {} 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /apps/client-authorizer-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-authorizer-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/client-authorizer-e2e/src", 6 | "tags": ["authorizer"], 7 | "// targets": "to see all targets run: nx show project client-authorizer-e2e --web", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /apps/client-authorizer-e2e/src/dep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-authorizer-e2e/src/dep.jpg -------------------------------------------------------------------------------- /apps/client-authorizer-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "sourceMap": false, 7 | "module": "commonjs", 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "noImplicitOverride": true, 11 | "noPropertyAccessFromIndexSignature": true, 12 | "noImplicitReturns": true, 13 | "noFallthroughCasesInSwitch": true 14 | }, 15 | "include": [ 16 | "**/*.ts", 17 | "**/*.js", 18 | "playwright.config.ts", 19 | "src/**/*.spec.ts", 20 | "src/**/*.spec.js", 21 | "src/**/*.test.ts", 22 | "src/**/*.test.js", 23 | "src/**/*.d.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/client-authorizer/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'client-authorizer', 3 | preset: '../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../coverage/apps/client-authorizer', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /apps/client-authorizer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-authorizer", 3 | "version": "0.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /apps/client-authorizer/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-authorizer/public/favicon.ico -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'; 2 | import { provideClientHydration } from '@angular/platform-browser'; 3 | import { provideServerRendering } from '@angular/platform-server'; 4 | import { authorizerURL, minioURL } from '../environments/environment'; 5 | import { appConfig } from './app.config'; 6 | 7 | const serverConfig: ApplicationConfig = { 8 | providers: [provideServerRendering(), provideClientHydration()], 9 | }; 10 | 11 | export const config = mergeApplicationConfig( 12 | appConfig({ authorizerURL, minioURL }), 13 | serverConfig 14 | ); 15 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | import { marker } from '@jsverse/transloco-keys-manager/marker'; 2 | 3 | export const APP_TITLE = marker('Fullstack'); 4 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/complete-forgot-password/complete-forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 9 |
10 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/complete-invite/complete-invite.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 10 |
11 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/complete-sign-up/complete-sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/complete-sign-up/complete-sign-up.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | 5 | @Component({ 6 | selector: 'app-complete-sign-up', 7 | templateUrl: './complete-sign-up.component.html', 8 | imports: [NzBreadCrumbModule, TranslocoDirective], 9 | changeDetection: ChangeDetectionStrategy.OnPush, 10 | }) 11 | export class CompleteSignUpComponent {} 12 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/demo/demo.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/demo/demo.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzGridModule } from 'ng-zorro-antd/grid'; 5 | import { NzLayoutModule } from 'ng-zorro-antd/layout'; 6 | import { DemoGridComponent } from './grids/demo-grid/demo-grid.component'; 7 | 8 | @Component({ 9 | selector: 'app-demo', 10 | templateUrl: './demo.component.html', 11 | imports: [ 12 | NzBreadCrumbModule, 13 | DemoGridComponent, 14 | NzGridModule, 15 | NzLayoutModule, 16 | TranslocoDirective, 17 | ], 18 | changeDetection: ChangeDetectionStrategy.OnPush, 19 | }) 20 | export class DemoComponent {} 21 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/demo/forms/demo-form/demo-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 | 20 | 21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/forgot-password/forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/forgot-password/forgot-password.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthForgotPasswordFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 5 | 6 | @Component({ 7 | selector: 'app-forgot-password', 8 | templateUrl: './forgot-password.component.html', 9 | imports: [ 10 | NzBreadCrumbModule, 11 | TranslocoDirective, 12 | AuthForgotPasswordFormComponent, 13 | ], 14 | changeDetection: ChangeDetectionStrategy.OnPush, 15 | }) 16 | export class ForgotPasswordComponent {} 17 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective, TranslocoPipe } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzCollapseModule } from 'ng-zorro-antd/collapse'; 5 | import { NzTypographyModule } from 'ng-zorro-antd/typography'; 6 | 7 | @Component({ 8 | selector: 'app-home', 9 | templateUrl: './home.component.html', 10 | imports: [ 11 | NzBreadCrumbModule, 12 | NzTypographyModule, 13 | TranslocoDirective, 14 | NzCollapseModule, 15 | TranslocoPipe, 16 | ], 17 | changeDetection: ChangeDetectionStrategy.OnPush, 18 | }) 19 | export class HomeComponent {} 20 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/profile/profile.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/profile/profile.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthProfileFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { UntilDestroy } from '@ngneat/until-destroy'; 5 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 6 | 7 | @UntilDestroy() 8 | @Component({ 9 | selector: 'app-profile', 10 | templateUrl: './profile.component.html', 11 | imports: [NzBreadCrumbModule, AuthProfileFormComponent, TranslocoDirective], 12 | changeDetection: ChangeDetectionStrategy.OnPush, 13 | }) 14 | export class ProfileComponent {} 15 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/sign-in/sign-in.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/sign-up/sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/app/pages/webhooks/webhooks.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = ''; 2 | export const authorizerURL = '___CLIENT_AUTHORIZER_URL___'; 3 | export const minioURL = '___CLIENT_MINIO_URL___'; 4 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = 'http://localhost:3000'; 2 | export const authorizerURL = 'http://localhost:8080'; 3 | export const minioURL = 'http://localhost:9000'; 4 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { appConfig } from './app/app.config'; 4 | import { authorizerURL, minioURL } from './environments/environment'; 5 | 6 | bootstrapApplication( 7 | AppComponent, 8 | appConfig({ authorizerURL, minioURL }) 9 | ).catch((err) => console.error(err)); 10 | -------------------------------------------------------------------------------- /apps/client-authorizer/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /apps/client-authorizer/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/client-authorizer/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "files": ["src/main.ts"], 8 | "include": ["src/**/*.d.ts"], 9 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-authorizer/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/client-authorizer/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ 2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ 3 | { 4 | "extends": "./tsconfig.app.json", 5 | "compilerOptions": { 6 | "outDir": "../../out-tsc/server", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "src/server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-authorizer/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/client-sso-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:playwright/recommended", "../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["src/**/*.{ts,js,tsx,jsx}"], 19 | "rules": {} 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /apps/client-sso-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-sso-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/client-sso-e2e/src", 6 | "tags": ["sso"], 7 | "// targets": "to see all targets run: nx show project client-sso-e2e --web", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /apps/client-sso-e2e/src/dep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-sso-e2e/src/dep.jpg -------------------------------------------------------------------------------- /apps/client-sso-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "sourceMap": false, 7 | "module": "commonjs", 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "noImplicitOverride": true, 11 | "noPropertyAccessFromIndexSignature": true, 12 | "noImplicitReturns": true, 13 | "noFallthroughCasesInSwitch": true 14 | }, 15 | "include": [ 16 | "**/*.ts", 17 | "**/*.js", 18 | "playwright.config.ts", 19 | "src/**/*.spec.ts", 20 | "src/**/*.spec.js", 21 | "src/**/*.test.ts", 22 | "src/**/*.test.js", 23 | "src/**/*.d.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/client-sso/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'client-sso', 3 | preset: '../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../coverage/apps/client-sso', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /apps/client-sso/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-sso", 3 | "version": "0.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /apps/client-sso/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-sso/public/favicon.ico -------------------------------------------------------------------------------- /apps/client-sso/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'; 2 | import { provideClientHydration } from '@angular/platform-browser'; 3 | import { provideServerRendering } from '@angular/platform-server'; 4 | import { ssoURL, minioURL } from '../environments/environment'; 5 | import { appConfig } from './app.config'; 6 | 7 | const serverConfig: ApplicationConfig = { 8 | providers: [provideServerRendering(), provideClientHydration()], 9 | }; 10 | 11 | export const config = mergeApplicationConfig( 12 | appConfig({ ssoURL, minioURL }), 13 | serverConfig 14 | ); 15 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | import { marker } from '@jsverse/transloco-keys-manager/marker'; 2 | 3 | export const APP_TITLE = marker('Fullstack'); 4 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/complete-forgot-password/complete-forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 9 |
10 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/complete-invite/complete-invite.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 10 |
11 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/complete-sign-up/complete-sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/complete-sign-up/complete-sign-up.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | 5 | @Component({ 6 | selector: 'app-complete-sign-up', 7 | templateUrl: './complete-sign-up.component.html', 8 | imports: [NzBreadCrumbModule, TranslocoDirective], 9 | changeDetection: ChangeDetectionStrategy.OnPush, 10 | }) 11 | export class CompleteSignUpComponent {} 12 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/demo/demo.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/demo/demo.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzGridModule } from 'ng-zorro-antd/grid'; 5 | import { NzLayoutModule } from 'ng-zorro-antd/layout'; 6 | import { DemoGridComponent } from './grids/demo-grid/demo-grid.component'; 7 | 8 | @Component({ 9 | selector: 'app-demo', 10 | templateUrl: './demo.component.html', 11 | imports: [ 12 | NzBreadCrumbModule, 13 | DemoGridComponent, 14 | NzGridModule, 15 | NzLayoutModule, 16 | TranslocoDirective, 17 | ], 18 | changeDetection: ChangeDetectionStrategy.OnPush, 19 | }) 20 | export class DemoComponent {} 21 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/demo/forms/demo-form/demo-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 | 20 | 21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/forgot-password/forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/forgot-password/forgot-password.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthForgotPasswordFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 5 | 6 | @Component({ 7 | selector: 'app-forgot-password', 8 | templateUrl: './forgot-password.component.html', 9 | imports: [ 10 | NzBreadCrumbModule, 11 | TranslocoDirective, 12 | AuthForgotPasswordFormComponent, 13 | ], 14 | changeDetection: ChangeDetectionStrategy.OnPush, 15 | }) 16 | export class ForgotPasswordComponent {} 17 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective, TranslocoPipe } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzCollapseModule } from 'ng-zorro-antd/collapse'; 5 | import { NzTypographyModule } from 'ng-zorro-antd/typography'; 6 | 7 | @Component({ 8 | selector: 'app-home', 9 | templateUrl: './home.component.html', 10 | imports: [ 11 | NzBreadCrumbModule, 12 | NzTypographyModule, 13 | TranslocoDirective, 14 | NzCollapseModule, 15 | TranslocoPipe, 16 | ], 17 | changeDetection: ChangeDetectionStrategy.OnPush, 18 | }) 19 | export class HomeComponent {} 20 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/profile/profile.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/profile/profile.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthProfileFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { UntilDestroy } from '@ngneat/until-destroy'; 5 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 6 | 7 | @UntilDestroy() 8 | @Component({ 9 | selector: 'app-profile', 10 | templateUrl: './profile.component.html', 11 | imports: [NzBreadCrumbModule, AuthProfileFormComponent, TranslocoDirective], 12 | changeDetection: ChangeDetectionStrategy.OnPush, 13 | }) 14 | export class ProfileComponent {} 15 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/sign-in/sign-in.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/sign-up/sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-sso/src/app/pages/webhooks/webhooks.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/client-sso/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = ''; 2 | export const ssoURL = '___CLIENT_SSO_URL___'; 3 | export const minioURL = '___CLIENT_MINIO_URL___'; 4 | -------------------------------------------------------------------------------- /apps/client-sso/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = 'http://localhost:3000'; 2 | export const ssoURL = 'http://localhost:8080'; 3 | export const minioURL = 'http://localhost:9000'; 4 | -------------------------------------------------------------------------------- /apps/client-sso/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/client-sso/src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { appConfig } from './app/app.config'; 4 | import { ssoURL, minioURL } from './environments/environment'; 5 | 6 | bootstrapApplication(AppComponent, appConfig({ ssoURL, minioURL })).catch( 7 | (err) => console.error(err) 8 | ); 9 | -------------------------------------------------------------------------------- /apps/client-sso/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /apps/client-sso/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/client-sso/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "files": ["src/main.ts"], 8 | "include": ["src/**/*.d.ts"], 9 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-sso/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/client-sso/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ 2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ 3 | { 4 | "extends": "./tsconfig.app.json", 5 | "compilerOptions": { 6 | "outDir": "../../out-tsc/server", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "src/server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-sso/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/client-supabase-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["plugin:playwright/recommended", "../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["src/**/*.{ts,js,tsx,jsx}"], 19 | "rules": {} 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /apps/client-supabase-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-supabase-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "sourceRoot": "apps/client-supabase-e2e/src", 6 | "tags": ["supabase"], 7 | "// targets": "to see all targets run: nx show project client-supabase-e2e --web", 8 | "targets": {} 9 | } 10 | -------------------------------------------------------------------------------- /apps/client-supabase-e2e/src/dep.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-supabase-e2e/src/dep.jpg -------------------------------------------------------------------------------- /apps/client-supabase-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "outDir": "../../dist/out-tsc", 6 | "sourceMap": false, 7 | "module": "commonjs", 8 | "forceConsistentCasingInFileNames": true, 9 | "strict": true, 10 | "noImplicitOverride": true, 11 | "noPropertyAccessFromIndexSignature": true, 12 | "noImplicitReturns": true, 13 | "noFallthroughCasesInSwitch": true 14 | }, 15 | "include": [ 16 | "**/*.ts", 17 | "**/*.js", 18 | "playwright.config.ts", 19 | "src/**/*.spec.ts", 20 | "src/**/*.spec.js", 21 | "src/**/*.test.ts", 22 | "src/**/*.test.js", 23 | "src/**/*.d.ts" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /apps/client-supabase/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'client-supabase', 3 | preset: '../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../coverage/apps/client-supabase', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /apps/client-supabase/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client-supabase", 3 | "version": "0.0.1" 4 | } 5 | -------------------------------------------------------------------------------- /apps/client-supabase/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/client-supabase/public/favicon.ico -------------------------------------------------------------------------------- /apps/client-supabase/src/app/app.config.server.ts: -------------------------------------------------------------------------------- 1 | import { ApplicationConfig, mergeApplicationConfig } from '@angular/core'; 2 | import { provideClientHydration } from '@angular/platform-browser'; 3 | import { provideServerRendering } from '@angular/platform-server'; 4 | import { 5 | minioURL, 6 | supabaseKey, 7 | supabaseURL, 8 | } from '../environments/environment'; 9 | import { appConfig } from './app.config'; 10 | 11 | const serverConfig: ApplicationConfig = { 12 | providers: [provideServerRendering(), provideClientHydration()], 13 | }; 14 | 15 | export const config = mergeApplicationConfig( 16 | appConfig({ minioURL, supabaseKey, supabaseURL }), 17 | serverConfig 18 | ); 19 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | import { marker } from '@jsverse/transloco-keys-manager/marker'; 2 | 3 | export const APP_TITLE = marker('Fullstack'); 4 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/complete-forgot-password/complete-forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 9 |
10 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/complete-invite/complete-invite.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 10 |
11 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/complete-sign-up/complete-sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/complete-sign-up/complete-sign-up.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | 5 | @Component({ 6 | selector: 'app-complete-sign-up', 7 | templateUrl: './complete-sign-up.component.html', 8 | imports: [NzBreadCrumbModule, TranslocoDirective], 9 | changeDetection: ChangeDetectionStrategy.OnPush, 10 | }) 11 | export class CompleteSignUpComponent {} 12 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/demo/demo.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/demo/demo.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzGridModule } from 'ng-zorro-antd/grid'; 5 | import { NzLayoutModule } from 'ng-zorro-antd/layout'; 6 | import { DemoGridComponent } from './grids/demo-grid/demo-grid.component'; 7 | 8 | @Component({ 9 | selector: 'app-demo', 10 | templateUrl: './demo.component.html', 11 | imports: [ 12 | NzBreadCrumbModule, 13 | DemoGridComponent, 14 | NzGridModule, 15 | NzLayoutModule, 16 | TranslocoDirective, 17 | ], 18 | changeDetection: ChangeDetectionStrategy.OnPush, 19 | }) 20 | export class DemoComponent {} 21 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/demo/forms/demo-form/demo-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 | 20 | 21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/forgot-password/forgot-password.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/forgot-password/forgot-password.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthForgotPasswordFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 5 | 6 | @Component({ 7 | selector: 'app-forgot-password', 8 | templateUrl: './forgot-password.component.html', 9 | imports: [ 10 | NzBreadCrumbModule, 11 | TranslocoDirective, 12 | AuthForgotPasswordFormComponent, 13 | ], 14 | changeDetection: ChangeDetectionStrategy.OnPush, 15 | }) 16 | export class ForgotPasswordComponent {} 17 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective, TranslocoPipe } from '@jsverse/transloco'; 3 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 4 | import { NzCollapseModule } from 'ng-zorro-antd/collapse'; 5 | import { NzTypographyModule } from 'ng-zorro-antd/typography'; 6 | 7 | @Component({ 8 | selector: 'app-home', 9 | templateUrl: './home.component.html', 10 | imports: [ 11 | NzBreadCrumbModule, 12 | NzTypographyModule, 13 | TranslocoDirective, 14 | NzCollapseModule, 15 | TranslocoPipe, 16 | ], 17 | changeDetection: ChangeDetectionStrategy.OnPush, 18 | }) 19 | export class HomeComponent {} 20 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/profile/profile.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/profile/profile.component.ts: -------------------------------------------------------------------------------- 1 | import { ChangeDetectionStrategy, Component } from '@angular/core'; 2 | import { TranslocoDirective } from '@jsverse/transloco'; 3 | import { AuthProfileFormComponent } from '@nestjs-mod-fullstack/auth-angular'; 4 | import { UntilDestroy } from '@ngneat/until-destroy'; 5 | import { NzBreadCrumbModule } from 'ng-zorro-antd/breadcrumb'; 6 | 7 | @UntilDestroy() 8 | @Component({ 9 | selector: 'app-profile', 10 | templateUrl: './profile.component.html', 11 | imports: [NzBreadCrumbModule, AuthProfileFormComponent, TranslocoDirective], 12 | changeDetection: ChangeDetectionStrategy.OnPush, 13 | }) 14 | export class ProfileComponent {} 15 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/sign-in/sign-in.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/sign-up/sign-up.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |
5 | 6 |
7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/app/pages/webhooks/webhooks.component.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /apps/client-supabase/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = ''; 2 | export const minioURL = 3 | 'https://asuvykozhdurwmnfdhwj.supabase.co/storage/v1/s3'; 4 | export const supabaseURL = 'https://asuvykozhdurwmnfdhwj.supabase.co'; 5 | export const supabaseKey = 6 | 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFzdXZ5a296aGR1cndtbmZkaHdqIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDczMjQ1MTksImV4cCI6MjA2MjkwMDUxOX0.Xe0eHD_cNhiMGaKfwP53-_0XhZ09oaC5OKQ4gsPbwV0'; 7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | export const serverUrl = 'http://localhost:3000'; 2 | export const minioURL = 3 | 'https://asuvykozhdurwmnfdhwj.supabase.co/storage/v1/s3'; 4 | export const supabaseURL = 'https://asuvykozhdurwmnfdhwj.supabase.co'; 5 | export const supabaseKey = 6 | 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImFzdXZ5a296aGR1cndtbmZkaHdqIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDczMjQ1MTksImV4cCI6MjA2MjkwMDUxOX0.Xe0eHD_cNhiMGaKfwP53-_0XhZ09oaC5OKQ4gsPbwV0'; 7 | -------------------------------------------------------------------------------- /apps/client-supabase/src/main.server.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { config } from './app/app.config.server'; 4 | 5 | const bootstrap = () => bootstrapApplication(AppComponent, config); 6 | 7 | export default bootstrap; 8 | -------------------------------------------------------------------------------- /apps/client-supabase/src/main.ts: -------------------------------------------------------------------------------- 1 | import { bootstrapApplication } from '@angular/platform-browser'; 2 | import { AppComponent } from './app/app.component'; 3 | import { appConfig } from './app/app.config'; 4 | import { minioURL, supabaseKey, supabaseURL } from './environments/environment'; 5 | 6 | bootstrapApplication( 7 | AppComponent, 8 | appConfig({ minioURL, supabaseKey, supabaseURL }) 9 | ).catch((err) => console.error(err)); 10 | -------------------------------------------------------------------------------- /apps/client-supabase/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /apps/client-supabase/tailwind.config.js: -------------------------------------------------------------------------------- 1 | const { createGlobPatternsForDependencies } = require('@nx/angular/tailwind'); 2 | const { join } = require('path'); 3 | 4 | /** @type {import('tailwindcss').Config} */ 5 | module.exports = { 6 | content: [ 7 | join(__dirname, 'src/**/!(*.stories|*.spec).{ts,html}'), 8 | ...createGlobPatternsForDependencies(__dirname), 9 | ], 10 | theme: { 11 | extend: {}, 12 | }, 13 | plugins: [], 14 | }; 15 | -------------------------------------------------------------------------------- /apps/client-supabase/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "types": [] 6 | }, 7 | "files": ["src/main.ts"], 8 | "include": ["src/**/*.d.ts"], 9 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-supabase/tsconfig.editor.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "include": ["src/**/*.ts"], 4 | "compilerOptions": {}, 5 | "exclude": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts"] 6 | } 7 | -------------------------------------------------------------------------------- /apps/client-supabase/tsconfig.server.json: -------------------------------------------------------------------------------- 1 | /* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ 2 | /* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ 3 | { 4 | "extends": "./tsconfig.app.json", 5 | "compilerOptions": { 6 | "outDir": "../../out-tsc/server", 7 | "types": ["node"] 8 | }, 9 | "files": ["src/main.server.ts", "src/server.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /apps/client-supabase/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-authorizer-e2e', 3 | preset: '../../jest.preset.js', 4 | globalSetup: '/src/support/global-setup.ts', 5 | globalTeardown: '/src/support/global-teardown.ts', 6 | setupFiles: ['/src/support/test-setup.ts'], 7 | testEnvironment: 'node', 8 | transform: { 9 | '^.+\\.[tj]s$': [ 10 | 'ts-jest', 11 | { 12 | tsconfig: '/tsconfig.spec.json', 13 | }, 14 | ], 15 | }, 16 | moduleFileExtensions: ['ts', 'js', 'html'], 17 | coverageDirectory: '../../coverage/server-authorizer-e2e', 18 | }; 19 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-authorizer-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "tags": ["authorizer"], 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "apps/server-authorizer-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | import { config } from 'dotenv'; 5 | import { join } from 'node:path'; 6 | 7 | module.exports = async function () { 8 | const serverUrl = process.env['E2E_SERVER_URL']; 9 | const parsed = config( 10 | process.env['ENV_FILE'] 11 | ? { 12 | path: join( 13 | __dirname, 14 | '..', 15 | '..', 16 | '..', 17 | '..', 18 | process.env['ENV_FILE'] 19 | ), 20 | override: true, 21 | } 22 | : { override: true } 23 | ); 24 | 25 | if (parsed.error) { 26 | throw parsed.error; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/server-authorizer-e2e/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-authorizer/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-authorizer/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-authorizer', 3 | preset: '../../jest.preset.js', 4 | testEnvironment: 'node', 5 | transform: { 6 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 7 | }, 8 | moduleFileExtensions: ['ts', 'js', 'html'], 9 | coverageDirectory: '../../coverage/apps/server-authorizer', 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-authorizer/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-authorizer", 3 | "version": "0.0.1", 4 | "scripts": {}, 5 | "dependencies": { 6 | "pm2": ">=5.3.0", 7 | "dotenv": ">=16.3.1" 8 | }, 9 | "devScripts": [ 10 | "manual:prepare", 11 | "serve:dev:server-authorizer" 12 | ], 13 | "prodScripts": [ 14 | "manual:prepare", 15 | "start:prod:server-authorizer" 16 | ], 17 | "testsScripts": [ 18 | "test:server-authorizer" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | export const APP_FEATURE = 'app'; 2 | export const APP_MODULE = 'AppModule'; 3 | export const CACHE_KEY = 'appHandlerLogs'; 4 | export const ChangeTimeStream = 'ChangeTimeStream'; 5 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemoDto { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/app-demo.entity.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemo { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/connect-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class ConnectAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | id?: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | required: false, 15 | }) 16 | @IsOptional() 17 | @IsString() 18 | name?: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/connect-migrations-server.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsInt, IsNotEmpty } from 'class-validator'; 3 | 4 | export class ConnectMigrationsServerDto { 5 | @ApiProperty({ 6 | type: 'integer', 7 | format: 'int32', 8 | }) 9 | @IsNotEmpty() 10 | @IsInt() 11 | installed_rank!: number; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/create-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsNotEmpty, IsString } from 'class-validator'; 3 | 4 | export class CreateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | }) 8 | @IsNotEmpty() 9 | @IsString() 10 | name!: string; 11 | } 12 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/generated/rest/dto/update-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class UpdateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | name?: string; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/services/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test } from '@nestjs/testing'; 2 | 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppService', () => { 6 | let service: AppService; 7 | 8 | beforeAll(async () => { 9 | const app = await Test.createTestingModule({ 10 | providers: [AppService], 11 | }).compile(); 12 | 13 | service = app.get(AppService); 14 | }); 15 | 16 | describe('getData', () => { 17 | it('should return "Hello API"', () => { 18 | expect(service.getData((word) => word)).toEqual({ 19 | message: 'Hello API', 20 | }); 21 | }); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/services/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { TranslateFunction } from 'nestjs-translates'; 3 | 4 | @Injectable() 5 | export class AppService { 6 | getData(getText: TranslateFunction): { message: string } { 7 | return { message: getText('Hello API') }; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/types/app-data.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppData { 4 | @ApiProperty({ type: String }) 5 | message!: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/types/app-demo-event-name.ts: -------------------------------------------------------------------------------- 1 | export enum AppDemoEventName { 2 | 'app-demo.create' = 'app-demo.create', 3 | 'app-demo.update' = 'app-demo.update', 4 | 'app-demo.delete' = 'app-demo.delete', 5 | } 6 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/app/types/app-handler-log.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | export type AppHandlerLog = { 3 | appId: string; 4 | body: any; 5 | headers: any; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/server-authorizer/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/server-authorizer/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/server-authorizer/src/assets/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Event that will be triggered after creation", 3 | "Event that will fire after deletion": "Event that will fire after deletion", 4 | "Event that will trigger after the update": "Event that will trigger after the update", 5 | "Hello API": "Hello API", 6 | "Forbidden": "Forbidden", 7 | "Unauthorized": "Unauthorized", 8 | "Too Many Requests": "Too Many Requests" 9 | } -------------------------------------------------------------------------------- /apps/server-authorizer/src/assets/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Событие, которое будет вызвано после создания", 3 | "Event that will fire after deletion": "Событие, которое сработает после удаления", 4 | "Event that will trigger after the update": "Событие, которое произойдет после обновления", 5 | "Hello API": "Привет АПИ", 6 | "Forbidden": "Нет доступа", 7 | "Unauthorized": "Неавторизован", 8 | "Too Many Requests": "Слишком много запросов" 9 | } -------------------------------------------------------------------------------- /apps/server-authorizer/src/migrations/V202408112241__NewMigration.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS "AppDemo"( 2 | id uuid DEFAULT uuid_generate_v4() NOT NULL, 3 | "name" varchar(128) NOT NULL, 4 | "createdAt" timestamp DEFAULT "now"() NOT NULL, 5 | "updatedAt" timestamp DEFAULT "now"() NOT NULL, 6 | CONSTRAINT "PK_APP_DEMO" PRIMARY KEY (id) 7 | ); 8 | 9 | CREATE UNIQUE INDEX IF NOT EXISTS "UQ_APP_DEMO" ON "AppDemo"("name"); -------------------------------------------------------------------------------- /apps/server-authorizer/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "target": "es2021", 8 | "strictNullChecks": true, 9 | "noImplicitAny": true, 10 | "strictBindCallApply": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-authorizer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-authorizer/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "moduleResolution": "node10", 7 | "types": ["jest", "node"] 8 | }, 9 | "include": [ 10 | "jest.config.ts", 11 | "src/**/*.test.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-sso-e2e', 3 | preset: '../../jest.preset.js', 4 | globalSetup: '/src/support/global-setup.ts', 5 | globalTeardown: '/src/support/global-teardown.ts', 6 | setupFiles: ['/src/support/test-setup.ts'], 7 | testEnvironment: 'node', 8 | transform: { 9 | '^.+\\.[tj]s$': [ 10 | 'ts-jest', 11 | { 12 | tsconfig: '/tsconfig.spec.json', 13 | }, 14 | ], 15 | }, 16 | moduleFileExtensions: ['ts', 'js', 'html'], 17 | coverageDirectory: '../../coverage/server-sso-e2e', 18 | }; 19 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-sso-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "tags": [ 6 | "sso" 7 | ], 8 | "targets": { 9 | "e2e": { 10 | "executor": "@nx/jest:jest", 11 | "outputs": [ 12 | "{workspaceRoot}/coverage/{e2eProjectRoot}" 13 | ], 14 | "options": { 15 | "jestConfig": "apps/server-sso-e2e/jest.config.ts", 16 | "passWithNoTests": true 17 | }, 18 | "dependsOn": [ 19 | "server-sso:build" 20 | ] 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /apps/server-sso-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | import { config } from 'dotenv'; 5 | import { join } from 'node:path'; 6 | 7 | module.exports = async function () { 8 | const serverUrl = process.env['E2E_SERVER_URL']; 9 | const parsed = config( 10 | process.env['ENV_FILE'] 11 | ? { 12 | path: join( 13 | __dirname, 14 | '..', 15 | '..', 16 | '..', 17 | '..', 18 | process.env['ENV_FILE'] 19 | ), 20 | override: true, 21 | } 22 | : { override: true } 23 | ); 24 | 25 | if (parsed.error) { 26 | throw parsed.error; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/server-sso-e2e/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-sso/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-sso/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-sso', 3 | preset: '../../jest.preset.js', 4 | testEnvironment: 'node', 5 | transform: { 6 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 7 | }, 8 | moduleFileExtensions: ['ts', 'js', 'html'], 9 | coverageDirectory: '../../coverage/apps/server-sso', 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-sso/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-sso", 3 | "scripts": {}, 4 | "dependencies": { 5 | "pm2": ">=5.3.0", 6 | "dotenv": ">=16.3.1" 7 | }, 8 | "devScripts": [ 9 | "manual:prepare", 10 | "serve:dev:server-sso" 11 | ], 12 | "prodScripts": [ 13 | "manual:prepare", 14 | "start:prod:server-sso" 15 | ], 16 | "testsScripts": [ 17 | "test:server-sso" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | export const APP_FEATURE = 'app'; 2 | export const APP_MODULE = 'AppModule'; 3 | export const CACHE_KEY = 'appHandlerLogs'; 4 | export const ChangeTimeStream = 'ChangeTimeStream'; 5 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemoDto { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/app-demo.entity.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemo { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/connect-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class ConnectAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | id?: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | required: false, 15 | }) 16 | @IsOptional() 17 | @IsString() 18 | name?: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/connect-migrations-server.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsInt, IsNotEmpty } from 'class-validator'; 3 | 4 | export class ConnectMigrationsServerDto { 5 | @ApiProperty({ 6 | type: 'integer', 7 | format: 'int32', 8 | }) 9 | @IsNotEmpty() 10 | @IsInt() 11 | installed_rank!: number; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/create-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsNotEmpty, IsString } from 'class-validator'; 3 | 4 | export class CreateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | }) 8 | @IsNotEmpty() 9 | @IsString() 10 | name!: string; 11 | } 12 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/generated/rest/dto/update-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class UpdateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | name?: string; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/services/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test } from '@nestjs/testing'; 2 | 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppService', () => { 6 | let service: AppService; 7 | 8 | beforeAll(async () => { 9 | const app = await Test.createTestingModule({ 10 | providers: [AppService], 11 | }).compile(); 12 | 13 | service = app.get(AppService); 14 | }); 15 | 16 | describe('getData', () => { 17 | it('should return "Hello API"', () => { 18 | expect(service.getData((word) => word)).toEqual({ 19 | message: 'Hello API', 20 | }); 21 | }); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/services/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { TranslateFunction } from 'nestjs-translates'; 3 | 4 | @Injectable() 5 | export class AppService { 6 | getData(getText: TranslateFunction): { message: string } { 7 | return { message: getText('Hello API') }; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/types/app-data.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppData { 4 | @ApiProperty({ type: String }) 5 | message!: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/types/app-demo-event-name.ts: -------------------------------------------------------------------------------- 1 | export enum AppDemoEventName { 2 | 'app-demo.create' = 'app-demo.create', 3 | 'app-demo.update' = 'app-demo.update', 4 | 'app-demo.delete' = 'app-demo.delete', 5 | } 6 | -------------------------------------------------------------------------------- /apps/server-sso/src/app/types/app-handler-log.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | export type AppHandlerLog = { 3 | appId: string; 4 | body: any; 5 | headers: any; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/server-sso/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/server-sso/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/server-sso/src/assets/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Event that will be triggered after creation", 3 | "Event that will fire after deletion": "Event that will fire after deletion", 4 | "Event that will trigger after the update": "Event that will trigger after the update", 5 | "Hello API": "Hello API", 6 | "Forbidden": "Forbidden", 7 | "Unauthorized": "Unauthorized", 8 | "Too Many Requests": "Too Many Requests" 9 | } -------------------------------------------------------------------------------- /apps/server-sso/src/assets/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Событие, которое будет вызвано после создания", 3 | "Event that will fire after deletion": "Событие, которое сработает после удаления", 4 | "Event that will trigger after the update": "Событие, которое произойдет после обновления", 5 | "Hello API": "Привет АПИ", 6 | "Forbidden": "Нет доступа", 7 | "Unauthorized": "Неавторизован", 8 | "Too Many Requests": "Слишком много запросов" 9 | } -------------------------------------------------------------------------------- /apps/server-sso/src/migrations/V202408112241__NewMigration.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS "AppDemo"( 2 | id uuid DEFAULT uuid_generate_v4() NOT NULL, 3 | "name" varchar(128) NOT NULL, 4 | "createdAt" timestamp DEFAULT "now"() NOT NULL, 5 | "updatedAt" timestamp DEFAULT "now"() NOT NULL, 6 | CONSTRAINT "PK_APP_DEMO" PRIMARY KEY (id) 7 | ); 8 | 9 | CREATE UNIQUE INDEX IF NOT EXISTS "UQ_APP_DEMO" ON "AppDemo"("name"); -------------------------------------------------------------------------------- /apps/server-sso/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "target": "es2021", 8 | "strictNullChecks": true, 9 | "noImplicitAny": true, 10 | "strictBindCallApply": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-sso/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-sso/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "moduleResolution": "node10", 7 | "types": ["jest", "node"] 8 | }, 9 | "include": [ 10 | "jest.config.ts", 11 | "src/**/*.test.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-supabase-e2e', 3 | preset: '../../jest.preset.js', 4 | globalSetup: '/src/support/global-setup.ts', 5 | globalTeardown: '/src/support/global-teardown.ts', 6 | setupFiles: ['/src/support/test-setup.ts'], 7 | testEnvironment: 'node', 8 | transform: { 9 | '^.+\\.[tj]s$': [ 10 | 'ts-jest', 11 | { 12 | tsconfig: '/tsconfig.spec.json', 13 | }, 14 | ], 15 | }, 16 | moduleFileExtensions: ['ts', 'js', 'html'], 17 | coverageDirectory: '../../coverage/server-supabase-e2e', 18 | }; 19 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-supabase-e2e", 3 | "$schema": "../../node_modules/nx/schemas/project-schema.json", 4 | "projectType": "application", 5 | "tags": ["supabase"], 6 | "targets": { 7 | "e2e": { 8 | "executor": "@nx/jest:jest", 9 | "outputs": ["{workspaceRoot}/coverage/{e2eProjectRoot}"], 10 | "options": { 11 | "jestConfig": "apps/server-supabase-e2e/jest.config.ts", 12 | "passWithNoTests": true 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/src/support/global-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | var __TEARDOWN_MESSAGE__: string; 3 | 4 | module.exports = async function () { 5 | // Start services that that the app needs to run (e.g. database, docker-compose, etc.). 6 | console.log('\nSetting up...\n'); 7 | 8 | // Hint: Use `globalThis` to pass variables to global teardown. 9 | globalThis.__TEARDOWN_MESSAGE__ = '\nTearing down...\n'; 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/src/support/global-teardown.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | module.exports = async function () { 4 | // Put clean up logic here (e.g. stopping services, docker-compose, etc.). 5 | // Hint: `globalThis` is shared between setup and teardown. 6 | console.log(globalThis.__TEARDOWN_MESSAGE__); 7 | }; 8 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/src/support/test-setup.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | 3 | import axios from 'axios'; 4 | import { config } from 'dotenv'; 5 | import { join } from 'node:path'; 6 | 7 | module.exports = async function () { 8 | const serverUrl = process.env['E2E_SERVER_URL']; 9 | const parsed = config( 10 | process.env['ENV_FILE'] 11 | ? { 12 | path: join( 13 | __dirname, 14 | '..', 15 | '..', 16 | '..', 17 | '..', 18 | process.env['ENV_FILE'] 19 | ), 20 | override: true, 21 | } 22 | : { override: true } 23 | ); 24 | 25 | if (parsed.error) { 26 | throw parsed.error; 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.spec.json" 8 | } 9 | ], 10 | "compilerOptions": { 11 | "esModuleInterop": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /apps/server-supabase-e2e/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": ["jest.config.ts", "src/**/*.ts"] 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-supabase/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.base.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /apps/server-supabase/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'server-supabase', 3 | preset: '../../jest.preset.js', 4 | testEnvironment: 'node', 5 | transform: { 6 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 7 | }, 8 | moduleFileExtensions: ['ts', 'js', 'html'], 9 | coverageDirectory: '../../coverage/apps/server-supabase', 10 | }; 11 | -------------------------------------------------------------------------------- /apps/server-supabase/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server-supabase", 3 | "scripts": {}, 4 | "dependencies": { 5 | "pm2": ">=5.3.0", 6 | "dotenv": ">=16.3.1" 7 | }, 8 | "devScripts": [ 9 | "manual:prepare", 10 | "serve:dev:server-supabase" 11 | ], 12 | "prodScripts": [ 13 | "manual:prepare", 14 | "start:prod:server-supabase" 15 | ], 16 | "testsScripts": [ 17 | "test:server-supabase" 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/app.constants.ts: -------------------------------------------------------------------------------- 1 | export const APP_FEATURE = 'app'; 2 | export const APP_MODULE = 'AppModule'; 3 | export const CACHE_KEY = 'appHandlerLogs'; 4 | export const ChangeTimeStream = 'ChangeTimeStream'; 5 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemoDto { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/app-demo.entity.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppDemo { 4 | @ApiProperty({ 5 | type: 'string', 6 | }) 7 | id!: string; 8 | @ApiProperty({ 9 | type: 'string', 10 | }) 11 | name!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | format: 'date-time', 15 | }) 16 | createdAt!: Date; 17 | @ApiProperty({ 18 | type: 'string', 19 | format: 'date-time', 20 | }) 21 | updatedAt!: Date; 22 | } 23 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/connect-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class ConnectAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | id?: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | required: false, 15 | }) 16 | @IsOptional() 17 | @IsString() 18 | name?: string; 19 | } 20 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/connect-migrations-server.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsInt, IsNotEmpty } from 'class-validator'; 3 | 4 | export class ConnectMigrationsServerDto { 5 | @ApiProperty({ 6 | type: 'integer', 7 | format: 'int32', 8 | }) 9 | @IsNotEmpty() 10 | @IsInt() 11 | installed_rank!: number; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/create-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsNotEmpty, IsString } from 'class-validator'; 3 | 4 | export class CreateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | }) 8 | @IsNotEmpty() 9 | @IsString() 10 | name!: string; 11 | } 12 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/generated/rest/dto/update-app-demo.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class UpdateAppDemoDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | name?: string; 12 | } 13 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/services/app.service.spec.ts: -------------------------------------------------------------------------------- 1 | import { Test } from '@nestjs/testing'; 2 | 3 | import { AppService } from './app.service'; 4 | 5 | describe('AppService', () => { 6 | let service: AppService; 7 | 8 | beforeAll(async () => { 9 | const app = await Test.createTestingModule({ 10 | providers: [AppService], 11 | }).compile(); 12 | 13 | service = app.get(AppService); 14 | }); 15 | 16 | describe('getData', () => { 17 | it('should return "Hello API"', () => { 18 | expect(service.getData((word) => word)).toEqual({ 19 | message: 'Hello API', 20 | }); 21 | }); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/services/app.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { TranslateFunction } from 'nestjs-translates'; 3 | 4 | @Injectable() 5 | export class AppService { 6 | getData(getText: TranslateFunction): { message: string } { 7 | return { message: getText('Hello API') }; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/types/app-data.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class AppData { 4 | @ApiProperty({ type: String }) 5 | message!: string; 6 | } 7 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/types/app-demo-event-name.ts: -------------------------------------------------------------------------------- 1 | export enum AppDemoEventName { 2 | 'app-demo.create' = 'app-demo.create', 3 | 'app-demo.update' = 'app-demo.update', 4 | 'app-demo.delete' = 'app-demo.delete', 5 | } 6 | -------------------------------------------------------------------------------- /apps/server-supabase/src/app/types/app-handler-log.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/no-explicit-any */ 2 | export type AppHandlerLog = { 3 | appId: string; 4 | body: any; 5 | headers: any; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/server-supabase/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/apps/server-supabase/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/server-supabase/src/assets/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Event that will be triggered after creation", 3 | "Event that will fire after deletion": "Event that will fire after deletion", 4 | "Event that will trigger after the update": "Event that will trigger after the update", 5 | "Hello API": "Hello API", 6 | "Forbidden": "Forbidden", 7 | "Supabase error": "Supabase error", 8 | "Unauthorized": "Unauthorized", 9 | "Too Many Requests": "Too Many Requests" 10 | } -------------------------------------------------------------------------------- /apps/server-supabase/src/assets/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event that will be triggered after creation": "Событие, которое будет вызвано после создания", 3 | "Event that will fire after deletion": "Событие, которое сработает после удаления", 4 | "Event that will trigger after the update": "Событие, которое произойдет после обновления", 5 | "Hello API": "Привет АПИ", 6 | "Forbidden": "Нет доступа", 7 | "Supabase error": "Ошибка Supabase", 8 | "Unauthorized": "Неавторизован", 9 | "Too Many Requests": "Слишком много запросов" 10 | } -------------------------------------------------------------------------------- /apps/server-supabase/src/migrations/V202408112241__NewMigration.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS "AppDemo"( 2 | id uuid DEFAULT uuid_generate_v4() NOT NULL, 3 | "name" varchar(128) NOT NULL, 4 | "createdAt" timestamp DEFAULT "now"() NOT NULL, 5 | "updatedAt" timestamp DEFAULT "now"() NOT NULL, 6 | CONSTRAINT "PK_APP_DEMO" PRIMARY KEY (id) 7 | ); 8 | 9 | CREATE UNIQUE INDEX IF NOT EXISTS "UQ_APP_DEMO" ON "AppDemo"("name"); -------------------------------------------------------------------------------- /apps/server-supabase/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["node"], 7 | "target": "es2021", 8 | "strictNullChecks": true, 9 | "noImplicitAny": true, 10 | "strictBindCallApply": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "noFallthroughCasesInSwitch": true 13 | }, 14 | "include": ["src/**/*.ts"], 15 | "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"] 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-supabase/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "files": [], 4 | "include": [], 5 | "references": [ 6 | { 7 | "path": "./tsconfig.app.json" 8 | }, 9 | { 10 | "path": "./tsconfig.spec.json" 11 | } 12 | ], 13 | "compilerOptions": { 14 | "esModuleInterop": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/server-supabase/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "moduleResolution": "node10", 7 | "types": ["jest", "node"] 8 | }, 9 | "include": [ 10 | "jest.config.ts", 11 | "src/**/*.test.ts", 12 | "src/**/*.spec.ts", 13 | "src/**/*.d.ts" 14 | ] 15 | } 16 | -------------------------------------------------------------------------------- /ecosystem-prod.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "nestjs-mod-fullstack-authorizer", 5 | "script": "node dist/apps/server-authorizer/main.js", 6 | "node_args": "-r dotenv/config", 7 | "env": { 8 | "DISABLE_SERVE_STATIC": "false" 9 | } 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /ecosystem-sso-prod.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "nestjs-mod-fullstack-sso", 5 | "script": "node dist/apps/server-sso/main.js", 6 | "node_args": "-r dotenv/config", 7 | "env": { 8 | "DISABLE_SERVE_STATIC": "false" 9 | } 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /ecosystem-sso.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "client-sso", 5 | "script": "./node_modules/.bin/nx serve client-sso --skip-nx-cache=true", 6 | "node_args": "-r dotenv/config" 7 | }, 8 | { 9 | "name": "server-sso", 10 | "script": "./node_modules/.bin/nx serve server-sso --skip-nx-cache=true", 11 | "node_args": "-r dotenv/config" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /ecosystem-supabase-prod.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "nestjs-mod-fullstack-supabase", 5 | "script": "node dist/apps/server-supabase/main.js", 6 | "node_args": "-r dotenv/config", 7 | "env": { 8 | "DISABLE_SERVE_STATIC": "false" 9 | } 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /ecosystem-supabase.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "client-supabase", 5 | "script": "./node_modules/.bin/nx serve client-supabase --skip-nx-cache=true", 6 | "node_args": "-r dotenv/config" 7 | }, 8 | { 9 | "name": "server-supabase", 10 | "script": "./node_modules/.bin/nx serve server-supabase --skip-nx-cache=true", 11 | "node_args": "-r dotenv/config" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /ecosystem.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "apps": [ 3 | { 4 | "name": "client-authorizer", 5 | "script": "./node_modules/.bin/nx serve client-authorizer --skip-nx-cache=true", 6 | "node_args": "-r dotenv/config" 7 | }, 8 | { 9 | "name": "server-authorizer", 10 | "script": "./node_modules/.bin/nx serve server-authorizer --skip-nx-cache=true", 11 | "node_args": "-r dotenv/config" 12 | } 13 | ] 14 | } -------------------------------------------------------------------------------- /example-supabase.env: -------------------------------------------------------------------------------- 1 | # https://supabase.com/dashboard/project/XXX/settings/api - API Settings - Project URL - URL 2 | SUPABASE_URL=empty_value 3 | # https://supabase.com/dashboard/project/XXX/settings/database?showConnect=true - Connection String - Direct connection 4 | POSTGRES_URL=empty_value 5 | # https://supabase.com/dashboard/project/XXX/settings/api - API Settings - Project API Keys - anon public 6 | SUPABASE_ANON_KEY=empty_value 7 | # https://supabase.com/dashboard/project/gustcjgbrmmipkizqzso/settings/storage - S3 Access Keys - New access key - Access key ID 8 | SERVER_SUPABASE_MINIO_ACCESS_KEY=empty_value 9 | # https://supabase.com/dashboard/project/gustcjgbrmmipkizqzso/settings/storage - S3 Access Keys - New access key - Secret access key 10 | SERVER_SUPABASE_MINIO_SECRET_KEY=empty_value -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import { getJestProjectsAsync } from '@nx/jest'; 2 | 3 | export default async () => ({ 4 | projects: await getJestProjectsAsync(), 5 | }); 6 | -------------------------------------------------------------------------------- /jest.preset.js: -------------------------------------------------------------------------------- 1 | const nxPreset = require('@nx/jest/preset').default; 2 | 3 | module.exports = { 4 | ...nxPreset, 5 | moduleNameMapper: { 6 | ...(nxPreset.moduleNameMapper || {}), 7 | '^flat': 'node_modules/flat/index.js', 8 | '@jsverse/transloco-keys-manager/marker': 'libs/testing/marker.js', 9 | }, 10 | }; 11 | -------------------------------------------------------------------------------- /libs/core/auth-angular/README.md: -------------------------------------------------------------------------------- 1 | # auth-angular 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test auth-angular` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/core/auth-angular/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'auth-angular', 3 | preset: '../../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../../coverage/libs/core/auth-angular', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /libs/core/auth-angular/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../../dist/libs/core/auth-angular", 4 | "lib": { 5 | "entryFile": "src/index.ts" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/forms/auth-complete-forgot-password-form/auth-complete-forgot-password-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 |
12 | 19 |
20 |
21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/pipes/check-user-roles.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import { AuthGuardService } from '../services/auth-guard.service'; 3 | 4 | @Pipe({ 5 | name: 'checkUserRoles', 6 | pure: true, 7 | standalone: true, 8 | }) 9 | export class CheckUserRolesPipe implements PipeTransform { 10 | constructor(private readonly authGuardService: AuthGuardService) {} 11 | 12 | public transform(authRoles?: string[]) { 13 | return this.authGuardService.checkUserRoles(authRoles); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/pipes/user.pipe.ts: -------------------------------------------------------------------------------- 1 | import { Pipe, PipeTransform } from '@angular/core'; 2 | import { map } from 'rxjs'; 3 | import { AuthService } from '../services/auth.service'; 4 | 5 | @Pipe({ 6 | name: 'user', 7 | pure: true, 8 | standalone: true, 9 | }) 10 | export class UserPipe implements PipeTransform { 11 | constructor(private readonly authService: AuthService) {} 12 | 13 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 14 | public transform(value: any) { 15 | return this.authService.profile$.pipe(map((profile) => profile || value)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/services/auth-profile-mapper.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AuthUpdateProfileInput } from './auth.types'; 3 | 4 | @Injectable({ providedIn: 'root' }) 5 | export class AuthProfileMapperService { 6 | toModel(data: AuthUpdateProfileInput) { 7 | return { 8 | oldPassword: data['oldPassword'], 9 | newPassword: data['newPassword'], 10 | confirmNewPassword: data['confirmNewPassword'], 11 | picture: data['picture'], 12 | }; 13 | } 14 | 15 | toJson(data: AuthUpdateProfileInput) { 16 | return { 17 | oldPassword: data['oldPassword'], 18 | newPassword: data['newPassword'], 19 | confirmNewPassword: data['confirmNewPassword'], 20 | picture: data['picture'], 21 | }; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/services/auth-sign-in-mapper.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AuthLoginInput } from './auth.types'; 3 | 4 | @Injectable({ providedIn: 'root' }) 5 | export class AuthSignInMapperService { 6 | toModel(data: AuthLoginInput) { 7 | return { 8 | email: data['email'], 9 | password: data['password'], 10 | }; 11 | } 12 | 13 | toJson(data: AuthLoginInput) { 14 | return { 15 | email: data['email'], 16 | password: data['password'], 17 | }; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/lib/services/auth-sign-up-mapper.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AuthSignupInput } from './auth.types'; 3 | 4 | @Injectable({ providedIn: 'root' }) 5 | export class AuthSignUpMapperService { 6 | toModel(data: AuthSignupInput) { 7 | return { 8 | email: data['email'], 9 | password: data['password'], 10 | confirmPassword: data['confirmPassword'], 11 | }; 12 | } 13 | 14 | toJson(data: AuthSignupInput) { 15 | return { 16 | email: data['email'], 17 | password: data['password'], 18 | confirmPassword: data['confirmPassword'], 19 | }; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /libs/core/auth-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /libs/core/auth-angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "forceConsistentCasingInFileNames": true, 5 | "strict": true, 6 | "noImplicitOverride": true, 7 | "noPropertyAccessFromIndexSignature": true, 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true 10 | }, 11 | "files": [], 12 | "include": [], 13 | "references": [ 14 | { 15 | "path": "./tsconfig.lib.json" 16 | }, 17 | { 18 | "path": "./tsconfig.spec.json" 19 | } 20 | ], 21 | "extends": "../../../tsconfig.base.json", 22 | "angularCompilerOptions": { 23 | "enableI18nLegacyMessageIdFormat": false, 24 | "strictInjectionParameters": true, 25 | "strictInputAccessModifiers": true, 26 | "strictTemplates": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libs/core/auth-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "jest.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/core/auth-angular/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /libs/core/auth-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/core/auth/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/core/auth/README.md: -------------------------------------------------------------------------------- 1 | # auth 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build auth` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test auth` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /libs/core/auth/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'auth', 4 | preset: '../../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../../coverage/libs/core/auth', 11 | }; 12 | -------------------------------------------------------------------------------- /libs/core/auth/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/auth", 3 | "version": "1.1.2", 4 | "private": true, 5 | "dependencies": { 6 | "tslib": "^2.3.0" 7 | }, 8 | "type": "commonjs", 9 | "main": "./src/index.js", 10 | "typings": "./src/index.d.ts", 11 | "i18n": [ 12 | { 13 | "scope": "auth", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | }, 17 | { 18 | "scope": "auth-getText", 19 | "path": "src/i18n/getText", 20 | "strategy": "join" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /libs/core/auth/src/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Auth error": "Auth error", 3 | "Forbidden": "Forbidden", 4 | "User not found": "User not found", 5 | "ok": "ok", 6 | "lang must have one of the values: {{values}}": "lang must have one of the values: {{values}}", 7 | "Unauthorized": "Unauthorized", 8 | "Event that fires after user create": "Event that fires after user create", 9 | "Event that fires after user delete": "Event that fires after user delete", 10 | "Event that fires after user update": "Event that fires after user update" 11 | } -------------------------------------------------------------------------------- /libs/core/auth/src/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Auth error": "Ошибка авторизации", 3 | "Forbidden": "Нет доступа", 4 | "User not found": "Пользователь не найден", 5 | "ok": "ок", 6 | "lang must have one of the values: {{values}}": "lang должен иметь одно из значений: {{values}}", 7 | "Unauthorized": "Неавторизован", 8 | "Event that fires after user create": "Событие, которое возникает после создания пользователя", 9 | "Event that fires after user delete": "Событие, которое возникает после удаления пользователя", 10 | "Event that fires after user update": "Событие, которое возникает после обновления информации о пользователе" 11 | } -------------------------------------------------------------------------------- /libs/core/auth/src/lib/auth.configuration.ts: -------------------------------------------------------------------------------- 1 | import { ConfigModel, ConfigModelProperty } from '@nestjs-mod/common'; 2 | import { ExecutionContext } from '@nestjs/common'; 3 | import { AuthUser } from './generated/rest/dto/auth-user.entity'; 4 | 5 | @ConfigModel() 6 | export class AuthConfiguration { 7 | @ConfigModelProperty({ 8 | description: 'Function for create default admin', 9 | }) 10 | createAdmin!: (user: { 11 | username?: string; 12 | password: string; 13 | email: string; 14 | }) => Promise; 15 | 16 | @ConfigModelProperty({ 17 | description: 'External function for validate permissions', 18 | }) 19 | checkAccessValidator?: ( 20 | authUser?: AuthUser | null, 21 | ctx?: ExecutionContext 22 | ) => Promise; 23 | } 24 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/auth.constants.ts: -------------------------------------------------------------------------------- 1 | export const AUTH_FEATURE = 'auth'; 2 | export const AUTH_MODULE = 'AuthModule'; 3 | export const AUTH_FOLDER = 'libs/core/auth'; 4 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/generated/rest/dto/connect-auth-user.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsOptional, IsString } from 'class-validator'; 3 | 4 | export class ConnectAuthUserDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | required: false, 8 | }) 9 | @IsOptional() 10 | @IsString() 11 | id?: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | required: false, 15 | }) 16 | @IsOptional() 17 | @IsString() 18 | externalUserId?: string; 19 | } 20 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/generated/rest/dto/connect-migrations-auth.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsInt, IsNotEmpty } from 'class-validator'; 3 | 4 | export class ConnectMigrationsAuthDto { 5 | @ApiProperty({ 6 | type: 'integer', 7 | format: 'int32', 8 | }) 9 | @IsNotEmpty() 10 | @IsInt() 11 | installed_rank!: number; 12 | } 13 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/types/auth-async-local-storage-data.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@nestjs/common'; 2 | import { AsyncLocalStorage } from 'node:async_hooks'; 3 | 4 | export type AuthAsyncLocalStorageData = { 5 | authTimezone?: number; 6 | }; 7 | 8 | @Injectable() 9 | export class AuthAsyncLocalStorageContext { 10 | private storage: AsyncLocalStorage; 11 | 12 | constructor() { 13 | this.storage = new AsyncLocalStorage(); 14 | } 15 | 16 | get() { 17 | return this.storage.getStore() as AuthAsyncLocalStorageData; 18 | } 19 | 20 | runWith(context: AuthAsyncLocalStorageData, cb: () => T) { 21 | return this.storage.run(context, cb); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/types/auth-profile.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty, PickType } from '@nestjs/swagger'; 2 | import { AuthRole } from '@prisma/auth-client'; 3 | import { IsOptional } from 'class-validator'; 4 | import { CreateAuthUserDto } from '../generated/rest/dto/create-auth-user.dto'; 5 | 6 | export class AuthProfileDto extends PickType(CreateAuthUserDto, [ 7 | 'timezone', 8 | 'lang', 9 | ]) { 10 | @ApiProperty({ 11 | enum: AuthRole, 12 | enumName: 'AuthRole', 13 | required: false, 14 | nullable: true, 15 | }) 16 | @IsOptional() 17 | userRole?: AuthRole | null; 18 | } 19 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/types/auth-request.ts: -------------------------------------------------------------------------------- 1 | import { AuthUser } from '../generated/rest/dto/auth-user.entity'; 2 | 3 | export type AuthRequest = { 4 | authUser?: AuthUser | null; 5 | headers: Record; 6 | externalUserId?: string; 7 | externalUser?: { email: string; roles: string[] }; 8 | skipEmptyAuthUser?: boolean; 9 | }; 10 | -------------------------------------------------------------------------------- /libs/core/auth/src/lib/types/find-many-auth-user-response.ts: -------------------------------------------------------------------------------- 1 | import { FindManyResponseMeta } from '@nestjs-mod/swagger'; 2 | import { ApiProperty } from '@nestjs/swagger'; 3 | import { AuthUser } from '../generated/rest/dto/auth-user.entity'; 4 | 5 | export class FindManyAuthUserResponse { 6 | @ApiProperty({ type: () => [AuthUser] }) 7 | authUsers!: AuthUser[]; 8 | 9 | @ApiProperty({ type: () => FindManyResponseMeta }) 10 | meta!: FindManyResponseMeta; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/auth/src/migrations/V202412141339__AddFieldLangToAuthUser.sql: -------------------------------------------------------------------------------- 1 | DO $$ 2 | BEGIN 3 | ALTER TABLE "AuthUser" 4 | ADD "lang" varchar(2); 5 | EXCEPTION 6 | WHEN duplicate_column THEN 7 | NULL; 8 | END 9 | $$; -------------------------------------------------------------------------------- /libs/core/auth/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/core/auth/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /libs/core/files-angular/README.md: -------------------------------------------------------------------------------- 1 | # files-angular 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test files-angular` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/core/files-angular/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'files-angular', 3 | preset: '../../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../../coverage/libs/core/files-angular', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /libs/core/files-angular/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../../dist/libs/core/files-angular", 4 | "lib": { 5 | "entryFile": "src/index.ts" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /libs/core/files-angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/files-angular", 3 | "version": "0.0.1", 4 | "peerDependencies": { 5 | "@nestjs-mod-fullstack/app-angular-rest-sdk": "0.0.1", 6 | "@ngx-formly/core": "^6.3.12", 7 | "@angular/common": "19.0.5", 8 | "@angular/core": "19.0.5", 9 | "@angular/forms": "19.0.5", 10 | "ng-zorro-antd": "^19.0.0", 11 | "rxjs": "^7.8.0", 12 | "@jsverse/transloco-keys-manager": "^6.0.0", 13 | "@jsverse/transloco": "^7.5.0" 14 | }, 15 | "sideEffects": false, 16 | "i18n": [ 17 | { 18 | "scope": "files-angular", 19 | "path": "src/i18n", 20 | "strategy": "join" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /libs/core/files-angular/src/i18n/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.image-file.change-file": "Change", 3 | "files.image-file.select-file": "Select" 4 | } -------------------------------------------------------------------------------- /libs/core/files-angular/src/i18n/en.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "files.image-file.change-file" 10 | msgstr "Change" 11 | 12 | msgid "files.image-file.select-file" 13 | msgstr "Select" 14 | -------------------------------------------------------------------------------- /libs/core/files-angular/src/i18n/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.image-file.change-file": "Изменить", 3 | "files.image-file.select-file": "Выбрать" 4 | } -------------------------------------------------------------------------------- /libs/core/files-angular/src/i18n/ru.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " 8 | "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" 9 | 10 | msgid "files.image-file.change-file" 11 | msgstr "Изменить" 12 | 13 | msgid "files.image-file.select-file" 14 | msgstr "Выбрать" 15 | -------------------------------------------------------------------------------- /libs/core/files-angular/src/i18n/template.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "files.image-file.change-file" 10 | msgstr "Change" 11 | 12 | msgid "files.image-file.select-file" 13 | msgstr "Select" 14 | -------------------------------------------------------------------------------- /libs/core/files-angular/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/formly/formly-fields'; 2 | export * from './lib/formly/image-file.component'; 3 | export * from './lib/services/files.service'; 4 | -------------------------------------------------------------------------------- /libs/core/files-angular/src/lib/formly/formly-fields.ts: -------------------------------------------------------------------------------- 1 | import { TypeOption } from '@ngx-formly/core/lib/models'; 2 | import { ImageFileComponent } from './image-file.component'; 3 | 4 | export const FILES_FORMLY_FIELDS: TypeOption[] = [ 5 | { 6 | name: 'image-file', 7 | component: ImageFileComponent, 8 | extends: 'input', 9 | }, 10 | ]; 11 | -------------------------------------------------------------------------------- /libs/core/files-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /libs/core/files-angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "forceConsistentCasingInFileNames": true, 5 | "strict": true, 6 | "noImplicitOverride": true, 7 | "noPropertyAccessFromIndexSignature": true, 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true 10 | }, 11 | "files": [], 12 | "include": [], 13 | "references": [ 14 | { 15 | "path": "./tsconfig.lib.json" 16 | }, 17 | { 18 | "path": "./tsconfig.spec.json" 19 | } 20 | ], 21 | "extends": "../../../tsconfig.base.json", 22 | "angularCompilerOptions": { 23 | "enableI18nLegacyMessageIdFormat": false, 24 | "strictInjectionParameters": true, 25 | "strictInputAccessModifiers": true, 26 | "strictTemplates": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libs/core/files-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "jest.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/core/files-angular/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /libs/core/files-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/core/files/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/core/files/README.md: -------------------------------------------------------------------------------- 1 | # files 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build files` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test files` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /libs/core/files/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'files', 4 | preset: '../../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../../coverage/libs/core/files', 11 | }; 12 | -------------------------------------------------------------------------------- /libs/core/files/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/files", 3 | "version": "0.0.1", 4 | "private": true, 5 | "dependencies": { 6 | "tslib": "^2.3.0" 7 | }, 8 | "type": "commonjs", 9 | "main": "./src/index.js", 10 | "typings": "./src/index.d.ts", 11 | "i18n": [ 12 | { 13 | "scope": "files", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | }, 17 | { 18 | "scope": "files-getText", 19 | "path": "src/i18n/getText", 20 | "strategy": "join" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /libs/core/files/src/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Files error": "Files error", 3 | "Forbidden": "Forbidden", 4 | "ok": "ok", 5 | "Only those who uploaded files can delete them": "Only those who uploaded files can delete them", 6 | "Uploading files with extension \"{{ext}}\" is not supported": "Uploading files with extension \"{{ext}}\" is not supported", 7 | "Event that fires after a file is deleted": "Event that fires after a file is deleted" 8 | } -------------------------------------------------------------------------------- /libs/core/files/src/i18n/getText/en.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "Files error" 10 | msgstr "Files error" 11 | 12 | msgid "Forbidden" 13 | msgstr "Forbidden" 14 | 15 | msgid "ok" 16 | msgstr "ok" 17 | 18 | msgid "Only those who uploaded files can delete them" 19 | msgstr "Only those who uploaded files can delete them" 20 | 21 | msgid "Uploading files with extension \"{{ext}}\" is not supported" 22 | msgstr "Uploading files with extension \"{{ext}}\" is not supported" 23 | 24 | msgid "Event that fires after a file is deleted" 25 | msgstr "Event that fires after a file is deleted" 26 | -------------------------------------------------------------------------------- /libs/core/files/src/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Files error": "Ошибка файлов", 3 | "Forbidden": "Нет доступа", 4 | "ok": "ок", 5 | "Only those who uploaded files can delete them": "Удалить файлы могут только те, кто их загрузил.", 6 | "Uploading files with extension \"{{ext}}\" is not supported": "Загрузка файлов с расширением \"{{ext}}\" не поддерживается.", 7 | "Event that fires after a file is deleted": "Событие которое срабатывает после удаления файла" 8 | } -------------------------------------------------------------------------------- /libs/core/files/src/i18n/getText/template.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "Files error" 10 | msgstr "Files error" 11 | 12 | msgid "Forbidden" 13 | msgstr "Forbidden" 14 | 15 | msgid "ok" 16 | msgstr "ok" 17 | 18 | msgid "Only those who uploaded files can delete them" 19 | msgstr "Only those who uploaded files can delete them" 20 | 21 | msgid "Uploading files with extension \"{{ext}}\" is not supported" 22 | msgstr "Uploading files with extension \"{{ext}}\" is not supported" 23 | 24 | msgid "Event that fires after a file is deleted" 25 | msgstr "Event that fires after a file is deleted" 26 | -------------------------------------------------------------------------------- /libs/core/files/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/files-extra-models'; 2 | export * from './lib/files.configuration'; 3 | export * from './lib/files.constants'; 4 | export * from './lib/files.decorators'; 5 | export * from './lib/files.environments'; 6 | export * from './lib/files.errors'; 7 | export * from './lib/files.module'; 8 | export * from './lib/controllers/files.controller'; 9 | export * from './lib/types/dto'; 10 | export * from './lib/types/files-request'; 11 | export * from './lib/types/files-role'; 12 | export * from './lib/types/files-webhooks'; 13 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/files-extra-models.ts: -------------------------------------------------------------------------------- 1 | import { FilesError } from './files.errors'; 2 | 3 | export const FILES_EXTRA_MODELS = [FilesError]; 4 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/files.constants.ts: -------------------------------------------------------------------------------- 1 | export const FILES_FEATURE = 'files'; 2 | export const FILES_MODULE = 'FilesModule'; 3 | export const FILES_FOLDER = 'libs/core/files'; 4 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/files.decorators.ts: -------------------------------------------------------------------------------- 1 | import { getRequestFromExecutionContext } from '@nestjs-mod/common'; 2 | import { createParamDecorator, ExecutionContext } from '@nestjs/common'; 3 | import { FilesRequest } from './types/files-request'; 4 | 5 | export const CurrentFilesRequest = createParamDecorator( 6 | (_data: unknown, ctx: ExecutionContext) => { 7 | const req = getRequestFromExecutionContext(ctx) as FilesRequest; 8 | return req; 9 | } 10 | ); 11 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/files.environments.ts: -------------------------------------------------------------------------------- 1 | import { EnvModel, EnvModelProperty } from '@nestjs-mod/common'; 2 | 3 | @EnvModel() 4 | export class FilesStaticEnvironments { 5 | @EnvModelProperty({ 6 | description: 'Default user id', 7 | default: 'default', 8 | hidden: true, 9 | }) 10 | filesDefaultUserId?: string; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/types/dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsDefined } from 'class-validator'; 3 | 4 | export class FilesGetPresignedUrlArgs { 5 | @ApiProperty({ type: String }) 6 | @IsDefined() 7 | ext!: string; 8 | } 9 | 10 | export class FilesPresignedUrls { 11 | @ApiProperty({ type: String }) 12 | downloadUrl!: string; 13 | 14 | @ApiProperty({ type: String }) 15 | uploadUrl!: string; 16 | } 17 | 18 | export class FilesDeleteFileArgs { 19 | @ApiProperty({ type: String }) 20 | @IsDefined() 21 | downloadUrl!: string; 22 | } 23 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/types/files-request.ts: -------------------------------------------------------------------------------- 1 | import { FilesRole } from './files-role'; 2 | 3 | export type FilesRequest = { 4 | externalUserId: string; 5 | filesUser?: { userRole: FilesRole }; 6 | headers: Record; 7 | }; 8 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/types/files-role.ts: -------------------------------------------------------------------------------- 1 | export enum FilesRole { 2 | Admin = 'Admin', 3 | User = 'User', 4 | } 5 | -------------------------------------------------------------------------------- /libs/core/files/src/lib/types/files-webhooks.ts: -------------------------------------------------------------------------------- 1 | import { WebhookEvent } from '@nestjs-mod-fullstack/webhook'; 2 | import { getText } from 'nestjs-translates'; 3 | 4 | export enum FilesWebhookEvent { 5 | 'files.delete' = 'files.delete', 6 | } 7 | 8 | export const FILES_WEBHOOK_EVENTS: WebhookEvent[] = [ 9 | { 10 | eventName: FilesWebhookEvent['files.delete'], 11 | description: getText('Event that fires after a file is deleted'), 12 | example: { 13 | bucketName: 'images', 14 | downloadUrl: '/files/images-file-id.jpg', 15 | objectName: 'images-file-id', 16 | externalUserId: '77af2745-d972-4e1f-994a-fae8ad71d7ab', 17 | } as { 18 | bucketName: string; 19 | objectName: string; 20 | downloadUrl: string; 21 | externalUserId: string; 22 | }, 23 | }, 24 | ]; 25 | -------------------------------------------------------------------------------- /libs/core/files/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/core/files/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/README.md: -------------------------------------------------------------------------------- 1 | # webhook-angular 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test webhook-angular` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/jest.config.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | displayName: 'webhook-angular', 3 | preset: '../../../jest.preset.js', 4 | setupFilesAfterEnv: ['/src/test-setup.ts'], 5 | coverageDirectory: '../../../coverage/libs/core/webhook-angular', 6 | transform: { 7 | '^.+\\.(ts|mjs|js|html)$': [ 8 | 'jest-preset-angular', 9 | { 10 | tsconfig: '/tsconfig.spec.json', 11 | stringifyContentPathRegex: '\\.(html|svg)$', 12 | }, 13 | ], 14 | }, 15 | transformIgnorePatterns: ['node_modules/(?!.*\\.mjs$)'], 16 | snapshotSerializers: [ 17 | 'jest-preset-angular/build/serializers/no-ng-attributes', 18 | 'jest-preset-angular/build/serializers/ng-snapshot', 19 | 'jest-preset-angular/build/serializers/html-comment', 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../../dist/libs/core/webhook-angular", 4 | "lib": { 5 | "entryFile": "src/index.ts" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/src/lib/forms/webhook-form/webhook-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 | 20 | 21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/src/lib/forms/webhook-log-form/webhook-log-form.component.html: -------------------------------------------------------------------------------- 1 | @if (formlyFields$ | async; as formlyFields) { 2 |
3 | 8 | 9 | @if (!hideButtons) { 10 | 11 | 20 | 21 | } 22 |
23 | } 24 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/src/lib/services/webhook-events.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { WebhookRestService } from '@nestjs-mod-fullstack/app-angular-rest-sdk'; 3 | 4 | @Injectable({ providedIn: 'root' }) 5 | export class WebhookEventsService { 6 | constructor(private readonly webhookRestService: WebhookRestService) {} 7 | 8 | findMany() { 9 | return this.webhookRestService.webhookControllerEvents(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "forceConsistentCasingInFileNames": true, 5 | "strict": true, 6 | "noImplicitOverride": true, 7 | "noPropertyAccessFromIndexSignature": true, 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true 10 | }, 11 | "files": [], 12 | "include": [], 13 | "references": [ 14 | { 15 | "path": "./tsconfig.lib.json" 16 | }, 17 | { 18 | "path": "./tsconfig.spec.json" 19 | } 20 | ], 21 | "extends": "../../../tsconfig.base.json", 22 | "angularCompilerOptions": { 23 | "enableI18nLegacyMessageIdFormat": false, 24 | "strictInjectionParameters": true, 25 | "strictInputAccessModifiers": true, 26 | "strictTemplates": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "jest.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /libs/core/webhook-angular/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/core/webhook/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/core/webhook/README.md: -------------------------------------------------------------------------------- 1 | # webhook 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build webhook` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test webhook` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /libs/core/webhook/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'webhook', 4 | preset: '../../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../../coverage/libs/core/webhook', 11 | }; 12 | -------------------------------------------------------------------------------- /libs/core/webhook/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/webhook", 3 | "version": "1.3.2", 4 | "private": true, 5 | "dependencies": { 6 | "tslib": "^2.3.0" 7 | }, 8 | "type": "commonjs", 9 | "main": "./src/index.js", 10 | "typings": "./src/index.d.ts", 11 | "i18n": [ 12 | { 13 | "scope": "webhook", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | }, 17 | { 18 | "scope": "webhook-getText", 19 | "path": "src/i18n/getText", 20 | "strategy": "join" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /libs/core/webhook/src/i18n/getText/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event not found": "Event not found", 3 | "Forbidden": "Forbidden", 4 | "ok": "ok", 5 | "Tenant ID not set": "Tenant ID not set", 6 | "User ID not set": "User ID not set", 7 | "User not found": "User not found", 8 | "Webhook error": "Webhook error" 9 | } -------------------------------------------------------------------------------- /libs/core/webhook/src/i18n/getText/en.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "Event not found" 10 | msgstr "Event not found" 11 | 12 | msgid "Forbidden" 13 | msgstr "Forbidden" 14 | 15 | msgid "ok" 16 | msgstr "ok" 17 | 18 | msgid "Tenant ID not set" 19 | msgstr "Tenant ID not set" 20 | 21 | msgid "User ID not set" 22 | msgstr "User ID not set" 23 | 24 | msgid "User not found" 25 | msgstr "User not found" 26 | 27 | msgid "Webhook error" 28 | msgstr "Webhook error" 29 | -------------------------------------------------------------------------------- /libs/core/webhook/src/i18n/getText/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "Event not found": "Событие не найдено", 3 | "Forbidden": "Нет доступа", 4 | "ok": "ок", 5 | "Tenant ID not set": "Идентификатор клиента не установлен", 6 | "User ID not set": "Идентификатор пользователя не установлен", 7 | "User not found": "Пользователь не найден", 8 | "Webhook error": "Ошибка вебхука" 9 | } -------------------------------------------------------------------------------- /libs/core/webhook/src/i18n/getText/ru.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " 8 | "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n" 9 | 10 | msgid "Event not found" 11 | msgstr "Событие не найдено" 12 | 13 | msgid "Forbidden" 14 | msgstr "Нет доступа" 15 | 16 | msgid "ok" 17 | msgstr "ок" 18 | 19 | msgid "Tenant ID not set" 20 | msgstr "Идентификатор клиента не установлен" 21 | 22 | msgid "User ID not set" 23 | msgstr "Идентификатор пользователя не установлен" 24 | 25 | msgid "User not found" 26 | msgstr "Пользователь не найден" 27 | 28 | msgid "Webhook error" 29 | msgstr "Ошибка вебхука" 30 | -------------------------------------------------------------------------------- /libs/core/webhook/src/i18n/getText/template.pot: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: i18next-conv\n" 4 | "mime-version: 1.0\n" 5 | "Content-Type: text/plain; charset=utf-8\n" 6 | "Content-Transfer-Encoding: 8bit\n" 7 | "Plural-Forms: nplurals=2; plural=(n != 1)\n" 8 | 9 | msgid "Event not found" 10 | msgstr "Event not found" 11 | 12 | msgid "Forbidden" 13 | msgstr "Forbidden" 14 | 15 | msgid "ok" 16 | msgstr "ok" 17 | 18 | msgid "Tenant ID not set" 19 | msgstr "Tenant ID not set" 20 | 21 | msgid "User ID not set" 22 | msgstr "User ID not set" 23 | 24 | msgid "User not found" 25 | msgstr "User not found" 26 | 27 | msgid "Webhook error" 28 | msgstr "Webhook error" 29 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/generated/rest/dto/connect-migrations-webhook.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsInt, IsNotEmpty } from 'class-validator'; 3 | 4 | export class ConnectMigrationsWebhookDto { 5 | @ApiProperty({ 6 | type: 'integer', 7 | format: 'int32', 8 | }) 9 | @IsNotEmpty() 10 | @IsInt() 11 | installed_rank!: number; 12 | } 13 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/generated/rest/dto/connect-webhook-log.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsNotEmpty, IsString } from 'class-validator'; 3 | 4 | export class ConnectWebhookLogDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | }) 8 | @IsNotEmpty() 9 | @IsString() 10 | id!: string; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/generated/rest/dto/connect-webhook.dto.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { IsNotEmpty, IsString } from 'class-validator'; 3 | 4 | export class ConnectWebhookDto { 5 | @ApiProperty({ 6 | type: 'string', 7 | }) 8 | @IsNotEmpty() 9 | @IsString() 10 | id!: string; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/generated/rest/dto/create-webhook-user.dto.ts: -------------------------------------------------------------------------------- 1 | import { WebhookRole } from '../../../../../../../../node_modules/@prisma/webhook-client'; 2 | import { ApiProperty } from '@nestjs/swagger'; 3 | import { IsEnum, IsNotEmpty, IsString } from 'class-validator'; 4 | 5 | export class CreateWebhookUserDto { 6 | @ApiProperty({ 7 | type: 'string', 8 | }) 9 | @IsNotEmpty() 10 | @IsString() 11 | externalTenantId!: string; 12 | @ApiProperty({ 13 | type: 'string', 14 | }) 15 | @IsNotEmpty() 16 | @IsString() 17 | externalUserId!: string; 18 | @ApiProperty({ 19 | enum: WebhookRole, 20 | enumName: 'WebhookRole', 21 | }) 22 | @IsNotEmpty() 23 | @IsEnum(WebhookRole) 24 | userRole!: WebhookRole; 25 | } 26 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/find-many-webhook-log-response.ts: -------------------------------------------------------------------------------- 1 | import { FindManyResponseMeta } from '@nestjs-mod/swagger'; 2 | import { ApiProperty } from '@nestjs/swagger'; 3 | import { WebhookLog } from '../generated/rest/dto/webhook-log.entity'; 4 | 5 | export class FindManyWebhookLogResponse { 6 | @ApiProperty({ type: () => [WebhookLog] }) 7 | webhookLogs!: WebhookLog[]; 8 | 9 | @ApiProperty({ type: () => FindManyResponseMeta }) 10 | meta!: FindManyResponseMeta; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/find-many-webhook-response.ts: -------------------------------------------------------------------------------- 1 | import { FindManyResponseMeta } from '@nestjs-mod/swagger'; 2 | import { ApiProperty } from '@nestjs/swagger'; 3 | import { Webhook } from '../generated/rest/dto/webhook.entity'; 4 | 5 | export class FindManyWebhookResponse { 6 | @ApiProperty({ type: () => [Webhook] }) 7 | webhooks!: Webhook[]; 8 | 9 | @ApiProperty({ type: () => FindManyResponseMeta }) 10 | meta!: FindManyResponseMeta; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/find-many-webhook-user-response.ts: -------------------------------------------------------------------------------- 1 | import { FindManyResponseMeta } from '@nestjs-mod/swagger'; 2 | import { ApiProperty } from '@nestjs/swagger'; 3 | import { WebhookUser } from '../generated/rest/dto/webhook-user.entity'; 4 | 5 | export class FindManyWebhookUserResponse { 6 | @ApiProperty({ type: () => [WebhookUser] }) 7 | webhookUsers!: WebhookUser[]; 8 | 9 | @ApiProperty({ type: () => FindManyResponseMeta }) 10 | meta!: FindManyResponseMeta; 11 | } 12 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/webhook-event.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | 3 | export class WebhookEvent { 4 | @ApiProperty({ type: String }) 5 | eventName!: string; 6 | 7 | @ApiProperty({ type: String }) 8 | description!: string; 9 | 10 | descriptionLocale?: Record; 11 | 12 | @ApiProperty({ type: Object }) 13 | example!: object; 14 | } 15 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/webhook-request.ts: -------------------------------------------------------------------------------- 1 | import { WebhookUser } from '../generated/rest/dto/webhook-user.entity'; 2 | 3 | export type WebhookRequest = { 4 | webhookUser?: Omit< 5 | WebhookUser, 6 | | 'Webhook_Webhook_createdByToWebhookUser' 7 | | 'Webhook_Webhook_updatedByToWebhookUser' 8 | > | null; 9 | externalUserId: string; 10 | externalTenantId: string; 11 | headers: Record; 12 | }; 13 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/types/webhook-test-request-response.ts: -------------------------------------------------------------------------------- 1 | import { ApiProperty } from '@nestjs/swagger'; 2 | import { WebhookStatus } from '@prisma/webhook-client'; 3 | 4 | export class WebhookTestRequestResponse { 5 | @ApiProperty({ 6 | type: () => Object, 7 | }) 8 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 9 | request!: any; 10 | 11 | @ApiProperty({ 12 | type: 'string', 13 | }) 14 | responseStatus!: string; 15 | 16 | @ApiProperty({ 17 | type: () => Object, 18 | nullable: true, 19 | }) 20 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 21 | response!: any | null; 22 | 23 | @ApiProperty({ 24 | enum: WebhookStatus, 25 | enumName: 'WebhookStatus', 26 | }) 27 | webhookStatus!: WebhookStatus; 28 | } 29 | -------------------------------------------------------------------------------- /libs/core/webhook/src/lib/webhook.constants.ts: -------------------------------------------------------------------------------- 1 | export const WEBHOOK_FEATURE = 'webhook'; 2 | export const WEBHOOK_MODULE = 'WebhookModule'; 3 | export const WEBHOOK_FOLDER = 'libs/core/webhook'; 4 | -------------------------------------------------------------------------------- /libs/core/webhook/src/migrations/V202412200905__AddFieldWorkUntilDateToAuthUser.sql: -------------------------------------------------------------------------------- 1 | DO $$ 2 | BEGIN 3 | ALTER TABLE "Webhook" 4 | ADD "workUntilDate" timestamp(6); 5 | EXCEPTION 6 | WHEN duplicate_column THEN 7 | NULL; 8 | END 9 | $$; 10 | 11 | -------------------------------------------------------------------------------- /libs/core/webhook/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/core/webhook/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/README.md: -------------------------------------------------------------------------------- 1 | # app-angular-rest-sdk 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Running unit tests 6 | 7 | Run `nx test app-angular-rest-sdk` to execute the unit tests. 8 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/ng-package.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "../../../node_modules/ng-packagr/ng-package.schema.json", 3 | "dest": "../../../dist/libs/sdk/app-angular-rest-sdk", 4 | "lib": { 5 | "entryFile": "src/index.ts" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/app-angular-rest-sdk", 3 | "version": "0.0.1", 4 | "private": true, 5 | "peerDependencies": { 6 | "@angular/core": "19.0.5", 7 | "@angular/common": "19.0.5", 8 | "rxjs": "^7.8.0" 9 | }, 10 | "sideEffects": false, 11 | "i18n": [ 12 | { 13 | "scope": "app-angular-rest-sdk", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.11.0 2 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/encoder.ts: -------------------------------------------------------------------------------- 1 | import { HttpParameterCodec } from '@angular/common/http'; 2 | 3 | /** 4 | * Custom HttpParameterCodec 5 | * Workaround for https://github.com/angular/angular/issues/18261 6 | */ 7 | export class CustomHttpParameterCodec implements HttpParameterCodec { 8 | encodeKey(k: string): string { 9 | return encodeURIComponent(k); 10 | } 11 | encodeValue(v: string): string { 12 | return encodeURIComponent(v); 13 | } 14 | decodeKey(k: string): string { 15 | return decodeURIComponent(k); 16 | } 17 | decodeValue(v: string): string { 18 | return decodeURIComponent(v); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from './api/api'; 2 | export * from './model/models'; 3 | export * from './variables'; 4 | export * from './configuration'; 5 | export * from './api.module'; 6 | export * from './param'; 7 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/app-data.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface AppDataInterface { 12 | message: string; 13 | } 14 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/app-demo.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface AppDemoInterface { 12 | id: string; 13 | name: string; 14 | createdAt: string; 15 | updatedAt: string; 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-controller-profile400-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { ValidationErrorMetadataInterface } from './validation-error-metadata.interface'; 11 | import { ValidationErrorEnumInterface } from './validation-error-enum.interface'; 12 | 13 | export interface AuthControllerProfile400ResponseInterface { 14 | /** 15 | * Validation error (VALIDATION-000) 16 | */ 17 | message: string; 18 | code: ValidationErrorEnumInterface; 19 | metadata?: Array; 20 | } 21 | export namespace AuthControllerProfile400ResponseInterface {} 22 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-entities.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthUserScalarFieldEnumInterface } from './auth-user-scalar-field-enum.interface'; 11 | 12 | export interface AuthEntitiesInterface { 13 | AuthUser: AuthUserScalarFieldEnumInterface; 14 | } 15 | export namespace AuthEntitiesInterface {} 16 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-error-enum.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type AuthErrorEnumInterface = 'AUTH-000' | 'AUTH-001' | 'AUTH-002'; 12 | 13 | export const AuthErrorEnumInterface = { 14 | AUTH_000: 'AUTH-000' as AuthErrorEnumInterface, 15 | AUTH_001: 'AUTH-001' as AuthErrorEnumInterface, 16 | AUTH_002: 'AUTH-002' as AuthErrorEnumInterface, 17 | }; 18 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-error.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthErrorEnumInterface } from './auth-error-enum.interface'; 11 | 12 | export interface AuthErrorInterface { 13 | /** 14 | * Auth error (AUTH-000), Forbidden (AUTH-001), Unauthorized (AUTH-002) 15 | */ 16 | message: string; 17 | code: AuthErrorEnumInterface; 18 | metadata?: object; 19 | } 20 | export namespace AuthErrorInterface {} 21 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-profile-dto.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthRoleInterface } from './auth-role.interface'; 11 | 12 | export interface AuthProfileDtoInterface { 13 | timezone?: number | null; 14 | lang?: string | null; 15 | userRole?: AuthRoleInterface | null; 16 | } 17 | export namespace AuthProfileDtoInterface {} 18 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-role.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type AuthRoleInterface = 'Admin' | 'User'; 12 | 13 | export const AuthRoleInterface = { 14 | Admin: 'Admin' as AuthRoleInterface, 15 | User: 'User' as AuthRoleInterface, 16 | }; 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/auth-user.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthRoleInterface } from './auth-role.interface'; 11 | 12 | export interface AuthUserInterface { 13 | id: string; 14 | externalUserId: string; 15 | userRole: AuthRoleInterface; 16 | timezone: number | null; 17 | createdAt: string; 18 | updatedAt: string; 19 | lang: string | null; 20 | } 21 | export namespace AuthUserInterface {} 22 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/authorizer-client-id.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface AuthorizerClientIDInterface { 12 | clientID: string; 13 | } 14 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/create-webhook-dto.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface CreateWebhookDtoInterface { 12 | eventName: string; 13 | endpoint: string; 14 | enabled: boolean; 15 | headers?: object | null; 16 | requestTimeout?: number | null; 17 | workUntilDate?: string | null; 18 | } 19 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/files-error-enum.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type FilesErrorEnumInterface = 'FILES-000' | 'FILES-001'; 12 | 13 | export const FilesErrorEnumInterface = { 14 | FILES_000: 'FILES-000' as FilesErrorEnumInterface, 15 | FILES_001: 'FILES-001' as FilesErrorEnumInterface, 16 | }; 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/files-error.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { FilesErrorEnumInterface } from './files-error-enum.interface'; 11 | 12 | export interface FilesErrorInterface { 13 | /** 14 | * Files error (FILES-000), Forbidden (FILES-001) 15 | */ 16 | message: string; 17 | code: FilesErrorEnumInterface; 18 | metadata?: object; 19 | } 20 | export namespace FilesErrorInterface {} 21 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/files-presigned-urls.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface FilesPresignedUrlsInterface { 12 | downloadUrl: string; 13 | uploadUrl: string; 14 | } 15 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/find-many-auth-user-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthUserInterface } from './auth-user.interface'; 11 | import { FindManyResponseMetaInterface } from './find-many-response-meta.interface'; 12 | 13 | export interface FindManyAuthUserResponseInterface { 14 | authUsers: Array; 15 | meta: FindManyResponseMetaInterface; 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/find-many-response-meta.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface FindManyResponseMetaInterface { 12 | curPage?: number; 13 | perPage?: number; 14 | totalResults: number; 15 | } 16 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/find-many-webhook-log-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { FindManyResponseMetaInterface } from './find-many-response-meta.interface'; 11 | import { WebhookLogInterface } from './webhook-log.interface'; 12 | 13 | export interface FindManyWebhookLogResponseInterface { 14 | webhookLogs: Array; 15 | meta: FindManyResponseMetaInterface; 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/find-many-webhook-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { FindManyResponseMetaInterface } from './find-many-response-meta.interface'; 11 | import { WebhookInterface } from './webhook.interface'; 12 | 13 | export interface FindManyWebhookResponseInterface { 14 | webhooks: Array; 15 | meta: FindManyResponseMetaInterface; 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/status-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface StatusResponseInterface { 12 | message: string; 13 | } 14 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/terminus-health-check-controller-check200-response-info-value.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface TerminusHealthCheckControllerCheck200ResponseInfoValueInterface { 12 | [key: string]: any | any; 13 | 14 | status: string; 15 | } 16 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/update-auth-user-dto.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { AuthRoleInterface } from './auth-role.interface'; 11 | 12 | export interface UpdateAuthUserDtoInterface { 13 | externalUserId?: string; 14 | userRole?: AuthRoleInterface; 15 | timezone?: number | null; 16 | lang?: string | null; 17 | } 18 | export namespace UpdateAuthUserDtoInterface {} 19 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/update-webhook-dto.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface UpdateWebhookDtoInterface { 12 | eventName?: string; 13 | endpoint?: string; 14 | enabled?: boolean; 15 | headers?: object | null; 16 | requestTimeout?: number | null; 17 | workUntilDate?: string | null; 18 | } 19 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/validation-error-enum.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type ValidationErrorEnumInterface = 'VALIDATION-000'; 12 | 13 | export const ValidationErrorEnumInterface = { 14 | VALIDATION_000: 'VALIDATION-000' as ValidationErrorEnumInterface, 15 | }; 16 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/validation-error-metadata-constraint.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface ValidationErrorMetadataConstraintInterface { 12 | name: string; 13 | description: string; 14 | } 15 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/validation-error-metadata.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { ValidationErrorMetadataConstraintInterface } from './validation-error-metadata-constraint.interface'; 11 | 12 | export interface ValidationErrorMetadataInterface { 13 | property: string; 14 | constraints: Array; 15 | children?: Array; 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/validation-error.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { ValidationErrorMetadataInterface } from './validation-error-metadata.interface'; 11 | import { ValidationErrorEnumInterface } from './validation-error-enum.interface'; 12 | 13 | export interface ValidationErrorInterface { 14 | /** 15 | * Validation error (VALIDATION-000) 16 | */ 17 | message: string; 18 | code: ValidationErrorEnumInterface; 19 | metadata?: Array; 20 | } 21 | export namespace ValidationErrorInterface {} 22 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-error.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { WebhookErrorEnumInterface } from './webhook-error-enum.interface'; 11 | 12 | export interface WebhookErrorInterface { 13 | /** 14 | * Webhook error (WEBHOOK-000), Tenant ID not set (WEBHOOK-003), User ID not set (WEBHOOK-002), Forbidden (WEBHOOK-001), User not found (WEBHOOK-004), Event not found (WEBHOOK-005) 15 | */ 16 | message: string; 17 | code: WebhookErrorEnumInterface; 18 | metadata?: object; 19 | } 20 | export namespace WebhookErrorInterface {} 21 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-event.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export interface WebhookEventInterface { 12 | eventName: string; 13 | description: string; 14 | example: object; 15 | } 16 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-log.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { WebhookStatusInterface } from './webhook-status.interface'; 11 | import { WebhookInterface } from './webhook.interface'; 12 | 13 | export interface WebhookLogInterface { 14 | id: string; 15 | request: object; 16 | responseStatus: string; 17 | response: object | null; 18 | webhookStatus: WebhookStatusInterface; 19 | webhookId: string; 20 | externalTenantId: string; 21 | createdAt: string; 22 | updatedAt: string; 23 | Webhook?: WebhookInterface; 24 | } 25 | export namespace WebhookLogInterface {} 26 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-role.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type WebhookRoleInterface = 'Admin' | 'User'; 12 | 13 | export const WebhookRoleInterface = { 14 | Admin: 'Admin' as WebhookRoleInterface, 15 | User: 'User' as WebhookRoleInterface, 16 | }; 17 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-status.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | 11 | export type WebhookStatusInterface = 12 | | 'Pending' 13 | | 'Process' 14 | | 'Success' 15 | | 'Error' 16 | | 'Timeout'; 17 | 18 | export const WebhookStatusInterface = { 19 | Pending: 'Pending' as WebhookStatusInterface, 20 | Process: 'Process' as WebhookStatusInterface, 21 | Success: 'Success' as WebhookStatusInterface, 22 | Error: 'Error' as WebhookStatusInterface, 23 | Timeout: 'Timeout' as WebhookStatusInterface, 24 | }; 25 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/model/webhook-test-request-response.interface.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * 3 | * 4 | * 5 | * 6 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 7 | * https://openapi-generator.tech 8 | * Do not edit the class manually. 9 | */ 10 | import { WebhookStatusInterface } from './webhook-status.interface'; 11 | 12 | export interface WebhookTestRequestResponseInterface { 13 | request: object; 14 | responseStatus: string; 15 | response: object | null; 16 | webhookStatus: WebhookStatusInterface; 17 | } 18 | export namespace WebhookTestRequestResponseInterface {} 19 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/lib/variables.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from '@angular/core'; 2 | 3 | export const BASE_PATH = new InjectionToken('basePath'); 4 | export const COLLECTION_FORMATS = { 5 | 'csv': ',', 6 | 'tsv': ' ', 7 | 'ssv': ' ', 8 | 'pipes': '|' 9 | } 10 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/src/test-setup.ts: -------------------------------------------------------------------------------- 1 | import { setupZoneTestEnv } from 'jest-preset-angular/setup-env/zone'; 2 | 3 | setupZoneTestEnv(); 4 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2022", 4 | "forceConsistentCasingInFileNames": true, 5 | "strict": true, 6 | "noImplicitOverride": true, 7 | "noPropertyAccessFromIndexSignature": true, 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true 10 | }, 11 | "files": [], 12 | "include": [], 13 | "references": [ 14 | { 15 | "path": "./tsconfig.lib.json" 16 | }, 17 | { 18 | "path": "./tsconfig.spec.json" 19 | } 20 | ], 21 | "extends": "../../../tsconfig.base.json", 22 | "angularCompilerOptions": { 23 | "enableI18nLegacyMessageIdFormat": false, 24 | "strictInjectionParameters": true, 25 | "strictInputAccessModifiers": true, 26 | "strictTemplates": true 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/tsconfig.lib.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "declaration": true, 6 | "declarationMap": true, 7 | "inlineSources": true, 8 | "types": [] 9 | }, 10 | "exclude": [ 11 | "src/**/*.spec.ts", 12 | "src/test-setup.ts", 13 | "jest.config.ts", 14 | "src/**/*.test.ts" 15 | ], 16 | "include": ["src/**/*.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/tsconfig.lib.prod.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.lib.json", 3 | "compilerOptions": { 4 | "declarationMap": false 5 | }, 6 | "angularCompilerOptions": { 7 | "compilationMode": "partial" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /libs/sdk/app-angular-rest-sdk/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "target": "es2016", 7 | "types": ["jest", "node"] 8 | }, 9 | "files": ["src/test-setup.ts"], 10 | "include": [ 11 | "jest.config.ts", 12 | "src/**/*.test.ts", 13 | "src/**/*.spec.ts", 14 | "src/**/*.d.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/README.md: -------------------------------------------------------------------------------- 1 | # app-rest-sdk 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build app-rest-sdk` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test app-rest-sdk` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'app-rest-sdk', 4 | preset: '../../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../../coverage/libs/sdk/app-rest-sdk', 11 | }; 12 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/app-rest-sdk", 3 | "version": "1.3.2", 4 | "private": true, 5 | "dependencies": { 6 | "tslib": "^2.3.0" 7 | }, 8 | "type": "commonjs", 9 | "main": "./src/index.js", 10 | "typings": "./src/index.d.ts", 11 | "i18n": [ 12 | { 13 | "scope": "app-rest-sdk", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/api'; 2 | export * from './lib/base'; 3 | export * from './lib/common'; 4 | export * from './lib/configuration'; 5 | export * from './lib/index'; 6 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/lib/.gitignore: -------------------------------------------------------------------------------- 1 | wwwroot/*.js 2 | node_modules 3 | typings 4 | dist 5 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/lib/.npmignore: -------------------------------------------------------------------------------- 1 | # empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/lib/.openapi-generator/FILES: -------------------------------------------------------------------------------- 1 | .gitignore 2 | .npmignore 3 | .openapi-generator-ignore 4 | api.ts 5 | base.ts 6 | common.ts 7 | configuration.ts 8 | git_push.sh 9 | index.ts 10 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/lib/.openapi-generator/VERSION: -------------------------------------------------------------------------------- 1 | 7.11.0 2 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * 5 | * No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) 6 | * 7 | * The version of the OpenAPI document: 1.0.0 8 | * 9 | * 10 | * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). 11 | * https://openapi-generator.tech 12 | * Do not edit the class manually. 13 | */ 14 | 15 | 16 | export * from "./api"; 17 | export * from "./configuration"; 18 | 19 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/sdk/app-rest-sdk/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /libs/testing/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "rules": {} 8 | }, 9 | { 10 | "files": ["*.ts", "*.tsx"], 11 | "rules": {} 12 | }, 13 | { 14 | "files": ["*.js", "*.jsx"], 15 | "rules": {} 16 | }, 17 | { 18 | "files": ["*.json"], 19 | "parser": "jsonc-eslint-parser", 20 | "rules": { 21 | "@nx/dependency-checks": "error" 22 | } 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /libs/testing/README.md: -------------------------------------------------------------------------------- 1 | # testing 2 | 3 | This library was generated with [Nx](https://nx.dev). 4 | 5 | ## Building 6 | 7 | Run `nx build testing` to build the library. 8 | 9 | ## Running unit tests 10 | 11 | Run `nx test testing` to execute the unit tests via [Jest](https://jestjs.io). 12 | -------------------------------------------------------------------------------- /libs/testing/jest.config.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | export default { 3 | displayName: 'testing', 4 | preset: '../../jest.preset.js', 5 | testEnvironment: 'node', 6 | transform: { 7 | '^.+\\.[tj]s$': ['ts-jest', { tsconfig: '/tsconfig.spec.json' }], 8 | }, 9 | moduleFileExtensions: ['ts', 'js', 'html'], 10 | coverageDirectory: '../../coverage/libs/testing', 11 | }; 12 | -------------------------------------------------------------------------------- /libs/testing/marker.js: -------------------------------------------------------------------------------- 1 | module.exports = { marker }; 2 | 3 | function marker(word) { 4 | return word; 5 | } 6 | -------------------------------------------------------------------------------- /libs/testing/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@nestjs-mod-fullstack/testing", 3 | "version": "1.3.0", 4 | "private": true, 5 | "dependencies": { 6 | "tslib": "^2.3.0" 7 | }, 8 | "type": "commonjs", 9 | "main": "./src/index.js", 10 | "typings": "./src/index.d.ts", 11 | "i18n": [ 12 | { 13 | "scope": "testing", 14 | "path": "src/i18n", 15 | "strategy": "join" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /libs/testing/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './lib/utils/generate-random-user'; 2 | export * from './lib/utils/get-error-data'; 3 | export * from './lib/utils/get-random-external-headers'; 4 | export * from './lib/utils/get-urls'; 5 | export * from './lib/utils/rest-client-helper'; 6 | export * from './lib/utils/supabase.service'; 7 | -------------------------------------------------------------------------------- /libs/testing/src/lib/utils/get-error-data.ts: -------------------------------------------------------------------------------- 1 | import { AxiosError } from 'axios'; 2 | 3 | export function getErrorData(err: AxiosError) { 4 | return (err as AxiosError).isAxiosError && err.response 5 | ? (err.response.data as T) 6 | : null; 7 | } 8 | -------------------------------------------------------------------------------- /libs/testing/src/lib/utils/get-random-external-headers.ts: -------------------------------------------------------------------------------- 1 | import { randomUUID } from 'crypto'; 2 | 3 | export function getRandomExternalHeaders() { 4 | return { 5 | ['x-external-user-id']: randomUUID(), 6 | ['x-external-tenant-id']: randomUUID(), 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /libs/testing/src/lib/utils/get-urls.ts: -------------------------------------------------------------------------------- 1 | import { get } from 'env-var'; 2 | 3 | export function getUrls() { 4 | return { 5 | serverUrl: get('E2E_SERVER_URL').required().asString(), 6 | internalServerUrl: get('E2E_INTERNAL_SERVER_URL').asString(), 7 | authorizerUrl: get( 8 | 'SERVER_AUTHORIZER_AUTHORIZER_AUTHORIZER_URL' 9 | ).asString(), 10 | minioUrl: 11 | get('SERVER_AUTHORIZER_MINIO_URL').asString() || 12 | get('SERVER_SUPABASE_MINIO_URL').asString() || 13 | get('SERVER_SSO_MINIO_URL').asString(), 14 | supabaseUrl: get('SERVER_SUPABASE_SUPABASE_URL').asString(), 15 | supabaseKey: get('SERVER_SUPABASE_SUPABASE_KEY').asString(), 16 | ssoUrl: get('SERVER_SSO_SSO_URL').asString(), 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /libs/testing/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "forceConsistentCasingInFileNames": true, 6 | "strict": true, 7 | "noImplicitOverride": true, 8 | "noPropertyAccessFromIndexSignature": true, 9 | "noImplicitReturns": true, 10 | "noFallthroughCasesInSwitch": true 11 | }, 12 | "files": [], 13 | "include": [], 14 | "references": [ 15 | { 16 | "path": "./tsconfig.lib.json" 17 | }, 18 | { 19 | "path": "./tsconfig.spec.json" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /libs/testing/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../dist/out-tsc", 5 | "module": "commonjs", 6 | "types": ["jest", "node"] 7 | }, 8 | "include": [ 9 | "jest.config.ts", 10 | "src/**/*.test.ts", 11 | "src/**/*.spec.ts", 12 | "src/**/*.d.ts" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /migrations.json: -------------------------------------------------------------------------------- 1 | { 2 | "migrations": [ 3 | { 4 | "cli": "nx", 5 | "version": "20.4.0-beta.1", 6 | "requires": { "@angular/core": ">=19.1.0" }, 7 | "description": "Update the @angular/cli package version to ~19.1.0.", 8 | "factory": "./src/migrations/update-20-4-0/update-angular-cli", 9 | "package": "@nx/angular", 10 | "name": "update-angular-cli-version-19-1-0" 11 | }, 12 | { 13 | "cli": "nx", 14 | "version": "20.5.0-beta.5", 15 | "requires": { "@angular/core": ">=19.2.0" }, 16 | "description": "Update the @angular/cli package version to ~19.2.0.", 17 | "factory": "./src/migrations/update-20-5-0/update-angular-cli", 18 | "package": "@nx/angular", 19 | "name": "update-angular-cli-version-19-2-0" 20 | } 21 | ] 22 | } 23 | -------------------------------------------------------------------------------- /openapitools.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json", 3 | "spaces": 2, 4 | "generator-cli": { 5 | "version": "7.11.0" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/bridge/bridge-react-webpack-plugin/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "i18n": [ 3 | { 4 | "scope": "bridge-react-webpack-plugin", 5 | "path": "src/i18n", 6 | "strategy": "join" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /packages/runtime-tools/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "i18n": [ 3 | { 4 | "scope": "runtime-tools", 5 | "path": "src/i18n", 6 | "strategy": "join" 7 | } 8 | ] 9 | } -------------------------------------------------------------------------------- /rucken.json: -------------------------------------------------------------------------------- 1 | { 2 | "makeTsList": { 3 | "indexFileName": "index", 4 | "excludes": [ 5 | "test-setup.ts", 6 | "*node_modules*", 7 | "*public_api.ts*", 8 | "*.spec*", 9 | "environment*", 10 | "*e2e*", 11 | "*.stories.ts", 12 | "*.d.ts", 13 | "fake", 14 | "*test-setup.ts*" 15 | ] 16 | } 17 | } -------------------------------------------------------------------------------- /steps/2025-02-12/create-supabase-project-and-link-it-to-vercel.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nestjs-mod/nestjs-mod-fullstack/35968011fe966ae5b2e4b50e3ecefa5432e3a834/steps/2025-02-12/create-supabase-project-and-link-it-to-vercel.mp4 -------------------------------------------------------------------------------- /transloco.config.js: -------------------------------------------------------------------------------- 1 | const { readFileSync, existsSync } = require('fs'); 2 | module.exports = existsSync('transloco.config.json') 3 | ? JSON.parse(readFileSync('transloco.config.json').toString()) 4 | : {}; 5 | --------------------------------------------------------------------------------