@taon-dev/session 21.0.240 → 21.0.241
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERIFIED-BUILD-DATA.jsonc +3 -3
- package/browser/fesm2022/session-browser.mjs +1 -1
- package/browser/fesm2022/session-browser.mjs.map +1 -1
- package/browser/package.json +1 -1
- package/browser/types/session-browser.d.ts +1 -1
- package/browser-prod/fesm2022/session-browser-prod.mjs +1 -1
- package/browser-prod/fesm2022/session-browser-prod.mjs.map +1 -1
- package/browser-prod/package.json +1 -1
- package/browser-prod/types/session-browser-prod.d.ts +1 -1
- package/full-dts/build-info._auto-generated_.d.ts +1 -1
- package/full-dts/taon-audit-events/taon-audit-events-api.service.d.ts +8 -0
- package/full-dts/taon-audit-events/taon-audit-events.abstract.context.d.ts +7 -7
- package/full-dts/taon-auth-context/taon-auth-context.abstract.context.d.ts +7 -7
- package/full-dts/taon-authorization-backoffice/taon-authorization-backoffice.component.d.ts +5 -0
- package/full-dts/taon-authorization-backoffice/taon-authorization-backoffice.routes.d.ts +7 -0
- package/full-dts/taon-group/taon-group-api.service.d.ts +16 -0
- package/full-dts/taon-group/taon-group-backoffice/taon-group-backoffice.component.d.ts +10 -0
- package/full-dts/taon-group/taon-group-backoffice/taon-group-backoffice.routes.d.ts +7 -0
- package/full-dts/taon-group/taon-group-backoffice/taon-group-details.component.d.ts +29 -0
- package/full-dts/taon-group/taon-group-chooser/taon-group-chooser.component.d.ts +18 -0
- package/full-dts/taon-group/taon-group.abstract.context.d.ts +7 -7
- package/full-dts/taon-notification/taon-notification-api.service.d.ts +8 -0
- package/full-dts/taon-notification/taon-notification.abstract.context.d.ts +7 -7
- package/full-dts/taon-permission/taon-permission-api.service.d.ts +10 -0
- package/full-dts/taon-permission/taon-permission-backoffice/taon-permission-backoffice.component.d.ts +10 -0
- package/full-dts/taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes.d.ts +7 -0
- package/full-dts/taon-permission/taon-permission-backoffice/taon-permission-details.component.d.ts +6 -0
- package/full-dts/taon-permission/taon-permission-chooser/taon-permission-chooser.component.d.ts +19 -0
- package/full-dts/taon-permission/taon-permission-view-edit/taon-permission-view-edit.component.d.ts +16 -0
- package/full-dts/taon-permission/taon-permission.abstract.context.d.ts +7 -7
- package/full-dts/taon-role/taon-role-api.service.d.ts +13 -0
- package/full-dts/taon-role/taon-role-backoffice/taon-role-backoffice.component.d.ts +10 -0
- package/full-dts/taon-role/taon-role-backoffice/taon-role-backoffice.routes.d.ts +7 -0
- package/full-dts/taon-role/taon-role-backoffice/taon-role-details.component.d.ts +29 -0
- package/full-dts/taon-role/taon-role-chooser/taon-role-chooser.component.d.ts +19 -0
- package/full-dts/taon-role/taon-role.abstract.context.d.ts +7 -7
- package/full-dts/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.d.ts +24 -0
- package/full-dts/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.routes.d.ts +7 -0
- package/full-dts/taon-session/taon-profile/taon-profile.abstract.context.d.ts +7 -7
- package/full-dts/taon-session/taon-profile/taon-profile.api.service.d.ts +9 -0
- package/full-dts/taon-session/taon-profile/taon-profile.config.service.d.ts +6 -0
- package/full-dts/taon-session/taon-session/social-buttons/google-login-register-button.component.d.ts +7 -0
- package/full-dts/taon-session/taon-session/taon-session-profile/taon-session-profile.component.d.ts +67 -0
- package/full-dts/taon-session/taon-session/taon-session.component.d.ts +61 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-backoffice-details-page.component.d.ts +4 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-backoffice-details.resolver.d.ts +23 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-backoffice-navigation.service.d.ts +8 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-session-backoffice.api.service.d.ts +7 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-session-backoffice.component.d.ts +11 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-session-backoffice.routes.d.ts +7 -0
- package/full-dts/taon-session/taon-session-backoffice/taon-session-details.component.d.ts +17 -0
- package/full-dts/taon-session/taon-session-button/taon-session-button.component.d.ts +16 -0
- package/full-dts/taon-session/taon-session.abstract.context.d.ts +7 -7
- package/full-dts/taon-session/taon-session.api.service.d.ts +24 -0
- package/full-dts/taon-session/taon-session.config.service.d.ts +6 -0
- package/full-dts/taon-session/taon-session.state.service.d.ts +74 -0
- package/full-dts/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component.d.ts +10 -0
- package/full-dts/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes.d.ts +7 -0
- package/full-dts/taon-session-user/taon-session-backoffice-users/taon-session-user-details.component.d.ts +37 -0
- package/full-dts/taon-session-user/taon-session-user-api.service.d.ts +5 -0
- package/full-dts/taon-session-user/taon-session-user.abstract.context.d.ts +7 -7
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/index._auto-generated_.d.ts +43 -1
- package/lib/migrations/1790328479283_initial.d.ts +4 -4
- package/lib/package.json +1 -1
- package/lib/taon-audit-events/index.d.ts +2 -1
- package/lib/taon-audit-events/taon-audit-events.abstract.context.d.ts +8 -8
- package/lib/taon-auth-context/taon-auth-context.abstract.context.d.ts +8 -8
- package/lib/taon-authorization-backoffice/index.d.ts +1 -1
- package/lib/taon-authorization-backoffice/index.js +2 -2
- package/lib/taon-group/index.d.ts +2 -1
- package/lib/taon-group/taon-group-backoffice/index.d.ts +1 -1
- package/lib/taon-group/taon-group-backoffice/index.js +2 -2
- package/lib/taon-group/taon-group-chooser/index.d.ts +1 -1
- package/lib/taon-group/taon-group-chooser/index.js +2 -2
- package/lib/taon-group/taon-group.abstract.context.d.ts +8 -8
- package/lib/taon-notification/index.d.ts +2 -1
- package/lib/taon-notification/taon-notification.abstract.context.d.ts +8 -8
- package/lib/taon-permission/index.d.ts +2 -1
- package/lib/taon-permission/taon-permission-backoffice/index.d.ts +1 -1
- package/lib/taon-permission/taon-permission-backoffice/index.js +2 -2
- package/lib/taon-permission/taon-permission-chooser/index.d.ts +1 -1
- package/lib/taon-permission/taon-permission-chooser/index.js +2 -2
- package/lib/taon-permission/taon-permission-view-edit/index.d.ts +1 -1
- package/lib/taon-permission/taon-permission-view-edit/index.js +2 -2
- package/lib/taon-permission/taon-permission.abstract.context.d.ts +8 -8
- package/lib/taon-role/index.d.ts +2 -1
- package/lib/taon-role/taon-role-backoffice/index.d.ts +1 -1
- package/lib/taon-role/taon-role-backoffice/index.js +2 -2
- package/lib/taon-role/taon-role-chooser/index.d.ts +1 -1
- package/lib/taon-role/taon-role-chooser/index.js +2 -2
- package/lib/taon-role/taon-role.abstract.context.d.ts +8 -8
- package/lib/taon-session/index.d.ts +4 -1
- package/lib/taon-session/taon-profile/index.d.ts +3 -1
- package/lib/taon-session/taon-profile/taon-profile-picture/index.d.ts +1 -1
- package/lib/taon-session/taon-profile/taon-profile-picture/index.js +2 -2
- package/lib/taon-session/taon-profile/taon-profile.abstract.context.d.ts +8 -8
- package/lib/taon-session/taon-session/index.d.ts +1 -1
- package/lib/taon-session/taon-session/index.js +2 -2
- package/lib/taon-session/taon-session/taon-session-profile/index.d.ts +1 -1
- package/lib/taon-session/taon-session/taon-session-profile/index.js +2 -2
- package/lib/taon-session/taon-session-backoffice/index.d.ts +5 -1
- package/lib/taon-session/taon-session-button/index.d.ts +1 -1
- package/lib/taon-session/taon-session-button/index.js +2 -2
- package/lib/taon-session/taon-session.abstract.context.d.ts +8 -8
- package/lib/taon-session/taon-session.controller.d.ts +2 -2
- package/lib/taon-session/taon-session.validators.d.ts +3 -1
- package/lib/taon-session-user/index.d.ts +2 -1
- package/lib/taon-session-user/taon-session-backoffice-users/index.d.ts +1 -1
- package/lib/taon-session-user/taon-session-backoffice-users/index.js +2 -2
- package/lib/taon-session-user/taon-session-user.abstract.context.d.ts +8 -8
- package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib-esm/lib/build-info._auto-generated_.js +1 -1
- package/lib-esm/lib/index._auto-generated_.d.ts +43 -1
- package/lib-esm/lib/migrations/1790328479283_initial.d.ts +4 -4
- package/lib-esm/lib/taon-audit-events/index.d.ts +2 -1
- package/lib-esm/lib/taon-audit-events/taon-audit-events.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-auth-context/taon-auth-context.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-authorization-backoffice/index.d.ts +1 -1
- package/lib-esm/lib/taon-authorization-backoffice/index.js +1 -1
- package/lib-esm/lib/taon-group/index.d.ts +2 -1
- package/lib-esm/lib/taon-group/taon-group-backoffice/index.d.ts +1 -1
- package/lib-esm/lib/taon-group/taon-group-backoffice/index.js +1 -1
- package/lib-esm/lib/taon-group/taon-group-chooser/index.d.ts +1 -1
- package/lib-esm/lib/taon-group/taon-group-chooser/index.js +1 -1
- package/lib-esm/lib/taon-group/taon-group.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-notification/index.d.ts +2 -1
- package/lib-esm/lib/taon-notification/taon-notification.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-permission/index.d.ts +2 -1
- package/lib-esm/lib/taon-permission/taon-permission-backoffice/index.d.ts +1 -1
- package/lib-esm/lib/taon-permission/taon-permission-backoffice/index.js +1 -1
- package/lib-esm/lib/taon-permission/taon-permission-chooser/index.d.ts +1 -1
- package/lib-esm/lib/taon-permission/taon-permission-chooser/index.js +1 -1
- package/lib-esm/lib/taon-permission/taon-permission-view-edit/index.d.ts +1 -1
- package/lib-esm/lib/taon-permission/taon-permission-view-edit/index.js +1 -1
- package/lib-esm/lib/taon-permission/taon-permission.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-role/index.d.ts +2 -1
- package/lib-esm/lib/taon-role/taon-role-backoffice/index.d.ts +1 -1
- package/lib-esm/lib/taon-role/taon-role-backoffice/index.js +1 -1
- package/lib-esm/lib/taon-role/taon-role-chooser/index.d.ts +1 -1
- package/lib-esm/lib/taon-role/taon-role-chooser/index.js +1 -1
- package/lib-esm/lib/taon-role/taon-role.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-session/index.d.ts +4 -1
- package/lib-esm/lib/taon-session/taon-profile/index.d.ts +3 -1
- package/lib-esm/lib/taon-session/taon-profile/taon-profile-picture/index.d.ts +1 -1
- package/lib-esm/lib/taon-session/taon-profile/taon-profile-picture/index.js +1 -1
- package/lib-esm/lib/taon-session/taon-profile/taon-profile.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-session/taon-session/index.d.ts +1 -1
- package/lib-esm/lib/taon-session/taon-session/index.js +1 -1
- package/lib-esm/lib/taon-session/taon-session/taon-session-profile/index.d.ts +1 -1
- package/lib-esm/lib/taon-session/taon-session/taon-session-profile/index.js +1 -1
- package/lib-esm/lib/taon-session/taon-session-backoffice/index.d.ts +5 -1
- package/lib-esm/lib/taon-session/taon-session-button/index.d.ts +1 -1
- package/lib-esm/lib/taon-session/taon-session-button/index.js +1 -1
- package/lib-esm/lib/taon-session/taon-session.abstract.context.d.ts +8 -8
- package/lib-esm/lib/taon-session/taon-session.controller.d.ts +2 -2
- package/lib-esm/lib/taon-session/taon-session.validators.d.ts +3 -1
- package/lib-esm/lib/taon-session-user/index.d.ts +2 -1
- package/lib-esm/lib/taon-session-user/taon-session-backoffice-users/index.d.ts +1 -1
- package/lib-esm/lib/taon-session-user/taon-session-backoffice-users/index.js +1 -1
- package/lib-esm/lib/taon-session-user/taon-session-user.abstract.context.d.ts +8 -8
- package/lib-prod/build-info._auto-generated_.d.ts +1 -1
- package/lib-prod/build-info._auto-generated_.js +1 -1
- package/lib-prod/package.json +1 -1
- package/lib-prod/taon-authorization-backoffice/index.d.ts +1 -1
- package/lib-prod/taon-authorization-backoffice/index.js +1 -1
- package/lib-prod/taon-group/taon-group-backoffice/index.d.ts +1 -1
- package/lib-prod/taon-group/taon-group-backoffice/index.js +1 -1
- package/lib-prod/taon-group/taon-group-chooser/index.d.ts +1 -1
- package/lib-prod/taon-group/taon-group-chooser/index.js +1 -1
- package/lib-prod/taon-permission/taon-permission-backoffice/index.d.ts +1 -1
- package/lib-prod/taon-permission/taon-permission-backoffice/index.js +1 -1
- package/lib-prod/taon-permission/taon-permission-chooser/index.d.ts +1 -1
- package/lib-prod/taon-permission/taon-permission-chooser/index.js +1 -1
- package/lib-prod/taon-permission/taon-permission-view-edit/index.d.ts +1 -1
- package/lib-prod/taon-permission/taon-permission-view-edit/index.js +1 -1
- package/lib-prod/taon-role/taon-role-backoffice/index.d.ts +1 -1
- package/lib-prod/taon-role/taon-role-backoffice/index.js +1 -1
- package/lib-prod/taon-role/taon-role-chooser/index.d.ts +1 -1
- package/lib-prod/taon-role/taon-role-chooser/index.js +1 -1
- package/lib-prod/taon-session/taon-profile/taon-profile-picture/index.d.ts +1 -1
- package/lib-prod/taon-session/taon-profile/taon-profile-picture/index.js +1 -1
- package/lib-prod/taon-session/taon-session/index.d.ts +1 -1
- package/lib-prod/taon-session/taon-session/index.js +1 -1
- package/lib-prod/taon-session/taon-session/taon-session-profile/index.d.ts +1 -1
- package/lib-prod/taon-session/taon-session/taon-session-profile/index.js +1 -1
- package/lib-prod/taon-session/taon-session-button/index.d.ts +1 -1
- package/lib-prod/taon-session/taon-session-button/index.js +1 -1
- package/lib-prod/taon-session-user/taon-session-backoffice-users/index.d.ts +1 -1
- package/lib-prod/taon-session-user/taon-session-backoffice-users/index.js +1 -1
- package/package.json +1 -1
- package/websql/fesm2022/session-websql.mjs +1 -1
- package/websql/fesm2022/session-websql.mjs.map +1 -1
- package/websql/package.json +1 -1
- package/websql/types/session-websql.d.ts +1 -1
- package/websql-prod/fesm2022/session-websql-prod.mjs +1 -1
- package/websql-prod/fesm2022/session-websql-prod.mjs.map +1 -1
- package/websql-prod/package.json +1 -1
- package/websql-prod/types/session-websql-prod.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-browser.mjs","sources":["../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-role.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-permission.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-permission.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/1790328479283_initial.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/migrations_index._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/index.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.angular-node-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.docs-webapp.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.electron-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.mobile-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.npm-lib-and-cli-tool.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.vscode-plugin.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/build-info._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/my-organization-proj.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.kv.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-identity.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-group.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-group.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-identity.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.config.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.state.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.validators.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-navigation.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-details.resolver.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-button/taon-session-button.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-button/taon-session-button.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/start-cli.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification-recipient.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-chooser/taon-role-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-chooser/taon-role-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-chooser/taon-group-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-chooser/taon-group-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-view-edit/taon-permission-view-edit.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-view-edit/taon-permission-view-edit.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-chooser/taon-permission-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-chooser/taon-permission-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.config.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.kv.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-user-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-user-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-details-page.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/index._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/index.ts","../../../tmp-libs-for-dist/session/projects/session/src/session-browser.ts"],"sourcesContent":["//#region imports\nimport {\n Column,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonGroupEntity } from '../taon-group/taon-group.entity';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonGroupRoleEntity',\n createTable: true,\n})\nexport class TaonGroupRoleEntity extends TaonBaseAbstractEntity<TaonGroupRoleEntity> {\n/* */\n/* */\n \n groupId!: number;\n\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n group!: TaonGroupEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\nimport { TaonGroupRoleEntity } from './taon-group-role.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonGroupRoleRepository',\n})\nexport class TaonGroupRoleRepository extends TaonBaseRepository<TaonGroupRoleEntity> {\n entityClassResolveFn: () => typeof TaonGroupRoleEntity = () =>\n TaonGroupRoleEntity;\n\n /**\n * TODO remove this demo example method\n */\n //#region API / count entites with even id\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / get roles for group id\n async getRolesForGroupId(groupId: number): Promise<TaonRoleEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / assign role to group\n async assignRoleToGroup(\n groupId: number,\n roleId: number,\n ): Promise<TaonGroupRoleEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / unassign role from group\n async unassignRoleFromGroup(groupId: number, roleId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\nimport {\n Column,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonRolePermissionEntity',\n createTable: true,\n})\nexport class TaonRolePermissionEntity extends TaonBaseAbstractEntity<TaonRolePermissionEntity> {\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n \n permissionId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n permission!: TaonPermissionEntity;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\n\nimport { TaonRolePermissionEntity } from './taon-role-permission.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonRolePermissionRepository',\n})\nexport class TaonRolePermissionRepository extends TaonBaseRepository<TaonRolePermissionEntity> {\n entityClassResolveFn: () => typeof TaonRolePermissionEntity = () => TaonRolePermissionEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async getPermissionsForRoleId(\n roleId: number,\n ): Promise<TaonPermissionEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async assignPermissionToRole(\n roleId: number,\n permissionId: number,\n ): Promise<TaonRolePermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async unassignPermissionFromRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { TaonGroupEntity, TaonGroupRepository } from '../index';\nimport {\n TaonPermissionEntity,\n TaonPermissionRepository,\n} from '../index';\nimport { TaonRoleRepository } from '../index';\nimport { Taon, TaonBaseMigration, TaonMigration } from 'taon/browser';\nimport { QueryRunner } from 'taon-typeorm/browser';\n\nimport { TaonGroupRoleRepository } from '../taon-group/taon-group-role.repository';\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\n//#region Migration class for context \"SessionContext\"\n@TaonMigration({\n className: 'SessionContext_1790328479283_initial',\n})\nexport class SessionContext_1790328479283_initial extends TaonBaseMigration {\n groupRepo = this.injectCustomRepo(TaonGroupRepository);\n\n roleRepo = this.injectCustomRepo(TaonRoleRepository);\n\n permissionRepo = this.injectCustomRepo(TaonPermissionRepository);\n\n groupRoleRepo = this.injectCustomRepo(TaonGroupRoleRepository);\n\n rolePermissionRepo = this.injectCustomRepo(TaonRolePermissionRepository);\n\n //#region up\n async up(queryRunner: QueryRunner): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region helpers\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n //#endregion\n\n //#region down\n async down(queryRunner: QueryRunner): Promise<void> {\n // I'd normally remove by stable `code`,\n // NOT clearDatabase().\n }\n //#endregion\n}\n//#endregion\n","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { SessionContext_1790328479283_initial } from './1790328479283_initial';\n// THIS FILE IS GENERATED - DO NOT MODIFY\nexport const MIGRATIONS_CLASSES_FOR_SessionContext = {\n /* 25-09-2026 11:27:59 */ SessionContext_1790328479283_initial,\n};\n// THIS FILE IS GENERATED - DO NOT MODIFY\n","//@ts-nocheck\nexport * from './migrations_index._auto-generated_';\n","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_ANGULAR_NODE_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_ANGULAR_NODE_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_ANGULAR_NODE_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_ANGULAR_NODE_APP_RELEASE_TARGET_ARTIFACT = 'angular-node-app';\n// release.envName\nexport const ENV_ANGULAR_NODE_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_ANGULAR_NODE_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_ANGULAR_NODE_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_ANGULAR_NODE_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_ANGULAR_NODE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_ANGULAR_NODE_APP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_ANGULAR_NODE_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_ANGULAR_NODE_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_ANGULAR_NODE_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_ANGULAR_NODE_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_ANGULAR_NODE_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_ANGULAR_NODE_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_ANGULAR_NODE_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_ANGULAR_NODE_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_ANGULAR_NODE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_ANGULAR_NODE_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_ANGULAR_NODE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_ANGULAR_NODE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_ANGULAR_NODE_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_ANGULAR_NODE_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_ANGULAR_NODE_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_ANGULAR_NODE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_DOCS_WEBAPP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_DOCS_WEBAPP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_DOCS_WEBAPP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_DOCS_WEBAPP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_DOCS_WEBAPP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_DOCS_WEBAPP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_DOCS_WEBAPP_RELEASE_TARGET_ARTIFACT = 'docs-webapp';\n// release.envName\nexport const ENV_DOCS_WEBAPP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_DOCS_WEBAPP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_DOCS_WEBAPP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_DOCS_WEBAPP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_DOCS_WEBAPP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_DOCS_WEBAPP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_DOCS_WEBAPP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_DOCS_WEBAPP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_DOCS_WEBAPP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_DOCS_WEBAPP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_DOCS_WEBAPP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_DOCS_WEBAPP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_DOCS_WEBAPP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_DOCS_WEBAPP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_DOCS_WEBAPP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_DOCS_WEBAPP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_DOCS_WEBAPP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_DOCS_WEBAPP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_DOCS_WEBAPP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_DOCS_WEBAPP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_DOCS_WEBAPP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_DOCS_WEBAPP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_DOCS_WEBAPP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_DOCS_WEBAPP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_DOCS_WEBAPP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_DOCS_WEBAPP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_DOCS_WEBAPP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_DOCS_WEBAPP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_DOCS_WEBAPP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_DOCS_WEBAPP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_DOCS_WEBAPP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_DOCS_WEBAPP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_DOCS_WEBAPP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_ELECTRON_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_ELECTRON_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_ELECTRON_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// build.ssr\nexport const ENV_ELECTRON_APP_BUILD_SSR = false;\n// loading.preAngularBootstrap.background\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_ELECTRON_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_ELECTRON_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_ELECTRON_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_ELECTRON_APP_RELEASE_TARGET_ARTIFACT = 'electron-app';\n// release.envName\nexport const ENV_ELECTRON_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_ELECTRON_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_ELECTRON_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_ELECTRON_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_ELECTRON_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_ELECTRON_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_ELECTRON_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_ELECTRON_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_ELECTRON_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_ELECTRON_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_ELECTRON_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_ELECTRON_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_ELECTRON_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_ELECTRON_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.websql\nexport const ENV_ELECTRON_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_ELECTRON_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_ELECTRON_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_ELECTRON_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_ELECTRON_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_ELECTRON_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_ELECTRON_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_ELECTRON_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_ELECTRON_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_ELECTRON_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_ELECTRON_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_ELECTRON_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_ELECTRON_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_ELECTRON_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_ELECTRON_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_ELECTRON_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_ELECTRON_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_ELECTRON_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_ELECTRON_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_ELECTRON_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_ELECTRON_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_ELECTRON_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_ELECTRON_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_ELECTRON_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_ELECTRON_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_ELECTRON_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_ELECTRON_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_ELECTRON_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_ELECTRON_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_ELECTRON_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_ELECTRON_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_ELECTRON_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_ELECTRON_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_MOBILE_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_MOBILE_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_MOBILE_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_MOBILE_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_MOBILE_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_MOBILE_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_MOBILE_APP_RELEASE_TARGET_ARTIFACT = 'mobile-app';\n// release.envName\nexport const ENV_MOBILE_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_MOBILE_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_MOBILE_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_MOBILE_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_MOBILE_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_MOBILE_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_MOBILE_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_MOBILE_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_MOBILE_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_MOBILE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_MOBILE_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_MOBILE_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_MOBILE_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_MOBILE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_MOBILE_APP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_MOBILE_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_MOBILE_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_MOBILE_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_MOBILE_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_MOBILE_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_MOBILE_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_MOBILE_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_MOBILE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_MOBILE_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_MOBILE_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_MOBILE_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_MOBILE_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_MOBILE_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_MOBILE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_MOBILE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_MOBILE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_MOBILE_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_MOBILE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_MOBILE_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_MOBILE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_MOBILE_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_MOBILE_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_MOBILE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_MOBILE_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_MOBILE_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_MOBILE_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_MOBILE_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_MOBILE_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_MOBILE_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_MOBILE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_MOBILE_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_MOBILE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_MOBILE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_MOBILE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_MOBILE_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_MOBILE_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_MOBILE_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_MOBILE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_MOBILE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_MOBILE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TARGET_ARTIFACT = 'npm-lib-and-cli-tool';\n// release.envName\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_NPM_LIB_AND_CLI_TOOL_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_END = undefined;\n// container.start\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_NPM_LIB_AND_CLI_TOOL_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_NPM_LIB_AND_CLI_TOOL_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_NPM_LIB_AND_CLI_TOOL_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_NPM_LIB_AND_CLI_TOOL_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_VSCODE_PLUGIN_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_VSCODE_PLUGIN_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_VSCODE_PLUGIN_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_VSCODE_PLUGIN_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_VSCODE_PLUGIN_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_VSCODE_PLUGIN_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_VSCODE_PLUGIN_RELEASE_TARGET_ARTIFACT = 'vscode-plugin';\n// release.envName\nexport const ENV_VSCODE_PLUGIN_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_VSCODE_PLUGIN_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_VSCODE_PLUGIN_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_VSCODE_PLUGIN_CONTAINER_END = undefined;\n// container.start\nexport const ENV_VSCODE_PLUGIN_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_VSCODE_PLUGIN_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_VSCODE_PLUGIN_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_VSCODE_PLUGIN_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_VSCODE_PLUGIN_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_VSCODE_PLUGIN_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_VSCODE_PLUGIN_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_VSCODE_PLUGIN_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_VSCODE_PLUGIN_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_VSCODE_PLUGIN_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_VSCODE_PLUGIN_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_VSCODE_PLUGIN_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_VSCODE_PLUGIN_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_VSCODE_PLUGIN_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_VSCODE_PLUGIN_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_VSCODE_PLUGIN_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_VSCODE_PLUGIN_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_VSCODE_PLUGIN_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_VSCODE_PLUGIN_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_VSCODE_PLUGIN_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_VSCODE_PLUGIN_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_VSCODE_PLUGIN_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_VSCODE_PLUGIN_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_VSCODE_PLUGIN_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_VSCODE_PLUGIN_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_VSCODE_PLUGIN_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_VSCODE_PLUGIN_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_VSCODE_PLUGIN_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_VSCODE_PLUGIN_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_FRAMEWORK_CLI_NAME = 'tnp';\n/**\n * This value can be change in taon.jsonc (appId)\n */\nexport const APP_ID = 'com.domain.example.session';\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_BASE_HREF = '';\n/**\n * This value can be change in taon.jsonc (overrideNpmName)\n */\nexport const PROJECT_NPM_NAME = '@taon-dev/session';\n/**\n * Taon version from you project taon.json\n */\nexport const CURRENT_PACKAGE_TAON_VERSION = 'v21';\n/**\n * Autogenerated by current cli tool. Use *tnp release* to bump version.\n */\nexport const CURRENT_PACKAGE_VERSION = '21.0.240';\n\nexport namespace TAON_CLOUDFLARE_WORKERS_URLS {\n\texport const CwCustomSeoni4B382 = 'https://cw-custom-seoni-4b382.darekf77.workers.dev';\n}\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n ","export function myOrgProj() {\n\n}\n","//#region imports\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonGroupRoleEntity } from '../taon-group/taon-group-role.entity';\nimport { TaonSessionUserGroupEntity } from '../taon-session-user/taon-session-user-group.entity';\n\nimport { TaonGroupDefaultsValues } from './taon-group.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonGroupEntity',\n createTable: true,\n})\nexport class TaonGroupEntity extends TaonBaseAbstractEntity<TaonGroupEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n userGroups!: TaonSessionUserGroupEntity[];\n\n/* */\n/* */\n \n groupRoles!: TaonGroupRoleEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonGroupEntity } from './taon-group.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonGroupRepository',\n})\nexport class TaonGroupRepository extends TaonBaseRepository<TaonGroupEntity> {\n entityClassResolveFn: () => typeof TaonGroupEntity = () => TaonGroupEntity;\n\n //#region API / get groups for user id\n async getGroupsForUserId(\n userId: number | string,\n ): Promise<TaonGroupEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonRolePermissionEntity } from '../taon-role/taon-role-permission.entity';\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonPermissionDefaultsValues } from './taon-permission.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonPermissionEntity',\n createTable: true,\n})\nexport class TaonPermissionEntity extends TaonBaseAbstractEntity<TaonPermissionEntity> {\n /**\n * Examples:\n *\n * user.read\n * user.write\n * project.deploy\n * billing.invoice.read\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n rolePermissions!: TaonRolePermissionEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonPermissionEntity } from './taon-permission.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonPermissionRepository',\n})\nexport class TaonPermissionRepository extends TaonBaseRepository<TaonPermissionEntity> {\n entityClassResolveFn: () => typeof TaonPermissionEntity = () =>\n TaonPermissionEntity;\n\n //#region methods / get permissions for user id\n async getPermissionsForUserId(\n userId: number | string,\n ): Promise<TaonPermissionEntity[]> {\n // TODO\n return [];\n }\n //#endregion\n\n //#region methods / update description\n async updateDescription(\n permissionId: number,\n description: string,\n ): Promise<TaonPermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonSessionUserRoleEntity } from '../taon-session-user/taon-session-user-role.entity';\nimport { TaonRolePermissionEntity } from '../taon-role/taon-role-permission.entity';\nimport { TaonGroupRoleEntity } from '../taon-group/taon-group-role.entity';\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonRoleDefaultsValues } from './taon-role.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonRoleEntity',\n createTable: true,\n})\nexport class TaonRoleEntity extends TaonBaseAbstractEntity<TaonRoleEntity> {\n /**\n * Example:\n * admin\n * editor\n * billing-manager\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n userRoles!: TaonSessionUserRoleEntity[];\n\n/* */\n/* */\n \n groupRoles!: TaonGroupRoleEntity[];\n\n/* */\n/* */\n \n rolePermissions!: TaonRolePermissionEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonRoleEntity } from './taon-role.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonRoleRepository',\n})\nexport class TaonRoleRepository extends TaonBaseRepository<TaonRoleEntity> {\n entityClassResolveFn: () => typeof TaonRoleEntity = () => TaonRoleEntity;\n\n async getRolesForUserId(userId: number | string): Promise<TaonRoleEntity[]> {\n // TODO\n return [];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaonBaseClass, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { CoreModels, GlobalStorage, UtilsOs, _ } from 'tnp-core/browser';\n\n//#region config classes\n\n//#region config classes / cookies\nconst isProduction =\n !GlobalStorage.get('TAON_LOCAL_DEV') &&\n (UtilsOs.isRunningInDocker() || UtilsOs.isRunningInCloudflareWorker());\n\nexport class TaonSessionCookiesConfig extends TaonBaseClass {\n declare public ACCESS_TOKEN_SECRET: string;\n\n declare public REFRESH_TOKEN_SECRET: string;\n\n declare public ACCESS_TOKEN_EXPIRES: string;\n\n declare public REFRESH_TOKEN_EXPIRES_SECONDS: number;\n\n declare public accessTokenCookieName: string;\n\n declare public refreshTokenCookieName: string;\n\n declare public sameSite: 'lax' | 'strict' | 'none';\n\n declare public secure: boolean;\n\n declare public httpOnly: boolean;\n\n constructor() {\n super();\n/* */\n/* */\n/* */\n \n this.ACCESS_TOKEN_EXPIRES = '15m';\n this.REFRESH_TOKEN_EXPIRES_SECONDS = 60 * 60 * 24 * 7;\n this.accessTokenCookieName = 'taon_access_token';\n this.refreshTokenCookieName = 'taon_refresh_token';\n this.sameSite = 'lax';\n\n this.secure = isProduction;\n\n this.httpOnly = true;\n }\n}\n//#endregion\n\n//#region config classes / social login config\nexport class TaonSessionSocialLoginConfig extends TaonBaseClass {\n declare public google: {\n enabled?: boolean;\n googleClientId?: string;\n googleSecret?: string;\n };\n\n declare public facebook: {\n enabled?: boolean;\n facebookClientId?: string;\n };\n\n declare public microsoft: {\n enabled?: boolean;\n microsoftClientId?: string;\n };\n\n declare public apple: {\n enabled?: boolean;\n appleClientId?: string;\n };\n\n declare public github: {\n enabled?: boolean;\n githubClientId?: string;\n };\n\n constructor() {\n super();\n this.google = {\n enabled: false,\n };\n this.facebook = {\n enabled: false,\n };\n this.microsoft = {\n enabled: false,\n };\n this.apple = {\n enabled: false,\n };\n }\n\n public get isAnySocialLoginEnabled(): boolean {\n return !!(\n this.google.enabled ||\n this.microsoft.enabled ||\n this.facebook.enabled ||\n this.apple.enabled\n );\n }\n}\n//#endregion\n\n//#region config classes / password requirements\nexport class TaonSessionPasswordRequirementsConfig {\n declare public minLength: number;\n\n declare public maxLength: number;\n\n declare public requireLowercase: boolean;\n\n declare public requireUppercase: boolean;\n\n declare public requireNumber: boolean;\n\n declare public requireSpecialCharacter: boolean;\n\n declare public specialCharacters: string;\n\n constructor() {\n this.minLength = 8;\n this.maxLength = 128;\n\n this.requireLowercase = false;\n this.requireUppercase = false;\n this.requireNumber = false;\n this.requireSpecialCharacter = false;\n\n this.specialCharacters = '!@#$%^&*';\n }\n}\n//#endregion\n\n//#region config classes / registration requirements\nexport class TaonSessionRegistrationConfig {\n /**\n * ⌛ TODO in progress\n */\n declare public enabled: boolean;\n\n /**\n * ⌛ TODO in progress\n */\n declare public requireEmailConfirmation: boolean;\n\n /**\n * ⌛ TODO in progress\n * Registration allowed only when user has\n * invitation code / registration password.\n */\n declare public requireRegistrationPassword: boolean;\n\n /**\n * ⌛ TODO in progress\n */\n declare public allowDuplicateEmail: boolean;\n\n constructor() {\n this.enabled = true;\n this.requireEmailConfirmation = false;\n this.requireRegistrationPassword = true;\n this.allowDuplicateEmail = false;\n }\n}\n//#endregion\n\n//#region config classes / login config\nexport class TaonSessionLoginConfig extends TaonBaseClass {\n declare public diableLoginByEmail: boolean;\n\n declare public defaultEmail?: string;\n\n declare public defaultPassword?: string;\n\n declare public linkToDashboard: string;\n\n declare public displayDashboardButton: boolean;\n\n /**\n * TODO\n * Whether FE may check whether email exists\n * before showing password/register screen.\n */\n // declare public exposeEmailExistence: boolean;\n\n /**\n * TODO\n */\n // declare public rememberMe: boolean;\n\n constructor() {\n super();\n this.diableLoginByEmail = false;\n this.linkToDashboard = '/';\n this.displayDashboardButton = true;\n // this.exposeEmailExistence = true;\n // this.rememberMe = true;\n if (isProduction) {\n delete this.defaultEmail;\n delete this.defaultPassword;\n }\n }\n}\n//#endregion\n\n//#region config classes / check if human config\nexport class TaonSessionCheckIfHumanConfig {\n declare public duringLoginRegisterEmail: boolean;\n\n declare public duringRegistrationPassword: boolean;\n\n declare public duringLoginPassword: boolean;\n\n declare public duringPasswordReset: boolean;\n\n constructor() {\n this.duringLoginRegisterEmail = false;\n this.duringRegistrationPassword = false;\n this.duringLoginPassword = false;\n\n this.duringPasswordReset = false;\n }\n}\n//#endregion\n\n//#region config classes / sessions\nexport class TaonSessionSessionsConfig {\n /**\n * Multiple devices / browsers may stay logged in.\n */\n declare public allowMultipleSessions: boolean;\n\n /**\n * 0 = unlimited\n */\n declare public maxSessionsPerUser: number;\n\n /**\n * Update last activity timestamp.\n */\n declare public trackActivity: boolean;\n\n /**\n * Optional idle timeout.\n * 0 = disabled\n */\n declare public idleTimeoutSeconds: number;\n\n constructor() {\n this.allowMultipleSessions = true;\n this.maxSessionsPerUser = 0;\n this.trackActivity = true;\n this.idleTimeoutSeconds = 0;\n }\n}\n//#endregion\n\n//#region config classes / password recovery config\nexport class TaonSessionPasswordRecoveryConfig {\n declare public enabled: boolean;\n\n declare public tokenExpiresSeconds: number;\n\n declare public invalidateExistingSessionsAfterReset: boolean;\n\n constructor() {\n this.enabled = true;\n this.tokenExpiresSeconds = 60 * 60; // 1h\n this.invalidateExistingSessionsAfterReset = true;\n }\n}\n//#endregion\n\n//#region config classes / email confirmation config\nexport class TaonSessionEmailConfirmationConfig {\n declare public enabled: boolean;\n\n declare public tokenExpiresSeconds: number;\n\n declare public allowResend: boolean;\n\n declare public resendCooldownSeconds: number;\n\n constructor() {\n this.enabled = true;\n this.tokenExpiresSeconds = 60 * 60 * 24; // 24h\n this.allowResend = true;\n this.resendCooldownSeconds = 60;\n }\n}\n//#endregion\n\n//#region config classes / security config\nexport class TaonSessionSecurityConfig {\n /**\n * Logout all sessions after password change.\n */\n declare public invalidateSessionsAfterPasswordChange: boolean;\n\n /**\n * Rotate refresh token after successful refresh.\n */\n declare public rotateRefreshTokens: boolean;\n\n /**\n * Detect reuse of already rotated refresh tokens.\n */\n declare public detectRefreshTokenReuse: boolean;\n\n constructor() {\n this.invalidateSessionsAfterPasswordChange = true;\n this.rotateRefreshTokens = true;\n this.detectRefreshTokenReuse = true;\n }\n}\n//#endregion\n\n//#region config classes / rate limit config\nexport class TaonSessionRateLimitConfig {\n declare public maxAttempts: number;\n\n declare public windowSeconds: number;\n\n constructor(maxAttempts: number, windowSeconds: number) {\n this.maxAttempts = maxAttempts;\n this.windowSeconds = windowSeconds;\n }\n}\n//#endregion\n\n//#region config classes / rate limits config\nexport class TaonSessionRateLimitsConfig {\n declare public loginAttempts: TaonSessionRateLimitConfig;\n\n declare public passwordReset: TaonSessionRateLimitConfig;\n\n declare public emailConfirmationResend: TaonSessionRateLimitConfig;\n\n constructor() {\n this.loginAttempts = new TaonSessionRateLimitConfig(10, 60);\n\n this.passwordReset = new TaonSessionRateLimitConfig(5, 60 * 60);\n\n this.emailConfirmationResend = new TaonSessionRateLimitConfig(5, 60 * 60);\n }\n}\n//#endregion\n\n//#endregion\n\nexport type TaonSessionConfig = Omit<\n CoreModels.DeepPartial<TaonSessionProvider>,\n | 'ctx'\n | '_'\n | 'getOriginalPrototype'\n | 'getOriginalConstructor'\n | '__endpoint_context__'\n>;\n\n@TaonProvider({\n className: 'TaonSessionProvider',\n})\nexport class TaonSessionProvider extends TaonBaseProvider {\n /**\n * Production means here - it runs on real server\n */\n isProduction = isProduction;\n\n superUsersEmails: string[] = [];\n\n /**\n * Resolve social accounts by verified email as well as provider identity.\n */\n linkSocialAccountEmail = false;\n\n cookies = new TaonSessionCookiesConfig();\n\n login = new TaonSessionLoginConfig();\n\n socialLogin = new TaonSessionSocialLoginConfig();\n\n // passwordRequirements = new TaonSessionPasswordRequirementsConfig();\n\n // registration = new TaonSessionRegistrationConfig();\n\n // checkIfHuman = new TaonSessionCheckIfHumanConfig();\n\n // socialLogin = new TaonSessionSocialLoginConfig();\n\n // sessions = new TaonSessionSessionsConfig();\n\n // passwordRecovery = new TaonSessionPasswordRecoveryConfig();\n\n // emailConfirmation = new TaonSessionEmailConfirmationConfig();\n\n // security = new TaonSessionSecurityConfig();\n\n // rateLimits = new TaonSessionRateLimitsConfig();\n\n async _() {\n // TODO @UNCOMMENT disabled login by email when not on localhost\n const originUrl = this.ctx.frontendHostUri;\n const isLocalhost =\n originUrl.hostname === 'localhost' ||\n originUrl.hostname === '127.0.0.1' ||\n originUrl.hostname === '[::1]';\n if (!isLocalhost) {\n this.login.diableLoginByEmail = true;\n }\n }\n\n clone(): TaonSessionConfig {\n return {\n isProduction: this.isProduction,\n linkSocialAccountEmail: this.linkSocialAccountEmail,\n cookies: this.cookies.clone(),\n login: this.login.clone(),\n socialLogin: this.socialLogin.clone(),\n };\n }\n}\n","//#region imports\nimport {\n Column,\n CreateDateColumn,\n DateTimeColumn,\n Index,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../taon-session-user/taon-session-user.models';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionEntity',\n createTable: true,\n})\nexport class TaonSessionEntity extends TaonBaseAbstractEntity<TaonSessionEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n identityId?: number;\n\n/* */\n/* */\n \n authenticationProvider?: TaonSessionIdentityProvider;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n /**\n * Store HASH of session token, not raw token.\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n tokenHash!: string;\n\n/* */\n/* */\n \n userAgent?: string;\n\n/* */\n/* */\n \n ip?: string;\n\n/* */\n/* */\n \n deviceName?: string;\n\n/* */\n/* */\n \n lastActivityAt?: Date;\n\n/* */\n/* */\n \n expiresAt!: Date;\n\n/* */\n/* */\n \n revokedAt?: Date;\n\n/* */\n/* */\n \n revokeReason?: string;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\n\nimport type express from 'express';\nimport { TaonBaseKvRepository, TaonRepository } from 'taon/browser';\nimport { UtilsJwt } from 'tnp-core/browser';\n\nimport { TaonSessionProvider } from './taon-session.provider';\n\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionKvRepository',\n})\nexport class TaonSessionKvRepository extends TaonBaseKvRepository<\n Record<\n string,\n {\n userId: number;\n expiresAt: number;\n sessionId?: number;\n }\n >\n> {\n taonSessionProvider = this.injectProvider(TaonSessionProvider);\n\n //#region create access token\n public async createAccessToken(\n userId: number,\n sessionId?: number,\n ): Promise<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region create refresh token\n public async createRefreshToken(\n userId: number,\n sessionId?: number,\n ): Promise<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region set auth cookies\n public setAuthCookies(\n res: express.Response,\n accessToken: string,\n refreshToken: string,\n ): void {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region clear auth cookies\n public clearAuthCookies(res: express.Response): void {\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get token from request\n public getTokenFromRequest(req: express.Request): string | null {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport {\n getStatusCode,\n getStatusText,\n HttpStatusEnum,\n Taon,\n TaonBaseRepository,\n TaonRepository,\n TaonServerMiddlewareInterceptOptions,\n} from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { UtilsJwt } from 'tnp-core/browser';\nimport { TaonSessionProvider } from './taon-session.provider';\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionRepository',\n})\nexport class TaonSessionRepository extends TaonBaseRepository<TaonSessionEntity> {\n //#region fields & getters\n entityClassResolveFn: () => typeof TaonSessionEntity = () =>\n TaonSessionEntity;\n\n private readonly taonSessionKvRepository = this.injectKvRepository(\n TaonSessionKvRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n //#endregion\n\n //#region create session entity\n async createSession(\n partialSessino: Partial<TaonSessionEntity>,\n ): Promise<TaonSessionEntity> {\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n async requireActiveSession(\n sessionId: number,\n userId: number,\n ): Promise<TaonSessionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async touchSession(\n sessionId: number,\n userId: number,\n refresh = false,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async revokeSession(sessionId: number, userId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#region get session by id\n async getSessionBy(userId: number | string): Promise<TaonSessionEntity> {\n // TODO not only id ?\n // let session = new TaonSessionEntity().clone(partialSessino);\n // session = await this.save(session);\n return null;\n }\n //#endregion\n\n //#region throw if not authroized\n async throwIfNotAuthenticated({\n req,\n res,\n next,\n }: Pick<TaonServerMiddlewareInterceptOptions, 'req' | 'res'> &\n Partial<\n Pick<TaonServerMiddlewareInterceptOptions, 'next'>\n >): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import {\n BooleanColumn,\n Column,\n CreateDateColumn,\n Index,\n JoinColumn,\n ManyToOne,\n TaonBaseAbstractEntity,\n TaonEntity,\n UpdateDateColumn,\n} from 'taon/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\n\nimport { TaonSessionIdentityProvider } from './taon-session-user.models';\n\n@TaonEntity({\n className: 'TaonSessionUserIdentityEntity',\n createTable: true,\n})\n/* */\n/* */\n \nexport class TaonSessionUserIdentityEntity extends TaonBaseAbstractEntity<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n /**\n * PASSWORD / GOOGLE / MICROSOFT / APPLE / FACEBOOK\n */\n/* */\n/* */\n \n provider!: TaonSessionIdentityProvider;\n\n /**\n * PASSWORD:\n * normalized email\n *\n * GOOGLE:\n * Google's stable `sub`, NOT email\n *\n * Other OAuth providers:\n * stable provider-specific account id\n */\n/* */\n/* */\n \n providerUserId!: string;\n\n /**\n * Convenience/contact email reported by this identity.\n *\n * Do NOT use this as the primary OAuth identity key.\n */\n/* */\n/* */\n \n email?: string;\n\n /**\n * Only PASSWORD identities have this.\n *\n * Never store plaintext here.\n */\n/* */\n/* */\n \n passwordHash?: string;\n\n/* */\n/* */\n \n isEmailVerified!: boolean;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n updatedAt!: Date;\n}\n","//#region imports\nimport {\n BooleanColumn,\n Column,\n CreateDateColumn,\n CustomColumn,\n Index,\n OneToMany,\n String45Column,\n String500Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n UpdateDateColumn,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionEntity } from '../taon-session/taon-session.entity';\nimport { TaonSessionUserGroupEntity } from '../taon-session-user/taon-session-user-group.entity';\nimport { TaonSessionUserIdentityEntity } from '../taon-session-user/taon-session-user-identity.entity';\nimport { TaonSessionUserRoleEntity } from '../taon-session-user/taon-session-user-role.entity';\n\n//#endregion\n\n@TaonEntity<TaonSessionUserEntity>({\n className: 'TaonSessionUserEntity',\n createTable: true,\n defaultModelMapping: () => ({\n '': TaonSessionUserEntity,\n identities: [TaonSessionUserIdentityEntity],\n }),\n})\nexport class TaonSessionUserEntity extends TaonBaseAbstractEntity<TaonSessionUserEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n username?: string;\n\n/* */\n/* */\n \n isActive!: boolean;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n updatedAt!: Date;\n\n/* */\n/* */\n \n sessions!: TaonSessionEntity[];\n\n/* */\n/* */\n \n identities!: TaonSessionUserIdentityEntity[];\n\n/* */\n/* */\n \n userGroups!: TaonSessionUserGroupEntity[];\n\n/* */\n/* */\n \n userRoles!: TaonSessionUserRoleEntity[];\n}\n","//#region imports\nimport { getStatusCode, HttpStatusEnum, Taon, TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { QueryFailedError } from 'taon-typeorm/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\n\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session-user/taon-session-user.repository.ts', {} as any);\n\n@TaonRepository({\n className: 'TaonSessionUserRepository',\n})\nexport class TaonSessionUserRepository extends TaonBaseRepository<TaonSessionUserEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserEntity = () =>\n TaonSessionUserEntity;\n\n async createUser(): Promise<TaonSessionUserEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n normalizeUsername(username: string): string {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async isUsernameAvailable(username: string, userId: number): Promise<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async changeUsername(userId: number, username: string): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async getUserById(\n userId: number | string,\n ): Promise<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","//#region imports\n\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { TaonGroupRoleRepository } from '../taon-group/taon-group-role.repository';\n\nimport { TaonBaseCustomRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonGroupRepository } from '../taon-group/taon-group.repository';\nimport { TaonPermissionRepository } from '../taon-permission/taon-permission.repository';\nimport { TaonRoleRepository } from '../taon-role/taon-role.repository';\nimport { TaonSessionProvider } from '../taon-session/taon-session.provider';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserRepository } from '../taon-session-user/taon-session-user.repository';\n\nimport {\n TaonAuthContextEntity,\n TaonAuthorizationSchema,\n} from './taon-auth-context.entity';\n\n//#endregion\n\n//#region models\n\ntype EnumLike<T extends string> = Record<string, T>;\n\ntype RelationSelection<T extends string> = '*' | T[];\n\ntype GroupAndRolesTree<GROUP extends string, ROLE extends string> = Partial<\n Record<GROUP, RelationSelection<ROLE>>\n>;\n\ntype RolesAndPermissionsTree<\n ROLE extends string,\n PERMISSION extends string,\n> = Partial<Record<ROLE, RelationSelection<PERMISSION>>>;\n\nexport interface PersistAuthorizationTreeOptions<\n GROUP extends string,\n ROLE extends string,\n PERMISSION extends string,\n> {\n enums: {\n groups: EnumLike<GROUP>;\n roles: EnumLike<ROLE>;\n permissions: EnumLike<PERMISSION>;\n };\n\n tree: {\n groupAndRoles?: GroupAndRolesTree<GROUP, ROLE>;\n\n rolesAndPermissions?: RolesAndPermissionsTree<ROLE, PERMISSION>;\n };\n}\n\n//#endregion\n\n@TaonRepository({\n className: 'TaonAuthContextRepository',\n})\nexport class TaonAuthContextRepository<\n AUTH extends TaonAuthorizationSchema,\n> extends TaonBaseCustomRepository {\n //#region fields & getters\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n private readonly taonGroupRoleRepository = this.injectCustomRepo(\n TaonGroupRoleRepository,\n );\n\n private readonly taonRolePermissionRepository = this.injectCustomRepo(\n TaonRolePermissionRepository,\n );\n\n private readonly taonGroupRepository =\n this.injectCustomRepo(TaonGroupRepository);\n\n private readonly taonPermissionRepository = this.injectCustomRepo(\n TaonPermissionRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n\n private readonly taonRoleRepository =\n this.injectCustomRepo(TaonRoleRepository);\n\n //#endregion\n\n //#region API / get context\n\n public async getContext(\n userId?: number | string,\n ): Promise<TaonAuthContextEntity<AUTH>> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n\n //#region API / persist tree\n\n public async clearRolesGroupPermissions(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#region API / persist tree\n public async persistTree(\n options: PersistAuthorizationTreeOptions<\n AUTH['group'],\n AUTH['role'],\n AUTH['permission']\n >,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#endregion\n\n //#region methods / get or create group\n private async getOrCreateGroup(code: AUTH['group'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods / get or create role\n private async getOrCreateRole(code: AUTH['role'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods / get or create permission\n private async getOrCreatePermission(code: AUTH['permission'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region assign role\n\n private async assignRole(\n group: Awaited<ReturnType<typeof this.getOrCreateGroup>>,\n role: Awaited<ReturnType<typeof this.getOrCreateRole>>,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n\n //#region assign permission\n\n private async assignPermission(\n role: Awaited<ReturnType<typeof this.getOrCreateRole>>,\n permission: Awaited<ReturnType<typeof this.getOrCreatePermission>>,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n}\n","//#region imports\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n ExpressRequest,\n ExpressResponse,\n getStatusCode,\n HttpStatusEnum,\n Models,\n Taon,\n TaonStorageObject,\n TaonUploadedFile,\n} from 'taon/browser';\nimport { TaonController, TaonBaseStorageController } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuthContextRepository } from '../../taon-auth-context/taon-auth-context.repository';\nimport { TaonSessionUserRepository } from '../../taon-session-user/taon-session-user.repository';\nimport { TaonSessionRepository } from '../taon-session.repository';\n\nimport { TaonProfileModels } from './taon-profile.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile.controller.ts', {} as any);\n\n@TaonController<TaonProfileController>({\n className: 'TaonProfileController',\n allowedMethods: ['exists', 'download', 'delete', 'uploadFormDataToServer'],\n})\nexport class TaonProfileController extends TaonBaseStorageController<\n TaonProfileModels.PictureQuery\n> {\n //#region storage hooks\n\n private readonly taonSessionRepository = this.injectCustomRepo(TaonSessionRepository);\n\n private readonly authRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly userRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n classConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonProfileController>): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected async handleUploadFiles(\n bodyFormDataFiles: TaonUploadedFile[],\n queryParams?: TaonProfileModels.PictureQuery,\n req?: ExpressRequest<any>,\n res?: ExpressResponse<any>,\n ): Promise<TaonStorageObject[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async afterFileUploadHook(\n fileObject?: TaonStorageObject,\n queryParams?: TaonProfileModels.PictureQuery,\n ): Promise<void> {\n // Authentication / authorization / profile persistence can be added here.\n }\n\n buildStorageDownloadUrl(options: {\n req: any;\n key: string;\n private: boolean;\n token?: string;\n }): string {\n throw new Error('TODO');\n }\n\n async createStorageDownloadToken(options: {\n key: string;\n expiresAt: number;\n }): Promise<string> {\n throw new Error('TODO');\n }\n\n //#endregion\n}\n","export namespace TaonProfileModels {\n export const PROFILE_PICTURE_FILE_NAME = 'profile-picture';\n\n export interface PictureQuery {\n userId?: number;\n }\n\n export function pictureKey(userId?: number | string): string {\n return userId === undefined\n ? PROFILE_PICTURE_FILE_NAME\n : `${userId}__${PROFILE_PICTURE_FILE_NAME}`;\n }\n\n export const PROFILE_PICTURE_ACCEPT =\n 'image/png,image/jpeg,image/webp,image/gif';\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonProfileController } from './taon-profile.controller';\nimport { TaonProfileModels } from './taon-profile.models';\n//#endregion\n\n@Injectable()\nexport class TaonProfileApiService extends TaonBaseAngularService {\n //#region controllers\n\n public readonly taonProfileController = this.injectController(\n TaonProfileController,\n );\n\n //#endregion\n\n //#region methods\n\n async hasProfilePicture(userId?: number | string): Promise<boolean> {\n const response = await this.taonProfileController\n .exists(TaonProfileModels.pictureKey(userId))\n .request();\n\n return response.body.json;\n }\n\n async getProfilePictureBlob(\n userId?: number | string,\n ): Promise<Blob | undefined> {\n if (!(await this.hasProfilePicture(userId))) {\n return undefined;\n }\n\n const response = await this.taonProfileController\n .download(TaonProfileModels.pictureKey(userId))\n .request();\n\n const blobFromPicture = await response.body.native.blob();\n // console.log({ blobFromPicture });\n return blobFromPicture;\n }\n\n async uploadProfilePicture(\n file: File,\n userId?: number | string,\n ): Promise<void> {\n const renamedFile = new File(\n [file],\n TaonProfileModels.PROFILE_PICTURE_FILE_NAME,\n {\n type: file.type,\n lastModified: file.lastModified,\n },\n );\n\n const formData = new FormData();\n\n formData.append('file', renamedFile);\n\n await this.taonProfileController\n .uploadFormDataToServer(\n formData,\n userId === undefined ? undefined : { userId: Number(userId) },\n )\n .request();\n }\n\n async deleteProfilePicture(userId?: number | string): Promise<void> {\n await this.taonProfileController\n .delete(TaonProfileModels.pictureKey(userId))\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n inject,\n signal,\n forwardRef,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonProfileApiService } from '../taon-profile.api.service';\nimport { TaonProfileModels } from '../taon-profile.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.ts', {} as any);\n\n@Component({\n selector: 'taon-profile-picture',\n templateUrl: './taon-profile-picture.component.html',\n styleUrls: ['./taon-profile-picture.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule],\n providers: [forwardRef(() => TaonProfileApiService)],\n})\nexport class TaonProfilePictureComponent implements OnDestroy, OnInit, OnChanges {\n //#region inject\n\n @Input() hideButtons: boolean = false;\n\n @Input() userId?: number | string;\n\n @Input() readOnly = false;\n\n public readonly t = t.for(this);\n\n private readonly taonProfileApiService = inject(TaonProfileApiService);\n\n //#endregion\n\n //#region state\n\n readonly pictureUrl = signal<string | undefined>(undefined);\n\n readonly loading = signal(false);\n\n readonly uploading = signal(false);\n\n readonly accept = TaonProfileModels.PROFILE_PICTURE_ACCEPT;\n\n private objectUrl?: string;\n\n private destroyed = false;\n\n private loadVersion = 0;\n\n //#endregion\n\n //#region lifecycle\n\n ngOnInit(): void {\n void this.loadProfilePicture();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.userId && !changes.userId.firstChange) {\n void this.loadProfilePicture();\n }\n }\n\n //#endregion\n\n //#region methods\n\n async loadProfilePicture(): Promise<void> {\n this.loading.set(true);\n const version = ++this.loadVersion;\n this.clearPictureUrl();\n\n try {\n const blob = await this.taonProfileApiService.getProfilePictureBlob(\n this.userId,\n );\n\n if (!this.destroyed && version === this.loadVersion) {\n this.setPictureBlob(blob);\n }\n } finally {\n if (version === this.loadVersion) {\n this.loading.set(false);\n }\n }\n }\n\n async fileSelected(event: Event): Promise<void> {\n if (this.readOnly) {\n throw new Error('Profile picture is read-only');\n }\n const input = event.target as HTMLInputElement;\n\n const file = input.files?.[0];\n\n if (!file) {\n return;\n }\n\n this.uploading.set(true);\n\n try {\n await this.taonProfileApiService.uploadProfilePicture(file, this.userId);\n\n await this.loadProfilePicture();\n } finally {\n this.uploading.set(false);\n\n // Allows selecting the same file again.\n input.value = '';\n }\n }\n\n async removePicture(): Promise<void> {\n if (this.readOnly) {\n throw new Error('Profile picture is read-only');\n }\n this.uploading.set(true);\n const userId = this.userId;\n\n try {\n await this.taonProfileApiService.deleteProfilePicture(userId);\n\n if (!this.destroyed && userId === this.userId) {\n ++this.loadVersion;\n this.loading.set(false);\n this.clearPictureUrl();\n }\n } finally {\n this.uploading.set(false);\n }\n }\n\n private setPictureBlob(blob: Blob | undefined): void {\n this.clearPictureUrl();\n\n if (!blob) {\n return;\n }\n\n this.objectUrl = URL.createObjectURL(blob);\n\n this.pictureUrl.set(this.objectUrl);\n }\n\n private clearPictureUrl(): void {\n if (this.objectUrl) {\n URL.revokeObjectURL(this.objectUrl);\n\n this.objectUrl = undefined;\n }\n\n this.pictureUrl.set(undefined);\n }\n\n //#endregion\n\n //#region destroy\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.clearPictureUrl();\n }\n\n //#endregion\n}\n","<div class=\"profile-picture\">\n <label\n class=\"profile-picture__avatar\"\n [class.profile-picture__avatar--disabled]=\"uploading() || readOnly\">\n @if (pictureUrl()) {\n <img\n class=\"profile-picture__image\"\n [src]=\"pictureUrl()\"\n alt=\"Profile picture\" />\n } @else {\n <mat-icon class=\"profile-picture__placeholder\">account_circle</mat-icon>\n <!-- <svg\n class=\"profile-picture__placeholder\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\">\n <path\n d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4Zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4Z\" />\n </svg> -->\n }\n\n @if (loading() || uploading()) {\n <div class=\"profile-picture__loading\">...</div>\n }\n\n <input\n class=\"profile-picture__input\"\n type=\"file\"\n [accept]=\"accept\"\n [disabled]=\"uploading() || readOnly\"\n (change)=\"fileSelected($event)\" />\n </label>\n\n @if (!hideButtons && !readOnly) {\n <div class=\"profile-picture__actions\">\n <label class=\"profile-picture__button\">\n {{\n pictureUrl()\n ? t.gettext('Change picture')\n : t.gettext('Upload picture')\n }}\n\n <input\n class=\"profile-picture__input\"\n type=\"file\"\n [accept]=\"accept\"\n [disabled]=\"uploading()\"\n (change)=\"fileSelected($event)\" />\n </label>\n\n @if (pictureUrl()) {\n <button\n class=\"profile-picture__button\"\n type=\"button\"\n [disabled]=\"uploading()\"\n (click)=\"removePicture()\">\n {{ t.gettext('Remove') }}\n </button>\n }\n </div>\n }\n</div>\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n Models,\n TaonPaginationQuery,\n} from 'taon/browser';\nimport { Entity } from 'taon-typeorm/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\n\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\n//#endregion\n\n@TaonController<TaonSessionUserController>({\n className: 'TaonSessionUserController',\n allowedMethods: ['paginationQuery', 'getBy'],\n})\nexport class TaonSessionUserController extends TaonBaseCrudController<\n TaonSessionUserEntity,\n {},\n TaonSessionUserController\n> {\n entityClassResolveFn: () => typeof TaonSessionUserEntity = () =>\n TaonSessionUserEntity;\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n classConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n if (['paginationQuery', 'getBy'].includes(methodConfig.methodName)) {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n }\n\n @GET()\n getBy(\n @Query('id') id: number | string,\n ): Models.Http.Response<TaonSessionUserEntity> {\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected paginationQueryMethods(): (keyof TaonSessionUserController)[] {\n return ['customPaginationQuery'] as any;\n }\n\n @GET()\n paginationQuery(\n queryJson?: TaonPaginationQuery<any>,\n ): Models.Http.Response<TaonSessionUserEntity[]> {\n return async (req, res) => {\n queryJson.callQueryMethod = 'customPaginationQuery';\n const data = await super.paginationQuery(queryJson)(req, res);\n return data;\n };\n }\n\n protected async customPaginationQuery(\n query: TaonPaginationQuery<TaonSessionUserController>,\n ): Promise<[TaonSessionUserEntity[], number]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionUserController } from './taon-session-user.controller';\nimport type { TaonSessionUserEntity } from './taon-session-user.entity';\n\n@Injectable()\nexport class TaonSessionUserApiService extends TaonBaseAngularService {\n public taonSessionUserController = this.injectController(\n TaonSessionUserController,\n );\n\n // public get allMyEntities$(): Observable<TaonSessionUser[]> {\n // return this.taonSessionUserController.getAll().request!().observable.pipe(\n // map(res => res.body?.json),\n // );\n // }\n\n // public helloWorld(user): Observable<string> {\n // return this.taonSessionUserController.helloWord(user).request!().observable.pipe(\n // map(res => res.responseText as string),\n // );\n // }\n}\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonGroupEntity } from '../taon-group/taon-group.entity';\nimport {\n Column,\n CreateDateColumn,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionUserGroupEntity',\n createTable: true,\n})\nexport class TaonSessionUserGroupEntity extends TaonBaseAbstractEntity<TaonSessionUserGroupEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n groupId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n group!: TaonGroupEntity;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonSessionUserGroupEntity } from './taon-session-user-group.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionUserGroupRepository',\n})\nexport class TaonSessionUserGroupRepository extends TaonBaseRepository<TaonSessionUserGroupEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserGroupEntity = () =>\n TaonSessionUserGroupEntity;\n\n async assignGroupToUser(\n userId: number,\n groupId: number,\n ): Promise<TaonSessionUserGroupEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async unassignGroupFromUser(userId: number, groupId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Translation } from '@taon-dev/i18n/browser';\nimport { getStatusCode, HttpStatusEnum, Taon, TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport type { EntityManager } from 'taon-typeorm/browser';\nimport { UtilsPasswords } from 'tnp-helpers/browser';\n\nimport { TaonSessionProvider } from '../taon-session/taon-session.provider';\n\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from './taon-session-user.models';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\n\nconst t = Translation.for('src/lib/taon-session-user/taon-session-user-identity.repository.ts', {} as any);\n\n@TaonRepository({\n className: 'TaonSessionUserIdentityRepository',\n})\nexport class TaonSessionUserIdentityRepository extends TaonBaseRepository<TaonSessionUserIdentityEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserIdentityEntity = () =>\n TaonSessionUserIdentityEntity;\n\n private readonly userRepository = this.injectCustomRepo(TaonSessionUserRepository);\n\n private readonly sessionProvider = this.injectProvider(TaonSessionProvider);\n\n normalizeEmail(email: string): string {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findUserIdByEmail(\n email: string,\n manager: EntityManager = this.connection.manager,\n ): Promise<number | undefined> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async resolveSocialIdentity(\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n email: string,\n isEmailVerified: boolean,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async registerPasswordUser(email: string, password: string): Promise<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async connectPasswordIdentity(\n userId: number,\n email: string,\n password: string,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async createPasswordIdentity(\n userId: number,\n email: string,\n password: string,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n private passwordIdentity(\n userId: number,\n normalizedEmail: string,\n passwordHash: string,\n isEmailVerified: boolean,\n ): TaonSessionUserIdentityEntity {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findPasswordIdentity(\n email: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async verifyPassword(\n email: string,\n password: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findSocialIdentity(\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async createSocialIdentity(\n userId: number,\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n email?: string,\n isEmailVerified = false,\n manager: EntityManager = this.connection.manager,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n JoinColumn,\n ManyToOne,\n String45Column,\n String500Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionUserRoleEntity',\n createTable: true,\n})\nexport class TaonSessionUserRoleEntity extends TaonBaseAbstractEntity<TaonSessionUserRoleEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonSessionUserMiddleware',\n})\nexport class TaonSessionUserMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonSessionUserProvider',\n})\nexport class TaonSessionUserProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\n\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserProvider } from './taon-session-user.provider';\n//#endregion\n\n@TaonSubscriber<TaonSessionUserSubscriber>({\n className: 'TaonSessionUserSubscriber',\n allowedEvents: ['afterUpdate'],\n})\nexport class TaonSessionUserSubscriber extends TaonBaseSubscriberForEntity {\n taonSessionUserProvider = this.injectProvider(TaonSessionUserProvider);\n\n listenTo(): typeof TaonSessionUserEntity {\n return TaonSessionUserEntity;\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonSessionUserGroupEntity } from './taon-session-user-group.entity';\nimport { TaonSessionUserGroupRepository } from './taon-session-user-group.repository';\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserIdentityRepository } from './taon-session-user-identity.repository';\nimport { TaonSessionUserRoleEntity } from './taon-session-user-role.entity';\nimport { TaonSessionUserController } from './taon-session-user.controller';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserMiddleware } from './taon-session-user.middleware';\nimport { TaonSessionUserProvider } from './taon-session-user.provider';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\nimport { TaonSessionUserSubscriber } from './taon-session-user.subscriber';\n//#endregion\n\nexport const TaonSessionUserContext = createContext(() => ({\n contextName: 'TaonSessionUserContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonSessionUserEntity,\n TaonSessionUserGroupEntity,\n TaonSessionUserRoleEntity,\n TaonSessionUserIdentityEntity,\n },\n controllers: { TaonSessionUserController },\n repositories: {\n TaonSessionUserRepository,\n TaonSessionUserIdentityRepository,\n TaonSessionUserGroupRepository,\n },\n providers: { TaonSessionUserProvider },\n middlewares: { TaonSessionUserMiddleware },\n subscribers: { TaonSessionUserSubscriber },\n}));\n","import type { TaonSessionUserEntity } from './taon-session-user.entity';\n\nexport const TaonSessionUserDefaultsValues = {} as Partial<TaonSessionUserEntity>;\n","export enum TaonSessionUserState {\n Active = 'active',\n Inactive = 'inactive',\n}\n\nexport enum TaonSessionIdentityProvider {\n PASSWORD = 'PASSWORD',\n\n GOOGLE = 'GOOGLE',\n MICROSOFT = 'MICROSOFT',\n APPLE = 'APPLE',\n FACEBOOK = 'FACEBOOK',\n GITHUB = 'GITHUB',\n}\n","export namespace TaonSessionUserUtils {\n export function generateRandomUsername(): string {\n return `user${crypto.randomUUID().replace(/-/g, '').slice(0, 12)}`;\n }\n}\n","//#region imports\nimport {\n Taon,\n TaonAdditionalMiddlewareMethodInfo,\n TaonBaseMiddleware,\n TaonMiddleware,\n TaonServerMiddlewareInterceptOptions,\n} from 'taon/browser';\nimport { _, UtilsJwt } from 'tnp-core/browser';\n\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionRepository } from './taon-session.repository';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonSessionMiddleware',\n})\nexport class TaonSessionMiddleware extends TaonBaseMiddleware {\n taonSessionRepository = this.injectCustomRepo(TaonSessionRepository);\n\n //#region intercept server method\n async interceptServerMethod(\n data: TaonServerMiddlewareInterceptOptions,\n ): Promise<void> {\n/* */\n/* */\n \n }\n //#endregion\n}\n","//#region imports\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n TaonAuthContextEntity,\n TaonAuthContextRepository,\n} from '../index';\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n TaonBaseController,\n Body,\n POST,\n HttpStatusEnum,\n getStatusCode,\n getStatusText,\n} from 'taon/browser';\nimport { HttpStatusCodeMap } from 'taon/browser';\nimport { FindOneOptions, FindOptionsWhere } from 'taon-typeorm/browser';\nimport { _, UtilsJwt } from 'tnp-core/browser';\n\nimport {\n TaonSessionIdentityProvider,\n TaonSessionUserEntity,\n} from '../taon-session-user';\nimport { TaonSessionUserIdentityEntity } from '../taon-session-user/taon-session-user-identity.entity';\nimport { TaonSessionUserIdentityRepository } from '../taon-session-user/taon-session-user-identity.repository';\nimport { TaonSessionUserRepository } from '../taon-session-user/taon-session-user.repository';\n\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionMiddleware } from './taon-session.middleware';\nimport { TaonLoginData } from './taon-session.models';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionRepository } from './taon-session.repository';\nimport { TaonSessionUtils } from './taon-session.utils';\n\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-session.controller.ts', {} as any);\n\n@TaonController<TaonSessionController>({\n className: 'TaonSessionController',\n allowedMethods: [\n //#region allowed method\n 'createUser',\n 'userExists',\n 'getCurrentUserId',\n 'login',\n 'logout',\n 'refresh',\n 'context',\n 'emptyContext',\n 'connectIdentity',\n 'disconnectIdentity',\n 'usernameAvailable',\n 'changeUsername',\n //#endregion\n ],\n})\nexport class TaonSessionController extends TaonBaseController {\n //#region fields & getters\n private readonly taonSessionKvRepository = this.injectKvRepository(\n TaonSessionKvRepository,\n );\n\n private readonly taonSessionUserIdentityRepository = this.injectCustomRepo(\n TaonSessionUserIdentityRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonAuthContextRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n //#endregion\n\n //#region createUser\n @POST()\n createUser(\n @Body('email') email: string,\n @Body('password') password: string,\n ): Taon.Response<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region userExists\n @POST()\n userExists(@Body('email') email: string): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get google identity\n private async getGoogleIdentity(data: TaonLoginData): Promise<{\n identity?: TaonSessionUserIdentityEntity | null | undefined;\n error: boolean;\n googleData?: Awaited<\n ReturnType<typeof TaonSessionUtils.verifyGoogleAuthorizationCode>\n >;\n }> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region connect identity\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n connectIdentity(@Body() data: TaonLoginData): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region username available\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n usernameAvailable(\n @Body('username') username: string,\n ): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region change username\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n changeUsername(@Body('username') username: string): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region disconnect identity\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n disconnectIdentity(\n @Body('provider') provider: TaonSessionIdentityProvider,\n ): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region login\n @POST()\n login(@Body() data: TaonLoginData): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region refresh\n @POST()\n refresh(): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region logout\n @POST()\n logout(): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region context\n @GET({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n context(): Taon.Response<TaonAuthContextEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region empty context\n @GET()\n emptyContext(): Taon.Response<TaonAuthContextEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get current user id\n @GET({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n getCurrentUserId(): Taon.Response<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { NEVER, Observable, of } from 'rxjs';\nimport { catchError, map, share, tap } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonAuthContextEntity } from '../taon-auth-context/taon-auth-context.entity';\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../taon-session-user/taon-session-user.models';\n\nimport { TaonSessionController } from './taon-session.controller';\nimport { TaonLoginData } from './taon-session.models';\n//#endregion\n\n@Injectable()\nexport class TaonSessionApiService extends TaonBaseAngularService {\n private taonSessionController = this.injectController(TaonSessionController);\n\n usernameAvailable(username: string): Observable<boolean> {\n return this.taonSessionController.usernameAvailable(username)\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n changeUsername(username: string): Observable<boolean> {\n return this.taonSessionController.changeUsername(username)\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n connectPassword(email: string, password: string): Observable<boolean> {\n return this.taonSessionController.connectIdentity({ email, password })\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n //#region login\n\n login(data: TaonLoginData): Observable<boolean> {\n return this.taonSessionController.login(data).request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region logout\n logout(): Observable<boolean> {\n return this.taonSessionController.logout().request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region connect idenitty\n connectIdentity(data: TaonLoginData): Observable<boolean> {\n return this.taonSessionController.connectIdentity(data)\n .request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region disconnect idenitty\n disconnectIdentity(\n provider: TaonSessionIdentityProvider,\n ): Observable<boolean> {\n return this.taonSessionController.disconnectIdentity(provider)\n .request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region me\n context(): Observable<TaonAuthContextEntity> {\n return this.taonSessionController.context().request!().observable.pipe(\n map(resp => {\n return resp.body.json;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n\n emptyContext(): Observable<TaonAuthContextEntity> {\n return this.taonSessionController.emptyContext().request!().observable.pipe(\n map(resp => {\n return resp.body.json;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n //#endregion\n\n //#region get current user id\n getCurrentUserId(): Observable<number> {\n return this.taonSessionController.getCurrentUserId()\n .request!().observable.pipe(\n map(resp => {\n const userId = resp.body.numericValue;\n return userId;\n }),\n catchError(() => {\n return of(null);\n }),\n share(),\n );\n }\n //#endregion\n\n //#region get current user id\n userExists(\n email: string,\n opt: {\n goToPreviouseState: () => void;\n },\n ): Observable<boolean> {\n return this.taonSessionController.userExists(email)\n .request!().observable.pipe(\n map(resp => {\n const userExists = resp.body.booleanValue;\n return userExists;\n }),\n catchError(() => {\n opt.goToPreviouseState();\n return NEVER;\n }),\n );\n }\n //#endregion\n\n //#region get current user id\n createUser(\n email: string,\n password: string,\n ): Observable<TaonSessionUserEntity | undefined> {\n return this.taonSessionController.createUser(email, password)\n .request!().observable.pipe(\n map(resp => {\n const userExists = resp.body.json;\n return userExists;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n //#endregion\n\n //#region refresh\n refresh(): Observable<boolean> {\n return this.taonSessionController.refresh().request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { NEVER, Observable, of } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { ClassHelpers, Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\n\nimport { TaonSessionController } from './taon-session.controller';\nimport {\n TaonSessionConfig,\n TaonSessionProvider,\n} from './taon-session.provider';\n//#endregion\n\n@Injectable()\nexport class TaonSessionConfigService extends TaonBaseAngularService {\n private taonSessionProvider = this.injectProvider(TaonSessionProvider);\n\n clone(): TaonSessionConfig {\n const cloned = this.taonSessionProvider.clone();\n return cloned;\n }\n}\n","import { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-session.models.ts', {} as any);\n\nexport interface TaonLoginData {\n email?: string;\n password?: string;\n googleCode?: string;\n}\n\nexport interface GoogleCodeResponse {\n code?: string;\n error?: string;\n error_description?: string;\n}\n\nexport enum TaonSessionState {\n LOADING_INITIAL_AUTH_INFO = 'LOADING_INITIAL_AUTH_INFO',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n ENTER_PASSWORD = 'ENTER_PASSWORD',\n ENTER_REGISTRATION_PASSWORDS = 'ENTER_REGISTRATION_PASSWORDS',\n LOADING_AUTH = 'LOADING_AUTH',\n LOADING_CHECK_USER_EMAIL_EXISTS = 'LOADING_CHECK_USER_EMAIL_EXISTS',\n LOADING_CREATING_USER = 'LOADING_CREATING_USER',\n LOADING_LOGOUT_INFO = 'LOADING_LOGOUT_INFO',\n TWO_FA_EMAIL = 'TWO_FA_EMAIL',\n TWO_FA_SMS = 'TWO_FA_SMS',\n TWO_FA_AUTHENTICATOR = 'TWO_FA_AUTHENTICATOR',\n LOGIN_SUCCESS = 'LOGIN_SUCCESS',\n PROFILE_INFO = 'PROFILE_INFO',\n PASSWORD_CHANGE = 'PASSWORD_CHANGE',\n AVATAR_CHANGE = 'AVATAR_CHANGE',\n}\n\nexport enum TaonLoginErrors {\n INVALID_PASSWORD = 'INVALID_PASSWORD',\n INVALID_SOCIAL_LOGIN = 'INVALID_SOCIAL_LOGIN',\n PASSWORDS_DO_NOT_MATCH = 'PASSWORDS_DO_NOT_MATCH',\n}\n\nexport const TaonErorsMap = new Map([\n [TaonLoginErrors.INVALID_PASSWORD, t.gettext('Invalid Password')],\n [\n TaonLoginErrors.INVALID_SOCIAL_LOGIN,\n t.gettext('Not able to login with social account'),\n ],\n [\n TaonLoginErrors.PASSWORDS_DO_NOT_MATCH,\n t.gettext('Passwords do not match each other'),\n ],\n]);\n","//#region imports\n\nimport { inject, Injectable } from '@angular/core'; // @browser\n\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n finalize,\n map,\n NEVER,\n Observable,\n of,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\n\nimport { TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { signal } from 'tnp-core/browser';\nimport { TaonStateMachine } from 'tnp-core/browser';\n\nimport { TaonAuthContextEntity } from '../taon-auth-context/taon-auth-context.entity';\n\nimport type { TaonSessionComponent } from './taon-session/taon-session.component'; // @browser\nimport { TaonSessionApiService } from './taon-session.api.service'; // @browser\nimport {\n TaonErorsMap,\n TaonLoginErrors,\n TaonSessionState,\n} from './taon-session.models';\n\n//#endregion\n\n/* */\n/* */\n/* */\n/* */\n \n//#region @browser\n@Injectable()\n//#endregion\nexport class TaonSessionStateService extends TaonBaseProvider {\n //#region fields & getters\n\n //#region @browser\n protected readonly taonSessionApiService = inject(TaonSessionApiService);\n //#endregion\n\n /**\n * Refreshes session/authentication information.\n *\n * This causes getCurrentUserId() to be called again.\n */\n protected readonly refreshSrc = new BehaviorSubject<void>(void 0);\n\n /**\n * Refreshes authorization context without reloading\n * the current session/user.\n *\n * Useful when roles/groups/permissions change while\n * the currently authenticated user stays the same.\n */\n protected readonly contextRefreshSrc = new BehaviorSubject<void>(void 0);\n\n protected readonly userId = signal<number | undefined>(void 0);\n\n protected readonly currentSlide = signal(\n TaonSessionState.LOADING_INITIAL_AUTH_INFO,\n );\n\n private allowedStateMap = new Map<TaonSessionState, TaonSessionState[]>([\n [\n TaonSessionState.LOADING_INITIAL_AUTH_INFO,\n [TaonSessionState.LOGIN_OR_REGISTER, TaonSessionState.LOGIN_SUCCESS],\n ],\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOADING_AUTH,\n TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS,\n ],\n ],\n [\n TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOGIN_OR_REGISTER,\n ],\n ],\n [\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n [TaonSessionState.LOADING_AUTH, TaonSessionState.LOGIN_OR_REGISTER],\n ],\n [\n TaonSessionState.ENTER_PASSWORD,\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.LOADING_AUTH,\n TaonSessionState.TWO_FA_AUTHENTICATOR,\n TaonSessionState.TWO_FA_EMAIL,\n TaonSessionState.TWO_FA_SMS,\n ],\n ],\n [\n TaonSessionState.LOADING_AUTH,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.LOGIN_OR_REGISTER,\n TaonSessionState.LOGIN_SUCCESS,\n ],\n ],\n [\n TaonSessionState.LOGIN_SUCCESS,\n [\n TaonSessionState.LOADING_LOGOUT_INFO,\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.PROFILE_INFO,\n ],\n ],\n [\n TaonSessionState.PROFILE_INFO,\n [\n TaonSessionState.LOGIN_SUCCESS,\n TaonSessionState.LOADING_LOGOUT_INFO,\n TaonSessionState.ENTER_PASSWORD,\n ],\n ],\n [\n TaonSessionState.LOADING_LOGOUT_INFO,\n [TaonSessionState.LOGIN_OR_REGISTER, TaonSessionState.LOGIN_SUCCESS],\n ],\n ]);\n\n public state = new TaonStateMachine<TaonSessionState>({\n defaultValue: this.currentSlide(),\n allowedStateMap: this.allowedStateMap,\n effect: (nextState, previousState, debugMode) => {\n this.currentSlide.set(nextState);\n },\n });\n\n /**\n * Current authenticated user.\n *\n * Shared because multiple consumers may depend on userId$,\n * isLoggedIn$ and context$ at the same time.\n *\n * One refresh => one getCurrentUserId() request.\n */\n protected readonly userId$ = this.refreshSrc.pipe(\n switchMap(() => {\n/* */\n/* */\n \n\n //#region @browser\n return this.taonSessionApiService.getCurrentUserId().pipe(\n catchError(() => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n return of(void 0);\n }),\n );\n //#endregion\n }),\n\n tap(userId => {\n this.userId.set(userId);\n\n if (userId) {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n } else {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n }\n }),\n\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n /**\n * Projection of userId$.\n *\n * Does NOT cause another getCurrentUserId() call because\n * userId$ is shared.\n */\n public readonly isLoggedIn$ = this.userId$.pipe(map(userId => !!userId));\n\n //#region @browser\n\n /**\n * Current authorization context.\n *\n * Reloaded when:\n *\n * 1. session/user changes\n * 2. refreshContext() is explicitly called\n *\n * Multiple subscribers share the same context request.\n */\n public readonly context$: Observable<TaonAuthContextEntity> = combineLatest([\n this.userId$,\n this.contextRefreshSrc,\n ]).pipe(\n switchMap(([userId]) => {\n if (!userId) {\n return this.taonSessionApiService.emptyContext();\n }\n\n return this.taonSessionApiService.context();\n }),\n\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n //#endregion\n\n //#endregion\n\n public executeActionForState(\n //#region @browser\n form: TaonSessionComponent['form'],\n //#endregion\n ): void {\n //#region @browser\n\n form.updateValueAndValidity();\n\n if (form.invalid) {\n return;\n }\n\n const googleCodeField = form.controls.googleCode;\n const isSocialLogin = googleCodeField.value!;\n\n //#region login action\n\n const loginAction = (): void => {\n const passwordField = form.controls.password;\n\n if (!isSocialLogin) {\n passwordField.markAsTouched();\n }\n\n this.state.set(TaonSessionState.LOADING_AUTH);\n\n this.taonSessionApiService\n .login({\n email: form.controls.email.value!,\n password: passwordField.value!,\n googleCode: googleCodeField.value!,\n })\n .pipe(\n take(1),\n\n tap(okLogin => {\n googleCodeField.reset();\n\n if (okLogin) {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n\n if (!isSocialLogin) {\n passwordField.markAsUntouched();\n }\n } else {\n if (isSocialLogin) {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n\n googleCodeField.setErrors({\n [TaonLoginErrors.INVALID_SOCIAL_LOGIN]: true,\n });\n } else {\n this.state.set(TaonSessionState.ENTER_PASSWORD);\n\n passwordField.setErrors({\n ...(passwordField.errors ?? {}),\n [TaonLoginErrors.INVALID_PASSWORD]: true,\n });\n\n passwordField.markAsTouched();\n }\n }\n }),\n\n finalize(() => {\n this.refresh();\n }),\n )\n .subscribe();\n };\n\n //#endregion\n\n switch (this.state.currentValue) {\n //#region LOGIN_OR_REGISTER\n\n case TaonSessionState.LOGIN_OR_REGISTER:\n if (isSocialLogin) {\n loginAction();\n } else {\n this.state.set(TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS);\n\n this.taonSessionApiService\n .userExists(form.controls.email.value!, {\n goToPreviouseState: () => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n },\n })\n .pipe(\n take(1),\n\n tap(userExists => {\n if (userExists) {\n this.state.set(TaonSessionState.ENTER_PASSWORD);\n } else {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n }\n }),\n\n catchError(err => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n return NEVER;\n }),\n )\n .subscribe();\n }\n\n return;\n\n //#endregion\n\n //#region ENTER_REGISTRATION_PASSWORDS\n\n case TaonSessionState.ENTER_REGISTRATION_PASSWORDS:\n this.state.set(TaonSessionState.LOADING_CREATING_USER);\n\n this.taonSessionApiService\n .createUser(form.controls.email.value!, form.controls.password.value!)\n .pipe(\n take(1),\n\n tap(user => {\n if (user) {\n loginAction();\n } else {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n }\n }),\n\n catchError(err => {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n\n return NEVER;\n }),\n )\n .subscribe();\n\n return;\n\n //#endregion\n\n //#region ENTER_PASSWORD\n\n case TaonSessionState.ENTER_PASSWORD:\n loginAction();\n return;\n\n //#endregion\n\n default:\n break;\n }\n\n //#endregion\n }\n\n public logout(successCallback?: () => void): void {\n this.state.set(TaonSessionState.LOADING_LOGOUT_INFO);\n\n //#region @browser\n\n this.taonSessionApiService\n .logout()\n .pipe(\n take(1),\n\n tap(logoutOk => {\n if (logoutOk) {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n successCallback?.();\n } else {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n }\n }),\n\n finalize(() => {\n this.refresh();\n }),\n )\n .subscribe();\n\n //#endregion\n }\n\n /**\n * Reload complete authentication/session state.\n *\n * This causes:\n *\n * getCurrentUserId()\n * -> userId$\n * -> isLoggedIn$\n * -> context$\n */\n public refresh(): void {\n this.refreshSrc.next(void 0);\n }\n\n /**\n * Reload authorization context only.\n *\n * Does NOT call getCurrentUserId().\n */\n public refreshContext(): void {\n this.contextRefreshSrc.next(void 0);\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; // browser\n\nimport { TaonLoginErrors, TaonSessionState } from './taon-session.models';\n\nexport namespace TaonSessionValidator {\n //#region @browser\n export const passwordMatchValidator: ValidatorFn = (\n control: AbstractControl,\n ): ValidationErrors | null => {\n const password = control.get('password');\n const passwordRepeat = control.get('passwordRepeat');\n const state = control.get('state');\n if (state.value !== TaonSessionState.ENTER_REGISTRATION_PASSWORDS) {\n return null;\n }\n\n if (!password || !passwordRepeat) {\n return null;\n }\n\n return password.value === passwordRepeat.value\n ? null\n : { [TaonLoginErrors.PASSWORDS_DO_NOT_MATCH]: true };\n };\n //#endregion\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { MatRippleModule } from '@angular/material/core'; // Optional: for Material ripple effect\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.ts', {} as any);\n\n@Component({\n selector: 'google-login-register-button',\n standalone: true,\n imports: [CommonModule, MatRippleModule],\n templateUrl: './google-login-register-button.component.html',\n})\nexport class GoogleLoginRegisterButtonComponent {\n t = t.for(this);\n\n @Output() googleSignIn = new EventEmitter<void>();\n\n onClick() {\n this.googleSignIn.emit();\n }\n}\n","<button\n type=\"button\"\n matRipple\n (click)=\"onClick()\"\n class=\"flex w-full items-center justify-center gap-3 px-4 py-2.5 border border-slate-300 rounded-full font-medium text-slate-700 bg-white hover:bg-slate-50 hover:border-slate-400 active:bg-slate-100 shadow-sm transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 cursor-pointer\">\n <!-- Google SVG Logo -->\n <svg\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\">\n <path\n fill=\"#4285F4\"\n d=\"M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.82-2.4 3.68v3.05h3.88c2.27-2.09 3.66-5.17 3.66-9.17z\" />\n <path\n fill=\"#34A853\"\n d=\"M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.05c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.19v3.15C3.17 21.32 7.25 24 12 24z\" />\n <path\n fill=\"#FBBC05\"\n d=\"M5.28 14.27c-.25-.72-.38-1.49-.38-2.27s.13-1.55.38-2.27V6.58H1.19C.43 8.1 0 9.8 0 12s.43 3.9 1.19 5.42l4.09-3.15z\" />\n <path\n fill=\"#EA4335\"\n d=\"M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.25 0 3.17 2.68 1.19 6.58l4.09 3.15c.95-2.83 3.6-4.98 6.72-4.98z\" />\n </svg>\n <span class=\"text-sm font-semibold tracking-wide\">{{\n t.gettext('Sign in with Google')\n }}</span>\n </button>\n","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { RouterOutlet } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n TaonConfirmDialogComponent,\n TaonHorizontalWheelScrollDirective,\n} from '@taon-dev/ui/browser';\nimport { firstValueFrom, map, shareReplay } from 'rxjs';\nimport { Taon } from 'taon/browser';\n\nimport { GoogleCodeResponse, TaonSessionConfig } from '../../../index';\n// import { TaonProfilePictureComponent } from '../../../taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component';\nimport { TaonSessionApiService } from '../../../taon-session/taon-session.api.service';\nimport { TaonSessionStateService } from '../../../taon-session/taon-session.state.service';\nimport { TaonSessionUserEntity } from '../../../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../../../taon-session-user/taon-session-user.models';\n\n//#endregion\n\ndeclare const google: any;\n\nconst t = Translation.for('src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session-profile',\n templateUrl: './taon-session-profile.component.html',\n styleUrls: ['./taon-session-profile.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n RouterOutlet,\n MatButtonModule,\n MatButtonToggleModule,\n MatTabsModule,\n MatIconModule,\n MatDividerModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n TaonHorizontalWheelScrollDirective,\n // TaonProfilePictureComponent,\n ],\n})\nexport class TaonSessionProfileComponent {\n //#region fields & getters\n t = t.for(this);\n\n TaonSessionIdentityProvider = TaonSessionIdentityProvider;\n\n @Input()\n public config: TaonSessionConfig;\n\n protected readonly taonSessionApiService = inject(TaonSessionApiService);\n\n public readonly taonSessionStateService = inject(TaonSessionStateService);\n\n readonly context$ = this.taonSessionStateService.context$.pipe(\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n readonly usernameForm = new FormGroup({\n username: new FormControl('', { nonNullable: true, validators: [\n Validators.required, Validators.maxLength(255), Validators.pattern(/\\S/),\n ] }),\n });\n\n readonly passwordForm = new FormGroup({\n email: new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.email] }),\n password: new FormControl('', { nonNullable: true, validators: [\n Validators.required, Validators.minLength(8), Validators.maxLength(128),\n ] }),\n passwordRepeat: new FormControl('', { nonNullable: true, validators: [Validators.required] }),\n });\n\n readonly savingUsername = signal(false);\n\n readonly usernameError = signal('');\n\n readonly usernameSaved = signal(false);\n\n readonly showPasswordForm = signal(false);\n\n readonly savingPassword = signal(false);\n\n readonly passwordError = signal('');\n\n get isVisibleGoogle(): boolean {\n return this.config?.socialLogin?.google?.enabled;\n }\n\n get isVisibleApple(): boolean {\n return this.config?.socialLogin?.apple?.enabled;\n }\n\n get isVisibleMicrosoft(): boolean {\n return this.config?.socialLogin?.microsoft?.enabled;\n }\n\n get isVisibleFacebook(): boolean {\n return this.config?.socialLogin?.facebook?.enabled;\n }\n\n get isVisibleGithub(): boolean {\n return this.config?.socialLogin?.github?.enabled;\n }\n\n /**\n * Email/password can be connected only when the user currently\n * has no PASSWORD identity.\n *\n * In practice this means an account created purely through\n * social authentication.\n */\n readonly canConnectEmail$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.PASSWORD,\n );\n }),\n );\n\n readonly canConnectGoogle$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.GOOGLE,\n );\n }),\n );\n\n readonly canConnectGithub$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.GITHUB,\n );\n }),\n );\n\n readonly canConnectApple$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.APPLE,\n );\n }),\n );\n\n readonly canConnectMicrosoft$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.MICROSOFT,\n );\n }),\n );\n\n readonly canConnectFacebook$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.FACEBOOK,\n );\n }),\n );\n\n @Output()\n readonly logout = new EventEmitter<void>();\n\n readonly dialog = inject(MatDialog);\n //#endregion\n\n onLogout(): void {\n this.logout.next();\n }\n\n //#region disconnect\n\n public disconnect(provider: TaonSessionIdentityProvider): void {\n const ref = this.dialog.open(TaonConfirmDialogComponent, {\n width: '376px',\n data: {\n title: this.t.gettext('Are you sure? '),\n message: this.t.gettext('Disconnecting provider [[ provider ]].', {\n provider,\n }),\n confirmText: this.t.gettext('OK'),\n cancelText: this.t.gettext('Cancel'),\n },\n });\n\n ref.afterClosed().subscribe(async confirmed => {\n if (!confirmed) return;\n\n this.taonSessionApiService\n .disconnectIdentity(provider)\n .subscribe(connectedToGoogle => {\n if (connectedToGoogle) {\n this.taonSessionStateService.refresh();\n }\n });\n });\n }\n //#endregion\n\n //#region connect email\n connectEmail(user?: TaonSessionUserEntity | null): void {\n const identity = user?.identities?.find(identity =>\n identity.isEmailVerified === true && !!identity.email,\n );\n if (!identity) {\n this.passwordError.set(this.t.gettext('Connect a sign-in method with a verified email first.'));\n return;\n }\n this.passwordForm.reset({ email: identity.email, password: '', passwordRepeat: '' });\n this.passwordError.set('');\n this.showPasswordForm.set(true);\n }\n //#endregion\n\n async savePassword(): Promise<void> {\n this.passwordForm.markAllAsTouched();\n this.passwordError.set('');\n if (this.passwordForm.invalid || this.savingPassword()) {\n return;\n }\n const { email, password, passwordRepeat } = this.passwordForm.getRawValue();\n if (password !== passwordRepeat) {\n this.passwordError.set(this.t.gettext('Passwords do not match each other'));\n return;\n }\n this.savingPassword.set(true);\n try {\n const connected = await firstValueFrom(this.taonSessionApiService.connectPassword(email, password));\n if (!connected) {\n this.passwordError.set(this.t.gettext('Unable to connect email/password.'));\n return;\n }\n this.passwordForm.reset();\n this.showPasswordForm.set(false);\n this.taonSessionStateService.refreshContext();\n } catch (error) {\n console.error('[connect-email]', error);\n this.passwordError.set(this.t.gettext('Unable to connect email/password. The email may already belong to another account.'));\n } finally {\n this.savingPassword.set(false);\n }\n }\n\n async saveUsername(): Promise<void> {\n this.usernameForm.markAllAsTouched();\n this.usernameError.set('');\n this.usernameSaved.set(false);\n if (this.usernameForm.invalid || this.savingUsername()) {\n return;\n }\n const username = this.usernameForm.controls.username.value.trim();\n this.savingUsername.set(true);\n try {\n const available = await firstValueFrom(this.taonSessionApiService.usernameAvailable(username));\n if (!available) {\n this.usernameError.set(this.t.gettext('This username is already taken.'));\n return;\n }\n const saved = await firstValueFrom(this.taonSessionApiService.changeUsername(username));\n if (!saved) {\n this.usernameError.set(this.t.gettext('Unable to update username.'));\n return;\n }\n this.usernameForm.reset();\n this.usernameSaved.set(true);\n this.taonSessionStateService.refreshContext();\n } catch (error) {\n console.error('[change-username]', error);\n this.usernameError.set(this.t.gettext('Unable to update username. It may already be taken.'));\n } finally {\n this.savingUsername.set(false);\n }\n }\n\n //#region connect google\n private googleCodeClient?: any;\n\n public connectGoogle(): void {\n if (!this.googleCodeClient) {\n this.initGoogleLogin();\n }\n\n this.googleCodeClient.requestCode();\n }\n\n private initGoogleLogin(): void {\n this.googleCodeClient = google.accounts.oauth2.initCodeClient({\n client_id: this.config.socialLogin.google.googleClientId,\n\n scope: 'openid email profile',\n\n ux_mode: 'popup',\n\n callback: async (response: GoogleCodeResponse) => {\n if (response.error) {\n console.error('[google-login]', response);\n return;\n }\n\n if (!response.code) {\n return;\n }\n\n await this.connectGoogleIdenitty(response.code);\n },\n\n error_callback: (error: any) => {\n console.error('[google-login-popup]', error);\n },\n });\n }\n\n private connectGoogleIdenitty(googleCode: string): void {\n this.taonSessionApiService\n .connectIdentity({\n googleCode,\n })\n .subscribe(connectedToGoogle => {\n if (connectedToGoogle) {\n this.taonSessionStateService.refresh();\n }\n });\n }\n //#endregion\n\n //#region connect apple\n connectApple(): void {\n // TODO replace with proper Apple authorization flow\n console.log('Connect Apple');\n }\n //#endregion\n\n //#region connect microsoft\n connectMicrosoft(): void {\n // TODO replace with proper Microsoft authorization flow\n console.log('Connect Microsoft');\n }\n //#endregion\n\n //#region connect facebook\n connectFacebook(): void {\n // TODO replace with proper Facebook authorization flow\n console.log('Connect Facebook');\n }\n //#endregion\n}\n","@let context = context$ | async;\n<mat-tab-group taonHorizontalWheelScroll>\n <!-- CONNECT IDENTITIES -->\n <mat-tab [label]=\"t.gettext('Connect')\">\n <div class=\"tab-content\">\n <h3>{{ t.gettext('Connect sign-in method') }}</h3>\n\n <p class=\"description\">\n {{\n t.gettext('Connect additional ways of signing in to your account.')\n }}\n </p>\n\n <mat-button-toggle-group\n class=\"identity-buttons\"\n [hideSingleSelectionIndicator]=\"true\">\n @if (canConnectEmail$ | async) {\n <mat-button-toggle\n [disabled]=\"config?.login?.diableLoginByEmail\"\n (click)=\"connectEmail(context?.user)\">\n <mat-icon>email</mat-icon>\n Email\n </mat-button-toggle>\n } @else {\n <mat-button-toggle\n (click)=\"disconnect(TaonSessionIdentityProvider.PASSWORD)\">\n <mat-icon>email</mat-icon>\n Disconnect Email\n </mat-button-toggle>\n }\n\n @if (canConnectGoogle$ | async) {\n <mat-button-toggle (click)=\"connectGoogle()\">\n <mat-icon>account_circle</mat-icon>\n Google\n </mat-button-toggle>\n } @else {\n <mat-button-toggle\n (click)=\"disconnect(TaonSessionIdentityProvider.GOOGLE)\">\n <mat-icon>close</mat-icon>\n Disconnect Google\n </mat-button-toggle>\n }\n\n <!-- TODO -->\n <!-- <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectApple()\">\n <mat-icon>apple</mat-icon>\n Apple\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectMicrosoft()\">\n <mat-icon>window</mat-icon>\n Microsoft\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectFacebook()\">\n <mat-icon>public</mat-icon>\n Facebook\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectGithub()\">\n <mat-icon>public</mat-icon>\n Github\n </mat-button-toggle> -->\n </mat-button-toggle-group>\n @if (showPasswordForm()) {\n <form [formGroup]=\"passwordForm\" (ngSubmit)=\"savePassword()\">\n <mat-form-field>\n <mat-label>{{ t.gettext('Verified email') }}</mat-label>\n <input matInput formControlName=\"email\" readonly />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ t.gettext('Password') }}</mat-label>\n <input matInput type=\"password\" formControlName=\"password\" autocomplete=\"new-password\" />\n <mat-error>{{ t.gettext('Password must contain between 8 and 128 characters.') }}</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ t.gettext('Repeat password') }}</mat-label>\n <input matInput type=\"password\" formControlName=\"passwordRepeat\" autocomplete=\"new-password\" />\n </mat-form-field>\n <button mat-button type=\"submit\" [disabled]=\"savingPassword() || passwordForm.invalid\">\n {{ t.gettext('Save password') }}\n </button>\n </form>\n }\n @if (passwordError()) {\n <p role=\"alert\">{{ passwordError() }}</p>\n }\n </div>\n </mat-tab>\n\n <!-- CHANGE PICTURE -->\n <!-- <mat-tab label=\"Change Picture\">\n <div class=\"tab-content\">\n <taon-profile-picture />\n\n </div>\n </mat-tab> -->\n\n <!-- CHANGE PASSWORD -->\n <mat-tab label=\"Change Password\">\n <div class=\"tab-content\">\n <!-- TODO change password -->\n </div>\n </mat-tab>\n <mat-tab [label]=\"t.gettext('Change Username')\">\n <div class=\"tab-content\">\n <p>{{ t.gettext('Current username') }}: {{ context?.user?.username || '-' }}</p>\n <form [formGroup]=\"usernameForm\" (ngSubmit)=\"saveUsername()\">\n <mat-form-field>\n <mat-label>{{ t.gettext('New username') }}</mat-label>\n <input matInput formControlName=\"username\" autocomplete=\"username\" [readonly]=\"savingUsername()\"\n (input)=\"usernameError.set(''); usernameSaved.set(false)\" />\n <mat-error>{{ t.gettext('Username must contain between 1 and 255 characters.') }}</mat-error>\n </mat-form-field>\n <button mat-button type=\"submit\" [disabled]=\"savingUsername() || usernameForm.invalid\">\n {{ t.gettext('Save username') }}\n </button>\n </form>\n @if (usernameError()) {\n <p role=\"alert\">{{ usernameError() }}</p>\n }\n @if (usernameSaved()) {\n <p role=\"status\">{{ t.gettext('Username updated.') }}</p>\n }\n </div>\n </mat-tab>\n</mat-tab-group>\n\n<mat-divider></mat-divider>\n\n<div class=\"profile-actions\">\n <button\n mat-button\n (click)=\"onLogout()\">\n <mat-icon>logout</mat-icon>\n {{ t.gettext('Logout') }}\n </button>\n</div>\n","//#region imports\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { AsyncPipe, CommonModule, JsonPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n AfterViewInit,\n Input,\n ViewChild,\n OnInit,\n OnDestroy,\n ElementRef,\n forwardRef,\n} from '@angular/core';\nimport {\n ReactiveFormsModule,\n FormsModule,\n FormGroup,\n FormControl,\n Validators,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterOutlet } from '@angular/router';\nimport { MtxLoaderModule } from '@ng-matero/extensions/loader';\nimport { Translation, TranslateDirective } from '@taon-dev/i18n/browser';\nimport { walk } from 'lodash-walk-object/browser';\nimport { Subscription, take } from 'rxjs';\nimport { Taon } from 'taon/browser';\nimport {\n TaonSlideContentContentChildComponent,\n TaonSlideContentComponent,\n} from 'taon-ui/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonProfilePictureComponent } from '../taon-profile/taon-profile-picture';\nimport { TaonSessionApiService } from '../taon-session.api.service';\nimport { TaonSessionConfigService } from '../taon-session.config.service';\nimport {\n GoogleCodeResponse,\n TaonErorsMap,\n TaonLoginErrors,\n TaonSessionState,\n} from '../taon-session.models';\nimport {\n TaonSessionConfig,\n TaonSessionProvider,\n} from '../taon-session.provider';\nimport { TaonSessionStateService } from '../taon-session.state.service';\nimport { TaonSessionValidator } from '../taon-session.validators';\n\nimport { GoogleLoginRegisterButtonComponent } from './social-buttons/google-login-register-button.component';\nimport { TaonSessionProfileComponent } from './taon-session-profile/taon-session-profile.component';\n//#endregion\n\ndeclare const google: any;\n\nconst t = Translation.for('src/lib/taon-session/taon-session/taon-session.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session',\n templateUrl: './taon-session.component.html',\n styleUrls: ['./taon-session.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n forwardRef(() => TaonSessionApiService),\n TaonSessionStateService,\n TaonSessionProvider,\n TaonSessionConfigService,\n ],\n imports: [\n //#region imports\n AsyncPipe,\n RouterOutlet,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n JsonPipe,\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatDividerModule,\n MatInputModule,\n MatFormFieldModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MtxLoaderModule,\n ReactiveFormsModule,\n FormsModule,\n TranslateDirective,\n TaonSlideContentComponent,\n TaonSlideContentContentChildComponent,\n A11yModule,\n GoogleLoginRegisterButtonComponent,\n TaonSessionProfileComponent,\n TaonProfilePictureComponent,\n //#endregion\n ],\n})\nexport class TaonSessionComponent implements AfterViewInit, OnInit, OnDestroy {\n //#region fields & getters\n\n @Input()\n public config: TaonSessionConfig;\n\n @ViewChild('emailInput')\n private emailInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('passwordInput')\n private passwordInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('registrationPasswordInput')\n private registrationPasswordInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('slide')\n protected slide!: TaonSlideContentComponent;\n\n protected readonly t = t.for(this);\n\n protected readonly TaonSessionState = TaonSessionState;\n\n protected readonly TaonLoginErrors = TaonLoginErrors;\n\n protected readonly TaonErorsMap = TaonErorsMap;\n\n protected emailRegex = /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n\n public taonSessionStateService: TaonSessionStateService = inject(\n TaonSessionStateService,\n );\n\n protected readonly taonSessionConfigService: TaonSessionConfigService =\n inject(TaonSessionConfigService);\n\n protected form = new FormGroup(\n {\n email: new FormControl('', []),\n password: new FormControl('', []),\n passwordRepeat: new FormControl('', []),\n googleCode: new FormControl('', []),\n state: new FormControl(\n this.taonSessionStateService.state.currentValue,\n [],\n ),\n },\n {\n validators: [TaonSessionValidator.passwordMatchValidator],\n },\n );\n\n protected readonly dialogRef = inject(MatDialogRef<TaonSessionComponent>, {\n optional: true,\n });\n\n isLoggedIn$ = this.taonSessionStateService.isLoggedIn$;\n\n context$ = this.taonSessionStateService.context$; // TODO @LAST\n\n protected sub = new Subscription();\n\n protected googleButtonLoaded = false;\n\n public whenAllowedAnimationMap = new Map<\n TaonSessionState,\n TaonSessionState[]\n >([\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOADING_AUTH,\n ],\n ],\n [TaonSessionState.LOADING_AUTH, [TaonSessionState.LOGIN_SUCCESS]],\n ]);\n\n public get isInsideDialog(): boolean {\n return !!this.dialogRef;\n }\n\n get googleClientId(): string {\n return this.config.socialLogin.google.googleClientId;\n }\n\n get microsoftClientId(): string {\n return this.config.socialLogin.microsoft.microsoftClientId;\n }\n\n get isAnySocialLoginEnabled(): boolean {\n return this.config.socialLogin.isAnySocialLoginEnabled;\n }\n\n get diableLoginByEmail(): boolean {\n return this.config.login.diableLoginByEmail;\n }\n\n //#endregion\n\n //#region reload me\n public reloadMe(): void {\n this.taonSessionStateService.refresh();\n }\n //#endregion\n\n //#region execute action for state\n public executeActionForState(): void {\n this.taonSessionStateService.executeActionForState(this.form);\n }\n //#endregion\n\n //#region goto\n public goTo(action: TaonSessionState): void {\n this.taonSessionStateService.state.set(action);\n }\n //#endregion\n\n //#region logout\n public logout(): void {\n this.taonSessionStateService.logout(() => {\n this.close();\n });\n }\n //#endregion\n\n //#region close\n protected close(): void {\n if (this.isInsideDialog) {\n this.dialogRef.close();\n }\n }\n //#endregion\n\n //#region set focus main input\n private focusMainInput(state: TaonSessionState): void {\n switch (state) {\n case TaonSessionState.LOGIN_OR_REGISTER:\n if (!this.config.socialLogin.isAnySocialLoginEnabled) {\n this.emailInput?.nativeElement.focus();\n }\n break;\n\n case TaonSessionState.ENTER_PASSWORD:\n this.passwordInput?.nativeElement.focus();\n break;\n\n case TaonSessionState.ENTER_REGISTRATION_PASSWORDS:\n this.registrationPasswordInput?.nativeElement.focus();\n break;\n\n // later:\n // case TaonSessionState.TWO_FA_AUTHENTICATOR:\n // this.twoFaInput?.nativeElement.focus();\n // break;\n }\n }\n //#endregion\n\n //#region google login\n private googleCodeClient?: any;\n\n private initGoogleLogin(): void {\n this.googleCodeClient = google.accounts.oauth2.initCodeClient({\n client_id: this.config.socialLogin.google.googleClientId,\n\n scope: 'openid email profile',\n\n ux_mode: 'popup',\n\n callback: async (response: GoogleCodeResponse) => {\n if (response.error) {\n console.error('[google-login]', response);\n return;\n }\n\n if (!response.code) {\n return;\n }\n\n await this.loginWithGoogleCode(response.code);\n },\n\n error_callback: (error: any) => {\n console.error('[google-login-popup]', error);\n },\n });\n }\n\n public loginWithGoogle(): void {\n this.form.controls.googleCode.setErrors({});\n if (!this.googleCodeClient) {\n this.initGoogleLogin();\n }\n\n this.googleCodeClient.requestCode();\n }\n\n private async loginWithGoogleCode(code: string): Promise<void> {\n this.form.controls.googleCode.setValue(code);\n // this.taonSessionStateService.state.set(TaonSessionState.LOADING_AUTH);\n this.form.controls.email.reset();\n this.form.controls.email.setValidators([]);\n this.form.controls.email.setErrors({});\n this.form.controls.email.updateValueAndValidity();\n this.executeActionForState();\n }\n //#endregion\n\n //#region hooks\n\n //#region hooks / on init\n ngOnInit(): void {\n const config = this.taonSessionConfigService.clone();\n walk.Object(\n this.config || {},\n (value, lodashPath) => {\n _.set(config, lodashPath, value);\n },\n {\n walkGetters: false,\n },\n );\n this.config = config;\n\n this.isLoggedIn$.pipe(take(1)).subscribe();\n //Called after the constructor, initializing input properties, and the first call to ngOnChanges.\n //Add 'implements OnInit' to the class.\n if (!this.config.login.linkToDashboard) {\n throw `Please provide config input to taon-session (or taon-session-button) component`;\n }\n if (this.config.login.defaultEmail) {\n this.form.controls.email.setValue(this.config.login.defaultEmail);\n }\n\n this.resetPasswordScreen();\n }\n //#endregion\n\n //#region hooks / on destroy\n ngOnDestroy(): void {\n this.sub.unsubscribe();\n }\n //#endregion\n\n //#region hooks / after view init\n ngAfterViewInit(): void {\n this.sub.add(\n this.taonSessionStateService.state.currentState$.subscribe(\n ({ currentState, previousState }) => {\n if (\n currentState === TaonSessionState.LOGIN_SUCCESS &&\n this.isInsideDialog\n ) {\n this.close();\n }\n this.form.controls.state.setValue(currentState);\n if (currentState === TaonSessionState.LOGIN_OR_REGISTER) {\n this.form.controls.googleCode.setValue('');\n }\n this.updateValidatorsFor(currentState);\n // console.log({ newState });\n if (this.slide) {\n this.slide.goTo(currentState);\n setTimeout(() => {\n // console.log(`FOCUS: ${newState}`);\n this.focusMainInput(currentState);\n }, 500);\n }\n },\n ),\n );\n }\n //#endregion\n\n //#endregion\n\n //#region reset password field\n public resetPasswordScreen() {\n this.form.controls.password.reset();\n this.form.controls.password.setValue(\n this.config.login.defaultPassword || '',\n );\n this.form.controls.passwordRepeat.reset();\n this.form.controls.passwordRepeat.setValue(\n this.config.login.defaultPassword || '',\n );\n }\n //#endregion\n\n //#region update validators for\n private updateValidatorsFor(state: TaonSessionState): void {\n const { email, password, passwordRepeat } = this.form.controls;\n\n email.setValidators(\n state === TaonSessionState.LOGIN_OR_REGISTER &&\n !this.config?.login.diableLoginByEmail\n ? [Validators.required, Validators.pattern(this.emailRegex)]\n : [],\n );\n\n password.setValidators(\n state === TaonSessionState.ENTER_PASSWORD ||\n state === TaonSessionState.ENTER_REGISTRATION_PASSWORDS\n ? [Validators.required]\n : [],\n );\n\n passwordRepeat.setValidators(\n state === TaonSessionState.ENTER_REGISTRATION_PASSWORDS\n ? [Validators.required]\n : [],\n );\n\n if (!this.config?.login.diableLoginByEmail) {\n email.updateValueAndValidity();\n }\n\n password.updateValueAndValidity();\n passwordRepeat.updateValueAndValidity();\n }\n //#endregion\n}\n","<!-- #region close button -->\n<div\n class=\"absolute top-1 right-1 pointer z-1\"\n *ngIf=\"isInsideDialog\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<!-- #endregion -->\n<!-- STATE: {{ state.currentValue }} <br /> -->\n<!-- ERRORS: {{ form.errors | json }} <br /> -->\n<!-- IS LOGGED IN: {{ isLoggedIn$ | async }}<br /> -->\n<!-- {{ context$ | async | json }} -->\n<!-- <button (click)=\"test()\" >test</button> -->\n<h1 class=\"flex items-center justify-center pt-10\">\n <taon-profile-picture [hideButtons]=\"!(isLoggedIn$ | async)\" />\n <!-- <mat-icon\n class=\"!w-[100px] !h-[100px] !text-[100px] !leading-[100px]\"\n fontIcon=\"account_circle\">\n </mat-icon> -->\n</h1>\n<taon-slide-content\n #slide\n [whenAllowedAnimationMap]=\"whenAllowedAnimationMap\">\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOADING_INITIAL_AUTH_INFO\">\n <!-- #region login success -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading authenticaiton info..\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS\">\n <!-- #region LOADING_CHECK_USER_EMAIL_EXISTS -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading...\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.LOADING_AUTH\">\n <!-- #region LOADING_AUTH -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading authentication info...\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOGIN_OR_REGISTER\">\n <!-- #region login or register -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login or Register\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- #region normal email -->\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n [ngClass]=\"{\n 'cursor-not-allowed pointer-events-none select-none':\n diableLoginByEmail,\n }\"\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label *ngIf=\"!diableLoginByEmail\">Email</mat-label>\n\n <input\n #emailInput\n matInput\n formControlName=\"email\"\n class=\"pl-1\"\n type=\"email\"\n [placeholder]=\"\n diableLoginByEmail ? t.gettext('Login by email (disabled)') : ''\n \" />\n\n <button\n mat-icon-button\n [disabled]=\"diableLoginByEmail\"\n matSuffix\n color=\"primary\">\n <mat-icon>mail</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('pattern') &&\n form.get('email')?.touched\n \"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n Please enter a valid email address\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('required') &&\n form.get('email')?.touched\n \">\n {{ t.gettext('Email is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n <!-- #endregion -->\n\n @if (isAnySocialLoginEnabled) {\n <div class=\"divider\">\n <span translate [translate-t]=\"t\">or</span>\n </div>\n }\n\n <!-- GOOGLE BUTTON -->\n @if (googleClientId) {\n <google-login-register-button\n (googleSignIn)=\"loginWithGoogle()\"></google-login-register-button>\n\n <mat-error\n *ngIf=\"\n form\n .get('googleCode')\n ?.hasError(TaonLoginErrors.INVALID_SOCIAL_LOGIN)\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_SOCIAL_LOGIN) }}\n </mat-error>\n }\n\n <!-- <div\n *ngIf=\"googleClientId\"\n #googleBtn\n class=\"google-container\">\n <span\n *ngIf=\"!googleButtonLoaded\"\n class=\"text-300 p-2\"\n translate\n >loading google button..</span\n >\n <mat-progress-bar\n *ngIf=\"!googleButtonLoaded\"\n mode=\"indeterminate\"\n class=\"auth-progress\" />\n </div> -->\n\n <!-- MICROSOFT BUTTON -->\n <div\n *ngIf=\"microsoftClientId\"\n #microsoftBtn\n class=\"microsoft-container\">\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"w-full microsoft-btn\"\n (click)=\"loginWithMicrosoft()\">\n <mat-icon class=\"mr-2\">login</mat-icon>\n {{ t.gettext('Continue with Microsoft') }}\n </button>\n </div>\n </div>\n\n <br />\n\n <div class=\"flex justify-content-end\">\n <!-- <button mat-button>\n {{ t.gettext('Login') }}\n </button> -->\n\n <!-- <button\n *ngIf=\"isInsideDialog\"\n mat-button\n mat-dialog-close>\n {{ t.gettext('Cancel') }}\n </button> -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.ENTER_PASSWORD\">\n <!-- #region password -->\n <div class=\"p-5\">\n <h4 class=\"mb-3 flex items-center\">\n <button\n (click)=\"\n resetPasswordScreen(); goTo(TaonSessionState.LOGIN_OR_REGISTER)\n \"\n mat-icon-button\n type=\"button\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <span class=\"flex\">{{ t.gettext('Enter Password') }}</span>\n </h4>\n <div class=\"w-full pt-3\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Password</mat-label>\n\n <input\n #passwordInput\n matInput\n formControlName=\"password\"\n class=\"pl-1\"\n type=\"password\" />\n\n <button\n mat-icon-button\n matSuffix\n color=\"primary\">\n <mat-icon>lock</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form\n .get('password')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('password')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('password')?.hasError('required') &&\n form.get('password')?.touched\n \">\n {{ t.gettext('Password is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.ENTER_REGISTRATION_PASSWORDS\">\n <!-- #region registration passwords -->\n <div class=\"p-5\">\n <h4 class=\"mb-3 flex items-center\">\n <button\n (click)=\"\n resetPasswordScreen(); goTo(TaonSessionState.LOGIN_OR_REGISTER)\n \"\n mat-icon-button\n type=\"button\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <span class=\"flex\">{{ t.gettext('Enter Registration Password') }}</span>\n </h4>\n <div class=\"w-full pt-3\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Enter Password For New Account</mat-label>\n\n <input\n #registrationPasswordInput\n matInput\n formControlName=\"password\"\n class=\"pl-1\"\n type=\"password\" />\n\n <mat-error\n *ngIf=\"\n form\n .get('password')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('password')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('password')?.hasError('required') &&\n form.get('password')?.touched\n \">\n {{ t.gettext('Password is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Repeat Password</mat-label>\n\n <input\n matInput\n formControlName=\"passwordRepeat\"\n class=\"pl-1\"\n type=\"password\" />\n\n <button\n mat-icon-button\n matSuffix\n color=\"primary\">\n <mat-icon>key_vertical</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form\n .get('passwordRepeat')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('passwordRepeat')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('passwordRepeat')?.hasError('required') &&\n form.get('passwordRepeat')?.touched\n \">\n {{ t.gettext('Repeated Password is ') }}\n <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n <mat-error\n *ngIf=\"\n form.get('passwordRepeat').valid &&\n form.get('password').valid &&\n form.hasError(TaonLoginErrors.PASSWORDS_DO_NOT_MATCH)\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.PASSWORDS_DO_NOT_MATCH) }}\n </mat-error>\n </form>\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.LOGIN_SUCCESS\">\n <!-- #region login success -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login Successfully\n </h4>\n\n @if (!isInsideDialog) {\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n <button\n mat-button\n (click)=\"logout()\">\n Logout\n </button>\n </div>\n }\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.PROFILE_INFO\">\n <!-- #region profile info -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Welcome\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n\n <taon-session-profile\n [config]=\"config\"\n (logout)=\"logout()\" />\n <!-- context -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n</taon-slide-content>\n","//#region @browser\nimport { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute, PRIMARY_OUTLET, Router, UrlTree } from '@angular/router';\n\nexport type TaonBackofficeEntity = 'user' | 'group' | 'role' | 'permission' | 'session';\n\n@Injectable()\nexport class TaonBackofficeNavigationService {\n private readonly router = inject(Router);\n\n private readonly route = inject(ActivatedRoute);\n\n detailsLink(entity: TaonBackofficeEntity, id: number | string): UrlTree {\n const ancestry = this.route.snapshot.pathFromRoot;\n const outletRoot = ancestry.find(route => route.outlet !== PRIMARY_OUTLET);\n if (!outletRoot) {\n throw new Error('Session backoffice details require an admin outlet');\n }\n //#endregion\n\n const scope = ancestry.find(route =>\n route.routeConfig?.children?.some(child => child.path === 'authorization'),\n );\n if (!scope) {\n throw new Error(\n 'Session backoffice authorization routes are not configured',\n );\n }\n\n const base = scope.pathFromRoot\n .slice(ancestry.indexOf(outletRoot))\n .flatMap(route => route.url.map(segment => segment.path));\n const userPath = scope.routeConfig.children.some(\n child => child.path === 'users',\n )\n ? ['users']\n : ['session', 'user'];\n const target =\n entity === 'user'\n ? userPath\n : entity === 'session'\n ? ['session']\n : ['authorization', `${entity}s`];\n const [first, ...rest] = [...base, ...target, String(id)];\n const currentOutlet =\n this.router.parseUrl(this.router.url).root.children[outletRoot.outlet];\n\n // Match the admin layout: replace only its outlet and retain its base matrix parameters.\n return this.router.createUrlTree([\n {\n outlets: {\n [outletRoot.outlet]: [\n first,\n { ...currentOutlet?.segments[0]?.parameters },\n ...rest,\n ],\n },\n },\n ]);\n }\n\n openDetails(entity: TaonBackofficeEntity, id: number | string): void {\n void this.router.navigateByUrl(this.detailsLink(entity, id));\n }\n}\n","import {\n GET,\n Query,\n Models,\n Taon,\n TaonBaseCrudController,\n TaonController,\n TaonPaginationQuery,\n getStatusCode,\n HttpStatusEnum,\n} from 'taon/browser';\nimport { Brackets } from 'taon-typeorm/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\n\nimport { TaonAuthContextRepository } from '../../taon-auth-context/taon-auth-context.repository';\nimport { TaonSessionUserIdentityRepository } from '../../taon-session-user/taon-session-user-identity.repository';\nimport { TaonSessionUserRepository } from '../../taon-session-user/taon-session-user.repository';\nimport { TaonSessionEntity } from '../taon-session.entity';\nimport { TaonSessionRepository } from '../taon-session.repository';\n\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.controller.ts', {} as any);\n\n@TaonController({\n className: 'TaonSessionBackofficeController',\n allowedMethods: ['paginationQuery', 'getBy'],\n})\nexport class TaonSessionBackofficeController extends TaonBaseCrudController<\n TaonSessionBackofficeModels.SessionRow,\n {},\n TaonSessionBackofficeController\n> {\n entityClassResolveFn = () => TaonSessionEntity;\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n private readonly taonAuthContextRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonSessionUserIdentityRepository = this.injectCustomRepo(\n TaonSessionUserIdentityRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionBackofficeController>): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected async defaultPaginationQuery(\n query: TaonPaginationQuery<TaonSessionBackofficeController>,\n ): Promise<[TaonSessionBackofficeModels.SessionRow[], number]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n @GET()\n getBy(\n @Query('id') id: number | string,\n ): Taon.Response<TaonSessionBackofficeModels.SessionDetails> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionBackofficeController } from './taon-session-backoffice.controller';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\n@Injectable()\nexport class TaonSessionBackofficeApiService extends TaonBaseAngularService {\n readonly taonSessionBackofficeController = this.injectController(\n TaonSessionBackofficeController,\n );\n\n async getSessionDetails(\n id: number,\n ): Promise<TaonSessionBackofficeModels.SessionDetails> {\n const response = await this.taonSessionBackofficeController\n .getBy(id)\n .request();\n return response.body.json;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonBackofficeNavigationService } from './taon-backoffice-navigation.service';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-details.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session-details',\n templateUrl: './taon-session-details.component.html',\n styleUrls: ['./taon-session-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DatePipe, RouterLink],\n providers: [\n TaonSessionBackofficeApiService,\n TaonBackofficeNavigationService,\n ],\n})\nexport class TaonSessionDetailsComponent implements OnChanges {\n readonly t = t.for(this);\n\n @Input({ required: true }) sessionId!: number;\n\n @Input() detail?: TaonSessionBackofficeModels.SessionDetails;\n\n readonly taonBackofficeNavigationService = inject(TaonBackofficeNavigationService);\n\n private readonly taonSessionBackofficeApiService = inject(TaonSessionBackofficeApiService);\n\n readonly session = signal<TaonSessionBackofficeModels.SessionDetails | null>(null);\n\n readonly loading = signal(false);\n\n readonly error = signal('');\n\n private requestId = 0;\n\n ngOnChanges(): void {\n const requestId = ++this.requestId;\n this.session.set(this.detail ?? null);\n this.error.set('');\n this.loading.set(!this.detail);\n if (!this.detail) {\n void this.loadDetails(requestId);\n }\n }\n\n private async loadDetails(requestId: number): Promise<void> {\n try {\n const detail = await this.taonSessionBackofficeApiService.getSessionDetails(\n Number(this.sessionId),\n );\n if (requestId === this.requestId) {\n this.session.set(detail);\n }\n } catch (error) {\n if (requestId === this.requestId) {\n console.error('[session-details]', error);\n this.error.set(this.t.gettext('Unable to load session details.'));\n }\n } finally {\n if (requestId === this.requestId) {\n this.loading.set(false);\n }\n }\n }\n}\n","@if (loading()) {\n <p role=\"status\">{{ t.gettext('Loading session details...') }}</p>\n}\n@if (error()) {\n <p role=\"alert\">{{ error() }}</p>\n}\n@if (session(); as detail) {\n <dl class=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 p-4\">\n <dt>{{ t.gettext('Session ID') }}</dt>\n <dd>{{ detail.id }}</dd>\n <dt>{{ t.gettext('User ID') }}</dt>\n <dd>{{ detail.userId }}</dd>\n <dt>{{ t.gettext('Username') }}</dt>\n <dd>\n @if (detail.user; as user) {\n <a [routerLink]=\"taonBackofficeNavigationService.detailsLink('user', user.id)\">\n {{ user.username || 'User #' + user.id }}\n </a>\n } @else {\n {{ t.gettext('Unavailable') }}\n }\n </dd>\n <dt>{{ t.gettext('Email') }}</dt>\n <dd>{{ detail.identity?.email || t.gettext('Unavailable') }}</dd>\n <dt>{{ t.gettext('Provider') }}</dt>\n <dd>{{ detail.authenticationProvider || detail.identity?.provider || t.gettext('Unavailable') }}</dd>\n @if (detail.identityId) {\n <dt>{{ t.gettext('Identity ID') }}</dt>\n <dd>{{ detail.identityId }}</dd>\n }\n <dt>{{ t.gettext('Device') }}</dt>\n <dd>{{ detail.deviceName || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('IP') }}</dt>\n <dd>{{ detail.ip || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('User agent') }}</dt>\n <dd class=\"break-all\">{{ detail.userAgent || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Logged in') }}</dt>\n <dd>{{ (detail.createdAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Last activity') }}</dt>\n <dd>{{ (detail.lastActivityAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Expires') }}</dt>\n <dd>{{ (detail.expiresAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Revoked') }}</dt>\n <dd>{{ (detail.revokedAt | date: 'medium') || t.gettext('Not revoked') }}</dd>\n @if (detail.revokeReason) {\n <dt>{{ t.gettext('Revocation reason') }}</dt>\n <dd>{{ detail.revokeReason }}</dd>\n }\n </dl>\n}\n","//#region imports\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonBackofficeNavigationService } from './taon-backoffice-navigation.service';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\nimport { TaonSessionDetailsComponent } from './taon-session-details.component';\n\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.ts', {} as any);\n\n@Component({\n selector: 'app-taon-session-backoffice',\n templateUrl: './taon-session-backoffice.component.html',\n styleUrls: ['./taon-session-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonSessionDetailsComponent],\n providers: [\n TaonSessionBackofficeApiService,\n TaonBackofficeNavigationService,\n ],\n})\nexport class TaonSessionBackofficeComponent {\n readonly t = t.for(this);\n\n readonly taonSessionBackofficeApiService = inject(TaonSessionBackofficeApiService);\n\n readonly taonBackofficeNavigationService = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonSessionBackofficeApiService.taonSessionBackofficeController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: this.t.gettext('User ID'), field: 'userId', sortable: true, showExpand: true },\n { header: this.t.gettext('Device'), field: 'deviceName', sortable: true },\n { header: this.t.gettext('IP'), field: 'ip', sortable: true },\n {\n header: this.t.gettext('Actions'),\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: this.t.gettext('Session details'),\n click: (session: TaonSessionBackofficeModels.SessionRow) =>\n this.taonBackofficeNavigationService.openDetails('session', session.id),\n },\n ],\n },\n ];\n}\n","<h2>{{ t.gettext('Active sessions') }}</h2>\n<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['userId', 'deviceName', 'ip']\"\n [hideAddButton]=\"true\"\n searchMode=\"advanced\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-session>\n <taon-session-details [sessionId]=\"session.id\"></taon-session-details>\n</ng-template>\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n POST,\n DELETE,\n Body,\n Models,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserGroupRepository } from '../taon-session-user/taon-session-user-group.repository';\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\n\nimport { TaonGroupRoleRepository } from './taon-group-role.repository';\nimport { TaonGroupEntity } from './taon-group.entity';\nimport { TaonGroupRepository } from './taon-group.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonGroupController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'getGroupsForUser',\n 'assignGroupToUser',\n 'unassignGroupFromUser',\n 'getRolesForGroup',\n 'assignRoleToGroup',\n 'unassignRoleFromGroup',\n //#endregion\n ],\n})\nexport class TaonGroupController extends TaonBaseCrudController<\n TaonGroupEntity,\n {},\n TaonGroupController\n> {\n entityClassResolveFn: () => typeof TaonGroupEntity = () => TaonGroupEntity;\n\n taonGroupRepository = this.injectCustomRepo(TaonGroupRepository);\n\n private readonly taonGroupRoleRepository = this.injectCustomRepo(\n TaonGroupRoleRepository,\n );\n\n private readonly taonSessionUserGroupRepository = this.injectCustomRepo(\n TaonSessionUserGroupRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n //#region methods & getters / before each request\n protected async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n //#endregion\n\n //#region methods & getters / groups assigned to user\n @GET()\n getGroupsForUser(\n @Query('userId') userId: number,\n ): Taon.Response<TaonGroupEntity[]> {\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign group to user\n @POST()\n assignGroupToUser(\n @Body('userId') userId: number,\n @Body('groupId') groupId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign group from user\n @DELETE()\n unassignGroupFromUser(\n @Query('userId') userId: number,\n @Query('groupId') groupId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / roles assigned to group\n @GET()\n getRolesForGroup(\n @Query('groupId') groupId: number,\n ): Taon.Response<TaonRoleEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign role to group\n @POST()\n assignRoleToGroup(\n @Body('groupId') groupId: number,\n @Body('roleId') roleId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign role from group\n @DELETE()\n unassignRoleFromGroup(\n @Query('groupId') groupId: number,\n @Query('roleId') roleId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\nimport { TaonGroupController } from './taon-group.controller';\nimport type { TaonGroupEntity } from './taon-group.entity';\n\n@Injectable()\nexport class TaonGroupApiService extends TaonBaseAngularService {\n public taonGroupController = this.injectController(TaonGroupController);\n\n public get allMyEntities$(): Observable<TaonGroupEntity[]> {\n return this.taonGroupController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all groups\n\n async getAllGroups(): Promise<TaonGroupEntity[]> {\n const response = await this.taonGroupController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / user groups\n\n async getGroupsForUser(userId: number): Promise<TaonGroupEntity[]> {\n const response = await this.taonGroupController\n .getGroupsForUser(userId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignGroupToUser(userId: number, groupId: number): Promise<void> {\n await this.taonGroupController.assignGroupToUser(userId, groupId).request();\n }\n\n async unassignGroupFromUser(userId: number, groupId: number): Promise<void> {\n await this.taonGroupController\n .unassignGroupFromUser(userId, groupId)\n .request();\n }\n\n //#endregion\n\n //#region methods / group roles\n\n async getRolesForGroup(groupId: number): Promise<TaonRoleEntity[]> {\n const response = await this.taonGroupController\n .getRolesForGroup(groupId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignRoleToGroup(groupId: number, roleId: number): Promise<void> {\n await this.taonGroupController.assignRoleToGroup(groupId, roleId).request();\n }\n\n async unassignRoleFromGroup(groupId: number, roleId: number): Promise<void> {\n await this.taonGroupController\n .unassignRoleFromGroup(groupId, roleId)\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n Models,\n GET,\n POST,\n DELETE,\n Body,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\n\nimport { TaonRolePermissionRepository } from './taon-role-permission.repository';\nimport { TaonRoleEntity } from './taon-role.entity';\nimport { TaonRoleRepository } from './taon-role.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonRoleController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'getPermissionsForRole',\n 'assignPermissionToRole',\n 'unassignPermissionFromRole',\n //#endregion\n ],\n})\nexport class TaonRoleController extends TaonBaseCrudController<TaonRoleEntity> {\n entityClassResolveFn: () => typeof TaonRoleEntity = () => TaonRoleEntity;\n\n taonRoleRepository = this.injectCustomRepo(TaonRoleRepository);\n\n private readonly taonRolePermissionRepository = this.injectCustomRepo(\n TaonRolePermissionRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n\n //#region methods & getters / permissions assigned to role\n @GET()\n getPermissionsForRole(\n @Query('roleId') roleId: number,\n ): Taon.Response<TaonPermissionEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign permission to role\n @POST()\n assignPermissionToRole(\n @Body('roleId') roleId: number,\n @Body('permissionId') permissionId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign permission from role\n @DELETE()\n unassignPermissionFromRole(\n @Query('roleId') roleId: number,\n @Query('permissionId') permissionId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\n\nimport type { TaonRoleEntity } from './taon-role.entity';\nimport { TaonRoleController } from './taon-role.controller';\n\n@Injectable()\nexport class TaonRoleApiService extends TaonBaseAngularService {\n public taonRoleController = this.injectController(TaonRoleController);\n\n public get allMyEntities$(): Observable<TaonRoleEntity[]> {\n return this.taonRoleController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all roles\n\n async getAllRoles(): Promise<TaonRoleEntity[]> {\n const response = await this.taonRoleController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / role permissions\n\n async getPermissionsForRole(roleId: number): Promise<TaonPermissionEntity[]> {\n const response = await this.taonRoleController\n .getPermissionsForRole(roleId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignPermissionToRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n await this.taonRoleController\n .assignPermissionToRole(roleId, permissionId)\n .request();\n }\n\n async unassignPermissionFromRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n await this.taonRoleController\n .unassignPermissionFromRole(roleId, permissionId)\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n PUT,\n Body,\n Models,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionRepository } from './taon-permission.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonPermissionController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'updateDescription',\n //#endregion\n ],\n})\nexport class TaonPermissionController extends TaonBaseCrudController<TaonPermissionEntity> {\n entityClassResolveFn: () => typeof TaonPermissionEntity = () =>\n TaonPermissionEntity;\n\n taonPermissionRepository = this.injectCustomRepo(TaonPermissionRepository);\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n\n //#region methods & getters / update description\n @PUT()\n updateDescription(\n @Body('permissionId') permissionId: number,\n @Body('description') description: string,\n ): Taon.Response<TaonPermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionController } from './taon-permission.controller';\n\n@Injectable()\nexport class TaonPermissionApiService extends TaonBaseAngularService {\n public taonPermissionController = this.injectController(\n TaonPermissionController,\n );\n\n public get allMyEntities$(): Observable<TaonPermissionEntity[]> {\n return this.taonPermissionController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all permissions\n\n async getAllPermissions(): Promise<TaonPermissionEntity[]> {\n const response = await this.taonPermissionController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / description\n\n async updateDescription(\n permissionId: number,\n description: string,\n ): Promise<TaonPermissionEntity> {\n const response = await this.taonPermissionController\n .updateDescription(permissionId, description)\n .request();\n\n return response.body?.json;\n }\n\n //#endregion\n}\n","//#region @browser\nimport { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport type { TaonGroupEntity } from '../../taon-group/taon-group.entity';\nimport { TaonRoleApiService } from '../../taon-role/taon-role-api.service';\nimport type { TaonRoleEntity } from '../../taon-role/taon-role.entity';\nimport { TaonPermissionApiService } from '../../taon-permission/taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../../taon-permission/taon-permission.entity';\nimport { TaonSessionUserApiService } from '../../taon-session-user/taon-session-user-api.service';\nimport type { TaonSessionUserEntity } from '../../taon-session-user/taon-session-user.entity';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport type { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nexport type TaonBackofficeDetail =\n | { kind: 'user'; entity: TaonSessionUserEntity }\n | { kind: 'group'; entity: TaonGroupEntity }\n | { kind: 'role'; entity: TaonRoleEntity }\n | { kind: 'permission'; entity: TaonPermissionEntity }\n | { kind: 'session'; entity: TaonSessionBackofficeModels.SessionDetails };\n\nexport const taonBackofficeDetailsResolver: ResolveFn<\n TaonBackofficeDetail\n> = async route => {\n const id = Number(route.paramMap.get('id'));\n if (!Number.isSafeInteger(id) || id <= 0) {\n throw new Error('Invalid backoffice entity ID');\n }\n\n let detail: TaonBackofficeDetail;\n switch (route.data['kind']) {\n case 'session':\n detail = {\n kind: 'session',\n entity: await inject(TaonSessionBackofficeApiService).getSessionDetails(id),\n };\n break;\n case 'user':\n detail = {\n kind: 'user',\n entity: (await inject(TaonSessionUserApiService)\n .taonSessionUserController.getBy(id).request()).body.json,\n };\n break;\n case 'group':\n detail = {\n kind: 'group',\n entity: (await inject(TaonGroupApiService)\n .taonGroupController.getBy(id).request()).body.json,\n };\n break;\n case 'role':\n detail = {\n kind: 'role',\n entity: (await inject(TaonRoleApiService)\n .taonRoleController.getBy(id).request()).body.json,\n };\n break;\n case 'permission':\n detail = {\n kind: 'permission',\n entity: (await inject(TaonPermissionApiService)\n .taonPermissionController.getBy(id).request()).body.json,\n };\n break;\n default:\n throw new Error('Unknown backoffice entity');\n }\n if (!detail.entity) {\n throw new Error('Backoffice entity not found');\n }\n return detail;\n};\n\n//#endregion\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\nimport { taonBackofficeDetailsResolver } from './taon-backoffice-details.resolver';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\n//#endregion\n\nexport const TaonSessionBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-session-backoffice.component').then(\n m => m.TaonSessionBackofficeComponent,\n ),\n },\n adminLazyRoute({\n path: 'user',\n menuItem: 'Users',\n icon: 'account_circle',\n expandable: true,\n loader: () =>\n import('../../taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes').then(\n m => m.TaonSessionBackofficeUsersRoutes,\n ),\n }),\n {\n path: ':id',\n data: { kind: 'session', hideInNavigation: true },\n providers: [TaonSessionBackofficeApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('./taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonSessionBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonSessionBackofficeRoutes;\n","//#region imports\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n Input,\n OnInit,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { walk } from 'lodash-walk-object/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionComponent } from '../taon-session/taon-session.component';\nimport { TaonSessionApiService } from '../taon-session.api.service';\nimport { TaonSessionConfigService } from '../taon-session.config.service';\nimport { TaonSessionState } from '../taon-session.models';\nimport { TaonSessionConfig } from '../taon-session.provider';\nimport { TaonSessionStateService } from '../taon-session.state.service';\n\n//#endregion\n\n@Component({\n selector: 'taon-session-button',\n templateUrl: './taon-session-button.component.html',\n styleUrls: ['./taon-session-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n forwardRef(() => TaonSessionApiService),\n TaonSessionStateService,\n TaonSessionConfigService,\n ],\n imports: [\n AsyncPipe,\n RouterOutlet,\n MatButtonModule,\n MatIconModule,\n CommonModule,\n ],\n})\nexport class TaonSessionButtonComponent implements OnInit {\n //#region fields & getters\n\n protected readonly taonSessionStateService = inject(TaonSessionStateService);\n\n protected readonly taonSessionConfigService = inject(\n TaonSessionConfigService,\n );\n\n @Input()\n config: TaonSessionConfig;\n\n private readonly dialog = inject(MatDialog);\n\n private readonly router = inject(Router);\n\n //#endregion\n\n constructor() {}\n\n //#region methods / open login dialog\n\n openLogin(): void {\n const instance = this.dialog.open(TaonSessionComponent, {\n width: '410px',\n data: null,\n autoFocus: true,\n });\n const classInstance = instance.componentInstance;\n classInstance.config = this.config;\n classInstance.taonSessionStateService = this.taonSessionStateService;\n }\n //#endregion\n\n //#region go to dashboard\n goDashboard(): void {\n if (this.config.login.linkToDashboard) {\n void this.router.navigateByUrl(this.config.login.linkToDashboard);\n }\n }\n //#endregion\n\n //#region logout\n profile(): void {\n const instance = this.dialog.open(TaonSessionComponent, {\n width: '410px',\n data: null,\n autoFocus: true,\n });\n const classInstance = instance.componentInstance;\n classInstance.config = this.config;\n classInstance.taonSessionStateService = this.taonSessionStateService;\n\n this.taonSessionStateService.state.set(TaonSessionState.PROFILE_INFO);\n }\n //#endregion\n\n //#region hooks / ngOnInit\n ngOnInit(): void {\n const config = this.taonSessionConfigService.clone();\n walk.Object(\n this.config || {},\n (value, lodashPath) => {\n _.set(config, lodashPath, value);\n },\n {\n walkGetters: false,\n },\n );\n this.config = config;\n\n if (\n this.config.socialLogin.microsoft.enabled &&\n !this.config.socialLogin.microsoft.microsoftClientId\n ) {\n console.warn(\n '[taon-session-button] Microsoft client id missing [microsoftClientId]',\n );\n }\n if (\n this.config.socialLogin.google.enabled &&\n !this.config.socialLogin.google.googleClientId\n ) {\n console.warn(\n '[taon-session-button] Google client id missing [googleClientId]',\n );\n }\n //Called after the constructor, initializing input properties, and the first call to ngOnChanges.\n //Add 'implements OnInit' to the class.\n // console.log('this.displayDashboardButton', this.displayDashboardButton);\n this.config.login.displayDashboardButton = _.isBoolean(\n this.config.login.displayDashboardButton,\n )\n ? this.config.login.displayDashboardButton\n : true;\n }\n //#endregion\n}\n","<div class=\"flex align-items-center gap-2\">\n <ng-container\n *ngIf=\"\n (taonSessionStateService.isLoggedIn$ | async) === false;\n else loggedIn\n \">\n <button\n mat-button\n (click)=\"openLogin()\">\n Login\n </button>\n </ng-container>\n\n <ng-template #loggedIn>\n <button\n *ngIf=\"displayDashboardButton\"\n mat-button\n color=\"primary\"\n class=\"auth-btn\"\n (click)=\"goDashboard()\">\n <mat-icon>dashboard</mat-icon>\n Dashboard\n </button>\n\n <button\n mat-button\n class=\"ml-2\"\n (click)=\"profile()\">\n Welcome user: {{ taonSessionStateService.userId() }}\n </button>\n </ng-template>\n</div>\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionEntity } from '../taon-session/taon-session.entity';\nimport {\n CustomColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonBaseEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\nexport interface TaonAuthorizationSchema {\n group: string;\n role: string;\n permission: string;\n}\n\n@TaonEntity({\n className: 'TaonAuthContextEntity',\n createTable: false,\n})\nexport class TaonAuthContextEntity<\n AUTH extends TaonAuthorizationSchema = {\n group: string;\n role: string;\n permission: string;\n },\n> extends TaonBaseEntity<TaonAuthContextEntity> {\n user!: TaonSessionUserEntity;\n\n isSuperUser: boolean = false;\n\n isLocalhostBackend: boolean = false;\n\n session!: TaonSessionEntity;\n\n groups: AUTH['group'][] = [];\n\n roles: AUTH['role'][] = [];\n\n permissions: AUTH['permission'][] = [];\n\n hasPermission(permission: AUTH['permission']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.permissions.includes(permission);\n }\n\n hasRole(role: AUTH['role']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.roles.includes(role);\n }\n\n isInGroup(group: AUTH['group']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.groups.includes(group);\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuthContextEntity } from './taon-auth-context.entity';\nimport { TaonAuthContextRepository } from './taon-auth-context.repository';\n//#endregion\n\nexport const TaonAuthContextContext = createContext(() => ({\n contextName: 'TaonAuthContextContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonAuthContextEntity },\n repositories: { TaonAuthContextRepository },\n}));\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonGroupMiddleware',\n})\nexport class TaonGroupMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonGroupProvider',\n})\nexport class TaonGroupProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonGroupRoleEntity } from './taon-group-role.entity';\nimport { TaonGroupRoleRepository } from './taon-group-role.repository';\nimport { TaonGroupController } from './taon-group.controller';\nimport { TaonGroupEntity } from './taon-group.entity';\nimport { TaonGroupMiddleware } from './taon-group.middleware';\nimport { TaonGroupProvider } from './taon-group.provider';\nimport { TaonGroupRepository } from './taon-group.repository';\n//#endregion\n\nexport const TaonGroupContext = createContext(() => ({\n contextName: 'TaonGroupContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonGroupEntity: TaonGroupEntity,\n TaonGroupRoleEntity: TaonGroupRoleEntity,\n },\n controllers: { TaonGroupController },\n repositories: { TaonGroupRepository, TaonGroupRoleRepository },\n providers: { TaonGroupProvider },\n middlewares: { TaonGroupMiddleware },\n}));\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonPermissionMiddleware',\n})\nexport class TaonPermissionMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonPermissionProvider',\n})\nexport class TaonPermissionProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionProvider } from './taon-permission.provider';\n//#endregion\n\n@TaonSubscriber<TaonPermissionSubscriber>({\n className: 'TaonPermissionSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonPermissionSubscriber extends TaonBaseSubscriberForEntity {\n taonPermissionProvider = this.injectProvider(TaonPermissionProvider);\n listenTo(): typeof TaonPermissionEntity {\n return TaonPermissionEntity;\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonPermissionController } from './taon-permission.controller';\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionMiddleware } from './taon-permission.middleware';\nimport { TaonPermissionProvider } from './taon-permission.provider';\nimport { TaonPermissionRepository } from './taon-permission.repository';\nimport { TaonPermissionSubscriber } from './taon-permission.subscriber';\n//#endregion\n\nexport const TaonPermissionContext = createContext(() => ({\n contextName: 'TaonPermissionContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonPermissionEntity },\n controllers: { TaonPermissionController },\n repositories: { TaonPermissionRepository },\n providers: { TaonPermissionProvider },\n middlewares: { TaonPermissionMiddleware },\n subscribers: { TaonPermissionSubscriber },\n}));\n","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonRoleProvider',\n})\nexport class TaonRoleProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\n\nimport { TaonRolePermissionEntity } from './taon-role-permission.entity';\nimport { TaonRoleController } from './taon-role.controller';\nimport { TaonRoleEntity } from './taon-role.entity';\n// import { TaonRoleMiddleware } from './taon-role.middleware';/\nimport { TaonRoleProvider } from './taon-role.provider';\nimport { TaonRoleRepository } from './taon-role.repository';\n// import { TaonRoleSubscriber } from './taon-role.subscriber';\n//#endregion\n\nexport const TaonRoleContext = createContext(() => ({\n contextName: 'TaonRoleContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonRoleEntity: TaonRoleEntity,\n TaonRolePermissionEntity: TaonRolePermissionEntity,\n },\n controllers: { TaonRoleController },\n repositories: { TaonRoleRepository, TaonRolePermissionRepository },\n providers: { TaonRoleProvider },\n // middlewares: { TaonRoleMiddleware },\n // subscribers: { TaonRoleSubscriber },\n}));\n","//#region imports\nimport {\n CustomColumn,\n Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonProfileDefaultsValues } from './taon-profile.constants';\n//#endregion\n\n@TaonEntity<TaonProfileEntity>({\n className: 'TaonProfileEntity',\n createTable: false,\n // defaultModelMapping: () => ({\n // '': TaonProfileEntity,\n // nestedObjectField: ClassField,\n // nestedArrField: [ClassObjArrField],\n // }),\n})\nexport class TaonProfileEntity extends TaonBaseAbstractEntity<TaonProfileEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n description?: string;\n}\n","//#region imports\nimport { Taon, TaonBaseClass, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\nexport class TaonTaonProfileConfig extends TaonBaseClass {\n declare name: string;\n}\n\n@TaonProvider({\n className: 'TaonProfileProvider',\n})\nexport class TaonProfileProvider extends TaonBaseProvider {\n enabledTaonProfileOption: boolean = true;\n\n config = new TaonTaonProfileConfig();\n\n clone() {\n return {\n enabledTaonProfileOption: this.enabledTaonProfileOption,\n config: this.config.clone(),\n };\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonProfileController } from './taon-profile.controller';\nimport { TaonProfileEntity } from './taon-profile.entity';\nimport { TaonProfileProvider } from './taon-profile.provider';\n// import { TaonProfileRepository } from './taon-profile.repository';\n// import { TaonProfileKvRepository } from './taon-profile.kv.repository';\n// import { TaonProfileMiddleware } from './taon-profile.middleware';\n// import { TaonProfileSubscriber } from './taon-profile.subscriber';\n//#endregion\n\nexport const TaonProfileAbstractContext = createContext(() => ({\n contextName: 'TaonProfileAbstractContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonProfileEntity },\n controllers: { TaonProfileController },\n // repositories: {\n // // TaonProfileKvRepository\n // TaonProfileRepository,\n // },\n providers: { TaonProfileProvider },\n // middlewares: { TaonProfileMiddleware },\n // subscribers: { TaonProfileSubscriber },\n}));\n","//#region imports\nimport { TaonEmailsAbstractContext } from '@taon-dev/emails/browser';\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuditEventsContext, TaonNotificationContext } from '../index';\nimport { TaonAuthContextContext } from '../taon-auth-context/taon-auth-context.abstract.context';\nimport { TaonGroupContext } from '../taon-group/taon-group.abstract.context';\nimport { TaonPermissionContext } from '../taon-permission/taon-permission.abstract.context';\nimport { TaonRoleContext } from '../taon-role/taon-role.abstract.context';\nimport { TaonProfileAbstractContext } from '../taon-session/taon-profile/taon-profile.abstract.context';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserContext } from '../taon-session-user/taon-session-user.abstract.context';\n\nimport { TaonSessionBackofficeController } from './taon-session-backoffice/taon-session-backoffice.controller';\nimport { TaonSessionController } from './taon-session.controller';\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionMiddleware } from './taon-session.middleware';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionStateService } from './taon-session.state.service';\n//#endregion\n\nexport const TaonSessionAbstractContext = createContext(() => ({\n contextName: 'TaonSessionAbstractContext',\n abstract: true,\n contexts: {\n TaonBaseContext,\n TaonEmailsAbstractContext,\n TaonSessionUserContext,\n TaonAuthContextContext,\n TaonGroupContext,\n TaonPermissionContext,\n TaonRoleContext,\n TaonNotificationContext,\n TaonAuditEventsContext,\n TaonProfileAbstractContext,\n },\n entities: { TaonSessionEntity: TaonSessionEntity },\n controllers: { TaonSessionController, TaonSessionBackofficeController },\n repositories: { TaonSessionKvRepository, TaonSessionRepository },\n providers: {\n TaonSessionProvider,\n /**\n * TODO somehow inject(TaonSessionApiService)\n * when creating manuall instace of TaonSessionStateService.\n * This state service could usefull on backend\n */\n // TaonSessionStateService,\n },\n logs: true,\n disabledRealtime: true,\n middlewares: { TaonSessionMiddleware },\n subscribers: {},\n}));\n","import { TaonServerMiddlewareInterceptOptions } from 'ng2-rest/browser';\n\nexport namespace TaonSessionUtils {\n export const getRequestMetadata = (\n req: TaonServerMiddlewareInterceptOptions['req'],\n ): { userAgent?: string; ip?: string; deviceName?: string } => {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n };\n\n interface GoogleTokenResponse {\n access_token?: string;\n expires_in?: number;\n refresh_token?: string;\n scope?: string;\n token_type?: string;\n id_token?: string;\n error?: string;\n error_description?: string;\n }\n\n interface GoogleIdTokenPayload {\n iss: string;\n aud: string | string[];\n sub: string;\n email?: string;\n email_verified?: boolean;\n name?: string;\n picture?: string;\n exp: number;\n iat: number;\n }\n\n interface GoogleJwk extends JsonWebKey {\n kid?: string;\n alg?: string;\n }\n\n //#region verify google authorization code\n export async function verifyGoogleAuthorizationCode(\n GOOGLE_CLIENT_ID: string,\n GOOGLE_CLIENT_SECRET: string,\n code: string,\n ) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region verify google id token\n async function verifyGoogleIdToken(\n idToken: string,\n expectedAudience: string,\n ): Promise<GoogleIdTokenPayload> {\n const parts = idToken.split('.');\n\n if (parts.length !== 3) {\n throw new Error('Invalid Google ID token.');\n }\n\n const [encodedHeader, encodedPayload, encodedSignature] = parts;\n\n const header = JSON.parse(decodeBase64UrlToString(encodedHeader)) as {\n alg?: string;\n kid?: string;\n };\n\n if (header.alg !== 'RS256') {\n throw new Error(`Unsupported Google JWT algorithm: ${header.alg}`);\n }\n\n if (!header.kid) {\n throw new Error('Google ID token does not contain kid.');\n }\n\n // ---------------------------------------------------------\n // Google's public signing keys\n // ---------------------------------------------------------\n\n const jwksResponse = await fetch(\n 'https://www.googleapis.com/oauth2/v3/certs',\n );\n\n if (!jwksResponse.ok) {\n throw new Error('Unable to download Google signing keys.');\n }\n\n const jwks = (await jwksResponse.json()) as {\n keys: GoogleJwk[];\n };\n\n const jwk = jwks.keys.find(key => key.kid === header.kid);\n\n if (!jwk) {\n throw new Error('Google signing key not found.');\n }\n\n // ---------------------------------------------------------\n // Import RSA public key\n // ---------------------------------------------------------\n\n const publicKey = await crypto.subtle.importKey(\n 'jwk',\n jwk,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: 'SHA-256',\n },\n false,\n ['verify'],\n );\n\n // ---------------------------------------------------------\n // Verify JWT signature\n // ---------------------------------------------------------\n\n const signedData = new TextEncoder().encode(\n `${encodedHeader}.${encodedPayload}`,\n );\n\n const signature = decodeBase64UrlToBytes(encodedSignature);\n\n const validSignature = await crypto.subtle.verify(\n 'RSASSA-PKCS1-v1_5',\n publicKey,\n // @ts-ignore\n signature,\n signedData,\n );\n\n if (!validSignature) {\n throw new Error('Invalid Google ID token signature.');\n }\n\n // ---------------------------------------------------------\n // Decode + validate claims\n // ---------------------------------------------------------\n\n const payload = JSON.parse(\n decodeBase64UrlToString(encodedPayload),\n ) as GoogleIdTokenPayload;\n\n if (\n payload.iss !== 'https://accounts.google.com' &&\n payload.iss !== 'accounts.google.com'\n ) {\n throw new Error(`Invalid Google token issuer: ${payload.iss}`);\n }\n\n const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n if (!audiences.includes(expectedAudience)) {\n throw new Error('Google ID token audience mismatch.');\n }\n\n const now = Math.floor(Date.now() / 1000);\n\n if (!payload.exp || payload.exp <= now) {\n throw new Error('Google ID token has expired.');\n }\n\n return payload;\n }\n //#endregion\n\n //#region base64 url\n function decodeBase64UrlToBytes(input: string): Uint8Array {\n let base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n\n base64 += '='.repeat((4 - (base64.length % 4)) % 4);\n\n const binary = atob(base64);\n\n const result = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n result[i] = binary.charCodeAt(i);\n }\n\n return result;\n }\n\n function decodeBase64UrlToString(input: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(input));\n }\n //#endregion\n}\n","//#region imports\nimport { Taon } from 'taon/browser';\nimport { UtilsJson, UtilsOs, UtilsTerminal } from 'tnp-core/browser';\nimport { Helpers, BaseCommandLineFeature } from 'tnp-helpers/browser';\n/* */ \n\nimport { TaonSessionAbstractContext, TaonSessionController } from './taon-session';\n\nimport { DEFAULT_SESSION_EMAIL, DEFAULT_SESSION_PASSWORD } from './index';\n\n//#endregion\n\n//#region create taon context\nconst host = UtilsOs.isRunningInCloudflareWorker()\n ? ''\n : `http://localhost:${Number(\n Helpers.readFile('.taon/libs-apps-ports/HOST_BACKEND_PORT_1'),\n )}`;\n// console.log({ overrideRemoteHost });\n\nconst TaonSessionActiveCtx = UtilsOs.isRunningInCloudflareWorker()\n ? ({} as any)\n : !UtilsOs.isRunningInCliMode()\n ? ({} as ReturnType<typeof Taon.createContext>)\n : TaonSessionAbstractContext.cloneAsRemote({\n overrideRemoteHost: host,\n overrideContextName: 'SessionContext',\n });\n//#endregion\n\n//#region CLI / global scope\n/**\n * This class is for handling global arguments. *\n * Cli engine will parse: hello:world:from:global:arg to helloWorldFromGlobalArg\n * (lower case, camel case) .. so you don't need to worry about misspelling\n * arguments\n */\nclass $Global extends BaseCommandLineFeature<{}> {\n //#region initialize (before each method)\n protected async __initialize__() {\n/* */\n/* */\n/* */\n return (void 0);\n await super.__initialize__();\n }\n //#endregion\n\n //#region _\n /**\n * When you execute cli without arguments:`$ cli`\n */\n public _() {\n console.log(`Hello world from cli`);\n this._exit();\n }\n //#endregion\n\n //#region menu\n async menu() {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region ping\n /**\n * When you execute: `$ cli hello:world:from:global:arg`\n * (or `$ cli helloWorldFromGlobalArg`)\n */\n async ping() {\n const taonSessionController = await TaonSessionActiveCtx.getClassInstance(\n TaonSessionController,\n );\n\n try {\n const data = await taonSessionController.helloWorld().request!();\n console.log(data.body.text);\n } catch (error) {\n console.error(error);\n }\n\n this._exit();\n }\n //#endregion\n}\n//#endregion\n\n//#region CLI / Version Scope\n/**\n *\n */\nclass $Version extends BaseCommandLineFeature<{\n anyCLIparamsHere: string;\n}> {\n /**\n * When you execute: `$ cli version`\n */\n public _() {\n console.log(`Hello world from version argument`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli version:getFromPackageJson`\n */\n public getFromPackageJson() {\n const ver = UtilsJson.getValue(\n this.project.pathFor('package.json'),\n 'version',\n {\n defaultValue: '<not defined>',\n },\n );\n console.log(`Version from packageJson ${ver}`);\n this._exit(0);\n }\n}\n//#endregion\n\n//#region start cli\n/**\n *\n * @param argsv process.argsv\n * @param filename needed if you want ipc communicaiton\n */\nexport async function startCli(\n argsv: string[],\n filename: string,\n): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n}\n//#endregion\n\nexport default startCli;\n","//#region imports\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n Index,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuditEventsDefaultsValues } from './taon-audit-events.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonAuditEventsEntity',\n createTable: true,\n})\nexport class TaonAuditEventsEntity extends TaonBaseAbstractEntity<TaonAuditEventsEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n type!: string;\n\n /**\n * Who performed the action.\n */\n\n/* */\n/* */\n \n actorUserId?: number;\n\n /**\n * Who/what was affected.\n */\n\n/* */\n/* */\n \n targetType?: string;\n\n/* */\n/* */\n \n targetId?: string;\n\n/* */\n/* */\n \n sessionId?: number;\n\n/* */\n/* */\n \n ip?: string;\n\n/* */\n/* */\n \n userAgent?: string;\n\n/* */\n/* */\n \n data?: Record<string, any>;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonAuditEventsRepository',\n})\nexport class TaonAuditEventsRepository extends TaonBaseRepository<TaonAuditEventsEntity> {\n entityClassResolveFn: () => typeof TaonAuditEventsEntity = () => TaonAuditEventsEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsRepository } from './taon-audit-events.repository';\n//#endregion\n\n@TaonController<TaonAuditEventsController>({\n className: 'TaonAuditEventsController',\n allowedMethods: [],\n})\nexport class TaonAuditEventsController extends TaonBaseCrudController<TaonAuditEventsEntity> {\n entityClassResolveFn: () => typeof TaonAuditEventsEntity = () =>\n TaonAuditEventsEntity;\n\n taonAuditEventsRepository = this.injectCustomRepo(TaonAuditEventsRepository);\n\n //#region methods & getters / hello world\n /**\n * TODO remove this demo example method\n */\n @GET()\n helloWord(@Query('yourName') yourName: string): Taon.Response<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonAuditEventsController } from './taon-audit-events.controller';\nimport type { TaonAuditEventsEntity } from './taon-audit-events.entity';\n\n@Injectable()\nexport class TaonAuditEventsApiService extends TaonBaseAngularService {\n private taonAuditEventsController = this.injectController(TaonAuditEventsController);\n\n public get allMyEntities$(): Observable<TaonAuditEventsEntity[]> {\n return this.taonAuditEventsController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n public helloWorld(user:string): Observable<string> {\n return this.taonAuditEventsController.helloWord(user).request!().observable.pipe(\n map(res => res.responseText as string),\n );\n }\n}\n","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonAuditEventsProvider',\n})\nexport class TaonAuditEventsProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonAuditEventsMiddleware',\n})\nexport class TaonAuditEventsMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsProvider } from './taon-audit-events.provider';\n//#endregion\n\n@TaonSubscriber<TaonAuditEventsSubscriber>({\n className: 'TaonAuditEventsSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonAuditEventsSubscriber extends TaonBaseSubscriberForEntity {\n taonAuditEventsProvider = this.injectProvider(TaonAuditEventsProvider);\n listenTo(): typeof TaonAuditEventsEntity {\n return TaonAuditEventsEntity;\n }\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsController } from './taon-audit-events.controller';\nimport { TaonAuditEventsRepository } from './taon-audit-events.repository';\nimport { TaonAuditEventsProvider } from './taon-audit-events.provider';\nimport { TaonAuditEventsMiddleware } from './taon-audit-events.middleware';\nimport { TaonAuditEventsSubscriber } from './taon-audit-events.subscriber';\n//#endregion\n\nexport const TaonAuditEventsContext = createContext(() => ({\n contextName: 'TaonAuditEventsContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonAuditEventsEntity },\n controllers: { TaonAuditEventsController },\n repositories: { TaonAuditEventsRepository },\n providers: { TaonAuditEventsProvider },\n middlewares: { TaonAuditEventsMiddleware },\n subscribers: { TaonAuditEventsSubscriber },\n}));","import type { TaonAuditEventsEntity } from './taon-audit-events.entity';\n\nexport const TaonAuditEventsDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonAuditEventsEntity>;","export enum TaonAuditEventsState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonAuditEventsState } from './taon-audit-events.models';\n\nexport namespace TaonAuditEventsUtils {\n export function isActive(state: string): state is TaonAuditEventsState {\n return state === 'active';\n }\n}","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n//#endregion\n\n@Component({\n selector: 'app-taon-authorization-backoffice',\n templateUrl: './taon-authorization-backoffice.component.html',\n styleUrls: ['./taon-authorization-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, RouterOutlet],\n})\nexport class TaonAuthorizationBackofficeComponent {\n componentLoaded = false;\n\n onRouteActivate(component: any): void {\n this.componentLoaded = !!component;\n }\n\n onRouteDeactivate(component: any): void {\n this.componentLoaded = false;\n }\n}\n","@if (!componentLoaded) {\n <code>\n In authorization section you can manager Group, Roles and Persmission inside\n system.\n </code>\n}\n\n<router-outlet\n (activate)=\"onRouteActivate($event)\"\n (deactivate)=\"onRouteDeactivate($event)\"></router-outlet>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\n//#endregion\n\nexport const TaonAuthorizationBackofficeRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-authorization-backoffice.component').then(\n m => m.TaonAuthorizationBackofficeComponent,\n ),\n\n children: [\n adminLazyRoute({\n path: 'groups',\n menuItem: 'Groups',\n icon: 'groups',\n expandable: false,\n loader: () =>\n import('../taon-group/taon-group-backoffice/taon-group-backoffice.routes').then(\n m => m.TaonGroupBackofficeRoutes,\n ),\n }),\n adminLazyRoute({\n path: 'roles',\n menuItem: 'Roles',\n icon: 'recent_actors',\n expandable: false,\n loader: () =>\n import('../taon-role/taon-role-backoffice/taon-role-backoffice.routes').then(\n m => m.TaonRoleBackofficeRoutes,\n ),\n }),\n adminLazyRoute({\n path: 'permissions',\n menuItem: 'Permissions',\n icon: 'approval',\n expandable: false,\n loader: () =>\n import('../taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes').then(\n m => m.TaonPermissionBackofficeRoutes,\n ),\n }),\n ],\n },\n];\n\n/**\n * By default exporting TaonAuthorizationBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonAuthorizationBackofficeRoutes;\n","import type { TaonGroupEntity } from './taon-group.entity';\n\nexport const TaonGroupDefaultsValues = {\n\n} as Partial<TaonGroupEntity>;\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonNotificationRecipientEntity } from '../taon-notification/taon-notification-recipient.entity';\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n ManyToOne,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonNotificationDefaultsValues } from './taon-notification.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonNotificationEntity',\n createTable: true,\n})\nexport class TaonNotificationEntity extends TaonBaseAbstractEntity<TaonNotificationEntity> {\n /**\n * Stable machine-readable code.\n *\n * video.processing.finished\n * auth.session.revoked\n * payment.success\n */\n\n/* */\n/* */\n \n type!: string;\n\n/* */\n/* */\n \n title!: string;\n\n/* */\n/* */\n \n message?: string;\n\n /**\n * Optional route/action.\n *\n * /projects/123\n * /videos/abc\n */\n\n/* */\n/* */\n \n actionUrl?: string;\n\n /**\n * Arbitrary strongly-typed-by-your-code payload.\n */\n\n/* */\n/* */\n \n data?: Record<string, any>;\n\n/* */\n/* */\n \n createdByUserId?: number;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n expiresAt?: Date;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n \n recipients!: TaonNotificationRecipientEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonNotificationEntity } from './taon-notification.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonNotificationRepository',\n})\nexport class TaonNotificationRepository extends TaonBaseRepository<TaonNotificationEntity> {\n entityClassResolveFn: () => typeof TaonNotificationEntity = () => TaonNotificationEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationRepository } from './taon-notification.repository';\n//#endregion\n\n@TaonController<TaonNotificationController>({\n className: 'TaonNotificationController',\n allowedMethods: [],\n})\nexport class TaonNotificationController extends TaonBaseCrudController<TaonNotificationEntity> {\n entityClassResolveFn: () => typeof TaonNotificationEntity = () =>\n TaonNotificationEntity;\n\n taonNotificationRepository = this.injectCustomRepo(\n TaonNotificationRepository,\n );\n\n //#region methods & getters / hello world\n /**\n * TODO remove this demo example method\n */\n @GET()\n helloWord(@Query('yourName') yourName: string): Taon.Response<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationController } from './taon-notification.controller';\n\n@Injectable()\nexport class TaonNotificationApiService extends TaonBaseAngularService {\n private taonNotificationController = this.injectController(TaonNotificationController);\n\n public get allMyEntities$(): Observable<TaonNotificationEntity[]> {\n return this.taonNotificationController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n public helloWorld(user:string): Observable<string> {\n return this.taonNotificationController.helloWord(user).request!().observable.pipe(\n map(res => res.responseText as string),\n );\n }\n}","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonNotificationEntity } from '../taon-notification/taon-notification.entity';\nimport {\n Column,\n DateTimeColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonNotificationRecipientEntity',\n createTable: true,\n})\nexport class TaonNotificationRecipientEntity extends TaonBaseAbstractEntity<TaonNotificationRecipientEntity> {\n/* */\n/* */\n/* */\n/* */\n \n notificationId!: number;\n\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n notification!: TaonNotificationEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n \n readAt?: Date;\n\n/* */\n/* */\n \n dismissedAt?: Date;\n\n/* */\n/* */\n \n deliveredAt?: Date;\n}\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonNotificationMiddleware',\n})\nexport class TaonNotificationMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonNotificationProvider',\n})\nexport class TaonNotificationProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationProvider } from './taon-notification.provider';\n//#endregion\n\n@TaonSubscriber<TaonNotificationSubscriber>({\n className: 'TaonNotificationSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonNotificationSubscriber extends TaonBaseSubscriberForEntity {\n taonNotificationProvider = this.injectProvider(TaonNotificationProvider);\n listenTo(): typeof TaonNotificationEntity {\n return TaonNotificationEntity;\n }\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonNotificationRecipientEntity } from './taon-notification-recipient.entity';\nimport { TaonNotificationController } from './taon-notification.controller';\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationMiddleware } from './taon-notification.middleware';\nimport { TaonNotificationProvider } from './taon-notification.provider';\nimport { TaonNotificationRepository } from './taon-notification.repository';\nimport { TaonNotificationSubscriber } from './taon-notification.subscriber';\n//#endregion\n\nexport const TaonNotificationContext = createContext(() => ({\n contextName: 'TaonNotificationContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonNotificationEntity, TaonNotificationRecipientEntity },\n controllers: { TaonNotificationController },\n repositories: { TaonNotificationRepository },\n providers: { TaonNotificationProvider },\n middlewares: { TaonNotificationMiddleware },\n subscribers: { TaonNotificationSubscriber },\n}));\n","import type { TaonNotificationEntity } from './taon-notification.entity';\n\nexport const TaonNotificationDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonNotificationEntity>;","export enum TaonNotificationState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonNotificationState } from './taon-notification.models';\n\nexport namespace TaonNotificationUtils {\n export function isActive(state: string): state is TaonNotificationState {\n return state === 'active';\n }\n}","import type { TaonPermissionEntity } from './taon-permission.entity';\n\nexport const TaonPermissionDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonPermissionEntity>;\n","export enum TaonPermissionState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonPermissionState } from './taon-permission.models';\n\nexport namespace TaonPermissionUtils {\n export function isActive(state: string): state is TaonPermissionState {\n return state === 'active';\n }\n}","import type { TaonRoleEntity } from './taon-role.entity';\n\nexport const TaonRoleDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonRoleEntity>;\n","export enum TaonRoleState {\n Active = 'active',\n Inactive = 'inactive',\n}","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n//#endregion\n\n@Component({\n selector: 'taon-role-chooser',\n templateUrl: './taon-role-chooser.component.html',\n styleUrls: ['./taon-role-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonRoleApiService, TaonGroupApiService],\n})\nexport class TaonRoleChooserComponent {\n //#region inject\n\n private readonly taonRoleApiService = inject(TaonRoleApiService);\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) groupId!: number;\n\n @Input() excludedRoleIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly roles = signal<TaonRoleEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedRoleId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadRoles();\n }\n\n //#endregion\n\n //#region getters\n\n get availableRoles(): TaonRoleEntity[] {\n return this.roles().filter(\n role => !this.excludedRoleIds.includes(role.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadRoles(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.roles.set(await this.taonRoleApiService.getAllRoles());\n } catch {\n this.roles.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const roleId = this.selectedRoleId;\n\n if (!roleId || !this.groupId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonGroupApiService.assignRoleToGroup(this.groupId, roleId);\n\n this.selectedRoleId = undefined;\n\n this.assigned.emit(roleId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedRoleId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-role-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-role-chooser__field\">\n <mat-label> Role </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedRoleId\"\n [disabled]=\"loading() || saving()\">\n @for (role of availableRoles; track role.id) {\n <mat-option [value]=\"role.id\">\n {{ role.name }} ({{ role.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No roles available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedRoleId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonRoleChooserComponent } from '../../taon-role/taon-role-chooser/taon-role-chooser.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n\nimport { TaonGroupBackofficeModels } from './taon-group-backoffice.models';\n//#endregion\n\n@Component({\n selector: 'taon-group-details',\n templateUrl: './taon-group-details.component.html',\n styleUrls: ['./taon-group-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonRoleChooserComponent,\n ],\n providers: [TaonGroupApiService, TaonBackofficeNavigationService],\n})\nexport class TaonGroupDetailsComponent implements OnChanges {\n @Input({ required: true }) group!: TaonGroupEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n ngOnChanges(): void {\n void this.loadRolesForGroup(Number(this.group.id));\n }\n //#region inject\n\n taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region state\n\n readonly roleRowsByGroupId = signal<\n Record<number, TaonGroupBackofficeModels.AssignedRoleRow[]>\n >({});\n\n readonly roleChooserGroupId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while roles are not loaded yet.\n */\n private readonly emptyRoleRows: TaonGroupBackofficeModels.AssignedRoleRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedRoleIdsByGroupId = signal<Record<number, number[]>>(\n {},\n );\n\n //#endregion\n\n //#region columns\n\n roleColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'roleId',\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Role details',\n click: (row: TaonGroupBackofficeModels.AssignedRoleRow) =>\n this.navigation.openDetails('role', row.roleId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove role from group',\n click: (row: TaonGroupBackofficeModels.AssignedRoleRow) =>\n void this.unassignRole(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n roleRowsFor(groupId: number): TaonGroupBackofficeModels.AssignedRoleRow[] {\n return this.roleRowsByGroupId()[groupId] ?? this.emptyRoleRows;\n }\n\n assignedRoleIds(groupId: number): number[] {\n return this.assignedRoleIdsByGroupId()[groupId] ?? this.emptyIds;\n }\n\n openRoleChooser(groupId: number): void {\n this.roleChooserGroupId.set(groupId);\n }\n\n closeRoleChooser(): void {\n this.roleChooserGroupId.set(undefined);\n }\n\n roleAssigned(groupId: number): void {\n this.closeRoleChooser();\n\n void this.loadRolesForGroup(groupId);\n }\n\n async loadRolesForGroup(groupId: number): Promise<void> {\n if (!groupId) {\n return;\n }\n\n const roles = await this.taonGroupApiService.getRolesForGroup(groupId);\n\n const rows = roles.map(role => ({\n groupId,\n roleId: role.id as number,\n name: role.name,\n code: role.code,\n description: role.description,\n }));\n\n this.roleRowsByGroupId.set({\n ...this.roleRowsByGroupId(),\n [groupId]: rows,\n });\n\n this.assignedRoleIdsByGroupId.set({\n ...this.assignedRoleIdsByGroupId(),\n [groupId]: rows.map(row => row.roleId),\n });\n }\n\n async unassignRole(\n row: TaonGroupBackofficeModels.AssignedRoleRow,\n ): Promise<void> {\n await this.taonGroupApiService.unassignRoleFromGroup(\n row.groupId,\n row.roleId,\n );\n\n await this.loadRolesForGroup(row.groupId);\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('group', group.id)\">Group details #{{ group.id }}</a>\n <div class=\"group-details__section\">\n <div class=\"group-details__section-header\">\n <h4 class=\"group-details__section-title\">Group roles</h4>\n\n @if (roleChooserGroupId() !== group.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openRoleChooser(group.id)\">\n <mat-icon> add_moderator </mat-icon>\n\n Assign role\n </button>\n }\n </div>\n\n @if (roleChooserGroupId() === group.id) {\n <taon-role-chooser\n [groupId]=\"group.id\"\n [excludedRoleIds]=\"assignedRoleIds(group.id)\"\n (assigned)=\"roleAssigned(group.id)\"\n (cancelled)=\"closeRoleChooser()\">\n </taon-role-chooser>\n }\n\n <taon-datatable\n [data]=\"roleRowsFor(group.id)\"\n [columns]=\"roleColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n\nimport { TaonGroupDetailsComponent } from './taon-group-details.component';\n\n@Component({\n selector: 'app-taon-group-backoffice',\n templateUrl: './taon-group-backoffice.component.html',\n styleUrls: ['./taon-group-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonGroupDetailsComponent],\n providers: [TaonGroupApiService, TaonBackofficeNavigationService],\n})\nexport class TaonGroupBackofficeComponent {\n readonly taonGroupApiService = inject(TaonGroupApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonGroupApiService.taonGroupController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Name', field: 'name', sortable: true },\n { header: 'Code', field: 'code', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Group details',\n click: (group: TaonGroupEntity) =>\n this.navigation.openDetails('group', group.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-group>\n <taon-group-details [group]=\"group\"></taon-group-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\nimport { TaonGroupApiService } from '../taon-group-api.service';\n//#endregion\n\nexport const TaonGroupBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-group-backoffice.component').then(\n m => m.TaonGroupBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'group', hideInNavigation: true },\n providers: [TaonGroupApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonGroupBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonGroupBackofficeRoutes;\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n//#endregion\n\n@Component({\n selector: 'taon-group-chooser',\n templateUrl: './taon-group-chooser.component.html',\n styleUrls: ['./taon-group-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonGroupApiService],\n})\nexport class TaonGroupChooserComponent {\n //#region inject\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) userId!: number;\n\n @Input() excludedGroupIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly groups = signal<TaonGroupEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedGroupId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadGroups();\n }\n\n //#endregion\n\n //#region getters\n\n get availableGroups(): TaonGroupEntity[] {\n return this.groups().filter(\n group => !this.excludedGroupIds.includes(group.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadGroups(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.groups.set(await this.taonGroupApiService.getAllGroups());\n } catch {\n this.groups.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const groupId = this.selectedGroupId;\n\n if (!groupId || !this.userId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonGroupApiService.assignGroupToUser(this.userId, groupId);\n\n this.selectedGroupId = undefined;\n\n this.assigned.emit(groupId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedGroupId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-group-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-group-chooser__field\">\n <mat-label> Group </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedGroupId\"\n [disabled]=\"loading() || saving()\">\n @for (group of availableGroups; track group.id) {\n <mat-option [value]=\"group.id\">\n {{ group.name }} ({{ group.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No groups available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedGroupId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n//#endregion\n\n@Component({\n selector: 'taon-permission-view-edit',\n templateUrl: './taon-permission-view-edit.component.html',\n styleUrls: ['./taon-permission-view-edit.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n ],\n providers: [TaonPermissionApiService],\n})\nexport class TaonPermissionViewEditComponent {\n //#region inject\n\n private readonly taonPermissionApiService = inject(TaonPermissionApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true })\n set permission(value: TaonPermissionEntity) {\n this._permission = value;\n\n this.description.set(value?.description ?? '');\n\n this.editMode.set(false);\n }\n\n get permission(): TaonPermissionEntity {\n return this._permission;\n }\n\n @Output() readonly descriptionChanged = new EventEmitter<string>();\n\n //#endregion\n\n //#region state\n\n private _permission!: TaonPermissionEntity;\n\n readonly description = signal('');\n\n readonly draftDescription = signal('');\n\n readonly editMode = signal(false);\n\n readonly saving = signal(false);\n\n //#endregion\n\n //#region methods\n\n edit(): void {\n this.draftDescription.set(this.description());\n\n this.editMode.set(true);\n }\n\n cancel(): void {\n this.draftDescription.set(this.description());\n\n this.editMode.set(false);\n }\n\n async save(): Promise<void> {\n if (!this.permission?.id) {\n return;\n }\n\n const newDescription = this.draftDescription();\n\n this.saving.set(true);\n\n try {\n await this.taonPermissionApiService.updateDescription(\n this.permission.id as number,\n newDescription,\n );\n\n this.permission.description = newDescription;\n\n this.description.set(newDescription);\n\n this.editMode.set(false);\n\n this.descriptionChanged.emit(newDescription);\n } finally {\n this.saving.set(false);\n }\n }\n\n //#endregion\n}\n","<div class=\"taon-permission-view-edit\">\n @if (editMode()) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-permission-view-edit__field\">\n <mat-label> Description </mat-label>\n\n <textarea\n matInput\n rows=\"4\"\n [ngModel]=\"draftDescription()\"\n (ngModelChange)=\"draftDescription.set($event)\"\n [disabled]=\"saving()\">\n </textarea>\n </mat-form-field>\n\n <div class=\"taon-permission-view-edit__actions\">\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"save()\">\n <mat-icon> save </mat-icon>\n\n Save\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n </div>\n } @else {\n <div class=\"taon-permission-view-edit__description\">\n {{ description() || 'No description' }}\n </div>\n\n <div class=\"taon-permission-view-edit__actions\">\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"edit()\">\n <mat-icon> edit </mat-icon>\n\n Edit\n </button>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonPermissionViewEditComponent } from '../taon-permission-view-edit/taon-permission-view-edit.component';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n\n@Component({\n selector: 'taon-permission-details',\n template: `\n <a [routerLink]=\"navigation.detailsLink('permission', permission.id)\">Permission details #{{ permission.id }}</a>\n <div class=\"permission-details__section\">\n <h4 class=\"permission-details__section-title\">Description</h4>\n <taon-permission-view-edit [permission]=\"permission\"></taon-permission-view-edit>\n </div>\n `,\n styleUrls: ['./taon-permission-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, TaonPermissionViewEditComponent],\n providers: [TaonBackofficeNavigationService],\n})\nexport class TaonPermissionDetailsComponent {\n @Input({ required: true }) permission!: TaonPermissionEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n}\n","//#region imports\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n\nimport { TaonPermissionDetailsComponent } from './taon-permission-details.component';\n//#endregion\n\n@Component({\n selector: 'app-taon-permission-backoffice',\n templateUrl: './taon-permission-backoffice.component.html',\n styleUrls: ['./taon-permission-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TaonDatatableComponent,\n TaonPermissionDetailsComponent,\n ],\n providers: [TaonPermissionApiService, TaonBackofficeNavigationService],\n})\nexport class TaonPermissionBackofficeComponent {\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n taonPermissionApiService = inject(TaonPermissionApiService);\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n public get crud() {\n return this.taonPermissionApiService.taonPermissionController;\n }\n\n columns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'id',\n sortable: true,\n showExpand: true,\n },\n {\n header: 'Name',\n field: 'name',\n sortable: true,\n },\n {\n header: 'Code',\n field: 'code',\n sortable: true,\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Permission details',\n click: (permission: TaonPermissionEntity) =>\n this.navigation.openDetails('permission', permission.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n\n<ng-template\n #expansionTemplate\n let-permission>\n <taon-permission-details [permission]=\"permission\"></taon-permission-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\n//#endregion\n\nexport const TaonPermissionBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-permission-backoffice.component').then(\n m => m.TaonPermissionBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'permission', hideInNavigation: true },\n providers: [TaonPermissionApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonPermissionBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonPermissionBackofficeRoutes;\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonRoleApiService } from '../../taon-role/taon-role-api.service';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n//#endregion\n\n@Component({\n selector: 'taon-permission-chooser',\n templateUrl: './taon-permission-chooser.component.html',\n styleUrls: ['./taon-permission-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonPermissionApiService, TaonRoleApiService],\n})\nexport class TaonPermissionChooserComponent {\n //#region inject\n\n private readonly taonPermissionApiService = inject(TaonPermissionApiService);\n\n private readonly taonRoleApiService = inject(TaonRoleApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) roleId!: number;\n\n @Input() excludedPermissionIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly permissions = signal<TaonPermissionEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedPermissionId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadPermissions();\n }\n\n //#endregion\n\n //#region getters\n\n get availablePermissions(): TaonPermissionEntity[] {\n return this.permissions().filter(\n permission =>\n !this.excludedPermissionIds.includes(permission.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadPermissions(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.permissions.set(\n await this.taonPermissionApiService.getAllPermissions(),\n );\n } catch {\n this.permissions.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const permissionId = this.selectedPermissionId;\n\n if (!permissionId || !this.roleId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonRoleApiService.assignPermissionToRole(\n this.roleId,\n permissionId,\n );\n\n this.selectedPermissionId = undefined;\n\n this.assigned.emit(permissionId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedPermissionId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-permission-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-permission-chooser__field\">\n <mat-label> Permission </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedPermissionId\"\n [disabled]=\"loading() || saving()\">\n @for (permission of availablePermissions; track permission.id) {\n <mat-option [value]=\"permission.id\">\n {{ permission.name }} ({{ permission.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No permissions available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedPermissionId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonPermissionChooserComponent } from '../../taon-permission/taon-permission-chooser/taon-permission-chooser.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n\nimport { TaonRoleBackofficeModels } from './taon-role-backoffice.models';\n//#endregion\n\n@Component({\n selector: 'taon-role-details',\n templateUrl: './taon-role-details.component.html',\n styleUrls: ['./taon-role-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonPermissionChooserComponent,\n ],\n providers: [TaonRoleApiService, TaonBackofficeNavigationService],\n})\nexport class TaonRoleDetailsComponent implements OnChanges {\n @Input({ required: true }) role!: TaonRoleEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n ngOnChanges(): void {\n void this.loadPermissionsForRole(Number(this.role.id));\n }\n //#region inject\n\n taonRoleApiService = inject(TaonRoleApiService);\n\n //#endregion\n\n //#region state\n\n readonly permissionRowsByRoleId = signal<\n Record<number, TaonRoleBackofficeModels.AssignedPermissionRow[]>\n >({});\n\n readonly permissionChooserRoleId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while permissions are not loaded yet.\n */\n private readonly emptyPermissionRows: TaonRoleBackofficeModels.AssignedPermissionRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedPermissionIdsByRoleId = signal<\n Record<number, number[]>\n >({});\n\n //#endregion\n\n //#region columns\n\n permissionColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'permissionId',\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Permission details',\n click: (row: TaonRoleBackofficeModels.AssignedPermissionRow) =>\n this.navigation.openDetails('permission', row.permissionId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove permission from role',\n click: (row: TaonRoleBackofficeModels.AssignedPermissionRow) =>\n void this.unassignPermission(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n permissionRowsFor(\n roleId: number,\n ): TaonRoleBackofficeModels.AssignedPermissionRow[] {\n return this.permissionRowsByRoleId()[roleId] ?? this.emptyPermissionRows;\n }\n\n assignedPermissionIds(roleId: number): number[] {\n return this.assignedPermissionIdsByRoleId()[roleId] ?? this.emptyIds;\n }\n\n openPermissionChooser(roleId: number): void {\n this.permissionChooserRoleId.set(roleId);\n }\n\n closePermissionChooser(): void {\n this.permissionChooserRoleId.set(undefined);\n }\n\n permissionAssigned(roleId: number): void {\n this.closePermissionChooser();\n\n void this.loadPermissionsForRole(roleId);\n }\n\n async loadPermissionsForRole(roleId: number): Promise<void> {\n if (!roleId) {\n return;\n }\n\n const permissions =\n await this.taonRoleApiService.getPermissionsForRole(roleId);\n\n const rows = permissions.map(permission => ({\n roleId,\n permissionId: permission.id as number,\n name: permission.name,\n code: permission.code,\n description: permission.description,\n }));\n\n this.permissionRowsByRoleId.set({\n ...this.permissionRowsByRoleId(),\n [roleId]: rows,\n });\n\n this.assignedPermissionIdsByRoleId.set({\n ...this.assignedPermissionIdsByRoleId(),\n [roleId]: rows.map(row => row.permissionId),\n });\n }\n\n async unassignPermission(\n row: TaonRoleBackofficeModels.AssignedPermissionRow,\n ): Promise<void> {\n await this.taonRoleApiService.unassignPermissionFromRole(\n row.roleId,\n row.permissionId,\n );\n\n await this.loadPermissionsForRole(row.roleId);\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('role', role.id)\">Role details #{{ role.id }}</a>\n <div class=\"role-details__section\">\n <div class=\"role-details__section-header\">\n <h4 class=\"role-details__section-title\">Role permissions</h4>\n\n @if (permissionChooserRoleId() !== role.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openPermissionChooser(role.id)\">\n <mat-icon> add </mat-icon>\n\n Assign permission\n </button>\n }\n </div>\n\n @if (permissionChooserRoleId() === role.id) {\n <taon-permission-chooser\n [roleId]=\"role.id\"\n [excludedPermissionIds]=\"assignedPermissionIds(role.id)\"\n (assigned)=\"permissionAssigned(role.id)\"\n (cancelled)=\"closePermissionChooser()\">\n </taon-permission-chooser>\n }\n\n <taon-datatable\n [data]=\"permissionRowsFor(role.id)\"\n [columns]=\"permissionColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n\nimport { TaonRoleDetailsComponent } from './taon-role-details.component';\n\n@Component({\n selector: 'app-taon-role-backoffice',\n templateUrl: './taon-role-backoffice.component.html',\n styleUrls: ['./taon-role-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonRoleDetailsComponent],\n providers: [TaonRoleApiService, TaonBackofficeNavigationService],\n})\nexport class TaonRoleBackofficeComponent {\n readonly taonRoleApiService = inject(TaonRoleApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonRoleApiService.taonRoleController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Name', field: 'name', sortable: true },\n { header: 'Code', field: 'code', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Role details',\n click: (role: TaonRoleEntity) =>\n this.navigation.openDetails('role', role.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-role>\n <taon-role-details [role]=\"role\"></taon-role-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\n//#endregion\n\nexport const TaonRoleBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-role-backoffice.component').then(\n m => m.TaonRoleBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'role', hideInNavigation: true },\n providers: [TaonRoleApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonRoleBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonRoleBackofficeRoutes;\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonProfileProvider } from './taon-profile.provider';\n//#endregion\n\n@Injectable()\nexport class TaonProfileConfigService extends TaonBaseAngularService {\n private taonProfileProvider = this.injectProvider(TaonProfileProvider);\n\n clone(): Partial<TaonProfileProvider> {\n const cloned = this.taonProfileProvider.clone();\n return cloned;\n }\n}\n","import type { TaonProfileEntity } from './taon-profile.entity';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile.constants.ts', {} as any);\n\nexport const TaonProfileDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonProfileEntity>;\n\nexport enum TaonProfileErrors {\n INVALID_PASSWORD_EXAMPLE_ERROR = 'INVALID_PASSWORD_EXAMPLE_ERROR',\n}\n\nexport const TaonProfileTranslationErorsMap = new Map([\n [TaonProfileErrors.INVALID_PASSWORD_EXAMPLE_ERROR, t.gettext('Invalid Password')],\n]);","//#region imports\nimport {\n TaonBaseRepository,\n TaonBaseKvRepository,\n TaonRepository,\n} from 'taon/browser';\n\nimport { TaonProfileEntity } from './taon-profile.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonProfileKvRepository',\n})\nexport class TaonProfileKvRepository extends TaonBaseKvRepository<{\n usersToNotify: TaonProfileEntity[];\n}> {\n async notifyUsers(users: TaonProfileEntity[]) {\n this.set('usersToNotify', users);\n }\n}","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n forwardRef,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport { TaonGroupChooserComponent } from '../../taon-group/taon-group-chooser/taon-group-chooser.component';\nimport type { TaonGroupEntity } from '../../taon-group/taon-group.entity';\nimport { TaonProfilePictureComponent } from '../../taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonSessionApiService } from '../../taon-session/taon-session.api.service';\nimport type { TaonSessionUserEntity } from '../taon-session-user.entity';\n\nimport { TaonSessionBackofficeUsersModels } from './taon-session-backoffice-users.models';\nimport { of } from 'rxjs';\n//#endregion\n\n@Component({\n selector: 'taon-session-user-details',\n templateUrl: './taon-session-user-details.component.html',\n styleUrls: ['./taon-session-backoffice-users.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonGroupChooserComponent,\n TaonProfilePictureComponent,\n ],\n providers: [\n TaonGroupApiService,\n TaonBackofficeNavigationService,\n forwardRef(() => TaonSessionApiService),\n ],\n})\nexport class TaonSessionUserDetailsComponent implements OnChanges {\n @Input({ required: true }) user!: TaonSessionUserEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n readonly taonSessionApiService = inject(TaonSessionApiService);\n\n context$ = this.taonSessionApiService.context();\n\n ngOnChanges(): void {\n void this.loadGroupsForUser(Number(this.user.id));\n }\n //#region inject\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region state\n\n readonly groupRowsByUserId = signal<\n Record<number, TaonSessionBackofficeUsersModels.AssignedGroupRow[]>\n >({});\n\n readonly groupChooserUserId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while groups are not loaded yet.\n */\n private readonly emptyGroupRows: TaonSessionBackofficeUsersModels.AssignedGroupRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedGroupIdsByUserId = signal<Record<number, number[]>>(\n {},\n );\n\n //#endregion\n\n //#region columns\n\n identityColumns: MtxGridColumn[] = [\n {\n header: 'Provider',\n field: 'provider',\n },\n {\n header: 'Email',\n field: 'email',\n },\n ];\n\n groupColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'groupId',\n showExpand: true,\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Group details',\n click: (row: TaonSessionBackofficeUsersModels.AssignedGroupRow) =>\n this.navigation.openDetails('group', row.groupId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove group from user',\n click: (row: TaonSessionBackofficeUsersModels.AssignedGroupRow) =>\n void this.unassignGroup(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n groupRowsFor(\n userId: number,\n ): TaonSessionBackofficeUsersModels.AssignedGroupRow[] {\n return this.groupRowsByUserId()[userId] ?? this.emptyGroupRows;\n }\n\n assignedGroupIds(userId: number): number[] {\n return this.assignedGroupIdsByUserId()[userId] ?? this.emptyIds;\n }\n\n openGroupChooser(userId: number): void {\n this.groupChooserUserId.set(userId);\n }\n\n closeGroupChooser(): void {\n this.groupChooserUserId.set(undefined);\n }\n\n groupAssigned(userId: number): void {\n this.closeGroupChooser();\n\n void this.loadGroupsForUser(userId);\n }\n\n async loadGroupsForUser(userId: number): Promise<void> {\n if (!userId) {\n return;\n }\n\n const groups = await this.taonGroupApiService.getGroupsForUser(userId);\n\n const rows = groups.map(group => ({\n userId,\n groupId: group.id as number,\n name: group.name,\n code: group.code,\n description: group.description,\n roles: this.roleRowsFromGroup(group),\n }));\n\n this.groupRowsByUserId.set({\n ...this.groupRowsByUserId(),\n [userId]: rows,\n });\n\n this.assignedGroupIdsByUserId.set({\n ...this.assignedGroupIdsByUserId(),\n [userId]: rows.map(row => row.groupId),\n });\n }\n\n async unassignGroup(\n row: TaonSessionBackofficeUsersModels.AssignedGroupRow,\n ): Promise<void> {\n await this.taonGroupApiService.unassignGroupFromUser(\n row.userId,\n row.groupId,\n );\n\n await this.loadGroupsForUser(row.userId);\n }\n\n //#endregion\n\n //#region private methods\n\n private roleRowsFromGroup(\n group: TaonGroupEntity,\n ): TaonSessionBackofficeUsersModels.AssignedGroupRoleRow[] {\n const rolesById = new Map<\n number,\n TaonSessionBackofficeUsersModels.AssignedGroupRoleRow\n >();\n\n for (const groupRole of group.groupRoles ?? []) {\n const role = groupRole.role;\n if (role) {\n rolesById.set(Number(role.id), {\n roleId: Number(role.id),\n name: role.name,\n });\n }\n }\n\n return [...rolesById.values()];\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('user', user.id)\">User details #{{ user.id }}</a>\n <!-- profile -->\n <div class=\"user-details__profile\">\n <div class=\"user-details__profile-picture\">\n <taon-profile-picture\n [userId]=\"user.id\"\n [readOnly]=\"!(context$ | async)?.isSuperUser\">\n </taon-profile-picture>\n </div>\n\n <div class=\"user-details__profile-fields\">\n <div class=\"user-details__profile-field\">\n <span class=\"user-details__profile-label\"> First Name </span>\n\n <span class=\"user-details__profile-value\"> - </span>\n </div>\n\n <div class=\"user-details__profile-field\">\n <span class=\"user-details__profile-label\"> Surname </span>\n\n <span class=\"user-details__profile-value\"> - </span>\n </div>\n </div>\n </div>\n\n <!-- groups -->\n <div class=\"user-details__section\">\n <div class=\"user-details__section-header\">\n <h4 class=\"user-details__section-title\">User groups</h4>\n\n @if (groupChooserUserId() !== user.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openGroupChooser(user.id)\">\n <mat-icon> group_add </mat-icon>\n\n Assign group\n </button>\n }\n </div>\n\n @if (groupChooserUserId() === user.id) {\n <taon-group-chooser\n [userId]=\"user.id\"\n [excludedGroupIds]=\"assignedGroupIds(user.id)\"\n (assigned)=\"groupAssigned(user.id)\"\n (cancelled)=\"closeGroupChooser()\">\n </taon-group-chooser>\n }\n\n <taon-datatable\n [data]=\"groupRowsFor(user.id)\"\n [columns]=\"groupColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\"\n [expansionTemplate]=\"groupExpansionTemplate\">\n </taon-datatable>\n </div>\n\n <!-- providers -->\n <div class=\"user-details__section\">\n <h4 class=\"user-details__section-title\">Providers</h4>\n\n <taon-datatable\n [data]=\"user.identities\"\n [columns]=\"identityColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n\n\n<ng-template\n #groupExpansionTemplate\n let-group>\n <div class=\"user-details__group-roles\">\n <span class=\"user-details__section-title\"> Roles from groups </span>\n\n <ul class=\"user-details__role-list\">\n @for (role of group.roles; track role.roleId) {\n <li class=\"user-details__role-item\">\n <a [routerLink]=\"navigation.detailsLink('role', role.roleId)\">{{ role.name }}</a>\n </li>\n } @empty {\n <li class=\"user-details__role-item\">\n No roles available through this group\n </li>\n }\n </ul>\n </div>\n</ng-template>\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { map } from 'rxjs';\n\nimport { TaonGroupDetailsComponent } from '../../taon-group/taon-group-backoffice/taon-group-details.component';\nimport { TaonPermissionDetailsComponent } from '../../taon-permission/taon-permission-backoffice/taon-permission-details.component';\nimport { TaonRoleDetailsComponent } from '../../taon-role/taon-role-backoffice/taon-role-details.component';\nimport { TaonSessionUserDetailsComponent } from '../../taon-session-user/taon-session-backoffice-users/taon-session-user-details.component';\n\nimport type { TaonBackofficeDetail } from './taon-backoffice-details.resolver';\nimport { TaonSessionDetailsComponent } from './taon-session-details.component';\n\n@Component({\n selector: 'taon-backoffice-details-page',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n forwardRef(() => TaonSessionUserDetailsComponent),\n forwardRef(() => TaonGroupDetailsComponent),\n forwardRef(() => TaonRoleDetailsComponent),\n forwardRef(() => TaonPermissionDetailsComponent),\n forwardRef(() => TaonSessionDetailsComponent),\n ],\n template: `\n @if (detail$ | async; as detail) {\n @switch (detail.kind) {\n @case ('session') {\n <h2>Session #{{ detail.entity.id }}</h2>\n <taon-session-details\n [sessionId]=\"detail.entity.id\"\n [detail]=\"detail.entity\"></taon-session-details>\n }\n @case ('user') {\n <h2>User: {{ detail.entity.username }} (#{{ detail.entity.id }})</h2>\n <taon-session-user-details\n [user]=\"detail.entity\"></taon-session-user-details>\n }\n @case ('group') {\n <h2>Group: {{ detail.entity.name }} (#{{ detail.entity.id }})</h2>\n <taon-group-details [group]=\"detail.entity\"></taon-group-details>\n }\n @case ('role') {\n <h2>Role: {{ detail.entity.name }} (#{{ detail.entity.id }})</h2>\n <taon-role-details [role]=\"detail.entity\"></taon-role-details>\n }\n @case ('permission') {\n <h2>\n Permission: {{ detail.entity.name }} (#{{ detail.entity.id }})\n </h2>\n <taon-permission-details\n [permission]=\"detail.entity\"></taon-permission-details>\n }\n }\n }\n `,\n})\nexport class TaonBackofficeDetailsPageComponent {\n readonly detail$ = inject(ActivatedRoute).data.pipe(\n map(data => data['detail'] as TaonBackofficeDetail),\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonSessionUserApiService } from '../taon-session-user-api.service';\nimport type { TaonSessionUserEntity } from '../taon-session-user.entity';\n\nimport { TaonSessionUserDetailsComponent } from './taon-session-user-details.component';\n\n@Component({\n selector: 'app-taon-session-backoffice-users',\n templateUrl: './taon-session-backoffice-users.component.html',\n styleUrls: ['./taon-session-backoffice-users.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TaonDatatableComponent,\n forwardRef(() => TaonSessionUserDetailsComponent),\n ],\n providers: [TaonSessionUserApiService, TaonBackofficeNavigationService],\n})\nexport class TaonSessionBackofficeUsersComponent {\n readonly userApiService = inject(TaonSessionUserApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.userApiService.taonSessionUserController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Username', field: 'username', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'User details',\n click: (user: TaonSessionUserEntity) =>\n this.navigation.openDetails('user', user.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'username']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-user>\n <taon-session-user-details [user]=\"user\"></taon-session-user-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { TaonSessionUserApiService } from '../taon-session-user-api.service';\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\n//#endregion\n\nexport const TaonSessionBackofficeUsersRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-session-backoffice-users.component').then(\n m => m.TaonSessionBackofficeUsersComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'user', hideInNavigation: true },\n providers: [TaonSessionUserApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonSessionBackofficeUsersRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonSessionBackofficeUsersRoutes;\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\n//#endregion\n\nexport const TaonProfilePictureRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-profile-picture.component').then(m => m.TaonProfilePictureComponent),\n\n children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n ],\n },\n];\n\n/**\n * By default exporting TaonProfilePictureRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonProfilePictureRoutes;","// @ts-nocheck\n// This file is auto-generated during init process. Do not modify.\n// This disable this auto generate file.\n// set property \"shouldGenerateAutogenIndexFile: false\" \n// in taon.jsonc of your project. \nexport * from './build-info._auto-generated_'; \nexport * from './my-organization-proj'; \nexport * from './start-cli'; \nexport * from './taon-audit-events/taon-audit-events-api.service'; // @browser\nexport * from './taon-audit-events/taon-audit-events.abstract.context'; \nexport * from './taon-audit-events/taon-audit-events.constants'; \nexport * from './taon-audit-events/taon-audit-events.controller'; \nexport * from './taon-audit-events/taon-audit-events.entity'; \nexport * from './taon-audit-events/taon-audit-events.middleware'; \nexport * from './taon-audit-events/taon-audit-events.models'; \nexport * from './taon-audit-events/taon-audit-events.provider'; \nexport * from './taon-audit-events/taon-audit-events.repository'; \nexport * from './taon-audit-events/taon-audit-events.subscriber'; \nexport * from './taon-audit-events/taon-audit-events.utils'; \nexport * from './taon-auth-context/taon-auth-context.abstract.context'; \nexport * from './taon-auth-context/taon-auth-context.entity'; \nexport * from './taon-auth-context/taon-auth-context.repository'; \nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.component'; // @browser\nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.models'; \nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.routes'; // @browser\nexport * from './taon-group/taon-group-api.service'; // @browser\nexport * from './taon-group/taon-group-role.entity'; \nexport * from './taon-group/taon-group-role.repository'; \nexport * from './taon-group/taon-group.abstract.context'; \nexport * from './taon-group/taon-group.constants'; \nexport * from './taon-group/taon-group.controller'; \nexport * from './taon-group/taon-group.entity'; \nexport * from './taon-group/taon-group.middleware'; \nexport * from './taon-group/taon-group.provider'; \nexport * from './taon-group/taon-group.repository'; \nexport * from './taon-notification/taon-notification-api.service'; // @browser\nexport * from './taon-notification/taon-notification-recipient.entity'; \nexport * from './taon-notification/taon-notification.abstract.context'; \nexport * from './taon-notification/taon-notification.constants'; \nexport * from './taon-notification/taon-notification.controller'; \nexport * from './taon-notification/taon-notification.entity'; \nexport * from './taon-notification/taon-notification.middleware'; \nexport * from './taon-notification/taon-notification.models'; \nexport * from './taon-notification/taon-notification.provider'; \nexport * from './taon-notification/taon-notification.repository'; \nexport * from './taon-notification/taon-notification.subscriber'; \nexport * from './taon-notification/taon-notification.utils'; \nexport * from './taon-permission/taon-permission-api.service'; // @browser\nexport * from './taon-permission/taon-permission.abstract.context'; \nexport * from './taon-permission/taon-permission.constants'; \nexport * from './taon-permission/taon-permission.controller'; \nexport * from './taon-permission/taon-permission.entity'; \nexport * from './taon-permission/taon-permission.middleware'; \nexport * from './taon-permission/taon-permission.models'; \nexport * from './taon-permission/taon-permission.provider'; \nexport * from './taon-permission/taon-permission.repository'; \nexport * from './taon-permission/taon-permission.subscriber'; \nexport * from './taon-permission/taon-permission.utils'; \nexport * from './taon-role/taon-role-api.service'; // @browser\nexport * from './taon-role/taon-role-permission.entity'; \nexport * from './taon-role/taon-role-permission.repository'; \nexport * from './taon-role/taon-role.abstract.context'; \nexport * from './taon-role/taon-role.constants'; \nexport * from './taon-role/taon-role.controller'; \nexport * from './taon-role/taon-role.entity'; \nexport * from './taon-role/taon-role.models'; \nexport * from './taon-role/taon-role.provider'; \nexport * from './taon-role/taon-role.repository'; \nexport * from './taon-session/taon-session.abstract.context'; \nexport * from './taon-session/taon-session.api.service'; // @browser\nexport * from './taon-session/taon-session.config.service'; // @browser\nexport * from './taon-session/taon-session.controller'; \nexport * from './taon-session/taon-session.entity'; \nexport * from './taon-session/taon-session.kv.repository'; \nexport * from './taon-session/taon-session.middleware'; \nexport * from './taon-session/taon-session.models'; \nexport * from './taon-session/taon-session.provider'; \nexport * from './taon-session/taon-session.repository'; \nexport * from './taon-session/taon-session.state.service'; // @browser\nexport * from './taon-session/taon-session.utils'; \nexport * from './taon-session/taon-session.validators'; \nexport * from './taon-session-user/taon-session-user-api.service'; // @browser\nexport * from './taon-session-user/taon-session-user-group.entity'; \nexport * from './taon-session-user/taon-session-user-group.repository'; \nexport * from './taon-session-user/taon-session-user-identity.entity'; \nexport * from './taon-session-user/taon-session-user-identity.repository'; \nexport * from './taon-session-user/taon-session-user-role.entity'; \nexport * from './taon-session-user/taon-session-user.abstract.context'; \nexport * from './taon-session-user/taon-session-user.constants'; \nexport * from './taon-session-user/taon-session-user.controller'; \nexport * from './taon-session-user/taon-session-user.entity'; \nexport * from './taon-session-user/taon-session-user.middleware'; \nexport * from './taon-session-user/taon-session-user.models'; \nexport * from './taon-session-user/taon-session-user.provider'; \nexport * from './taon-session-user/taon-session-user.repository'; \nexport * from './taon-session-user/taon-session-user.subscriber'; \nexport * from './taon-session-user/taon-session-user.utils'; \nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.component'; // @browser\nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.models'; \nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.routes'; // @browser\nexport * from './taon-group/taon-group-backoffice/taon-group-details.component'; // @browser\nexport * from './taon-group/taon-group-chooser/taon-group-chooser.component'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.component'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.models'; \nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-details.component'; // @browser\nexport * from './taon-permission/taon-permission-chooser/taon-permission-chooser.component'; // @browser\nexport * from './taon-permission/taon-permission-view-edit/taon-permission-view-edit.component'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.component'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.models'; \nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.routes'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-details.component'; // @browser\nexport * from './taon-role/taon-role-chooser/taon-role-chooser.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.abstract.context'; \nexport * from './taon-session/taon-profile/taon-profile.api.service'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.config.service'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.constants'; \nexport * from './taon-session/taon-profile/taon-profile.controller'; \nexport * from './taon-session/taon-profile/taon-profile.entity'; \nexport * from './taon-session/taon-profile/taon-profile.kv.repository'; \nexport * from './taon-session/taon-profile/taon-profile.models'; \nexport * from './taon-session/taon-profile/taon-profile.provider'; \nexport * from './taon-session/taon-session/taon-session.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-details-page.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-details.resolver'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-navigation.service'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.api.service'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.controller'; \nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.models'; \nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.routes'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-details.component'; // @browser\nexport * from './taon-session/taon-session-button/taon-session-button.component'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.models'; \nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-user-details.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.models'; \nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.routes'; // @browser\nexport * from './taon-session/taon-session/social-buttons/google-login-register-button.component'; // @browser\nexport * from './taon-session/taon-session/taon-session-profile/taon-session-profile.component'; // @browser\nexport * from './taon-session/taon-session/taon-session-profile/taon-session-profile.models'; ","export * from './migrations';\nexport * from './env';\nexport * from './index._auto-generated_';\n/* */ \nexport default {};\n\nexport const DEFAULT_SESSION_PASSWORD = 'ddd';\n\nexport const DEFAULT_SESSION_EMAIL = 'test@test.com';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t","i1","signal","catchError","map","i6","i7","i2","i3","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session-browser.mjs","sources":["../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-role.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-permission.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-permission.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/1790328479283_initial.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/migrations_index._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/migrations/index.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.angular-node-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.docs-webapp.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.electron-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.mobile-app.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.npm-lib-and-cli-tool.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/env/env.vscode-plugin.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/build-info._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/my-organization-proj.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.kv.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-identity.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-group.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-group.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-identity.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user-role.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-user.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.config.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.state.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.validators.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session/taon-session.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-navigation.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-details.resolver.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-button/taon-session-button.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-button/taon-session-button.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-auth-context/taon-auth-context.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/start-cli.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-audit-events/taon-audit-events.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-authorization-backoffice/taon-authorization-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.controller.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification-api.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification-recipient.entity.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.middleware.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.provider.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.subscriber.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.abstract.context.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-notification/taon-notification.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission.utils.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role.models.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-chooser/taon-role-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-chooser/taon-role-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-backoffice/taon-group-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-chooser/taon-group-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-group/taon-group-chooser/taon-group-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-view-edit/taon-permission-view-edit.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-view-edit/taon-permission-view-edit.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-chooser/taon-permission-chooser.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-permission/taon-permission-chooser/taon-permission-chooser.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-role/taon-role-backoffice/taon-role-backoffice.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.config.service.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.constants.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile.kv.repository.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-user-details.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-user-details.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-session-backoffice/taon-backoffice-details-page.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component.html","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.routes.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/index._auto-generated_.ts","../../../tmp-libs-for-dist/session/projects/session/src/lib/index.ts","../../../tmp-libs-for-dist/session/projects/session/src/session-browser.ts"],"sourcesContent":["//#region imports\nimport {\n Column,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonGroupEntity } from '../taon-group/taon-group.entity';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonGroupRoleEntity',\n createTable: true,\n})\nexport class TaonGroupRoleEntity extends TaonBaseAbstractEntity<TaonGroupRoleEntity> {\n/* */\n/* */\n \n groupId!: number;\n\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n group!: TaonGroupEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\nimport { TaonGroupRoleEntity } from './taon-group-role.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonGroupRoleRepository',\n})\nexport class TaonGroupRoleRepository extends TaonBaseRepository<TaonGroupRoleEntity> {\n entityClassResolveFn: () => typeof TaonGroupRoleEntity = () =>\n TaonGroupRoleEntity;\n\n /**\n * TODO remove this demo example method\n */\n //#region API / count entites with even id\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / get roles for group id\n async getRolesForGroupId(groupId: number): Promise<TaonRoleEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / assign role to group\n async assignRoleToGroup(\n groupId: number,\n roleId: number,\n ): Promise<TaonGroupRoleEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region API / unassign role from group\n async unassignRoleFromGroup(groupId: number, roleId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\nimport {\n Column,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonRolePermissionEntity',\n createTable: true,\n})\nexport class TaonRolePermissionEntity extends TaonBaseAbstractEntity<TaonRolePermissionEntity> {\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n \n permissionId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n permission!: TaonPermissionEntity;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\n\nimport { TaonRolePermissionEntity } from './taon-role-permission.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonRolePermissionRepository',\n})\nexport class TaonRolePermissionRepository extends TaonBaseRepository<TaonRolePermissionEntity> {\n entityClassResolveFn: () => typeof TaonRolePermissionEntity = () => TaonRolePermissionEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async getPermissionsForRoleId(\n roleId: number,\n ): Promise<TaonPermissionEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async assignPermissionToRole(\n roleId: number,\n permissionId: number,\n ): Promise<TaonRolePermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async unassignPermissionFromRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { TaonGroupEntity, TaonGroupRepository } from '../index';\nimport {\n TaonPermissionEntity,\n TaonPermissionRepository,\n} from '../index';\nimport { TaonRoleRepository } from '../index';\nimport { Taon, TaonBaseMigration, TaonMigration } from 'taon/browser';\nimport { QueryRunner } from 'taon-typeorm/browser';\n\nimport { TaonGroupRoleRepository } from '../taon-group/taon-group-role.repository';\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\n//#region Migration class for context \"SessionContext\"\n@TaonMigration({\n className: 'SessionContext_1790328479283_initial',\n})\nexport class SessionContext_1790328479283_initial extends TaonBaseMigration {\n groupRepo = this.injectCustomRepo(TaonGroupRepository);\n\n roleRepo = this.injectCustomRepo(TaonRoleRepository);\n\n permissionRepo = this.injectCustomRepo(TaonPermissionRepository);\n\n groupRoleRepo = this.injectCustomRepo(TaonGroupRoleRepository);\n\n rolePermissionRepo = this.injectCustomRepo(TaonRolePermissionRepository);\n\n //#region up\n async up(queryRunner: QueryRunner): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region helpers\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n //#endregion\n\n //#region down\n async down(queryRunner: QueryRunner): Promise<void> {\n // I'd normally remove by stable `code`,\n // NOT clearDatabase().\n }\n //#endregion\n}\n//#endregion\n","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { SessionContext_1790328479283_initial } from './1790328479283_initial';\n// THIS FILE IS GENERATED - DO NOT MODIFY\nexport const MIGRATIONS_CLASSES_FOR_SessionContext = {\n /* 25-09-2026 11:27:59 */ SessionContext_1790328479283_initial,\n};\n// THIS FILE IS GENERATED - DO NOT MODIFY\n","//@ts-nocheck\nexport * from './migrations_index._auto-generated_';\n","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_ANGULAR_NODE_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_ANGULAR_NODE_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_ANGULAR_NODE_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_ANGULAR_NODE_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_ANGULAR_NODE_APP_RELEASE_TARGET_ARTIFACT = 'angular-node-app';\n// release.envName\nexport const ENV_ANGULAR_NODE_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_ANGULAR_NODE_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_ANGULAR_NODE_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_ANGULAR_NODE_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_ANGULAR_NODE_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_ANGULAR_NODE_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_ANGULAR_NODE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_ANGULAR_NODE_APP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_ANGULAR_NODE_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_ANGULAR_NODE_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_ANGULAR_NODE_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_ANGULAR_NODE_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_ANGULAR_NODE_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_ANGULAR_NODE_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_ANGULAR_NODE_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_ANGULAR_NODE_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_ANGULAR_NODE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_ANGULAR_NODE_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_ANGULAR_NODE_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_ANGULAR_NODE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_ANGULAR_NODE_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_ANGULAR_NODE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_ANGULAR_NODE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_ANGULAR_NODE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_ANGULAR_NODE_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_ANGULAR_NODE_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_ANGULAR_NODE_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_ANGULAR_NODE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_ANGULAR_NODE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_DOCS_WEBAPP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_DOCS_WEBAPP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_DOCS_WEBAPP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_DOCS_WEBAPP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_DOCS_WEBAPP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_DOCS_WEBAPP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_DOCS_WEBAPP_RELEASE_TARGET_ARTIFACT = 'docs-webapp';\n// release.envName\nexport const ENV_DOCS_WEBAPP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_DOCS_WEBAPP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_DOCS_WEBAPP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_DOCS_WEBAPP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_DOCS_WEBAPP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_DOCS_WEBAPP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_DOCS_WEBAPP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_DOCS_WEBAPP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_DOCS_WEBAPP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_DOCS_WEBAPP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_DOCS_WEBAPP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_DOCS_WEBAPP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_DOCS_WEBAPP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_DOCS_WEBAPP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_DOCS_WEBAPP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_DOCS_WEBAPP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_DOCS_WEBAPP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_DOCS_WEBAPP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_DOCS_WEBAPP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_DOCS_WEBAPP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_DOCS_WEBAPP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_DOCS_WEBAPP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_DOCS_WEBAPP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_DOCS_WEBAPP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_DOCS_WEBAPP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_DOCS_WEBAPP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_DOCS_WEBAPP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_DOCS_WEBAPP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_DOCS_WEBAPP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_DOCS_WEBAPP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_DOCS_WEBAPP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_DOCS_WEBAPP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_DOCS_WEBAPP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_DOCS_WEBAPP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_DOCS_WEBAPP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_DOCS_WEBAPP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_DOCS_WEBAPP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_DOCS_WEBAPP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_ELECTRON_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_ELECTRON_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_ELECTRON_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// build.ssr\nexport const ENV_ELECTRON_APP_BUILD_SSR = false;\n// loading.preAngularBootstrap.background\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_ELECTRON_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_ELECTRON_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_ELECTRON_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_ELECTRON_APP_RELEASE_TARGET_ARTIFACT = 'electron-app';\n// release.envName\nexport const ENV_ELECTRON_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_ELECTRON_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_ELECTRON_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_ELECTRON_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_ELECTRON_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_ELECTRON_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_ELECTRON_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_ELECTRON_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_ELECTRON_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_ELECTRON_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_ELECTRON_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_ELECTRON_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_ELECTRON_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_ELECTRON_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.websql\nexport const ENV_ELECTRON_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_ELECTRON_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_ELECTRON_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_ELECTRON_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_ELECTRON_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_ELECTRON_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_ELECTRON_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_ELECTRON_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_ELECTRON_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_ELECTRON_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_ELECTRON_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_ELECTRON_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_ELECTRON_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_ELECTRON_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_ELECTRON_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_ELECTRON_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_ELECTRON_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_ELECTRON_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_ELECTRON_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_ELECTRON_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_ELECTRON_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_ELECTRON_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_ELECTRON_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_ELECTRON_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_ELECTRON_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_ELECTRON_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_ELECTRON_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_ELECTRON_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_ELECTRON_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_ELECTRON_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_ELECTRON_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_ELECTRON_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_ELECTRON_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_ELECTRON_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_ELECTRON_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_MOBILE_APP_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_MOBILE_APP_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_MOBILE_APP_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_MOBILE_APP_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_MOBILE_APP_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_MOBILE_APP_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_MOBILE_APP_RELEASE_TARGET_ARTIFACT = 'mobile-app';\n// release.envName\nexport const ENV_MOBILE_APP_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_MOBILE_APP_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_MOBILE_APP_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_MOBILE_APP_CONTAINER_END = undefined;\n// container.start\nexport const ENV_MOBILE_APP_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_MOBILE_APP_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_MOBILE_APP_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_MOBILE_APP_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_MOBILE_APP_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_MOBILE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_MOBILE_APP_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_MOBILE_APP_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_MOBILE_APP_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_MOBILE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_MOBILE_APP_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_MOBILE_APP_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_MOBILE_APP_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_MOBILE_APP_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_MOBILE_APP_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_MOBILE_APP_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_MOBILE_APP_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_MOBILE_APP_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_MOBILE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_MOBILE_APP_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_MOBILE_APP_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_MOBILE_APP_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_MOBILE_APP_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_MOBILE_APP_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_MOBILE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_MOBILE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_MOBILE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_MOBILE_APP_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_MOBILE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_MOBILE_APP_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_MOBILE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_MOBILE_APP_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_MOBILE_APP_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_MOBILE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_MOBILE_APP_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_MOBILE_APP_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_MOBILE_APP_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_MOBILE_APP_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_MOBILE_APP_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_MOBILE_APP_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_MOBILE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_MOBILE_APP_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_MOBILE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_MOBILE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_MOBILE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_MOBILE_APP_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_MOBILE_APP_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_MOBILE_APP_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_MOBILE_APP_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_MOBILE_APP_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_MOBILE_APP_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_MOBILE_APP_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TARGET_ARTIFACT = 'npm-lib-and-cli-tool';\n// release.envName\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_NPM_LIB_AND_CLI_TOOL_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_END = undefined;\n// container.start\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_NPM_LIB_AND_CLI_TOOL_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_NPM_LIB_AND_CLI_TOOL_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_NPM_LIB_AND_CLI_TOOL_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_NPM_LIB_AND_CLI_TOOL_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_NPM_LIB_AND_CLI_TOOL_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_NPM_LIB_AND_CLI_TOOL_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\nimport { decodeEnv } from 'tnp-core/browser';\n// config.superUsers\nexport const ENV_VSCODE_PLUGIN_CONFIG_SUPER_USERS = (): Promise<string> => decodeEnv(\"dariusz@taon.dev\");\n// config.googleSecret\nexport const ENV_VSCODE_PLUGIN_CONFIG_GOOGLE_SECRET = (): Promise<string> => decodeEnv(\"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\");\n// config.googleClientId\nexport const ENV_VSCODE_PLUGIN_CONFIG_GOOGLE_CLIENT_ID = '289576612173-2mh31b67pmq2qdes5jedno9tr1m542es.apps.googleusercontent.com';\n// loading.preAngularBootstrap.background\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND = '#fdebed';\n// loading.preAngularBootstrap.loader.name\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME = 'lds-default';\n// website.domain\nexport const ENV_VSCODE_PLUGIN_WEBSITE_DOMAIN = 'session.example.domain.com';\n// website.title\nexport const ENV_VSCODE_PLUGIN_WEBSITE_TITLE = 'Session';\n// website.useDomain\nexport const ENV_VSCODE_PLUGIN_WEBSITE_USE_DOMAIN = true;\n// release.targetArtifact\nexport const ENV_VSCODE_PLUGIN_RELEASE_TARGET_ARTIFACT = 'vscode-plugin';\n// release.envName\nexport const ENV_VSCODE_PLUGIN_RELEASE_ENV_NAME = '__';\n// finishCallback\nexport const ENV_VSCODE_PLUGIN_FINISH_CALLBACK = (): Promise<string> => decodeEnv({ });\n// container.only\nexport const ENV_VSCODE_PLUGIN_CONTAINER_ONLY = undefined;\n// container.end\nexport const ENV_VSCODE_PLUGIN_CONTAINER_END = undefined;\n// container.start\nexport const ENV_VSCODE_PLUGIN_CONTAINER_START = undefined;\n// container.skipReleased\nexport const ENV_VSCODE_PLUGIN_CONTAINER_SKIP_RELEASED = undefined;\n// container.skip\nexport const ENV_VSCODE_PLUGIN_CONTAINER_SKIP = undefined;\n// init.branding\nexport const ENV_VSCODE_PLUGIN_INIT_BRANDING = undefined;\n// init.struct\nexport const ENV_VSCODE_PLUGIN_INIT_STRUCT = undefined;\n// build.pwa.disableServiceWorker\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_DISABLE_SERVICE_WORKER = undefined;\n// build.pwa.name\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_NAME = undefined;\n// build.pwa.short_name\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_SHORT_NAME = undefined;\n// build.pwa.start_url\nexport const ENV_VSCODE_PLUGIN_BUILD_PWA_START_URL = undefined;\n// build.electron.showDevTools\nexport const ENV_VSCODE_PLUGIN_BUILD_ELECTRON_SHOW_DEV_TOOLS = undefined;\n// build.ssr\nexport const ENV_VSCODE_PLUGIN_BUILD_SSR = undefined;\n// build.websql\nexport const ENV_VSCODE_PLUGIN_BUILD_WEBSQL = undefined;\n// build.prod\nexport const ENV_VSCODE_PLUGIN_BUILD_PROD = undefined;\n// build.overrideOutputPath\nexport const ENV_VSCODE_PLUGIN_BUILD_OVERRIDE_OUTPUT_PATH = undefined;\n// build.baseHref\nexport const ENV_VSCODE_PLUGIN_BUILD_BASE_HREF = undefined;\n// build.watch\nexport const ENV_VSCODE_PLUGIN_BUILD_WATCH = undefined;\n// build.genOnlyClientCode\nexport const ENV_VSCODE_PLUGIN_BUILD_GEN_ONLY_CLIENT_CODE = undefined;\n// loading.preAngularBootstrap.loader\nexport const ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER = undefined;\n// release.cli.minify\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_MINIFY = undefined;\n// release.cli.includeNodeModules\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_INCLUDE_NODE_MODULES = undefined;\n// release.cli.uglify\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_UGLIFY = undefined;\n// release.cli.obscure\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_OBSCURE = undefined;\n// release.cli.compress\nexport const ENV_VSCODE_PLUGIN_RELEASE_CLI_COMPRESS = undefined;\n// release.nodeBackendApp.minify\nexport const ENV_VSCODE_PLUGIN_RELEASE_NODE_BACKEND_APP_MINIFY = undefined;\n// release.lib.removeDts\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_REMOVE_DTS = undefined;\n// release.lib.obscureFileByFile\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_OBSCURE_FILE_BY_FILE = undefined;\n// release.lib.uglifyFileByFile\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_UGLIFY_FILE_BY_FILE = undefined;\n// release.lib.includeSourceMaps\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_INCLUDE_SOURCE_MAPS = undefined;\n// release.lib.compress\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_COMPRESS = undefined;\n// release.lib.doNotIncludeLibFiles\nexport const ENV_VSCODE_PLUGIN_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES = undefined;\n// release.resolvedNewVersion\nexport const ENV_VSCODE_PLUGIN_RELEASE_RESOLVED_NEW_VERSION = undefined;\n// release.releaseVersionBumpType\nexport const ENV_VSCODE_PLUGIN_RELEASE_RELEASE_VERSION_BUMP_TYPE = undefined;\n// release.envNumber\nexport const ENV_VSCODE_PLUGIN_RELEASE_ENV_NUMBER = undefined;\n// release.installLocally\nexport const ENV_VSCODE_PLUGIN_RELEASE_INSTALL_LOCALLY = undefined;\n// release.removeReleaseOutputAfterLocalInstall\nexport const ENV_VSCODE_PLUGIN_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL = undefined;\n// release.releaseType\nexport const ENV_VSCODE_PLUGIN_RELEASE_RELEASE_TYPE = undefined;\n// release.autoReleaseUsingConfig\nexport const ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_USING_CONFIG = undefined;\n// release.autoReleaseTaskName\nexport const ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_TASK_NAME = undefined;\n// release.taonInstanceIp\nexport const ENV_VSCODE_PLUGIN_RELEASE_TAON_INSTANCE_IP = undefined;\n// release.skipNpmPublish\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_NPM_PUBLISH = undefined;\n// release.skipDeploy\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_DEPLOY = undefined;\n// release.skipTagGitPush\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_TAG_GIT_PUSH = undefined;\n// release.skipReleaseQuestion\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_RELEASE_QUESTION = undefined;\n// release.skipResolvingGitChanges\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_RESOLVING_GIT_CHANGES = undefined;\n// release.skipCodeCutting\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_CODE_CUTTING = undefined;\n// release.skipBuildingArtifacts\nexport const ENV_VSCODE_PLUGIN_RELEASE_SKIP_BUILDING_ARTIFACTS = undefined;\n// release.pushToAllOriginsWhenLocalReleaseBranch\nexport const ENV_VSCODE_PLUGIN_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH = undefined;\n// release.useLocalReleaseBranch\nexport const ENV_VSCODE_PLUGIN_RELEASE_USE_LOCAL_RELEASE_BRANCH = undefined;\n// copyToManager.beforeCopyHook\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_BEFORE_COPY_HOOK = undefined;\n// copyToManager.copyToLocations\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_LOCATIONS = undefined;\n// copyToManager.copyToProjects\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_PROJECTS = undefined;\n// copyToManager.skip\nexport const ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_SKIP = undefined;\n// purpose\nexport const ENV_VSCODE_PLUGIN_PURPOSE = undefined;\n// recursiveAction\nexport const ENV_VSCODE_PLUGIN_RECURSIVE_ACTION = undefined;\n// isCiProcess\nexport const ENV_VSCODE_PLUGIN_IS_CI_PROCESS = undefined;\n// docker.additionalContainer\nexport const ENV_VSCODE_PLUGIN_DOCKER_ADDITIONAL_CONTAINER = undefined;\n// docker.skipStartInOrder\nexport const ENV_VSCODE_PLUGIN_DOCKER_SKIP_START_IN_ORDER = undefined;\n// docker.skipUsingMysqlDb\nexport const ENV_VSCODE_PLUGIN_DOCKER_SKIP_USING_MYSQL_DB = undefined;\n// THIS FILE IS GENERATED - DO NOT MODIFY","// THIS FILE IS GENERATED - DO NOT MODIFY\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_FRAMEWORK_CLI_NAME = 'tnp';\n/**\n * This value can be change in taon.jsonc (appId)\n */\nexport const APP_ID = 'com.domain.example.session';\n/**\n * Autogenerated by current cli tool\n */\nexport const BUILD_BASE_HREF = '';\n/**\n * This value can be change in taon.jsonc (overrideNpmName)\n */\nexport const PROJECT_NPM_NAME = '@taon-dev/session';\n/**\n * Taon version from you project taon.json\n */\nexport const CURRENT_PACKAGE_TAON_VERSION = 'v21';\n/**\n * Autogenerated by current cli tool. Use *tnp release* to bump version.\n */\nexport const CURRENT_PACKAGE_VERSION = '21.0.241';\n\nexport namespace TAON_CLOUDFLARE_WORKERS_URLS {\n\texport const CwCustomSeoni4B382 = 'https://cw-custom-seoni-4b382.darekf77.workers.dev';\n}\n\n// THIS FILE IS GENERATED - DO NOT MODIFY\n ","export function myOrgProj() {\n\n}\n","//#region imports\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonGroupRoleEntity } from '../taon-group/taon-group-role.entity';\nimport { TaonSessionUserGroupEntity } from '../taon-session-user/taon-session-user-group.entity';\n\nimport { TaonGroupDefaultsValues } from './taon-group.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonGroupEntity',\n createTable: true,\n})\nexport class TaonGroupEntity extends TaonBaseAbstractEntity<TaonGroupEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n userGroups!: TaonSessionUserGroupEntity[];\n\n/* */\n/* */\n \n groupRoles!: TaonGroupRoleEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonGroupEntity } from './taon-group.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonGroupRepository',\n})\nexport class TaonGroupRepository extends TaonBaseRepository<TaonGroupEntity> {\n entityClassResolveFn: () => typeof TaonGroupEntity = () => TaonGroupEntity;\n\n //#region API / get groups for user id\n async getGroupsForUserId(\n userId: number | string,\n ): Promise<TaonGroupEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonRolePermissionEntity } from '../taon-role/taon-role-permission.entity';\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonPermissionDefaultsValues } from './taon-permission.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonPermissionEntity',\n createTable: true,\n})\nexport class TaonPermissionEntity extends TaonBaseAbstractEntity<TaonPermissionEntity> {\n /**\n * Examples:\n *\n * user.read\n * user.write\n * project.deploy\n * billing.invoice.read\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n rolePermissions!: TaonRolePermissionEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonPermissionEntity } from './taon-permission.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonPermissionRepository',\n})\nexport class TaonPermissionRepository extends TaonBaseRepository<TaonPermissionEntity> {\n entityClassResolveFn: () => typeof TaonPermissionEntity = () =>\n TaonPermissionEntity;\n\n //#region methods / get permissions for user id\n async getPermissionsForUserId(\n userId: number | string,\n ): Promise<TaonPermissionEntity[]> {\n // TODO\n return [];\n }\n //#endregion\n\n //#region methods / update description\n async updateDescription(\n permissionId: number,\n description: string,\n ): Promise<TaonPermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { TaonSessionUserRoleEntity } from '../taon-session-user/taon-session-user-role.entity';\nimport { TaonRolePermissionEntity } from '../taon-role/taon-role-permission.entity';\nimport { TaonGroupRoleEntity } from '../taon-group/taon-group-role.entity';\nimport {\n Column,\n CustomColumn,\n Index,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonRoleDefaultsValues } from './taon-role.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonRoleEntity',\n createTable: true,\n})\nexport class TaonRoleEntity extends TaonBaseAbstractEntity<TaonRoleEntity> {\n /**\n * Example:\n * admin\n * editor\n * billing-manager\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n name!: string;\n\n/* */\n/* */\n \n code!: string;\n\n/* */\n/* */\n \n description?: string;\n\n/* */\n/* */\n \n userRoles!: TaonSessionUserRoleEntity[];\n\n/* */\n/* */\n \n groupRoles!: TaonGroupRoleEntity[];\n\n/* */\n/* */\n \n rolePermissions!: TaonRolePermissionEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonRoleEntity } from './taon-role.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonRoleRepository',\n})\nexport class TaonRoleRepository extends TaonBaseRepository<TaonRoleEntity> {\n entityClassResolveFn: () => typeof TaonRoleEntity = () => TaonRoleEntity;\n\n async getRolesForUserId(userId: number | string): Promise<TaonRoleEntity[]> {\n // TODO\n return [];\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaonBaseClass, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { CoreModels, GlobalStorage, UtilsOs, _ } from 'tnp-core/browser';\n\n//#region config classes\n\n//#region config classes / cookies\nconst isProduction =\n !GlobalStorage.get('TAON_LOCAL_DEV') &&\n (UtilsOs.isRunningInDocker() || UtilsOs.isRunningInCloudflareWorker());\n\nexport class TaonSessionCookiesConfig extends TaonBaseClass {\n declare public ACCESS_TOKEN_SECRET: string;\n\n declare public REFRESH_TOKEN_SECRET: string;\n\n declare public ACCESS_TOKEN_EXPIRES: string;\n\n declare public REFRESH_TOKEN_EXPIRES_SECONDS: number;\n\n declare public accessTokenCookieName: string;\n\n declare public refreshTokenCookieName: string;\n\n declare public sameSite: 'lax' | 'strict' | 'none';\n\n declare public secure: boolean;\n\n declare public httpOnly: boolean;\n\n constructor() {\n super();\n/* */\n/* */\n/* */\n \n this.ACCESS_TOKEN_EXPIRES = '15m';\n this.REFRESH_TOKEN_EXPIRES_SECONDS = 60 * 60 * 24 * 7;\n this.accessTokenCookieName = 'taon_access_token';\n this.refreshTokenCookieName = 'taon_refresh_token';\n this.sameSite = 'lax';\n\n this.secure = isProduction;\n\n this.httpOnly = true;\n }\n}\n//#endregion\n\n//#region config classes / social login config\nexport class TaonSessionSocialLoginConfig extends TaonBaseClass {\n declare public google: {\n enabled?: boolean;\n googleClientId?: string;\n googleSecret?: string;\n };\n\n declare public facebook: {\n enabled?: boolean;\n facebookClientId?: string;\n };\n\n declare public microsoft: {\n enabled?: boolean;\n microsoftClientId?: string;\n };\n\n declare public apple: {\n enabled?: boolean;\n appleClientId?: string;\n };\n\n declare public github: {\n enabled?: boolean;\n githubClientId?: string;\n };\n\n constructor() {\n super();\n this.google = {\n enabled: false,\n };\n this.facebook = {\n enabled: false,\n };\n this.microsoft = {\n enabled: false,\n };\n this.apple = {\n enabled: false,\n };\n }\n\n public get isAnySocialLoginEnabled(): boolean {\n return !!(\n this.google.enabled ||\n this.microsoft.enabled ||\n this.facebook.enabled ||\n this.apple.enabled\n );\n }\n}\n//#endregion\n\n//#region config classes / password requirements\nexport class TaonSessionPasswordRequirementsConfig {\n declare public minLength: number;\n\n declare public maxLength: number;\n\n declare public requireLowercase: boolean;\n\n declare public requireUppercase: boolean;\n\n declare public requireNumber: boolean;\n\n declare public requireSpecialCharacter: boolean;\n\n declare public specialCharacters: string;\n\n constructor() {\n this.minLength = 8;\n this.maxLength = 128;\n\n this.requireLowercase = false;\n this.requireUppercase = false;\n this.requireNumber = false;\n this.requireSpecialCharacter = false;\n\n this.specialCharacters = '!@#$%^&*';\n }\n}\n//#endregion\n\n//#region config classes / registration requirements\nexport class TaonSessionRegistrationConfig {\n /**\n * ⌛ TODO in progress\n */\n declare public enabled: boolean;\n\n /**\n * ⌛ TODO in progress\n */\n declare public requireEmailConfirmation: boolean;\n\n /**\n * ⌛ TODO in progress\n * Registration allowed only when user has\n * invitation code / registration password.\n */\n declare public requireRegistrationPassword: boolean;\n\n /**\n * ⌛ TODO in progress\n */\n declare public allowDuplicateEmail: boolean;\n\n constructor() {\n this.enabled = true;\n this.requireEmailConfirmation = false;\n this.requireRegistrationPassword = true;\n this.allowDuplicateEmail = false;\n }\n}\n//#endregion\n\n//#region config classes / login config\nexport class TaonSessionLoginConfig extends TaonBaseClass {\n declare public diableLoginByEmail: boolean;\n\n declare public defaultEmail?: string;\n\n declare public defaultPassword?: string;\n\n declare public linkToDashboard: string;\n\n declare public displayDashboardButton: boolean;\n\n /**\n * TODO\n * Whether FE may check whether email exists\n * before showing password/register screen.\n */\n // declare public exposeEmailExistence: boolean;\n\n /**\n * TODO\n */\n // declare public rememberMe: boolean;\n\n constructor() {\n super();\n this.diableLoginByEmail = false;\n this.linkToDashboard = '/';\n this.displayDashboardButton = true;\n // this.exposeEmailExistence = true;\n // this.rememberMe = true;\n if (isProduction) {\n delete this.defaultEmail;\n delete this.defaultPassword;\n }\n }\n}\n//#endregion\n\n//#region config classes / check if human config\nexport class TaonSessionCheckIfHumanConfig {\n declare public duringLoginRegisterEmail: boolean;\n\n declare public duringRegistrationPassword: boolean;\n\n declare public duringLoginPassword: boolean;\n\n declare public duringPasswordReset: boolean;\n\n constructor() {\n this.duringLoginRegisterEmail = false;\n this.duringRegistrationPassword = false;\n this.duringLoginPassword = false;\n\n this.duringPasswordReset = false;\n }\n}\n//#endregion\n\n//#region config classes / sessions\nexport class TaonSessionSessionsConfig {\n /**\n * Multiple devices / browsers may stay logged in.\n */\n declare public allowMultipleSessions: boolean;\n\n /**\n * 0 = unlimited\n */\n declare public maxSessionsPerUser: number;\n\n /**\n * Update last activity timestamp.\n */\n declare public trackActivity: boolean;\n\n /**\n * Optional idle timeout.\n * 0 = disabled\n */\n declare public idleTimeoutSeconds: number;\n\n constructor() {\n this.allowMultipleSessions = true;\n this.maxSessionsPerUser = 0;\n this.trackActivity = true;\n this.idleTimeoutSeconds = 0;\n }\n}\n//#endregion\n\n//#region config classes / password recovery config\nexport class TaonSessionPasswordRecoveryConfig {\n declare public enabled: boolean;\n\n declare public tokenExpiresSeconds: number;\n\n declare public invalidateExistingSessionsAfterReset: boolean;\n\n constructor() {\n this.enabled = true;\n this.tokenExpiresSeconds = 60 * 60; // 1h\n this.invalidateExistingSessionsAfterReset = true;\n }\n}\n//#endregion\n\n//#region config classes / email confirmation config\nexport class TaonSessionEmailConfirmationConfig {\n declare public enabled: boolean;\n\n declare public tokenExpiresSeconds: number;\n\n declare public allowResend: boolean;\n\n declare public resendCooldownSeconds: number;\n\n constructor() {\n this.enabled = true;\n this.tokenExpiresSeconds = 60 * 60 * 24; // 24h\n this.allowResend = true;\n this.resendCooldownSeconds = 60;\n }\n}\n//#endregion\n\n//#region config classes / security config\nexport class TaonSessionSecurityConfig {\n /**\n * Logout all sessions after password change.\n */\n declare public invalidateSessionsAfterPasswordChange: boolean;\n\n /**\n * Rotate refresh token after successful refresh.\n */\n declare public rotateRefreshTokens: boolean;\n\n /**\n * Detect reuse of already rotated refresh tokens.\n */\n declare public detectRefreshTokenReuse: boolean;\n\n constructor() {\n this.invalidateSessionsAfterPasswordChange = true;\n this.rotateRefreshTokens = true;\n this.detectRefreshTokenReuse = true;\n }\n}\n//#endregion\n\n//#region config classes / rate limit config\nexport class TaonSessionRateLimitConfig {\n declare public maxAttempts: number;\n\n declare public windowSeconds: number;\n\n constructor(maxAttempts: number, windowSeconds: number) {\n this.maxAttempts = maxAttempts;\n this.windowSeconds = windowSeconds;\n }\n}\n//#endregion\n\n//#region config classes / rate limits config\nexport class TaonSessionRateLimitsConfig {\n declare public loginAttempts: TaonSessionRateLimitConfig;\n\n declare public passwordReset: TaonSessionRateLimitConfig;\n\n declare public emailConfirmationResend: TaonSessionRateLimitConfig;\n\n constructor() {\n this.loginAttempts = new TaonSessionRateLimitConfig(10, 60);\n\n this.passwordReset = new TaonSessionRateLimitConfig(5, 60 * 60);\n\n this.emailConfirmationResend = new TaonSessionRateLimitConfig(5, 60 * 60);\n }\n}\n//#endregion\n\n//#endregion\n\nexport type TaonSessionConfig = Omit<\n CoreModels.DeepPartial<TaonSessionProvider>,\n | 'ctx'\n | '_'\n | 'getOriginalPrototype'\n | 'getOriginalConstructor'\n | '__endpoint_context__'\n>;\n\n@TaonProvider({\n className: 'TaonSessionProvider',\n})\nexport class TaonSessionProvider extends TaonBaseProvider {\n /**\n * Production means here - it runs on real server\n */\n isProduction = isProduction;\n\n superUsersEmails: string[] = [];\n\n /**\n * Resolve social accounts by verified email as well as provider identity.\n */\n linkSocialAccountEmail = false;\n\n cookies = new TaonSessionCookiesConfig();\n\n login = new TaonSessionLoginConfig();\n\n socialLogin = new TaonSessionSocialLoginConfig();\n\n // passwordRequirements = new TaonSessionPasswordRequirementsConfig();\n\n // registration = new TaonSessionRegistrationConfig();\n\n // checkIfHuman = new TaonSessionCheckIfHumanConfig();\n\n // socialLogin = new TaonSessionSocialLoginConfig();\n\n // sessions = new TaonSessionSessionsConfig();\n\n // passwordRecovery = new TaonSessionPasswordRecoveryConfig();\n\n // emailConfirmation = new TaonSessionEmailConfirmationConfig();\n\n // security = new TaonSessionSecurityConfig();\n\n // rateLimits = new TaonSessionRateLimitsConfig();\n\n async _() {\n // TODO @UNCOMMENT disabled login by email when not on localhost\n const originUrl = this.ctx.frontendHostUri;\n const isLocalhost =\n originUrl.hostname === 'localhost' ||\n originUrl.hostname === '127.0.0.1' ||\n originUrl.hostname === '[::1]';\n if (!isLocalhost) {\n this.login.diableLoginByEmail = true;\n }\n }\n\n clone(): TaonSessionConfig {\n return {\n isProduction: this.isProduction,\n linkSocialAccountEmail: this.linkSocialAccountEmail,\n cookies: this.cookies.clone(),\n login: this.login.clone(),\n socialLogin: this.socialLogin.clone(),\n };\n }\n}\n","//#region imports\nimport {\n Column,\n CreateDateColumn,\n DateTimeColumn,\n Index,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../taon-session-user/taon-session-user.models';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionEntity',\n createTable: true,\n})\nexport class TaonSessionEntity extends TaonBaseAbstractEntity<TaonSessionEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n identityId?: number;\n\n/* */\n/* */\n \n authenticationProvider?: TaonSessionIdentityProvider;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n /**\n * Store HASH of session token, not raw token.\n */\n\n/* */\n/* */\n \n\n/* */\n/* */\n \n tokenHash!: string;\n\n/* */\n/* */\n \n userAgent?: string;\n\n/* */\n/* */\n \n ip?: string;\n\n/* */\n/* */\n \n deviceName?: string;\n\n/* */\n/* */\n \n lastActivityAt?: Date;\n\n/* */\n/* */\n \n expiresAt!: Date;\n\n/* */\n/* */\n \n revokedAt?: Date;\n\n/* */\n/* */\n \n revokeReason?: string;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\n\nimport type express from 'express';\nimport { TaonBaseKvRepository, TaonRepository } from 'taon/browser';\nimport { UtilsJwt } from 'tnp-core/browser';\n\nimport { TaonSessionProvider } from './taon-session.provider';\n\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionKvRepository',\n})\nexport class TaonSessionKvRepository extends TaonBaseKvRepository<\n Record<\n string,\n {\n userId: number;\n expiresAt: number;\n sessionId?: number;\n }\n >\n> {\n taonSessionProvider = this.injectProvider(TaonSessionProvider);\n\n //#region create access token\n public async createAccessToken(\n userId: number,\n sessionId?: number,\n ): Promise<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region create refresh token\n public async createRefreshToken(\n userId: number,\n sessionId?: number,\n ): Promise<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region set auth cookies\n public setAuthCookies(\n res: express.Response,\n accessToken: string,\n refreshToken: string,\n ): void {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region clear auth cookies\n public clearAuthCookies(res: express.Response): void {\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get token from request\n public getTokenFromRequest(req: express.Request): string | null {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport {\n getStatusCode,\n getStatusText,\n HttpStatusEnum,\n Taon,\n TaonBaseRepository,\n TaonRepository,\n TaonServerMiddlewareInterceptOptions,\n} from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { UtilsJwt } from 'tnp-core/browser';\nimport { TaonSessionProvider } from './taon-session.provider';\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionRepository',\n})\nexport class TaonSessionRepository extends TaonBaseRepository<TaonSessionEntity> {\n //#region fields & getters\n entityClassResolveFn: () => typeof TaonSessionEntity = () =>\n TaonSessionEntity;\n\n private readonly taonSessionKvRepository = this.injectKvRepository(\n TaonSessionKvRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n //#endregion\n\n //#region create session entity\n async createSession(\n partialSessino: Partial<TaonSessionEntity>,\n ): Promise<TaonSessionEntity> {\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n async requireActiveSession(\n sessionId: number,\n userId: number,\n ): Promise<TaonSessionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async touchSession(\n sessionId: number,\n userId: number,\n refresh = false,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async revokeSession(sessionId: number, userId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#region get session by id\n async getSessionBy(userId: number | string): Promise<TaonSessionEntity> {\n // TODO not only id ?\n // let session = new TaonSessionEntity().clone(partialSessino);\n // session = await this.save(session);\n return null;\n }\n //#endregion\n\n //#region throw if not authroized\n async throwIfNotAuthenticated({\n req,\n res,\n next,\n }: Pick<TaonServerMiddlewareInterceptOptions, 'req' | 'res'> &\n Partial<\n Pick<TaonServerMiddlewareInterceptOptions, 'next'>\n >): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import {\n BooleanColumn,\n Column,\n CreateDateColumn,\n Index,\n JoinColumn,\n ManyToOne,\n TaonBaseAbstractEntity,\n TaonEntity,\n UpdateDateColumn,\n} from 'taon/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\n\nimport { TaonSessionIdentityProvider } from './taon-session-user.models';\n\n@TaonEntity({\n className: 'TaonSessionUserIdentityEntity',\n createTable: true,\n})\n/* */\n/* */\n \nexport class TaonSessionUserIdentityEntity extends TaonBaseAbstractEntity<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n /**\n * PASSWORD / GOOGLE / MICROSOFT / APPLE / FACEBOOK\n */\n/* */\n/* */\n \n provider!: TaonSessionIdentityProvider;\n\n /**\n * PASSWORD:\n * normalized email\n *\n * GOOGLE:\n * Google's stable `sub`, NOT email\n *\n * Other OAuth providers:\n * stable provider-specific account id\n */\n/* */\n/* */\n \n providerUserId!: string;\n\n /**\n * Convenience/contact email reported by this identity.\n *\n * Do NOT use this as the primary OAuth identity key.\n */\n/* */\n/* */\n \n email?: string;\n\n /**\n * Only PASSWORD identities have this.\n *\n * Never store plaintext here.\n */\n/* */\n/* */\n \n passwordHash?: string;\n\n/* */\n/* */\n \n isEmailVerified!: boolean;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n updatedAt!: Date;\n}\n","//#region imports\nimport {\n BooleanColumn,\n Column,\n CreateDateColumn,\n CustomColumn,\n Index,\n OneToMany,\n String45Column,\n String500Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n UpdateDateColumn,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionEntity } from '../taon-session/taon-session.entity';\nimport { TaonSessionUserGroupEntity } from '../taon-session-user/taon-session-user-group.entity';\nimport { TaonSessionUserIdentityEntity } from '../taon-session-user/taon-session-user-identity.entity';\nimport { TaonSessionUserRoleEntity } from '../taon-session-user/taon-session-user-role.entity';\n\n//#endregion\n\n@TaonEntity<TaonSessionUserEntity>({\n className: 'TaonSessionUserEntity',\n createTable: true,\n defaultModelMapping: () => ({\n '': TaonSessionUserEntity,\n identities: [TaonSessionUserIdentityEntity],\n }),\n})\nexport class TaonSessionUserEntity extends TaonBaseAbstractEntity<TaonSessionUserEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n username?: string;\n\n/* */\n/* */\n \n isActive!: boolean;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n updatedAt!: Date;\n\n/* */\n/* */\n \n sessions!: TaonSessionEntity[];\n\n/* */\n/* */\n \n identities!: TaonSessionUserIdentityEntity[];\n\n/* */\n/* */\n \n userGroups!: TaonSessionUserGroupEntity[];\n\n/* */\n/* */\n \n userRoles!: TaonSessionUserRoleEntity[];\n}\n","//#region imports\nimport { getStatusCode, HttpStatusEnum, Taon, TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { QueryFailedError } from 'taon-typeorm/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\n\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session-user/taon-session-user.repository.ts', {} as any);\n\n@TaonRepository({\n className: 'TaonSessionUserRepository',\n})\nexport class TaonSessionUserRepository extends TaonBaseRepository<TaonSessionUserEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserEntity = () =>\n TaonSessionUserEntity;\n\n async createUser(): Promise<TaonSessionUserEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n normalizeUsername(username: string): string {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async isUsernameAvailable(username: string, userId: number): Promise<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async changeUsername(userId: number, username: string): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async getUserById(\n userId: number | string,\n ): Promise<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","//#region imports\n\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { TaonGroupRoleRepository } from '../taon-group/taon-group-role.repository';\n\nimport { TaonBaseCustomRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonGroupRepository } from '../taon-group/taon-group.repository';\nimport { TaonPermissionRepository } from '../taon-permission/taon-permission.repository';\nimport { TaonRoleRepository } from '../taon-role/taon-role.repository';\nimport { TaonSessionProvider } from '../taon-session/taon-session.provider';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserRepository } from '../taon-session-user/taon-session-user.repository';\n\nimport {\n TaonAuthContextEntity,\n TaonAuthorizationSchema,\n} from './taon-auth-context.entity';\n\n//#endregion\n\n//#region models\n\ntype EnumLike<T extends string> = Record<string, T>;\n\ntype RelationSelection<T extends string> = '*' | T[];\n\ntype GroupAndRolesTree<GROUP extends string, ROLE extends string> = Partial<\n Record<GROUP, RelationSelection<ROLE>>\n>;\n\ntype RolesAndPermissionsTree<\n ROLE extends string,\n PERMISSION extends string,\n> = Partial<Record<ROLE, RelationSelection<PERMISSION>>>;\n\nexport interface PersistAuthorizationTreeOptions<\n GROUP extends string,\n ROLE extends string,\n PERMISSION extends string,\n> {\n enums: {\n groups: EnumLike<GROUP>;\n roles: EnumLike<ROLE>;\n permissions: EnumLike<PERMISSION>;\n };\n\n tree: {\n groupAndRoles?: GroupAndRolesTree<GROUP, ROLE>;\n\n rolesAndPermissions?: RolesAndPermissionsTree<ROLE, PERMISSION>;\n };\n}\n\n//#endregion\n\n@TaonRepository({\n className: 'TaonAuthContextRepository',\n})\nexport class TaonAuthContextRepository<\n AUTH extends TaonAuthorizationSchema,\n> extends TaonBaseCustomRepository {\n //#region fields & getters\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n private readonly taonGroupRoleRepository = this.injectCustomRepo(\n TaonGroupRoleRepository,\n );\n\n private readonly taonRolePermissionRepository = this.injectCustomRepo(\n TaonRolePermissionRepository,\n );\n\n private readonly taonGroupRepository =\n this.injectCustomRepo(TaonGroupRepository);\n\n private readonly taonPermissionRepository = this.injectCustomRepo(\n TaonPermissionRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n\n private readonly taonRoleRepository =\n this.injectCustomRepo(TaonRoleRepository);\n\n //#endregion\n\n //#region API / get context\n\n public async getContext(\n userId?: number | string,\n ): Promise<TaonAuthContextEntity<AUTH>> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n\n //#region API / persist tree\n\n public async clearRolesGroupPermissions(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#region API / persist tree\n public async persistTree(\n options: PersistAuthorizationTreeOptions<\n AUTH['group'],\n AUTH['role'],\n AUTH['permission']\n >,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#endregion\n\n //#region methods / get or create group\n private async getOrCreateGroup(code: AUTH['group'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods / get or create role\n private async getOrCreateRole(code: AUTH['role'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods / get or create permission\n private async getOrCreatePermission(code: AUTH['permission'], name: string) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region assign role\n\n private async assignRole(\n group: Awaited<ReturnType<typeof this.getOrCreateGroup>>,\n role: Awaited<ReturnType<typeof this.getOrCreateRole>>,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n\n //#region assign permission\n\n private async assignPermission(\n role: Awaited<ReturnType<typeof this.getOrCreateRole>>,\n permission: Awaited<ReturnType<typeof this.getOrCreatePermission>>,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n //#endregion\n}\n","//#region imports\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n ExpressRequest,\n ExpressResponse,\n getStatusCode,\n HttpStatusEnum,\n Models,\n Taon,\n TaonStorageObject,\n TaonUploadedFile,\n} from 'taon/browser';\nimport { TaonController, TaonBaseStorageController } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuthContextRepository } from '../../taon-auth-context/taon-auth-context.repository';\nimport { TaonSessionUserRepository } from '../../taon-session-user/taon-session-user.repository';\nimport { TaonSessionRepository } from '../taon-session.repository';\n\nimport { TaonProfileModels } from './taon-profile.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile.controller.ts', {} as any);\n\n@TaonController<TaonProfileController>({\n className: 'TaonProfileController',\n allowedMethods: ['exists', 'download', 'delete', 'uploadFormDataToServer'],\n})\nexport class TaonProfileController extends TaonBaseStorageController<\n TaonProfileModels.PictureQuery\n> {\n //#region storage hooks\n\n private readonly taonSessionRepository = this.injectCustomRepo(TaonSessionRepository);\n\n private readonly authRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly userRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n classConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonProfileController>): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected async handleUploadFiles(\n bodyFormDataFiles: TaonUploadedFile[],\n queryParams?: TaonProfileModels.PictureQuery,\n req?: ExpressRequest<any>,\n res?: ExpressResponse<any>,\n ): Promise<TaonStorageObject[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async afterFileUploadHook(\n fileObject?: TaonStorageObject,\n queryParams?: TaonProfileModels.PictureQuery,\n ): Promise<void> {\n // Authentication / authorization / profile persistence can be added here.\n }\n\n buildStorageDownloadUrl(options: {\n req: any;\n key: string;\n private: boolean;\n token?: string;\n }): string {\n throw new Error('TODO');\n }\n\n async createStorageDownloadToken(options: {\n key: string;\n expiresAt: number;\n }): Promise<string> {\n throw new Error('TODO');\n }\n\n //#endregion\n}\n","export namespace TaonProfileModels {\n export const PROFILE_PICTURE_FILE_NAME = 'profile-picture';\n\n export interface PictureQuery {\n userId?: number;\n }\n\n export function pictureKey(userId?: number | string): string {\n return userId === undefined\n ? PROFILE_PICTURE_FILE_NAME\n : `${userId}__${PROFILE_PICTURE_FILE_NAME}`;\n }\n\n export const PROFILE_PICTURE_ACCEPT =\n 'image/png,image/jpeg,image/webp,image/gif';\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonProfileController } from './taon-profile.controller';\nimport { TaonProfileModels } from './taon-profile.models';\n//#endregion\n\n@Injectable()\nexport class TaonProfileApiService extends TaonBaseAngularService {\n //#region controllers\n\n public readonly taonProfileController = this.injectController(\n TaonProfileController,\n );\n\n //#endregion\n\n //#region methods\n\n async hasProfilePicture(userId?: number | string): Promise<boolean> {\n const response = await this.taonProfileController\n .exists(TaonProfileModels.pictureKey(userId))\n .request();\n\n return response.body.json;\n }\n\n async getProfilePictureBlob(\n userId?: number | string,\n ): Promise<Blob | undefined> {\n if (!(await this.hasProfilePicture(userId))) {\n return undefined;\n }\n\n const response = await this.taonProfileController\n .download(TaonProfileModels.pictureKey(userId))\n .request();\n\n const blobFromPicture = await response.body.native.blob();\n // console.log({ blobFromPicture });\n return blobFromPicture;\n }\n\n async uploadProfilePicture(\n file: File,\n userId?: number | string,\n ): Promise<void> {\n const renamedFile = new File(\n [file],\n TaonProfileModels.PROFILE_PICTURE_FILE_NAME,\n {\n type: file.type,\n lastModified: file.lastModified,\n },\n );\n\n const formData = new FormData();\n\n formData.append('file', renamedFile);\n\n await this.taonProfileController\n .uploadFormDataToServer(\n formData,\n userId === undefined ? undefined : { userId: Number(userId) },\n )\n .request();\n }\n\n async deleteProfilePicture(userId?: number | string): Promise<void> {\n await this.taonProfileController\n .delete(TaonProfileModels.pictureKey(userId))\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnDestroy,\n OnInit,\n OnChanges,\n SimpleChanges,\n inject,\n signal,\n forwardRef,\n} from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonProfileApiService } from '../taon-profile.api.service';\nimport { TaonProfileModels } from '../taon-profile.models';\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component.ts', {} as any);\n\n@Component({\n selector: 'taon-profile-picture',\n templateUrl: './taon-profile-picture.component.html',\n styleUrls: ['./taon-profile-picture.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule],\n providers: [forwardRef(() => TaonProfileApiService)],\n})\nexport class TaonProfilePictureComponent implements OnDestroy, OnInit, OnChanges {\n //#region inject\n\n @Input() hideButtons: boolean = false;\n\n @Input() userId?: number | string;\n\n @Input() readOnly = false;\n\n public readonly t = t.for(this);\n\n private readonly taonProfileApiService = inject(TaonProfileApiService);\n\n //#endregion\n\n //#region state\n\n readonly pictureUrl = signal<string | undefined>(undefined);\n\n readonly loading = signal(false);\n\n readonly uploading = signal(false);\n\n readonly accept = TaonProfileModels.PROFILE_PICTURE_ACCEPT;\n\n private objectUrl?: string;\n\n private destroyed = false;\n\n private loadVersion = 0;\n\n //#endregion\n\n //#region lifecycle\n\n ngOnInit(): void {\n void this.loadProfilePicture();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.userId && !changes.userId.firstChange) {\n void this.loadProfilePicture();\n }\n }\n\n //#endregion\n\n //#region methods\n\n async loadProfilePicture(): Promise<void> {\n this.loading.set(true);\n const version = ++this.loadVersion;\n this.clearPictureUrl();\n\n try {\n const blob = await this.taonProfileApiService.getProfilePictureBlob(\n this.userId,\n );\n\n if (!this.destroyed && version === this.loadVersion) {\n this.setPictureBlob(blob);\n }\n } finally {\n if (version === this.loadVersion) {\n this.loading.set(false);\n }\n }\n }\n\n async fileSelected(event: Event): Promise<void> {\n if (this.readOnly) {\n throw new Error('Profile picture is read-only');\n }\n const input = event.target as HTMLInputElement;\n\n const file = input.files?.[0];\n\n if (!file) {\n return;\n }\n\n this.uploading.set(true);\n\n try {\n await this.taonProfileApiService.uploadProfilePicture(file, this.userId);\n\n await this.loadProfilePicture();\n } finally {\n this.uploading.set(false);\n\n // Allows selecting the same file again.\n input.value = '';\n }\n }\n\n async removePicture(): Promise<void> {\n if (this.readOnly) {\n throw new Error('Profile picture is read-only');\n }\n this.uploading.set(true);\n const userId = this.userId;\n\n try {\n await this.taonProfileApiService.deleteProfilePicture(userId);\n\n if (!this.destroyed && userId === this.userId) {\n ++this.loadVersion;\n this.loading.set(false);\n this.clearPictureUrl();\n }\n } finally {\n this.uploading.set(false);\n }\n }\n\n private setPictureBlob(blob: Blob | undefined): void {\n this.clearPictureUrl();\n\n if (!blob) {\n return;\n }\n\n this.objectUrl = URL.createObjectURL(blob);\n\n this.pictureUrl.set(this.objectUrl);\n }\n\n private clearPictureUrl(): void {\n if (this.objectUrl) {\n URL.revokeObjectURL(this.objectUrl);\n\n this.objectUrl = undefined;\n }\n\n this.pictureUrl.set(undefined);\n }\n\n //#endregion\n\n //#region destroy\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.clearPictureUrl();\n }\n\n //#endregion\n}\n","<div class=\"profile-picture\">\n <label\n class=\"profile-picture__avatar\"\n [class.profile-picture__avatar--disabled]=\"uploading() || readOnly\">\n @if (pictureUrl()) {\n <img\n class=\"profile-picture__image\"\n [src]=\"pictureUrl()\"\n alt=\"Profile picture\" />\n } @else {\n <mat-icon class=\"profile-picture__placeholder\">account_circle</mat-icon>\n <!-- <svg\n class=\"profile-picture__placeholder\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\">\n <path\n d=\"M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4Zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4Z\" />\n </svg> -->\n }\n\n @if (loading() || uploading()) {\n <div class=\"profile-picture__loading\">...</div>\n }\n\n <input\n class=\"profile-picture__input\"\n type=\"file\"\n [accept]=\"accept\"\n [disabled]=\"uploading() || readOnly\"\n (change)=\"fileSelected($event)\" />\n </label>\n\n @if (!hideButtons && !readOnly) {\n <div class=\"profile-picture__actions\">\n <label class=\"profile-picture__button\">\n {{\n pictureUrl()\n ? t.gettext('Change picture')\n : t.gettext('Upload picture')\n }}\n\n <input\n class=\"profile-picture__input\"\n type=\"file\"\n [accept]=\"accept\"\n [disabled]=\"uploading()\"\n (change)=\"fileSelected($event)\" />\n </label>\n\n @if (pictureUrl()) {\n <button\n class=\"profile-picture__button\"\n type=\"button\"\n [disabled]=\"uploading()\"\n (click)=\"removePicture()\">\n {{ t.gettext('Remove') }}\n </button>\n }\n </div>\n }\n</div>\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n Models,\n TaonPaginationQuery,\n} from 'taon/browser';\nimport { Entity } from 'taon-typeorm/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\n\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\n//#endregion\n\n@TaonController<TaonSessionUserController>({\n className: 'TaonSessionUserController',\n allowedMethods: ['paginationQuery', 'getBy'],\n})\nexport class TaonSessionUserController extends TaonBaseCrudController<\n TaonSessionUserEntity,\n {},\n TaonSessionUserController\n> {\n entityClassResolveFn: () => typeof TaonSessionUserEntity = () =>\n TaonSessionUserEntity;\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n classConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n if (['paginationQuery', 'getBy'].includes(methodConfig.methodName)) {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n }\n\n @GET()\n getBy(\n @Query('id') id: number | string,\n ): Models.Http.Response<TaonSessionUserEntity> {\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected paginationQueryMethods(): (keyof TaonSessionUserController)[] {\n return ['customPaginationQuery'] as any;\n }\n\n @GET()\n paginationQuery(\n queryJson?: TaonPaginationQuery<any>,\n ): Models.Http.Response<TaonSessionUserEntity[]> {\n return async (req, res) => {\n queryJson.callQueryMethod = 'customPaginationQuery';\n const data = await super.paginationQuery(queryJson)(req, res);\n return data;\n };\n }\n\n protected async customPaginationQuery(\n query: TaonPaginationQuery<TaonSessionUserController>,\n ): Promise<[TaonSessionUserEntity[], number]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionUserController } from './taon-session-user.controller';\nimport type { TaonSessionUserEntity } from './taon-session-user.entity';\n\n@Injectable()\nexport class TaonSessionUserApiService extends TaonBaseAngularService {\n public taonSessionUserController = this.injectController(\n TaonSessionUserController,\n );\n\n // public get allMyEntities$(): Observable<TaonSessionUser[]> {\n // return this.taonSessionUserController.getAll().request!().observable.pipe(\n // map(res => res.body?.json),\n // );\n // }\n\n // public helloWorld(user): Observable<string> {\n // return this.taonSessionUserController.helloWord(user).request!().observable.pipe(\n // map(res => res.responseText as string),\n // );\n // }\n}\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonGroupEntity } from '../taon-group/taon-group.entity';\nimport {\n Column,\n CreateDateColumn,\n DateTimeColumn,\n JoinColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionUserGroupEntity',\n createTable: true,\n})\nexport class TaonSessionUserGroupEntity extends TaonBaseAbstractEntity<TaonSessionUserGroupEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n groupId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n group!: TaonGroupEntity;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\n\nimport { TaonSessionUserGroupEntity } from './taon-session-user-group.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonSessionUserGroupRepository',\n})\nexport class TaonSessionUserGroupRepository extends TaonBaseRepository<TaonSessionUserGroupEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserGroupEntity = () =>\n TaonSessionUserGroupEntity;\n\n async assignGroupToUser(\n userId: number,\n groupId: number,\n ): Promise<TaonSessionUserGroupEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async unassignGroupFromUser(userId: number, groupId: number): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Translation } from '@taon-dev/i18n/browser';\nimport { getStatusCode, HttpStatusEnum, Taon, TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport type { EntityManager } from 'taon-typeorm/browser';\nimport { UtilsPasswords } from 'tnp-helpers/browser';\n\nimport { TaonSessionProvider } from '../taon-session/taon-session.provider';\n\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from './taon-session-user.models';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\n\nconst t = Translation.for('src/lib/taon-session-user/taon-session-user-identity.repository.ts', {} as any);\n\n@TaonRepository({\n className: 'TaonSessionUserIdentityRepository',\n})\nexport class TaonSessionUserIdentityRepository extends TaonBaseRepository<TaonSessionUserIdentityEntity> {\n entityClassResolveFn: () => typeof TaonSessionUserIdentityEntity = () =>\n TaonSessionUserIdentityEntity;\n\n private readonly userRepository = this.injectCustomRepo(TaonSessionUserRepository);\n\n private readonly sessionProvider = this.injectProvider(TaonSessionProvider);\n\n normalizeEmail(email: string): string {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findUserIdByEmail(\n email: string,\n manager: EntityManager = this.connection.manager,\n ): Promise<number | undefined> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async resolveSocialIdentity(\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n email: string,\n isEmailVerified: boolean,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async registerPasswordUser(email: string, password: string): Promise<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async connectPasswordIdentity(\n userId: number,\n email: string,\n password: string,\n ): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async createPasswordIdentity(\n userId: number,\n email: string,\n password: string,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n private passwordIdentity(\n userId: number,\n normalizedEmail: string,\n passwordHash: string,\n isEmailVerified: boolean,\n ): TaonSessionUserIdentityEntity {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findPasswordIdentity(\n email: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async verifyPassword(\n email: string,\n password: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async findSocialIdentity(\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n ): Promise<TaonSessionUserIdentityEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n async createSocialIdentity(\n userId: number,\n provider: TaonSessionIdentityProvider,\n providerUserId: string,\n email?: string,\n isEmailVerified = false,\n manager: EntityManager = this.connection.manager,\n ): Promise<TaonSessionUserIdentityEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n JoinColumn,\n ManyToOne,\n String45Column,\n String500Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonSessionUserRoleEntity',\n createTable: true,\n})\nexport class TaonSessionUserRoleEntity extends TaonBaseAbstractEntity<TaonSessionUserRoleEntity> {\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n \n roleId!: number;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n\n/* */\n/* */\n \n role!: TaonRoleEntity;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonSessionUserMiddleware',\n})\nexport class TaonSessionUserMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonSessionUserProvider',\n})\nexport class TaonSessionUserProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\n\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserProvider } from './taon-session-user.provider';\n//#endregion\n\n@TaonSubscriber<TaonSessionUserSubscriber>({\n className: 'TaonSessionUserSubscriber',\n allowedEvents: ['afterUpdate'],\n})\nexport class TaonSessionUserSubscriber extends TaonBaseSubscriberForEntity {\n taonSessionUserProvider = this.injectProvider(TaonSessionUserProvider);\n\n listenTo(): typeof TaonSessionUserEntity {\n return TaonSessionUserEntity;\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonSessionUserGroupEntity } from './taon-session-user-group.entity';\nimport { TaonSessionUserGroupRepository } from './taon-session-user-group.repository';\nimport { TaonSessionUserIdentityEntity } from './taon-session-user-identity.entity';\nimport { TaonSessionUserIdentityRepository } from './taon-session-user-identity.repository';\nimport { TaonSessionUserRoleEntity } from './taon-session-user-role.entity';\nimport { TaonSessionUserController } from './taon-session-user.controller';\nimport { TaonSessionUserEntity } from './taon-session-user.entity';\nimport { TaonSessionUserMiddleware } from './taon-session-user.middleware';\nimport { TaonSessionUserProvider } from './taon-session-user.provider';\nimport { TaonSessionUserRepository } from './taon-session-user.repository';\nimport { TaonSessionUserSubscriber } from './taon-session-user.subscriber';\n//#endregion\n\nexport const TaonSessionUserContext = createContext(() => ({\n contextName: 'TaonSessionUserContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonSessionUserEntity,\n TaonSessionUserGroupEntity,\n TaonSessionUserRoleEntity,\n TaonSessionUserIdentityEntity,\n },\n controllers: { TaonSessionUserController },\n repositories: {\n TaonSessionUserRepository,\n TaonSessionUserIdentityRepository,\n TaonSessionUserGroupRepository,\n },\n providers: { TaonSessionUserProvider },\n middlewares: { TaonSessionUserMiddleware },\n subscribers: { TaonSessionUserSubscriber },\n}));\n","import type { TaonSessionUserEntity } from './taon-session-user.entity';\n\nexport const TaonSessionUserDefaultsValues = {} as Partial<TaonSessionUserEntity>;\n","export enum TaonSessionUserState {\n Active = 'active',\n Inactive = 'inactive',\n}\n\nexport enum TaonSessionIdentityProvider {\n PASSWORD = 'PASSWORD',\n\n GOOGLE = 'GOOGLE',\n MICROSOFT = 'MICROSOFT',\n APPLE = 'APPLE',\n FACEBOOK = 'FACEBOOK',\n GITHUB = 'GITHUB',\n}\n","export namespace TaonSessionUserUtils {\n export function generateRandomUsername(): string {\n return `user${crypto.randomUUID().replace(/-/g, '').slice(0, 12)}`;\n }\n}\n","//#region imports\nimport {\n Taon,\n TaonAdditionalMiddlewareMethodInfo,\n TaonBaseMiddleware,\n TaonMiddleware,\n TaonServerMiddlewareInterceptOptions,\n} from 'taon/browser';\nimport { _, UtilsJwt } from 'tnp-core/browser';\n\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionRepository } from './taon-session.repository';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonSessionMiddleware',\n})\nexport class TaonSessionMiddleware extends TaonBaseMiddleware {\n taonSessionRepository = this.injectCustomRepo(TaonSessionRepository);\n\n //#region intercept server method\n async interceptServerMethod(\n data: TaonServerMiddlewareInterceptOptions,\n ): Promise<void> {\n/* */\n/* */\n \n }\n //#endregion\n}\n","//#region imports\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n TaonAuthContextEntity,\n TaonAuthContextRepository,\n} from '../index';\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n TaonBaseController,\n Body,\n POST,\n HttpStatusEnum,\n getStatusCode,\n getStatusText,\n} from 'taon/browser';\nimport { HttpStatusCodeMap } from 'taon/browser';\nimport { FindOneOptions, FindOptionsWhere } from 'taon-typeorm/browser';\nimport { _, UtilsJwt } from 'tnp-core/browser';\n\nimport {\n TaonSessionIdentityProvider,\n TaonSessionUserEntity,\n} from '../taon-session-user';\nimport { TaonSessionUserIdentityEntity } from '../taon-session-user/taon-session-user-identity.entity';\nimport { TaonSessionUserIdentityRepository } from '../taon-session-user/taon-session-user-identity.repository';\nimport { TaonSessionUserRepository } from '../taon-session-user/taon-session-user.repository';\n\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionMiddleware } from './taon-session.middleware';\nimport { TaonLoginData } from './taon-session.models';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionRepository } from './taon-session.repository';\nimport { TaonSessionUtils } from './taon-session.utils';\n\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-session.controller.ts', {} as any);\n\n@TaonController<TaonSessionController>({\n className: 'TaonSessionController',\n allowedMethods: [\n //#region allowed method\n 'createUser',\n 'userExists',\n 'getCurrentUserId',\n 'login',\n 'logout',\n 'refresh',\n 'context',\n 'emptyContext',\n 'connectIdentity',\n 'disconnectIdentity',\n 'usernameAvailable',\n 'changeUsername',\n //#endregion\n ],\n})\nexport class TaonSessionController extends TaonBaseController {\n //#region fields & getters\n private readonly taonSessionKvRepository = this.injectKvRepository(\n TaonSessionKvRepository,\n );\n\n private readonly taonSessionUserIdentityRepository = this.injectCustomRepo(\n TaonSessionUserIdentityRepository,\n );\n\n private readonly taonSessionProvider =\n this.injectProvider(TaonSessionProvider);\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonAuthContextRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n //#endregion\n\n //#region createUser\n @POST()\n createUser(\n @Body('email') email: string,\n @Body('password') password: string,\n ): Taon.Response<TaonSessionUserEntity | null> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region userExists\n @POST()\n userExists(@Body('email') email: string): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get google identity\n private async getGoogleIdentity(data: TaonLoginData): Promise<{\n identity?: TaonSessionUserIdentityEntity | null | undefined;\n error: boolean;\n googleData?: Awaited<\n ReturnType<typeof TaonSessionUtils.verifyGoogleAuthorizationCode>\n >;\n }> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region connect identity\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n connectIdentity(@Body() data: TaonLoginData): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region username available\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n usernameAvailable(\n @Body('username') username: string,\n ): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region change username\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n changeUsername(@Body('username') username: string): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region disconnect identity\n @POST({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n disconnectIdentity(\n @Body('provider') provider: TaonSessionIdentityProvider,\n ): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region login\n @POST()\n login(@Body() data: TaonLoginData): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region refresh\n @POST()\n refresh(): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region logout\n @POST()\n logout(): Taon.Response<boolean> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region context\n @GET({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n context(): Taon.Response<TaonAuthContextEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region empty context\n @GET()\n emptyContext(): Taon.Response<TaonAuthContextEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region get current user id\n @GET({\n middlewares: ({ parentMiddlewares }) => ({\n TaonSessionMiddleware,\n ...parentMiddlewares,\n }),\n })\n getCurrentUserId(): Taon.Response<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { NEVER, Observable, of } from 'rxjs';\nimport { catchError, map, share, tap } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonAuthContextEntity } from '../taon-auth-context/taon-auth-context.entity';\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../taon-session-user/taon-session-user.models';\n\nimport { TaonSessionController } from './taon-session.controller';\nimport { TaonLoginData } from './taon-session.models';\n//#endregion\n\n@Injectable()\nexport class TaonSessionApiService extends TaonBaseAngularService {\n private taonSessionController = this.injectController(TaonSessionController);\n\n usernameAvailable(username: string): Observable<boolean> {\n return this.taonSessionController.usernameAvailable(username)\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n changeUsername(username: string): Observable<boolean> {\n return this.taonSessionController.changeUsername(username)\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n connectPassword(email: string, password: string): Observable<boolean> {\n return this.taonSessionController.connectIdentity({ email, password })\n .request!().observable.pipe(map(resp => !!resp.body.booleanValue));\n }\n\n //#region login\n\n login(data: TaonLoginData): Observable<boolean> {\n return this.taonSessionController.login(data).request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region logout\n logout(): Observable<boolean> {\n return this.taonSessionController.logout().request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region connect idenitty\n connectIdentity(data: TaonLoginData): Observable<boolean> {\n return this.taonSessionController.connectIdentity(data)\n .request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region disconnect idenitty\n disconnectIdentity(\n provider: TaonSessionIdentityProvider,\n ): Observable<boolean> {\n return this.taonSessionController.disconnectIdentity(provider)\n .request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n\n //#region me\n context(): Observable<TaonAuthContextEntity> {\n return this.taonSessionController.context().request!().observable.pipe(\n map(resp => {\n return resp.body.json;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n\n emptyContext(): Observable<TaonAuthContextEntity> {\n return this.taonSessionController.emptyContext().request!().observable.pipe(\n map(resp => {\n return resp.body.json;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n //#endregion\n\n //#region get current user id\n getCurrentUserId(): Observable<number> {\n return this.taonSessionController.getCurrentUserId()\n .request!().observable.pipe(\n map(resp => {\n const userId = resp.body.numericValue;\n return userId;\n }),\n catchError(() => {\n return of(null);\n }),\n share(),\n );\n }\n //#endregion\n\n //#region get current user id\n userExists(\n email: string,\n opt: {\n goToPreviouseState: () => void;\n },\n ): Observable<boolean> {\n return this.taonSessionController.userExists(email)\n .request!().observable.pipe(\n map(resp => {\n const userExists = resp.body.booleanValue;\n return userExists;\n }),\n catchError(() => {\n opt.goToPreviouseState();\n return NEVER;\n }),\n );\n }\n //#endregion\n\n //#region get current user id\n createUser(\n email: string,\n password: string,\n ): Observable<TaonSessionUserEntity | undefined> {\n return this.taonSessionController.createUser(email, password)\n .request!().observable.pipe(\n map(resp => {\n const userExists = resp.body.json;\n return userExists;\n }),\n catchError(() => {\n return of(null);\n }),\n );\n }\n //#endregion\n\n //#region refresh\n refresh(): Observable<boolean> {\n return this.taonSessionController.refresh().request!().observable.pipe(\n map(resp => {\n return !!resp.body.booleanValue;\n }),\n catchError(() => {\n return of(false);\n }),\n );\n }\n //#endregion\n}\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { NEVER, Observable, of } from 'rxjs';\nimport { catchError, map, tap } from 'rxjs/operators';\nimport { ClassHelpers, Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\n\nimport { TaonSessionController } from './taon-session.controller';\nimport {\n TaonSessionConfig,\n TaonSessionProvider,\n} from './taon-session.provider';\n//#endregion\n\n@Injectable()\nexport class TaonSessionConfigService extends TaonBaseAngularService {\n private taonSessionProvider = this.injectProvider(TaonSessionProvider);\n\n clone(): TaonSessionConfig {\n const cloned = this.taonSessionProvider.clone();\n return cloned;\n }\n}\n","import { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-session.models.ts', {} as any);\n\nexport interface TaonLoginData {\n email?: string;\n password?: string;\n googleCode?: string;\n}\n\nexport interface GoogleCodeResponse {\n code?: string;\n error?: string;\n error_description?: string;\n}\n\nexport enum TaonSessionState {\n LOADING_INITIAL_AUTH_INFO = 'LOADING_INITIAL_AUTH_INFO',\n LOGIN_OR_REGISTER = 'LOGIN_OR_REGISTER',\n ENTER_PASSWORD = 'ENTER_PASSWORD',\n ENTER_REGISTRATION_PASSWORDS = 'ENTER_REGISTRATION_PASSWORDS',\n LOADING_AUTH = 'LOADING_AUTH',\n LOADING_CHECK_USER_EMAIL_EXISTS = 'LOADING_CHECK_USER_EMAIL_EXISTS',\n LOADING_CREATING_USER = 'LOADING_CREATING_USER',\n LOADING_LOGOUT_INFO = 'LOADING_LOGOUT_INFO',\n TWO_FA_EMAIL = 'TWO_FA_EMAIL',\n TWO_FA_SMS = 'TWO_FA_SMS',\n TWO_FA_AUTHENTICATOR = 'TWO_FA_AUTHENTICATOR',\n LOGIN_SUCCESS = 'LOGIN_SUCCESS',\n PROFILE_INFO = 'PROFILE_INFO',\n PASSWORD_CHANGE = 'PASSWORD_CHANGE',\n AVATAR_CHANGE = 'AVATAR_CHANGE',\n}\n\nexport enum TaonLoginErrors {\n INVALID_PASSWORD = 'INVALID_PASSWORD',\n INVALID_SOCIAL_LOGIN = 'INVALID_SOCIAL_LOGIN',\n PASSWORDS_DO_NOT_MATCH = 'PASSWORDS_DO_NOT_MATCH',\n}\n\nexport const TaonErorsMap = new Map([\n [TaonLoginErrors.INVALID_PASSWORD, t.gettext('Invalid Password')],\n [\n TaonLoginErrors.INVALID_SOCIAL_LOGIN,\n t.gettext('Not able to login with social account'),\n ],\n [\n TaonLoginErrors.PASSWORDS_DO_NOT_MATCH,\n t.gettext('Passwords do not match each other'),\n ],\n]);\n","//#region imports\n\nimport { inject, Injectable } from '@angular/core'; // @browser\n\nimport {\n BehaviorSubject,\n catchError,\n combineLatest,\n finalize,\n map,\n NEVER,\n Observable,\n of,\n shareReplay,\n switchMap,\n take,\n tap,\n} from 'rxjs';\n\nimport { TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { signal } from 'tnp-core/browser';\nimport { TaonStateMachine } from 'tnp-core/browser';\n\nimport { TaonAuthContextEntity } from '../taon-auth-context/taon-auth-context.entity';\n\nimport type { TaonSessionComponent } from './taon-session/taon-session.component'; // @browser\nimport { TaonSessionApiService } from './taon-session.api.service'; // @browser\nimport {\n TaonErorsMap,\n TaonLoginErrors,\n TaonSessionState,\n} from './taon-session.models';\n\n//#endregion\n\n/* */\n/* */\n/* */\n/* */\n \n//#region @browser\n@Injectable()\n//#endregion\nexport class TaonSessionStateService extends TaonBaseProvider {\n //#region fields & getters\n\n //#region @browser\n protected readonly taonSessionApiService = inject(TaonSessionApiService);\n //#endregion\n\n /**\n * Refreshes session/authentication information.\n *\n * This causes getCurrentUserId() to be called again.\n */\n protected readonly refreshSrc = new BehaviorSubject<void>(void 0);\n\n /**\n * Refreshes authorization context without reloading\n * the current session/user.\n *\n * Useful when roles/groups/permissions change while\n * the currently authenticated user stays the same.\n */\n protected readonly contextRefreshSrc = new BehaviorSubject<void>(void 0);\n\n protected readonly userId = signal<number | undefined>(void 0);\n\n protected readonly currentSlide = signal(\n TaonSessionState.LOADING_INITIAL_AUTH_INFO,\n );\n\n private allowedStateMap = new Map<TaonSessionState, TaonSessionState[]>([\n [\n TaonSessionState.LOADING_INITIAL_AUTH_INFO,\n [TaonSessionState.LOGIN_OR_REGISTER, TaonSessionState.LOGIN_SUCCESS],\n ],\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOADING_AUTH,\n TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS,\n ],\n ],\n [\n TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOGIN_OR_REGISTER,\n ],\n ],\n [\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n [TaonSessionState.LOADING_AUTH, TaonSessionState.LOGIN_OR_REGISTER],\n ],\n [\n TaonSessionState.ENTER_PASSWORD,\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.LOADING_AUTH,\n TaonSessionState.TWO_FA_AUTHENTICATOR,\n TaonSessionState.TWO_FA_EMAIL,\n TaonSessionState.TWO_FA_SMS,\n ],\n ],\n [\n TaonSessionState.LOADING_AUTH,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.LOGIN_OR_REGISTER,\n TaonSessionState.LOGIN_SUCCESS,\n ],\n ],\n [\n TaonSessionState.LOGIN_SUCCESS,\n [\n TaonSessionState.LOADING_LOGOUT_INFO,\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.PROFILE_INFO,\n ],\n ],\n [\n TaonSessionState.PROFILE_INFO,\n [\n TaonSessionState.LOGIN_SUCCESS,\n TaonSessionState.LOADING_LOGOUT_INFO,\n TaonSessionState.ENTER_PASSWORD,\n ],\n ],\n [\n TaonSessionState.LOADING_LOGOUT_INFO,\n [TaonSessionState.LOGIN_OR_REGISTER, TaonSessionState.LOGIN_SUCCESS],\n ],\n ]);\n\n public state = new TaonStateMachine<TaonSessionState>({\n defaultValue: this.currentSlide(),\n allowedStateMap: this.allowedStateMap,\n effect: (nextState, previousState, debugMode) => {\n this.currentSlide.set(nextState);\n },\n });\n\n /**\n * Current authenticated user.\n *\n * Shared because multiple consumers may depend on userId$,\n * isLoggedIn$ and context$ at the same time.\n *\n * One refresh => one getCurrentUserId() request.\n */\n protected readonly userId$ = this.refreshSrc.pipe(\n switchMap(() => {\n/* */\n/* */\n \n\n //#region @browser\n return this.taonSessionApiService.getCurrentUserId().pipe(\n catchError(() => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n return of(void 0);\n }),\n );\n //#endregion\n }),\n\n tap(userId => {\n this.userId.set(userId);\n\n if (userId) {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n } else {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n }\n }),\n\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n /**\n * Projection of userId$.\n *\n * Does NOT cause another getCurrentUserId() call because\n * userId$ is shared.\n */\n public readonly isLoggedIn$ = this.userId$.pipe(map(userId => !!userId));\n\n //#region @browser\n\n /**\n * Current authorization context.\n *\n * Reloaded when:\n *\n * 1. session/user changes\n * 2. refreshContext() is explicitly called\n *\n * Multiple subscribers share the same context request.\n */\n public readonly context$: Observable<TaonAuthContextEntity> = combineLatest([\n this.userId$,\n this.contextRefreshSrc,\n ]).pipe(\n switchMap(([userId]) => {\n if (!userId) {\n return this.taonSessionApiService.emptyContext();\n }\n\n return this.taonSessionApiService.context();\n }),\n\n shareReplay({\n bufferSize: 1,\n refCount: true,\n }),\n );\n\n //#endregion\n\n //#endregion\n\n public executeActionForState(\n //#region @browser\n form: TaonSessionComponent['form'],\n //#endregion\n ): void {\n //#region @browser\n\n form.updateValueAndValidity();\n\n if (form.invalid) {\n return;\n }\n\n const googleCodeField = form.controls.googleCode;\n const isSocialLogin = googleCodeField.value!;\n\n //#region login action\n\n const loginAction = (): void => {\n const passwordField = form.controls.password;\n\n if (!isSocialLogin) {\n passwordField.markAsTouched();\n }\n\n this.state.set(TaonSessionState.LOADING_AUTH);\n\n this.taonSessionApiService\n .login({\n email: form.controls.email.value!,\n password: passwordField.value!,\n googleCode: googleCodeField.value!,\n })\n .pipe(\n take(1),\n\n tap(okLogin => {\n googleCodeField.reset();\n\n if (okLogin) {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n\n if (!isSocialLogin) {\n passwordField.markAsUntouched();\n }\n } else {\n if (isSocialLogin) {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n\n googleCodeField.setErrors({\n [TaonLoginErrors.INVALID_SOCIAL_LOGIN]: true,\n });\n } else {\n this.state.set(TaonSessionState.ENTER_PASSWORD);\n\n passwordField.setErrors({\n ...(passwordField.errors ?? {}),\n [TaonLoginErrors.INVALID_PASSWORD]: true,\n });\n\n passwordField.markAsTouched();\n }\n }\n }),\n\n finalize(() => {\n this.refresh();\n }),\n )\n .subscribe();\n };\n\n //#endregion\n\n switch (this.state.currentValue) {\n //#region LOGIN_OR_REGISTER\n\n case TaonSessionState.LOGIN_OR_REGISTER:\n if (isSocialLogin) {\n loginAction();\n } else {\n this.state.set(TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS);\n\n this.taonSessionApiService\n .userExists(form.controls.email.value!, {\n goToPreviouseState: () => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n },\n })\n .pipe(\n take(1),\n\n tap(userExists => {\n if (userExists) {\n this.state.set(TaonSessionState.ENTER_PASSWORD);\n } else {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n }\n }),\n\n catchError(err => {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n return NEVER;\n }),\n )\n .subscribe();\n }\n\n return;\n\n //#endregion\n\n //#region ENTER_REGISTRATION_PASSWORDS\n\n case TaonSessionState.ENTER_REGISTRATION_PASSWORDS:\n this.state.set(TaonSessionState.LOADING_CREATING_USER);\n\n this.taonSessionApiService\n .createUser(form.controls.email.value!, form.controls.password.value!)\n .pipe(\n take(1),\n\n tap(user => {\n if (user) {\n loginAction();\n } else {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n }\n }),\n\n catchError(err => {\n this.state.set(TaonSessionState.ENTER_REGISTRATION_PASSWORDS);\n\n return NEVER;\n }),\n )\n .subscribe();\n\n return;\n\n //#endregion\n\n //#region ENTER_PASSWORD\n\n case TaonSessionState.ENTER_PASSWORD:\n loginAction();\n return;\n\n //#endregion\n\n default:\n break;\n }\n\n //#endregion\n }\n\n public logout(successCallback?: () => void): void {\n this.state.set(TaonSessionState.LOADING_LOGOUT_INFO);\n\n //#region @browser\n\n this.taonSessionApiService\n .logout()\n .pipe(\n take(1),\n\n tap(logoutOk => {\n if (logoutOk) {\n this.state.set(TaonSessionState.LOGIN_OR_REGISTER);\n successCallback?.();\n } else {\n this.state.set(TaonSessionState.LOGIN_SUCCESS);\n }\n }),\n\n finalize(() => {\n this.refresh();\n }),\n )\n .subscribe();\n\n //#endregion\n }\n\n /**\n * Reload complete authentication/session state.\n *\n * This causes:\n *\n * getCurrentUserId()\n * -> userId$\n * -> isLoggedIn$\n * -> context$\n */\n public refresh(): void {\n this.refreshSrc.next(void 0);\n }\n\n /**\n * Reload authorization context only.\n *\n * Does NOT call getCurrentUserId().\n */\n public refreshContext(): void {\n this.contextRefreshSrc.next(void 0);\n }\n}\n","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms'; // browser\n\nimport { TaonLoginErrors, TaonSessionState } from './taon-session.models';\n\nexport namespace TaonSessionValidator {\n //#region @browser\n export const passwordMatchValidator: ValidatorFn = (\n control: AbstractControl,\n ): ValidationErrors | null => {\n const password = control.get('password');\n const passwordRepeat = control.get('passwordRepeat');\n const state = control.get('state');\n if (state.value !== TaonSessionState.ENTER_REGISTRATION_PASSWORDS) {\n return null;\n }\n\n if (!password || !passwordRepeat) {\n return null;\n }\n\n return password.value === passwordRepeat.value\n ? null\n : { [TaonLoginErrors.PASSWORDS_DO_NOT_MATCH]: true };\n };\n //#endregion\n}\n","import { CommonModule } from '@angular/common';\nimport { Component, EventEmitter, Output } from '@angular/core';\nimport { MatRippleModule } from '@angular/material/core'; // Optional: for Material ripple effect\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-session/social-buttons/google-login-register-button.component.ts', {} as any);\n\n@Component({\n selector: 'google-login-register-button',\n standalone: true,\n imports: [CommonModule, MatRippleModule],\n templateUrl: './google-login-register-button.component.html',\n})\nexport class GoogleLoginRegisterButtonComponent {\n t = t.for(this);\n\n @Output() googleSignIn = new EventEmitter<void>();\n\n onClick() {\n this.googleSignIn.emit();\n }\n}\n","<button\n type=\"button\"\n matRipple\n (click)=\"onClick()\"\n class=\"flex w-full items-center justify-center gap-3 px-4 py-2.5 border border-slate-300 rounded-full font-medium text-slate-700 bg-white hover:bg-slate-50 hover:border-slate-400 active:bg-slate-100 shadow-sm transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 cursor-pointer\">\n <!-- Google SVG Logo -->\n <svg\n class=\"w-5 h-5\"\n viewBox=\"0 0 24 24\">\n <path\n fill=\"#4285F4\"\n d=\"M23.745 12.27c0-.7-.06-1.4-.19-2.07H12v4.51h6.6c-.29 1.52-1.14 2.82-2.4 3.68v3.05h3.88c2.27-2.09 3.66-5.17 3.66-9.17z\" />\n <path\n fill=\"#34A853\"\n d=\"M12 24c3.24 0 5.95-1.08 7.93-2.91l-3.88-3.05c-1.08.72-2.45 1.16-4.05 1.16-3.12 0-5.77-2.1-6.72-4.93H1.19v3.15C3.17 21.32 7.25 24 12 24z\" />\n <path\n fill=\"#FBBC05\"\n d=\"M5.28 14.27c-.25-.72-.38-1.49-.38-2.27s.13-1.55.38-2.27V6.58H1.19C.43 8.1 0 9.8 0 12s.43 3.9 1.19 5.42l4.09-3.15z\" />\n <path\n fill=\"#EA4335\"\n d=\"M12 4.75c1.77 0 3.35.61 4.6 1.8l3.42-3.42C17.95 1.19 15.24 0 12 0 7.25 0 3.17 2.68 1.19 6.58l4.09 3.15c.95-2.83 3.6-4.98 6.72-4.98z\" />\n </svg>\n <span class=\"text-sm font-semibold tracking-wide\">{{\n t.gettext('Sign in with Google')\n }}</span>\n </button>\n","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n inject,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { RouterOutlet } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport {\n TaonConfirmDialogComponent,\n TaonHorizontalWheelScrollDirective,\n} from '@taon-dev/ui/browser';\nimport { firstValueFrom, map, shareReplay } from 'rxjs';\nimport { Taon } from 'taon/browser';\n\nimport { GoogleCodeResponse, TaonSessionConfig } from '../../../index';\n// import { TaonProfilePictureComponent } from '../../../taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component';\nimport { TaonSessionApiService } from '../../../taon-session/taon-session.api.service';\nimport { TaonSessionStateService } from '../../../taon-session/taon-session.state.service';\nimport { TaonSessionUserEntity } from '../../../taon-session-user/taon-session-user.entity';\nimport { TaonSessionIdentityProvider } from '../../../taon-session-user/taon-session-user.models';\n\n//#endregion\n\ndeclare const google: any;\n\nconst t = Translation.for('src/lib/taon-session/taon-session/taon-session-profile/taon-session-profile.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session-profile',\n templateUrl: './taon-session-profile.component.html',\n styleUrls: ['./taon-session-profile.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n RouterOutlet,\n MatButtonModule,\n MatButtonToggleModule,\n MatTabsModule,\n MatIconModule,\n MatDividerModule,\n MatInputModule,\n MatFormFieldModule,\n ReactiveFormsModule,\n TaonHorizontalWheelScrollDirective,\n // TaonProfilePictureComponent,\n ],\n})\nexport class TaonSessionProfileComponent {\n //#region fields & getters\n t = t.for(this);\n\n TaonSessionIdentityProvider = TaonSessionIdentityProvider;\n\n @Input()\n public config: TaonSessionConfig;\n\n protected readonly taonSessionApiService = inject(TaonSessionApiService);\n\n public readonly taonSessionStateService = inject(TaonSessionStateService);\n\n readonly context$ = this.taonSessionStateService.context$.pipe(\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n\n readonly usernameForm = new FormGroup({\n username: new FormControl('', { nonNullable: true, validators: [\n Validators.required, Validators.maxLength(255), Validators.pattern(/\\S/),\n ] }),\n });\n\n readonly passwordForm = new FormGroup({\n email: new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.email] }),\n password: new FormControl('', { nonNullable: true, validators: [\n Validators.required, Validators.minLength(8), Validators.maxLength(128),\n ] }),\n passwordRepeat: new FormControl('', { nonNullable: true, validators: [Validators.required] }),\n });\n\n readonly savingUsername = signal(false);\n\n readonly usernameError = signal('');\n\n readonly usernameSaved = signal(false);\n\n readonly showPasswordForm = signal(false);\n\n readonly savingPassword = signal(false);\n\n readonly passwordError = signal('');\n\n get isVisibleGoogle(): boolean {\n return this.config?.socialLogin?.google?.enabled;\n }\n\n get isVisibleApple(): boolean {\n return this.config?.socialLogin?.apple?.enabled;\n }\n\n get isVisibleMicrosoft(): boolean {\n return this.config?.socialLogin?.microsoft?.enabled;\n }\n\n get isVisibleFacebook(): boolean {\n return this.config?.socialLogin?.facebook?.enabled;\n }\n\n get isVisibleGithub(): boolean {\n return this.config?.socialLogin?.github?.enabled;\n }\n\n /**\n * Email/password can be connected only when the user currently\n * has no PASSWORD identity.\n *\n * In practice this means an account created purely through\n * social authentication.\n */\n readonly canConnectEmail$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.PASSWORD,\n );\n }),\n );\n\n readonly canConnectGoogle$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.GOOGLE,\n );\n }),\n );\n\n readonly canConnectGithub$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.GITHUB,\n );\n }),\n );\n\n readonly canConnectApple$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.APPLE,\n );\n }),\n );\n\n readonly canConnectMicrosoft$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.MICROSOFT,\n );\n }),\n );\n\n readonly canConnectFacebook$ = this.context$.pipe(\n map(context => {\n const identities = context?.user?.identities || [];\n\n return !identities.some(\n identity => identity.provider === TaonSessionIdentityProvider.FACEBOOK,\n );\n }),\n );\n\n @Output()\n readonly logout = new EventEmitter<void>();\n\n readonly dialog = inject(MatDialog);\n //#endregion\n\n onLogout(): void {\n this.logout.next();\n }\n\n //#region disconnect\n\n public disconnect(provider: TaonSessionIdentityProvider): void {\n const ref = this.dialog.open(TaonConfirmDialogComponent, {\n width: '376px',\n data: {\n title: this.t.gettext('Are you sure? '),\n message: this.t.gettext('Disconnecting provider [[ provider ]].', {\n provider,\n }),\n confirmText: this.t.gettext('OK'),\n cancelText: this.t.gettext('Cancel'),\n },\n });\n\n ref.afterClosed().subscribe(async confirmed => {\n if (!confirmed) return;\n\n this.taonSessionApiService\n .disconnectIdentity(provider)\n .subscribe(connectedToGoogle => {\n if (connectedToGoogle) {\n this.taonSessionStateService.refresh();\n }\n });\n });\n }\n //#endregion\n\n //#region connect email\n connectEmail(user?: TaonSessionUserEntity | null): void {\n const identity = user?.identities?.find(identity =>\n identity.isEmailVerified === true && !!identity.email,\n );\n if (!identity) {\n this.passwordError.set(this.t.gettext('Connect a sign-in method with a verified email first.'));\n return;\n }\n this.passwordForm.reset({ email: identity.email, password: '', passwordRepeat: '' });\n this.passwordError.set('');\n this.showPasswordForm.set(true);\n }\n //#endregion\n\n async savePassword(): Promise<void> {\n this.passwordForm.markAllAsTouched();\n this.passwordError.set('');\n if (this.passwordForm.invalid || this.savingPassword()) {\n return;\n }\n const { email, password, passwordRepeat } = this.passwordForm.getRawValue();\n if (password !== passwordRepeat) {\n this.passwordError.set(this.t.gettext('Passwords do not match each other'));\n return;\n }\n this.savingPassword.set(true);\n try {\n const connected = await firstValueFrom(this.taonSessionApiService.connectPassword(email, password));\n if (!connected) {\n this.passwordError.set(this.t.gettext('Unable to connect email/password.'));\n return;\n }\n this.passwordForm.reset();\n this.showPasswordForm.set(false);\n this.taonSessionStateService.refreshContext();\n } catch (error) {\n console.error('[connect-email]', error);\n this.passwordError.set(this.t.gettext('Unable to connect email/password. The email may already belong to another account.'));\n } finally {\n this.savingPassword.set(false);\n }\n }\n\n async saveUsername(): Promise<void> {\n this.usernameForm.markAllAsTouched();\n this.usernameError.set('');\n this.usernameSaved.set(false);\n if (this.usernameForm.invalid || this.savingUsername()) {\n return;\n }\n const username = this.usernameForm.controls.username.value.trim();\n this.savingUsername.set(true);\n try {\n const available = await firstValueFrom(this.taonSessionApiService.usernameAvailable(username));\n if (!available) {\n this.usernameError.set(this.t.gettext('This username is already taken.'));\n return;\n }\n const saved = await firstValueFrom(this.taonSessionApiService.changeUsername(username));\n if (!saved) {\n this.usernameError.set(this.t.gettext('Unable to update username.'));\n return;\n }\n this.usernameForm.reset();\n this.usernameSaved.set(true);\n this.taonSessionStateService.refreshContext();\n } catch (error) {\n console.error('[change-username]', error);\n this.usernameError.set(this.t.gettext('Unable to update username. It may already be taken.'));\n } finally {\n this.savingUsername.set(false);\n }\n }\n\n //#region connect google\n private googleCodeClient?: any;\n\n public connectGoogle(): void {\n if (!this.googleCodeClient) {\n this.initGoogleLogin();\n }\n\n this.googleCodeClient.requestCode();\n }\n\n private initGoogleLogin(): void {\n this.googleCodeClient = google.accounts.oauth2.initCodeClient({\n client_id: this.config.socialLogin.google.googleClientId,\n\n scope: 'openid email profile',\n\n ux_mode: 'popup',\n\n callback: async (response: GoogleCodeResponse) => {\n if (response.error) {\n console.error('[google-login]', response);\n return;\n }\n\n if (!response.code) {\n return;\n }\n\n await this.connectGoogleIdenitty(response.code);\n },\n\n error_callback: (error: any) => {\n console.error('[google-login-popup]', error);\n },\n });\n }\n\n private connectGoogleIdenitty(googleCode: string): void {\n this.taonSessionApiService\n .connectIdentity({\n googleCode,\n })\n .subscribe(connectedToGoogle => {\n if (connectedToGoogle) {\n this.taonSessionStateService.refresh();\n }\n });\n }\n //#endregion\n\n //#region connect apple\n connectApple(): void {\n // TODO replace with proper Apple authorization flow\n console.log('Connect Apple');\n }\n //#endregion\n\n //#region connect microsoft\n connectMicrosoft(): void {\n // TODO replace with proper Microsoft authorization flow\n console.log('Connect Microsoft');\n }\n //#endregion\n\n //#region connect facebook\n connectFacebook(): void {\n // TODO replace with proper Facebook authorization flow\n console.log('Connect Facebook');\n }\n //#endregion\n}\n","@let context = context$ | async;\n<mat-tab-group taonHorizontalWheelScroll>\n <!-- CONNECT IDENTITIES -->\n <mat-tab [label]=\"t.gettext('Connect')\">\n <div class=\"tab-content\">\n <h3>{{ t.gettext('Connect sign-in method') }}</h3>\n\n <p class=\"description\">\n {{\n t.gettext('Connect additional ways of signing in to your account.')\n }}\n </p>\n\n <mat-button-toggle-group\n class=\"identity-buttons\"\n [hideSingleSelectionIndicator]=\"true\">\n @if (canConnectEmail$ | async) {\n <mat-button-toggle\n [disabled]=\"config?.login?.diableLoginByEmail\"\n (click)=\"connectEmail(context?.user)\">\n <mat-icon>email</mat-icon>\n Email\n </mat-button-toggle>\n } @else {\n <mat-button-toggle\n (click)=\"disconnect(TaonSessionIdentityProvider.PASSWORD)\">\n <mat-icon>email</mat-icon>\n Disconnect Email\n </mat-button-toggle>\n }\n\n @if (canConnectGoogle$ | async) {\n <mat-button-toggle (click)=\"connectGoogle()\">\n <mat-icon>account_circle</mat-icon>\n Google\n </mat-button-toggle>\n } @else {\n <mat-button-toggle\n (click)=\"disconnect(TaonSessionIdentityProvider.GOOGLE)\">\n <mat-icon>close</mat-icon>\n Disconnect Google\n </mat-button-toggle>\n }\n\n <!-- TODO -->\n <!-- <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectApple()\">\n <mat-icon>apple</mat-icon>\n Apple\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectMicrosoft()\">\n <mat-icon>window</mat-icon>\n Microsoft\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectFacebook()\">\n <mat-icon>public</mat-icon>\n Facebook\n </mat-button-toggle>\n\n <mat-button-toggle\n [disabled]=\"true\"\n (click)=\"connectGithub()\">\n <mat-icon>public</mat-icon>\n Github\n </mat-button-toggle> -->\n </mat-button-toggle-group>\n @if (showPasswordForm()) {\n <form [formGroup]=\"passwordForm\" (ngSubmit)=\"savePassword()\">\n <mat-form-field>\n <mat-label>{{ t.gettext('Verified email') }}</mat-label>\n <input matInput formControlName=\"email\" readonly />\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ t.gettext('Password') }}</mat-label>\n <input matInput type=\"password\" formControlName=\"password\" autocomplete=\"new-password\" />\n <mat-error>{{ t.gettext('Password must contain between 8 and 128 characters.') }}</mat-error>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{ t.gettext('Repeat password') }}</mat-label>\n <input matInput type=\"password\" formControlName=\"passwordRepeat\" autocomplete=\"new-password\" />\n </mat-form-field>\n <button mat-button type=\"submit\" [disabled]=\"savingPassword() || passwordForm.invalid\">\n {{ t.gettext('Save password') }}\n </button>\n </form>\n }\n @if (passwordError()) {\n <p role=\"alert\">{{ passwordError() }}</p>\n }\n </div>\n </mat-tab>\n\n <!-- CHANGE PICTURE -->\n <!-- <mat-tab label=\"Change Picture\">\n <div class=\"tab-content\">\n <taon-profile-picture />\n\n </div>\n </mat-tab> -->\n\n <!-- CHANGE PASSWORD -->\n <mat-tab label=\"Change Password\">\n <div class=\"tab-content\">\n <!-- TODO change password -->\n </div>\n </mat-tab>\n <mat-tab [label]=\"t.gettext('Change Username')\">\n <div class=\"tab-content\">\n <p>{{ t.gettext('Current username') }}: {{ context?.user?.username || '-' }}</p>\n <form [formGroup]=\"usernameForm\" (ngSubmit)=\"saveUsername()\">\n <mat-form-field>\n <mat-label>{{ t.gettext('New username') }}</mat-label>\n <input matInput formControlName=\"username\" autocomplete=\"username\" [readonly]=\"savingUsername()\"\n (input)=\"usernameError.set(''); usernameSaved.set(false)\" />\n <mat-error>{{ t.gettext('Username must contain between 1 and 255 characters.') }}</mat-error>\n </mat-form-field>\n <button mat-button type=\"submit\" [disabled]=\"savingUsername() || usernameForm.invalid\">\n {{ t.gettext('Save username') }}\n </button>\n </form>\n @if (usernameError()) {\n <p role=\"alert\">{{ usernameError() }}</p>\n }\n @if (usernameSaved()) {\n <p role=\"status\">{{ t.gettext('Username updated.') }}</p>\n }\n </div>\n </mat-tab>\n</mat-tab-group>\n\n<mat-divider></mat-divider>\n\n<div class=\"profile-actions\">\n <button\n mat-button\n (click)=\"onLogout()\">\n <mat-icon>logout</mat-icon>\n {{ t.gettext('Logout') }}\n </button>\n</div>\n","//#region imports\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { AsyncPipe, CommonModule, JsonPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n AfterViewInit,\n Input,\n ViewChild,\n OnInit,\n OnDestroy,\n ElementRef,\n forwardRef,\n} from '@angular/core';\nimport {\n ReactiveFormsModule,\n FormsModule,\n FormGroup,\n FormControl,\n Validators,\n} from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule, MatDialogRef } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { RouterOutlet } from '@angular/router';\nimport { MtxLoaderModule } from '@ng-matero/extensions/loader';\nimport { Translation, TranslateDirective } from '@taon-dev/i18n/browser';\nimport { walk } from 'lodash-walk-object/browser';\nimport { Subscription, take } from 'rxjs';\nimport { Taon } from 'taon/browser';\nimport {\n TaonSlideContentContentChildComponent,\n TaonSlideContentComponent,\n} from 'taon-ui/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonProfilePictureComponent } from '../taon-profile/taon-profile-picture';\nimport { TaonSessionApiService } from '../taon-session.api.service';\nimport { TaonSessionConfigService } from '../taon-session.config.service';\nimport {\n GoogleCodeResponse,\n TaonErorsMap,\n TaonLoginErrors,\n TaonSessionState,\n} from '../taon-session.models';\nimport {\n TaonSessionConfig,\n TaonSessionProvider,\n} from '../taon-session.provider';\nimport { TaonSessionStateService } from '../taon-session.state.service';\nimport { TaonSessionValidator } from '../taon-session.validators';\n\nimport { GoogleLoginRegisterButtonComponent } from './social-buttons/google-login-register-button.component';\nimport { TaonSessionProfileComponent } from './taon-session-profile/taon-session-profile.component';\n//#endregion\n\ndeclare const google: any;\n\nconst t = Translation.for('src/lib/taon-session/taon-session/taon-session.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session',\n templateUrl: './taon-session.component.html',\n styleUrls: ['./taon-session.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n forwardRef(() => TaonSessionApiService),\n TaonSessionStateService,\n TaonSessionProvider,\n TaonSessionConfigService,\n ],\n imports: [\n //#region imports\n AsyncPipe,\n RouterOutlet,\n CommonModule,\n FormsModule,\n ReactiveFormsModule,\n JsonPipe,\n CommonModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatDividerModule,\n MatInputModule,\n MatFormFieldModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MtxLoaderModule,\n ReactiveFormsModule,\n FormsModule,\n TranslateDirective,\n TaonSlideContentComponent,\n TaonSlideContentContentChildComponent,\n A11yModule,\n GoogleLoginRegisterButtonComponent,\n TaonSessionProfileComponent,\n TaonProfilePictureComponent,\n //#endregion\n ],\n})\nexport class TaonSessionComponent implements AfterViewInit, OnInit, OnDestroy {\n //#region fields & getters\n\n @Input()\n public config: TaonSessionConfig;\n\n @ViewChild('emailInput')\n private emailInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('passwordInput')\n private passwordInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('registrationPasswordInput')\n private registrationPasswordInput?: ElementRef<HTMLInputElement>;\n\n @ViewChild('slide')\n protected slide!: TaonSlideContentComponent;\n\n protected readonly t = t.for(this);\n\n protected readonly TaonSessionState = TaonSessionState;\n\n protected readonly TaonLoginErrors = TaonLoginErrors;\n\n protected readonly TaonErorsMap = TaonErorsMap;\n\n protected emailRegex = /^[a-zA-Z0-9._%+-]+@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,}$/;\n\n public taonSessionStateService: TaonSessionStateService = inject(\n TaonSessionStateService,\n );\n\n protected readonly taonSessionConfigService: TaonSessionConfigService =\n inject(TaonSessionConfigService);\n\n protected form = new FormGroup(\n {\n email: new FormControl('', []),\n password: new FormControl('', []),\n passwordRepeat: new FormControl('', []),\n googleCode: new FormControl('', []),\n state: new FormControl(\n this.taonSessionStateService.state.currentValue,\n [],\n ),\n },\n {\n validators: [TaonSessionValidator.passwordMatchValidator],\n },\n );\n\n protected readonly dialogRef = inject(MatDialogRef<TaonSessionComponent>, {\n optional: true,\n });\n\n isLoggedIn$ = this.taonSessionStateService.isLoggedIn$;\n\n context$ = this.taonSessionStateService.context$; // TODO @LAST\n\n protected sub = new Subscription();\n\n protected googleButtonLoaded = false;\n\n public whenAllowedAnimationMap = new Map<\n TaonSessionState,\n TaonSessionState[]\n >([\n [\n TaonSessionState.LOGIN_OR_REGISTER,\n [\n TaonSessionState.ENTER_PASSWORD,\n TaonSessionState.ENTER_REGISTRATION_PASSWORDS,\n TaonSessionState.LOADING_AUTH,\n ],\n ],\n [TaonSessionState.LOADING_AUTH, [TaonSessionState.LOGIN_SUCCESS]],\n ]);\n\n public get isInsideDialog(): boolean {\n return !!this.dialogRef;\n }\n\n get googleClientId(): string {\n return this.config.socialLogin.google.googleClientId;\n }\n\n get microsoftClientId(): string {\n return this.config.socialLogin.microsoft.microsoftClientId;\n }\n\n get isAnySocialLoginEnabled(): boolean {\n return this.config.socialLogin.isAnySocialLoginEnabled;\n }\n\n get diableLoginByEmail(): boolean {\n return this.config.login.diableLoginByEmail;\n }\n\n //#endregion\n\n //#region reload me\n public reloadMe(): void {\n this.taonSessionStateService.refresh();\n }\n //#endregion\n\n //#region execute action for state\n public executeActionForState(): void {\n this.taonSessionStateService.executeActionForState(this.form);\n }\n //#endregion\n\n //#region goto\n public goTo(action: TaonSessionState): void {\n this.taonSessionStateService.state.set(action);\n }\n //#endregion\n\n //#region logout\n public logout(): void {\n this.taonSessionStateService.logout(() => {\n this.close();\n });\n }\n //#endregion\n\n //#region close\n protected close(): void {\n if (this.isInsideDialog) {\n this.dialogRef.close();\n }\n }\n //#endregion\n\n //#region set focus main input\n private focusMainInput(state: TaonSessionState): void {\n switch (state) {\n case TaonSessionState.LOGIN_OR_REGISTER:\n if (!this.config.socialLogin.isAnySocialLoginEnabled) {\n this.emailInput?.nativeElement.focus();\n }\n break;\n\n case TaonSessionState.ENTER_PASSWORD:\n this.passwordInput?.nativeElement.focus();\n break;\n\n case TaonSessionState.ENTER_REGISTRATION_PASSWORDS:\n this.registrationPasswordInput?.nativeElement.focus();\n break;\n\n // later:\n // case TaonSessionState.TWO_FA_AUTHENTICATOR:\n // this.twoFaInput?.nativeElement.focus();\n // break;\n }\n }\n //#endregion\n\n //#region google login\n private googleCodeClient?: any;\n\n private initGoogleLogin(): void {\n this.googleCodeClient = google.accounts.oauth2.initCodeClient({\n client_id: this.config.socialLogin.google.googleClientId,\n\n scope: 'openid email profile',\n\n ux_mode: 'popup',\n\n callback: async (response: GoogleCodeResponse) => {\n if (response.error) {\n console.error('[google-login]', response);\n return;\n }\n\n if (!response.code) {\n return;\n }\n\n await this.loginWithGoogleCode(response.code);\n },\n\n error_callback: (error: any) => {\n console.error('[google-login-popup]', error);\n },\n });\n }\n\n public loginWithGoogle(): void {\n this.form.controls.googleCode.setErrors({});\n if (!this.googleCodeClient) {\n this.initGoogleLogin();\n }\n\n this.googleCodeClient.requestCode();\n }\n\n private async loginWithGoogleCode(code: string): Promise<void> {\n this.form.controls.googleCode.setValue(code);\n // this.taonSessionStateService.state.set(TaonSessionState.LOADING_AUTH);\n this.form.controls.email.reset();\n this.form.controls.email.setValidators([]);\n this.form.controls.email.setErrors({});\n this.form.controls.email.updateValueAndValidity();\n this.executeActionForState();\n }\n //#endregion\n\n //#region hooks\n\n //#region hooks / on init\n ngOnInit(): void {\n const config = this.taonSessionConfigService.clone();\n walk.Object(\n this.config || {},\n (value, lodashPath) => {\n _.set(config, lodashPath, value);\n },\n {\n walkGetters: false,\n },\n );\n this.config = config;\n\n this.isLoggedIn$.pipe(take(1)).subscribe();\n //Called after the constructor, initializing input properties, and the first call to ngOnChanges.\n //Add 'implements OnInit' to the class.\n if (!this.config.login.linkToDashboard) {\n throw `Please provide config input to taon-session (or taon-session-button) component`;\n }\n if (this.config.login.defaultEmail) {\n this.form.controls.email.setValue(this.config.login.defaultEmail);\n }\n\n this.resetPasswordScreen();\n }\n //#endregion\n\n //#region hooks / on destroy\n ngOnDestroy(): void {\n this.sub.unsubscribe();\n }\n //#endregion\n\n //#region hooks / after view init\n ngAfterViewInit(): void {\n this.sub.add(\n this.taonSessionStateService.state.currentState$.subscribe(\n ({ currentState, previousState }) => {\n if (\n currentState === TaonSessionState.LOGIN_SUCCESS &&\n this.isInsideDialog\n ) {\n this.close();\n }\n this.form.controls.state.setValue(currentState);\n if (currentState === TaonSessionState.LOGIN_OR_REGISTER) {\n this.form.controls.googleCode.setValue('');\n }\n this.updateValidatorsFor(currentState);\n // console.log({ newState });\n if (this.slide) {\n this.slide.goTo(currentState);\n setTimeout(() => {\n // console.log(`FOCUS: ${newState}`);\n this.focusMainInput(currentState);\n }, 500);\n }\n },\n ),\n );\n }\n //#endregion\n\n //#endregion\n\n //#region reset password field\n public resetPasswordScreen() {\n this.form.controls.password.reset();\n this.form.controls.password.setValue(\n this.config.login.defaultPassword || '',\n );\n this.form.controls.passwordRepeat.reset();\n this.form.controls.passwordRepeat.setValue(\n this.config.login.defaultPassword || '',\n );\n }\n //#endregion\n\n //#region update validators for\n private updateValidatorsFor(state: TaonSessionState): void {\n const { email, password, passwordRepeat } = this.form.controls;\n\n email.setValidators(\n state === TaonSessionState.LOGIN_OR_REGISTER &&\n !this.config?.login.diableLoginByEmail\n ? [Validators.required, Validators.pattern(this.emailRegex)]\n : [],\n );\n\n password.setValidators(\n state === TaonSessionState.ENTER_PASSWORD ||\n state === TaonSessionState.ENTER_REGISTRATION_PASSWORDS\n ? [Validators.required]\n : [],\n );\n\n passwordRepeat.setValidators(\n state === TaonSessionState.ENTER_REGISTRATION_PASSWORDS\n ? [Validators.required]\n : [],\n );\n\n if (!this.config?.login.diableLoginByEmail) {\n email.updateValueAndValidity();\n }\n\n password.updateValueAndValidity();\n passwordRepeat.updateValueAndValidity();\n }\n //#endregion\n}\n","<!-- #region close button -->\n<div\n class=\"absolute top-1 right-1 pointer z-1\"\n *ngIf=\"isInsideDialog\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<!-- #endregion -->\n<!-- STATE: {{ state.currentValue }} <br /> -->\n<!-- ERRORS: {{ form.errors | json }} <br /> -->\n<!-- IS LOGGED IN: {{ isLoggedIn$ | async }}<br /> -->\n<!-- {{ context$ | async | json }} -->\n<!-- <button (click)=\"test()\" >test</button> -->\n<h1 class=\"flex items-center justify-center pt-10\">\n <taon-profile-picture [hideButtons]=\"!(isLoggedIn$ | async)\" />\n <!-- <mat-icon\n class=\"!w-[100px] !h-[100px] !text-[100px] !leading-[100px]\"\n fontIcon=\"account_circle\">\n </mat-icon> -->\n</h1>\n<taon-slide-content\n #slide\n [whenAllowedAnimationMap]=\"whenAllowedAnimationMap\">\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOADING_INITIAL_AUTH_INFO\">\n <!-- #region login success -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading authenticaiton info..\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOADING_CHECK_USER_EMAIL_EXISTS\">\n <!-- #region LOADING_CHECK_USER_EMAIL_EXISTS -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading...\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.LOADING_AUTH\">\n <!-- #region LOADING_AUTH -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Loading authentication info...\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.LOGIN_OR_REGISTER\">\n <!-- #region login or register -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login or Register\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- #region normal email -->\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n [ngClass]=\"{\n 'cursor-not-allowed pointer-events-none select-none':\n diableLoginByEmail,\n }\"\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label *ngIf=\"!diableLoginByEmail\">Email</mat-label>\n\n <input\n #emailInput\n matInput\n formControlName=\"email\"\n class=\"pl-1\"\n type=\"email\"\n [placeholder]=\"\n diableLoginByEmail ? t.gettext('Login by email (disabled)') : ''\n \" />\n\n <button\n mat-icon-button\n [disabled]=\"diableLoginByEmail\"\n matSuffix\n color=\"primary\">\n <mat-icon>mail</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('pattern') &&\n form.get('email')?.touched\n \"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n Please enter a valid email address\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('required') &&\n form.get('email')?.touched\n \">\n {{ t.gettext('Email is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n <!-- #endregion -->\n\n @if (isAnySocialLoginEnabled) {\n <div class=\"divider\">\n <span translate [translate-t]=\"t\">or</span>\n </div>\n }\n\n <!-- GOOGLE BUTTON -->\n @if (googleClientId) {\n <google-login-register-button\n (googleSignIn)=\"loginWithGoogle()\"></google-login-register-button>\n\n <mat-error\n *ngIf=\"\n form\n .get('googleCode')\n ?.hasError(TaonLoginErrors.INVALID_SOCIAL_LOGIN)\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_SOCIAL_LOGIN) }}\n </mat-error>\n }\n\n <!-- <div\n *ngIf=\"googleClientId\"\n #googleBtn\n class=\"google-container\">\n <span\n *ngIf=\"!googleButtonLoaded\"\n class=\"text-300 p-2\"\n translate\n >loading google button..</span\n >\n <mat-progress-bar\n *ngIf=\"!googleButtonLoaded\"\n mode=\"indeterminate\"\n class=\"auth-progress\" />\n </div> -->\n\n <!-- MICROSOFT BUTTON -->\n <div\n *ngIf=\"microsoftClientId\"\n #microsoftBtn\n class=\"microsoft-container\">\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"w-full microsoft-btn\"\n (click)=\"loginWithMicrosoft()\">\n <mat-icon class=\"mr-2\">login</mat-icon>\n {{ t.gettext('Continue with Microsoft') }}\n </button>\n </div>\n </div>\n\n <br />\n\n <div class=\"flex justify-content-end\">\n <!-- <button mat-button>\n {{ t.gettext('Login') }}\n </button> -->\n\n <!-- <button\n *ngIf=\"isInsideDialog\"\n mat-button\n mat-dialog-close>\n {{ t.gettext('Cancel') }}\n </button> -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.ENTER_PASSWORD\">\n <!-- #region password -->\n <div class=\"p-5\">\n <h4 class=\"mb-3 flex items-center\">\n <button\n (click)=\"\n resetPasswordScreen(); goTo(TaonSessionState.LOGIN_OR_REGISTER)\n \"\n mat-icon-button\n type=\"button\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <span class=\"flex\">{{ t.gettext('Enter Password') }}</span>\n </h4>\n <div class=\"w-full pt-3\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Password</mat-label>\n\n <input\n #passwordInput\n matInput\n formControlName=\"password\"\n class=\"pl-1\"\n type=\"password\" />\n\n <button\n mat-icon-button\n matSuffix\n color=\"primary\">\n <mat-icon>lock</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form\n .get('password')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('password')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('password')?.hasError('required') &&\n form.get('password')?.touched\n \">\n {{ t.gettext('Password is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child\n [assignToState]=\"TaonSessionState.ENTER_REGISTRATION_PASSWORDS\">\n <!-- #region registration passwords -->\n <div class=\"p-5\">\n <h4 class=\"mb-3 flex items-center\">\n <button\n (click)=\"\n resetPasswordScreen(); goTo(TaonSessionState.LOGIN_OR_REGISTER)\n \"\n mat-icon-button\n type=\"button\">\n <mat-icon>keyboard_arrow_left</mat-icon>\n </button>\n <span class=\"flex\">{{ t.gettext('Enter Registration Password') }}</span>\n </h4>\n <div class=\"w-full pt-3\">\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"executeActionForState()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Enter Password For New Account</mat-label>\n\n <input\n #registrationPasswordInput\n matInput\n formControlName=\"password\"\n class=\"pl-1\"\n type=\"password\" />\n\n <mat-error\n *ngIf=\"\n form\n .get('password')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('password')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('password')?.hasError('required') &&\n form.get('password')?.touched\n \">\n {{ t.gettext('Password is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label>Repeat Password</mat-label>\n\n <input\n matInput\n formControlName=\"passwordRepeat\"\n class=\"pl-1\"\n type=\"password\" />\n\n <button\n mat-icon-button\n matSuffix\n color=\"primary\">\n <mat-icon>key_vertical</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form\n .get('passwordRepeat')\n ?.hasError(TaonLoginErrors.INVALID_PASSWORD) &&\n form.get('passwordRepeat')?.touched\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.INVALID_PASSWORD) }}\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('passwordRepeat')?.hasError('required') &&\n form.get('passwordRepeat')?.touched\n \">\n {{ t.gettext('Repeated Password is ') }}\n <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n <mat-error\n *ngIf=\"\n form.get('passwordRepeat').valid &&\n form.get('password').valid &&\n form.hasError(TaonLoginErrors.PASSWORDS_DO_NOT_MATCH)\n \">\n {{ TaonErorsMap.get(TaonLoginErrors.PASSWORDS_DO_NOT_MATCH) }}\n </mat-error>\n </form>\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.LOGIN_SUCCESS\">\n <!-- #region login success -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login Successfully\n </h4>\n\n @if (!isInsideDialog) {\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n <button\n mat-button\n (click)=\"logout()\">\n Logout\n </button>\n </div>\n }\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n\n <taon-slide-content-child [assignToState]=\"TaonSessionState.PROFILE_INFO\">\n <!-- #region profile info -->\n <div class=\"p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Welcome\n </h4>\n\n <div class=\"w-full pt-3\">\n <!-- success stuff -->\n\n <taon-session-profile\n [config]=\"config\"\n (logout)=\"logout()\" />\n <!-- context -->\n </div>\n </div>\n <!-- #endregion -->\n </taon-slide-content-child>\n</taon-slide-content>\n","//#region @browser\nimport { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute, PRIMARY_OUTLET, Router, UrlTree } from '@angular/router';\n\nexport type TaonBackofficeEntity = 'user' | 'group' | 'role' | 'permission' | 'session';\n\n@Injectable()\nexport class TaonBackofficeNavigationService {\n private readonly router = inject(Router);\n\n private readonly route = inject(ActivatedRoute);\n\n detailsLink(entity: TaonBackofficeEntity, id: number | string): UrlTree {\n const ancestry = this.route.snapshot.pathFromRoot;\n const outletRoot = ancestry.find(route => route.outlet !== PRIMARY_OUTLET);\n if (!outletRoot) {\n throw new Error('Session backoffice details require an admin outlet');\n }\n //#endregion\n\n const scope = ancestry.find(route =>\n route.routeConfig?.children?.some(child => child.path === 'authorization'),\n );\n if (!scope) {\n throw new Error(\n 'Session backoffice authorization routes are not configured',\n );\n }\n\n const base = scope.pathFromRoot\n .slice(ancestry.indexOf(outletRoot))\n .flatMap(route => route.url.map(segment => segment.path));\n const userPath = scope.routeConfig.children.some(\n child => child.path === 'users',\n )\n ? ['users']\n : ['session', 'user'];\n const target =\n entity === 'user'\n ? userPath\n : entity === 'session'\n ? ['session']\n : ['authorization', `${entity}s`];\n const [first, ...rest] = [...base, ...target, String(id)];\n const currentOutlet =\n this.router.parseUrl(this.router.url).root.children[outletRoot.outlet];\n\n // Match the admin layout: replace only its outlet and retain its base matrix parameters.\n return this.router.createUrlTree([\n {\n outlets: {\n [outletRoot.outlet]: [\n first,\n { ...currentOutlet?.segments[0]?.parameters },\n ...rest,\n ],\n },\n },\n ]);\n }\n\n openDetails(entity: TaonBackofficeEntity, id: number | string): void {\n void this.router.navigateByUrl(this.detailsLink(entity, id));\n }\n}\n","import {\n GET,\n Query,\n Models,\n Taon,\n TaonBaseCrudController,\n TaonController,\n TaonPaginationQuery,\n getStatusCode,\n HttpStatusEnum,\n} from 'taon/browser';\nimport { Brackets } from 'taon-typeorm/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\n\nimport { TaonAuthContextRepository } from '../../taon-auth-context/taon-auth-context.repository';\nimport { TaonSessionUserIdentityRepository } from '../../taon-session-user/taon-session-user-identity.repository';\nimport { TaonSessionUserRepository } from '../../taon-session-user/taon-session-user.repository';\nimport { TaonSessionEntity } from '../taon-session.entity';\nimport { TaonSessionRepository } from '../taon-session.repository';\n\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.controller.ts', {} as any);\n\n@TaonController({\n className: 'TaonSessionBackofficeController',\n allowedMethods: ['paginationQuery', 'getBy'],\n})\nexport class TaonSessionBackofficeController extends TaonBaseCrudController<\n TaonSessionBackofficeModels.SessionRow,\n {},\n TaonSessionBackofficeController\n> {\n entityClassResolveFn = () => TaonSessionEntity;\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n private readonly taonAuthContextRepository = this.injectCustomRepo(\n TaonAuthContextRepository,\n );\n\n private readonly taonSessionUserRepository = this.injectCustomRepo(\n TaonSessionUserRepository,\n );\n\n private readonly taonSessionUserIdentityRepository = this.injectCustomRepo(\n TaonSessionUserIdentityRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionBackofficeController>): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n protected async defaultPaginationQuery(\n query: TaonPaginationQuery<TaonSessionBackofficeController>,\n ): Promise<[TaonSessionBackofficeModels.SessionRow[], number]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n\n @GET()\n getBy(\n @Query('id') id: number | string,\n ): Taon.Response<TaonSessionBackofficeModels.SessionDetails> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonSessionBackofficeController } from './taon-session-backoffice.controller';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\n@Injectable()\nexport class TaonSessionBackofficeApiService extends TaonBaseAngularService {\n readonly taonSessionBackofficeController = this.injectController(\n TaonSessionBackofficeController,\n );\n\n async getSessionDetails(\n id: number,\n ): Promise<TaonSessionBackofficeModels.SessionDetails> {\n const response = await this.taonSessionBackofficeController\n .getBy(id)\n .request();\n return response.body.json;\n }\n}\n","import { DatePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { RouterLink } from '@angular/router';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonBackofficeNavigationService } from './taon-backoffice-navigation.service';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-details.component.ts', {} as any);\n\n@Component({\n selector: 'taon-session-details',\n templateUrl: './taon-session-details.component.html',\n styleUrls: ['./taon-session-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [DatePipe, RouterLink],\n providers: [\n TaonSessionBackofficeApiService,\n TaonBackofficeNavigationService,\n ],\n})\nexport class TaonSessionDetailsComponent implements OnChanges {\n readonly t = t.for(this);\n\n @Input({ required: true }) sessionId!: number;\n\n @Input() detail?: TaonSessionBackofficeModels.SessionDetails;\n\n readonly taonBackofficeNavigationService = inject(TaonBackofficeNavigationService);\n\n private readonly taonSessionBackofficeApiService = inject(TaonSessionBackofficeApiService);\n\n readonly session = signal<TaonSessionBackofficeModels.SessionDetails | null>(null);\n\n readonly loading = signal(false);\n\n readonly error = signal('');\n\n private requestId = 0;\n\n ngOnChanges(): void {\n const requestId = ++this.requestId;\n this.session.set(this.detail ?? null);\n this.error.set('');\n this.loading.set(!this.detail);\n if (!this.detail) {\n void this.loadDetails(requestId);\n }\n }\n\n private async loadDetails(requestId: number): Promise<void> {\n try {\n const detail = await this.taonSessionBackofficeApiService.getSessionDetails(\n Number(this.sessionId),\n );\n if (requestId === this.requestId) {\n this.session.set(detail);\n }\n } catch (error) {\n if (requestId === this.requestId) {\n console.error('[session-details]', error);\n this.error.set(this.t.gettext('Unable to load session details.'));\n }\n } finally {\n if (requestId === this.requestId) {\n this.loading.set(false);\n }\n }\n }\n}\n","@if (loading()) {\n <p role=\"status\">{{ t.gettext('Loading session details...') }}</p>\n}\n@if (error()) {\n <p role=\"alert\">{{ error() }}</p>\n}\n@if (session(); as detail) {\n <dl class=\"grid grid-cols-[auto_1fr] gap-x-4 gap-y-2 p-4\">\n <dt>{{ t.gettext('Session ID') }}</dt>\n <dd>{{ detail.id }}</dd>\n <dt>{{ t.gettext('User ID') }}</dt>\n <dd>{{ detail.userId }}</dd>\n <dt>{{ t.gettext('Username') }}</dt>\n <dd>\n @if (detail.user; as user) {\n <a [routerLink]=\"taonBackofficeNavigationService.detailsLink('user', user.id)\">\n {{ user.username || 'User #' + user.id }}\n </a>\n } @else {\n {{ t.gettext('Unavailable') }}\n }\n </dd>\n <dt>{{ t.gettext('Email') }}</dt>\n <dd>{{ detail.identity?.email || t.gettext('Unavailable') }}</dd>\n <dt>{{ t.gettext('Provider') }}</dt>\n <dd>{{ detail.authenticationProvider || detail.identity?.provider || t.gettext('Unavailable') }}</dd>\n @if (detail.identityId) {\n <dt>{{ t.gettext('Identity ID') }}</dt>\n <dd>{{ detail.identityId }}</dd>\n }\n <dt>{{ t.gettext('Device') }}</dt>\n <dd>{{ detail.deviceName || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('IP') }}</dt>\n <dd>{{ detail.ip || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('User agent') }}</dt>\n <dd class=\"break-all\">{{ detail.userAgent || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Logged in') }}</dt>\n <dd>{{ (detail.createdAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Last activity') }}</dt>\n <dd>{{ (detail.lastActivityAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Expires') }}</dt>\n <dd>{{ (detail.expiresAt | date: 'medium') || t.gettext('Unknown') }}</dd>\n <dt>{{ t.gettext('Revoked') }}</dt>\n <dd>{{ (detail.revokedAt | date: 'medium') || t.gettext('Not revoked') }}</dd>\n @if (detail.revokeReason) {\n <dt>{{ t.gettext('Revocation reason') }}</dt>\n <dd>{{ detail.revokeReason }}</dd>\n }\n </dl>\n}\n","//#region imports\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nimport { TaonBackofficeNavigationService } from './taon-backoffice-navigation.service';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\nimport { TaonSessionDetailsComponent } from './taon-session-details.component';\n\n//#endregion\n\nconst t = Translation.for('src/lib/taon-session/taon-session-backoffice/taon-session-backoffice.component.ts', {} as any);\n\n@Component({\n selector: 'app-taon-session-backoffice',\n templateUrl: './taon-session-backoffice.component.html',\n styleUrls: ['./taon-session-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonSessionDetailsComponent],\n providers: [\n TaonSessionBackofficeApiService,\n TaonBackofficeNavigationService,\n ],\n})\nexport class TaonSessionBackofficeComponent {\n readonly t = t.for(this);\n\n readonly taonSessionBackofficeApiService = inject(TaonSessionBackofficeApiService);\n\n readonly taonBackofficeNavigationService = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonSessionBackofficeApiService.taonSessionBackofficeController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: this.t.gettext('User ID'), field: 'userId', sortable: true, showExpand: true },\n { header: this.t.gettext('Device'), field: 'deviceName', sortable: true },\n { header: this.t.gettext('IP'), field: 'ip', sortable: true },\n {\n header: this.t.gettext('Actions'),\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: this.t.gettext('Session details'),\n click: (session: TaonSessionBackofficeModels.SessionRow) =>\n this.taonBackofficeNavigationService.openDetails('session', session.id),\n },\n ],\n },\n ];\n}\n","<h2>{{ t.gettext('Active sessions') }}</h2>\n<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['userId', 'deviceName', 'ip']\"\n [hideAddButton]=\"true\"\n searchMode=\"advanced\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-session>\n <taon-session-details [sessionId]=\"session.id\"></taon-session-details>\n</ng-template>\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n POST,\n DELETE,\n Body,\n Models,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonRoleEntity } from '../taon-role/taon-role.entity';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserGroupRepository } from '../taon-session-user/taon-session-user-group.repository';\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\n\nimport { TaonGroupRoleRepository } from './taon-group-role.repository';\nimport { TaonGroupEntity } from './taon-group.entity';\nimport { TaonGroupRepository } from './taon-group.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonGroupController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'getGroupsForUser',\n 'assignGroupToUser',\n 'unassignGroupFromUser',\n 'getRolesForGroup',\n 'assignRoleToGroup',\n 'unassignRoleFromGroup',\n //#endregion\n ],\n})\nexport class TaonGroupController extends TaonBaseCrudController<\n TaonGroupEntity,\n {},\n TaonGroupController\n> {\n entityClassResolveFn: () => typeof TaonGroupEntity = () => TaonGroupEntity;\n\n taonGroupRepository = this.injectCustomRepo(TaonGroupRepository);\n\n private readonly taonGroupRoleRepository = this.injectCustomRepo(\n TaonGroupRoleRepository,\n );\n\n private readonly taonSessionUserGroupRepository = this.injectCustomRepo(\n TaonSessionUserGroupRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n //#region methods & getters / before each request\n protected async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n //#endregion\n\n //#region methods & getters / groups assigned to user\n @GET()\n getGroupsForUser(\n @Query('userId') userId: number,\n ): Taon.Response<TaonGroupEntity[]> {\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign group to user\n @POST()\n assignGroupToUser(\n @Body('userId') userId: number,\n @Body('groupId') groupId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign group from user\n @DELETE()\n unassignGroupFromUser(\n @Query('userId') userId: number,\n @Query('groupId') groupId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / roles assigned to group\n @GET()\n getRolesForGroup(\n @Query('groupId') groupId: number,\n ): Taon.Response<TaonRoleEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign role to group\n @POST()\n assignRoleToGroup(\n @Body('groupId') groupId: number,\n @Body('roleId') roleId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign role from group\n @DELETE()\n unassignRoleFromGroup(\n @Query('groupId') groupId: number,\n @Query('roleId') roleId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonRoleEntity } from '../taon-role/taon-role.entity';\n\nimport { TaonGroupController } from './taon-group.controller';\nimport type { TaonGroupEntity } from './taon-group.entity';\n\n@Injectable()\nexport class TaonGroupApiService extends TaonBaseAngularService {\n public taonGroupController = this.injectController(TaonGroupController);\n\n public get allMyEntities$(): Observable<TaonGroupEntity[]> {\n return this.taonGroupController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all groups\n\n async getAllGroups(): Promise<TaonGroupEntity[]> {\n const response = await this.taonGroupController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / user groups\n\n async getGroupsForUser(userId: number): Promise<TaonGroupEntity[]> {\n const response = await this.taonGroupController\n .getGroupsForUser(userId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignGroupToUser(userId: number, groupId: number): Promise<void> {\n await this.taonGroupController.assignGroupToUser(userId, groupId).request();\n }\n\n async unassignGroupFromUser(userId: number, groupId: number): Promise<void> {\n await this.taonGroupController\n .unassignGroupFromUser(userId, groupId)\n .request();\n }\n\n //#endregion\n\n //#region methods / group roles\n\n async getRolesForGroup(groupId: number): Promise<TaonRoleEntity[]> {\n const response = await this.taonGroupController\n .getRolesForGroup(groupId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignRoleToGroup(groupId: number, roleId: number): Promise<void> {\n await this.taonGroupController.assignRoleToGroup(groupId, roleId).request();\n }\n\n async unassignRoleFromGroup(groupId: number, roleId: number): Promise<void> {\n await this.taonGroupController\n .unassignRoleFromGroup(groupId, roleId)\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n Models,\n GET,\n POST,\n DELETE,\n Body,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\n\nimport { TaonRolePermissionRepository } from './taon-role-permission.repository';\nimport { TaonRoleEntity } from './taon-role.entity';\nimport { TaonRoleRepository } from './taon-role.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonRoleController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'getPermissionsForRole',\n 'assignPermissionToRole',\n 'unassignPermissionFromRole',\n //#endregion\n ],\n})\nexport class TaonRoleController extends TaonBaseCrudController<TaonRoleEntity> {\n entityClassResolveFn: () => typeof TaonRoleEntity = () => TaonRoleEntity;\n\n taonRoleRepository = this.injectCustomRepo(TaonRoleRepository);\n\n private readonly taonRolePermissionRepository = this.injectCustomRepo(\n TaonRolePermissionRepository,\n );\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n\n //#region methods & getters / permissions assigned to role\n @GET()\n getPermissionsForRole(\n @Query('roleId') roleId: number,\n ): Taon.Response<TaonPermissionEntity[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / assign permission to role\n @POST()\n assignPermissionToRole(\n @Body('roleId') roleId: number,\n @Body('permissionId') permissionId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / unassign permission from role\n @DELETE()\n unassignPermissionFromRole(\n @Query('roleId') roleId: number,\n @Query('permissionId') permissionId: number,\n ): Taon.Response<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonPermissionEntity } from '../taon-permission/taon-permission.entity';\n\nimport type { TaonRoleEntity } from './taon-role.entity';\nimport { TaonRoleController } from './taon-role.controller';\n\n@Injectable()\nexport class TaonRoleApiService extends TaonBaseAngularService {\n public taonRoleController = this.injectController(TaonRoleController);\n\n public get allMyEntities$(): Observable<TaonRoleEntity[]> {\n return this.taonRoleController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all roles\n\n async getAllRoles(): Promise<TaonRoleEntity[]> {\n const response = await this.taonRoleController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / role permissions\n\n async getPermissionsForRole(roleId: number): Promise<TaonPermissionEntity[]> {\n const response = await this.taonRoleController\n .getPermissionsForRole(roleId)\n .request();\n\n return response.body?.json ?? [];\n }\n\n async assignPermissionToRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n await this.taonRoleController\n .assignPermissionToRole(roleId, permissionId)\n .request();\n }\n\n async unassignPermissionFromRole(\n roleId: number,\n permissionId: number,\n ): Promise<void> {\n await this.taonRoleController\n .unassignPermissionFromRole(roleId, permissionId)\n .request();\n }\n\n //#endregion\n}\n","//#region imports\nimport { TaonSessionUserController } from '../taon-session-user/taon-session-user.controller';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n PUT,\n Body,\n Models,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionRepository } from './taon-permission.repository';\n//#endregion\n\n@TaonController({\n className: 'TaonPermissionController',\n allowedMethods: [\n //#region allowed methods\n 'paginationQuery',\n 'getAll',\n 'getBy',\n 'updateDescription',\n //#endregion\n ],\n})\nexport class TaonPermissionController extends TaonBaseCrudController<TaonPermissionEntity> {\n entityClassResolveFn: () => typeof TaonPermissionEntity = () =>\n TaonPermissionEntity;\n\n taonPermissionRepository = this.injectCustomRepo(TaonPermissionRepository);\n\n private readonly taonSessionRepository = this.injectCustomRepo(\n TaonSessionRepository,\n );\n\n async beforeEachRequest({\n req,\n res,\n methodConfig,\n }: Models.TaonCtrlBeforeEachRequestParams<TaonSessionUserController>): Promise<void> {\n await this.taonSessionRepository.throwIfNotAuthenticated({\n req,\n res,\n });\n }\n\n //#region methods & getters / update description\n @PUT()\n updateDescription(\n @Body('permissionId') permissionId: number,\n @Body('description') description: string,\n ): Taon.Response<TaonPermissionEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionController } from './taon-permission.controller';\n\n@Injectable()\nexport class TaonPermissionApiService extends TaonBaseAngularService {\n public taonPermissionController = this.injectController(\n TaonPermissionController,\n );\n\n public get allMyEntities$(): Observable<TaonPermissionEntity[]> {\n return this.taonPermissionController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n //#region methods / all permissions\n\n async getAllPermissions(): Promise<TaonPermissionEntity[]> {\n const response = await this.taonPermissionController.getAll().request();\n\n return response.body?.json ?? [];\n }\n\n //#endregion\n\n //#region methods / description\n\n async updateDescription(\n permissionId: number,\n description: string,\n ): Promise<TaonPermissionEntity> {\n const response = await this.taonPermissionController\n .updateDescription(permissionId, description)\n .request();\n\n return response.body?.json;\n }\n\n //#endregion\n}\n","//#region @browser\nimport { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport type { TaonGroupEntity } from '../../taon-group/taon-group.entity';\nimport { TaonRoleApiService } from '../../taon-role/taon-role-api.service';\nimport type { TaonRoleEntity } from '../../taon-role/taon-role.entity';\nimport { TaonPermissionApiService } from '../../taon-permission/taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../../taon-permission/taon-permission.entity';\nimport { TaonSessionUserApiService } from '../../taon-session-user/taon-session-user-api.service';\nimport type { TaonSessionUserEntity } from '../../taon-session-user/taon-session-user.entity';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\nimport type { TaonSessionBackofficeModels } from './taon-session-backoffice.models';\n\nexport type TaonBackofficeDetail =\n | { kind: 'user'; entity: TaonSessionUserEntity }\n | { kind: 'group'; entity: TaonGroupEntity }\n | { kind: 'role'; entity: TaonRoleEntity }\n | { kind: 'permission'; entity: TaonPermissionEntity }\n | { kind: 'session'; entity: TaonSessionBackofficeModels.SessionDetails };\n\nexport const taonBackofficeDetailsResolver: ResolveFn<\n TaonBackofficeDetail\n> = async route => {\n const id = Number(route.paramMap.get('id'));\n if (!Number.isSafeInteger(id) || id <= 0) {\n throw new Error('Invalid backoffice entity ID');\n }\n\n let detail: TaonBackofficeDetail;\n switch (route.data['kind']) {\n case 'session':\n detail = {\n kind: 'session',\n entity: await inject(TaonSessionBackofficeApiService).getSessionDetails(id),\n };\n break;\n case 'user':\n detail = {\n kind: 'user',\n entity: (await inject(TaonSessionUserApiService)\n .taonSessionUserController.getBy(id).request()).body.json,\n };\n break;\n case 'group':\n detail = {\n kind: 'group',\n entity: (await inject(TaonGroupApiService)\n .taonGroupController.getBy(id).request()).body.json,\n };\n break;\n case 'role':\n detail = {\n kind: 'role',\n entity: (await inject(TaonRoleApiService)\n .taonRoleController.getBy(id).request()).body.json,\n };\n break;\n case 'permission':\n detail = {\n kind: 'permission',\n entity: (await inject(TaonPermissionApiService)\n .taonPermissionController.getBy(id).request()).body.json,\n };\n break;\n default:\n throw new Error('Unknown backoffice entity');\n }\n if (!detail.entity) {\n throw new Error('Backoffice entity not found');\n }\n return detail;\n};\n\n//#endregion\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\nimport { taonBackofficeDetailsResolver } from './taon-backoffice-details.resolver';\nimport { TaonSessionBackofficeApiService } from './taon-session-backoffice.api.service';\n//#endregion\n\nexport const TaonSessionBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-session-backoffice.component').then(\n m => m.TaonSessionBackofficeComponent,\n ),\n },\n adminLazyRoute({\n path: 'user',\n menuItem: 'Users',\n icon: 'account_circle',\n expandable: true,\n loader: () =>\n import('../../taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes').then(\n m => m.TaonSessionBackofficeUsersRoutes,\n ),\n }),\n {\n path: ':id',\n data: { kind: 'session', hideInNavigation: true },\n providers: [TaonSessionBackofficeApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('./taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonSessionBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonSessionBackofficeRoutes;\n","//#region imports\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n Input,\n OnInit,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { Router, RouterOutlet } from '@angular/router';\nimport { walk } from 'lodash-walk-object/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonSessionComponent } from '../taon-session/taon-session.component';\nimport { TaonSessionApiService } from '../taon-session.api.service';\nimport { TaonSessionConfigService } from '../taon-session.config.service';\nimport { TaonSessionState } from '../taon-session.models';\nimport { TaonSessionConfig } from '../taon-session.provider';\nimport { TaonSessionStateService } from '../taon-session.state.service';\n\n//#endregion\n\n@Component({\n selector: 'taon-session-button',\n templateUrl: './taon-session-button.component.html',\n styleUrls: ['./taon-session-button.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n forwardRef(() => TaonSessionApiService),\n TaonSessionStateService,\n TaonSessionConfigService,\n ],\n imports: [\n AsyncPipe,\n RouterOutlet,\n MatButtonModule,\n MatIconModule,\n CommonModule,\n ],\n})\nexport class TaonSessionButtonComponent implements OnInit {\n //#region fields & getters\n\n protected readonly taonSessionStateService = inject(TaonSessionStateService);\n\n protected readonly taonSessionConfigService = inject(\n TaonSessionConfigService,\n );\n\n @Input()\n config: TaonSessionConfig;\n\n private readonly dialog = inject(MatDialog);\n\n private readonly router = inject(Router);\n\n //#endregion\n\n constructor() {}\n\n //#region methods / open login dialog\n\n openLogin(): void {\n const instance = this.dialog.open(TaonSessionComponent, {\n width: '410px',\n data: null,\n autoFocus: true,\n });\n const classInstance = instance.componentInstance;\n classInstance.config = this.config;\n classInstance.taonSessionStateService = this.taonSessionStateService;\n }\n //#endregion\n\n //#region go to dashboard\n goDashboard(): void {\n if (this.config.login.linkToDashboard) {\n void this.router.navigateByUrl(this.config.login.linkToDashboard);\n }\n }\n //#endregion\n\n //#region logout\n profile(): void {\n const instance = this.dialog.open(TaonSessionComponent, {\n width: '410px',\n data: null,\n autoFocus: true,\n });\n const classInstance = instance.componentInstance;\n classInstance.config = this.config;\n classInstance.taonSessionStateService = this.taonSessionStateService;\n\n this.taonSessionStateService.state.set(TaonSessionState.PROFILE_INFO);\n }\n //#endregion\n\n //#region hooks / ngOnInit\n ngOnInit(): void {\n const config = this.taonSessionConfigService.clone();\n walk.Object(\n this.config || {},\n (value, lodashPath) => {\n _.set(config, lodashPath, value);\n },\n {\n walkGetters: false,\n },\n );\n this.config = config;\n\n if (\n this.config.socialLogin.microsoft.enabled &&\n !this.config.socialLogin.microsoft.microsoftClientId\n ) {\n console.warn(\n '[taon-session-button] Microsoft client id missing [microsoftClientId]',\n );\n }\n if (\n this.config.socialLogin.google.enabled &&\n !this.config.socialLogin.google.googleClientId\n ) {\n console.warn(\n '[taon-session-button] Google client id missing [googleClientId]',\n );\n }\n //Called after the constructor, initializing input properties, and the first call to ngOnChanges.\n //Add 'implements OnInit' to the class.\n // console.log('this.displayDashboardButton', this.displayDashboardButton);\n this.config.login.displayDashboardButton = _.isBoolean(\n this.config.login.displayDashboardButton,\n )\n ? this.config.login.displayDashboardButton\n : true;\n }\n //#endregion\n}\n","<div class=\"flex align-items-center gap-2\">\n <ng-container\n *ngIf=\"\n (taonSessionStateService.isLoggedIn$ | async) === false;\n else loggedIn\n \">\n <button\n mat-button\n (click)=\"openLogin()\">\n Login\n </button>\n </ng-container>\n\n <ng-template #loggedIn>\n <button\n *ngIf=\"displayDashboardButton\"\n mat-button\n color=\"primary\"\n class=\"auth-btn\"\n (click)=\"goDashboard()\">\n <mat-icon>dashboard</mat-icon>\n Dashboard\n </button>\n\n <button\n mat-button\n class=\"ml-2\"\n (click)=\"profile()\">\n Welcome user: {{ taonSessionStateService.userId() }}\n </button>\n </ng-template>\n</div>\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonSessionEntity } from '../taon-session/taon-session.entity';\nimport {\n CustomColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonBaseEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\nexport interface TaonAuthorizationSchema {\n group: string;\n role: string;\n permission: string;\n}\n\n@TaonEntity({\n className: 'TaonAuthContextEntity',\n createTable: false,\n})\nexport class TaonAuthContextEntity<\n AUTH extends TaonAuthorizationSchema = {\n group: string;\n role: string;\n permission: string;\n },\n> extends TaonBaseEntity<TaonAuthContextEntity> {\n user!: TaonSessionUserEntity;\n\n isSuperUser: boolean = false;\n\n isLocalhostBackend: boolean = false;\n\n session!: TaonSessionEntity;\n\n groups: AUTH['group'][] = [];\n\n roles: AUTH['role'][] = [];\n\n permissions: AUTH['permission'][] = [];\n\n hasPermission(permission: AUTH['permission']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.permissions.includes(permission);\n }\n\n hasRole(role: AUTH['role']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.roles.includes(role);\n }\n\n isInGroup(group: AUTH['group']): boolean {\n if (this.isSuperUser) {\n return true;\n }\n return this.groups.includes(group);\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuthContextEntity } from './taon-auth-context.entity';\nimport { TaonAuthContextRepository } from './taon-auth-context.repository';\n//#endregion\n\nexport const TaonAuthContextContext = createContext(() => ({\n contextName: 'TaonAuthContextContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonAuthContextEntity },\n repositories: { TaonAuthContextRepository },\n}));\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonGroupMiddleware',\n})\nexport class TaonGroupMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonGroupProvider',\n})\nexport class TaonGroupProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonGroupRoleEntity } from './taon-group-role.entity';\nimport { TaonGroupRoleRepository } from './taon-group-role.repository';\nimport { TaonGroupController } from './taon-group.controller';\nimport { TaonGroupEntity } from './taon-group.entity';\nimport { TaonGroupMiddleware } from './taon-group.middleware';\nimport { TaonGroupProvider } from './taon-group.provider';\nimport { TaonGroupRepository } from './taon-group.repository';\n//#endregion\n\nexport const TaonGroupContext = createContext(() => ({\n contextName: 'TaonGroupContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonGroupEntity: TaonGroupEntity,\n TaonGroupRoleEntity: TaonGroupRoleEntity,\n },\n controllers: { TaonGroupController },\n repositories: { TaonGroupRepository, TaonGroupRoleRepository },\n providers: { TaonGroupProvider },\n middlewares: { TaonGroupMiddleware },\n}));\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonPermissionMiddleware',\n})\nexport class TaonPermissionMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonPermissionProvider',\n})\nexport class TaonPermissionProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionProvider } from './taon-permission.provider';\n//#endregion\n\n@TaonSubscriber<TaonPermissionSubscriber>({\n className: 'TaonPermissionSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonPermissionSubscriber extends TaonBaseSubscriberForEntity {\n taonPermissionProvider = this.injectProvider(TaonPermissionProvider);\n listenTo(): typeof TaonPermissionEntity {\n return TaonPermissionEntity;\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonPermissionController } from './taon-permission.controller';\nimport { TaonPermissionEntity } from './taon-permission.entity';\nimport { TaonPermissionMiddleware } from './taon-permission.middleware';\nimport { TaonPermissionProvider } from './taon-permission.provider';\nimport { TaonPermissionRepository } from './taon-permission.repository';\nimport { TaonPermissionSubscriber } from './taon-permission.subscriber';\n//#endregion\n\nexport const TaonPermissionContext = createContext(() => ({\n contextName: 'TaonPermissionContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonPermissionEntity },\n controllers: { TaonPermissionController },\n repositories: { TaonPermissionRepository },\n providers: { TaonPermissionProvider },\n middlewares: { TaonPermissionMiddleware },\n subscribers: { TaonPermissionSubscriber },\n}));\n","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonRoleProvider',\n})\nexport class TaonRoleProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonRolePermissionRepository } from '../taon-role/taon-role-permission.repository';\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\n\nimport { TaonRolePermissionEntity } from './taon-role-permission.entity';\nimport { TaonRoleController } from './taon-role.controller';\nimport { TaonRoleEntity } from './taon-role.entity';\n// import { TaonRoleMiddleware } from './taon-role.middleware';/\nimport { TaonRoleProvider } from './taon-role.provider';\nimport { TaonRoleRepository } from './taon-role.repository';\n// import { TaonRoleSubscriber } from './taon-role.subscriber';\n//#endregion\n\nexport const TaonRoleContext = createContext(() => ({\n contextName: 'TaonRoleContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: {\n TaonRoleEntity: TaonRoleEntity,\n TaonRolePermissionEntity: TaonRolePermissionEntity,\n },\n controllers: { TaonRoleController },\n repositories: { TaonRoleRepository, TaonRolePermissionRepository },\n providers: { TaonRoleProvider },\n // middlewares: { TaonRoleMiddleware },\n // subscribers: { TaonRoleSubscriber },\n}));\n","//#region imports\nimport {\n CustomColumn,\n Column,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonProfileDefaultsValues } from './taon-profile.constants';\n//#endregion\n\n@TaonEntity<TaonProfileEntity>({\n className: 'TaonProfileEntity',\n createTable: false,\n // defaultModelMapping: () => ({\n // '': TaonProfileEntity,\n // nestedObjectField: ClassField,\n // nestedArrField: [ClassObjArrField],\n // }),\n})\nexport class TaonProfileEntity extends TaonBaseAbstractEntity<TaonProfileEntity> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n description?: string;\n}\n","//#region imports\nimport { Taon, TaonBaseClass, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\nexport class TaonTaonProfileConfig extends TaonBaseClass {\n declare name: string;\n}\n\n@TaonProvider({\n className: 'TaonProfileProvider',\n})\nexport class TaonProfileProvider extends TaonBaseProvider {\n enabledTaonProfileOption: boolean = true;\n\n config = new TaonTaonProfileConfig();\n\n clone() {\n return {\n enabledTaonProfileOption: this.enabledTaonProfileOption,\n config: this.config.clone(),\n };\n }\n}\n","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonProfileController } from './taon-profile.controller';\nimport { TaonProfileEntity } from './taon-profile.entity';\nimport { TaonProfileProvider } from './taon-profile.provider';\n// import { TaonProfileRepository } from './taon-profile.repository';\n// import { TaonProfileKvRepository } from './taon-profile.kv.repository';\n// import { TaonProfileMiddleware } from './taon-profile.middleware';\n// import { TaonProfileSubscriber } from './taon-profile.subscriber';\n//#endregion\n\nexport const TaonProfileAbstractContext = createContext(() => ({\n contextName: 'TaonProfileAbstractContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonProfileEntity },\n controllers: { TaonProfileController },\n // repositories: {\n // // TaonProfileKvRepository\n // TaonProfileRepository,\n // },\n providers: { TaonProfileProvider },\n // middlewares: { TaonProfileMiddleware },\n // subscribers: { TaonProfileSubscriber },\n}));\n","//#region imports\nimport { TaonEmailsAbstractContext } from '@taon-dev/emails/browser';\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuditEventsContext, TaonNotificationContext } from '../index';\nimport { TaonAuthContextContext } from '../taon-auth-context/taon-auth-context.abstract.context';\nimport { TaonGroupContext } from '../taon-group/taon-group.abstract.context';\nimport { TaonPermissionContext } from '../taon-permission/taon-permission.abstract.context';\nimport { TaonRoleContext } from '../taon-role/taon-role.abstract.context';\nimport { TaonProfileAbstractContext } from '../taon-session/taon-profile/taon-profile.abstract.context';\nimport { TaonSessionRepository } from '../taon-session/taon-session.repository';\nimport { TaonSessionUserContext } from '../taon-session-user/taon-session-user.abstract.context';\n\nimport { TaonSessionBackofficeController } from './taon-session-backoffice/taon-session-backoffice.controller';\nimport { TaonSessionController } from './taon-session.controller';\nimport { TaonSessionEntity } from './taon-session.entity';\nimport { TaonSessionKvRepository } from './taon-session.kv.repository';\nimport { TaonSessionMiddleware } from './taon-session.middleware';\nimport { TaonSessionProvider } from './taon-session.provider';\nimport { TaonSessionStateService } from './taon-session.state.service';\n//#endregion\n\nexport const TaonSessionAbstractContext = createContext(() => ({\n contextName: 'TaonSessionAbstractContext',\n abstract: true,\n contexts: {\n TaonBaseContext,\n TaonEmailsAbstractContext,\n TaonSessionUserContext,\n TaonAuthContextContext,\n TaonGroupContext,\n TaonPermissionContext,\n TaonRoleContext,\n TaonNotificationContext,\n TaonAuditEventsContext,\n TaonProfileAbstractContext,\n },\n entities: { TaonSessionEntity: TaonSessionEntity },\n controllers: { TaonSessionController, TaonSessionBackofficeController },\n repositories: { TaonSessionKvRepository, TaonSessionRepository },\n providers: {\n TaonSessionProvider,\n /**\n * TODO somehow inject(TaonSessionApiService)\n * when creating manuall instace of TaonSessionStateService.\n * This state service could usefull on backend\n */\n // TaonSessionStateService,\n },\n logs: true,\n disabledRealtime: true,\n middlewares: { TaonSessionMiddleware },\n subscribers: {},\n}));\n","import { TaonServerMiddlewareInterceptOptions } from 'ng2-rest/browser';\n\nexport namespace TaonSessionUtils {\n export const getRequestMetadata = (\n req: TaonServerMiddlewareInterceptOptions['req'],\n ): { userAgent?: string; ip?: string; deviceName?: string } => {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n };\n\n interface GoogleTokenResponse {\n access_token?: string;\n expires_in?: number;\n refresh_token?: string;\n scope?: string;\n token_type?: string;\n id_token?: string;\n error?: string;\n error_description?: string;\n }\n\n interface GoogleIdTokenPayload {\n iss: string;\n aud: string | string[];\n sub: string;\n email?: string;\n email_verified?: boolean;\n name?: string;\n picture?: string;\n exp: number;\n iat: number;\n }\n\n interface GoogleJwk extends JsonWebKey {\n kid?: string;\n alg?: string;\n }\n\n //#region verify google authorization code\n export async function verifyGoogleAuthorizationCode(\n GOOGLE_CLIENT_ID: string,\n GOOGLE_CLIENT_SECRET: string,\n code: string,\n ) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region verify google id token\n async function verifyGoogleIdToken(\n idToken: string,\n expectedAudience: string,\n ): Promise<GoogleIdTokenPayload> {\n const parts = idToken.split('.');\n\n if (parts.length !== 3) {\n throw new Error('Invalid Google ID token.');\n }\n\n const [encodedHeader, encodedPayload, encodedSignature] = parts;\n\n const header = JSON.parse(decodeBase64UrlToString(encodedHeader)) as {\n alg?: string;\n kid?: string;\n };\n\n if (header.alg !== 'RS256') {\n throw new Error(`Unsupported Google JWT algorithm: ${header.alg}`);\n }\n\n if (!header.kid) {\n throw new Error('Google ID token does not contain kid.');\n }\n\n // ---------------------------------------------------------\n // Google's public signing keys\n // ---------------------------------------------------------\n\n const jwksResponse = await fetch(\n 'https://www.googleapis.com/oauth2/v3/certs',\n );\n\n if (!jwksResponse.ok) {\n throw new Error('Unable to download Google signing keys.');\n }\n\n const jwks = (await jwksResponse.json()) as {\n keys: GoogleJwk[];\n };\n\n const jwk = jwks.keys.find(key => key.kid === header.kid);\n\n if (!jwk) {\n throw new Error('Google signing key not found.');\n }\n\n // ---------------------------------------------------------\n // Import RSA public key\n // ---------------------------------------------------------\n\n const publicKey = await crypto.subtle.importKey(\n 'jwk',\n jwk,\n {\n name: 'RSASSA-PKCS1-v1_5',\n hash: 'SHA-256',\n },\n false,\n ['verify'],\n );\n\n // ---------------------------------------------------------\n // Verify JWT signature\n // ---------------------------------------------------------\n\n const signedData = new TextEncoder().encode(\n `${encodedHeader}.${encodedPayload}`,\n );\n\n const signature = decodeBase64UrlToBytes(encodedSignature);\n\n const validSignature = await crypto.subtle.verify(\n 'RSASSA-PKCS1-v1_5',\n publicKey,\n // @ts-ignore\n signature,\n signedData,\n );\n\n if (!validSignature) {\n throw new Error('Invalid Google ID token signature.');\n }\n\n // ---------------------------------------------------------\n // Decode + validate claims\n // ---------------------------------------------------------\n\n const payload = JSON.parse(\n decodeBase64UrlToString(encodedPayload),\n ) as GoogleIdTokenPayload;\n\n if (\n payload.iss !== 'https://accounts.google.com' &&\n payload.iss !== 'accounts.google.com'\n ) {\n throw new Error(`Invalid Google token issuer: ${payload.iss}`);\n }\n\n const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n if (!audiences.includes(expectedAudience)) {\n throw new Error('Google ID token audience mismatch.');\n }\n\n const now = Math.floor(Date.now() / 1000);\n\n if (!payload.exp || payload.exp <= now) {\n throw new Error('Google ID token has expired.');\n }\n\n return payload;\n }\n //#endregion\n\n //#region base64 url\n function decodeBase64UrlToBytes(input: string): Uint8Array {\n let base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n\n base64 += '='.repeat((4 - (base64.length % 4)) % 4);\n\n const binary = atob(base64);\n\n const result = new Uint8Array(binary.length);\n\n for (let i = 0; i < binary.length; i++) {\n result[i] = binary.charCodeAt(i);\n }\n\n return result;\n }\n\n function decodeBase64UrlToString(input: string): string {\n return new TextDecoder().decode(decodeBase64UrlToBytes(input));\n }\n //#endregion\n}\n","//#region imports\nimport { Taon } from 'taon/browser';\nimport { UtilsJson, UtilsOs, UtilsTerminal } from 'tnp-core/browser';\nimport { Helpers, BaseCommandLineFeature } from 'tnp-helpers/browser';\n/* */ \n\nimport { TaonSessionAbstractContext, TaonSessionController } from './taon-session';\n\nimport { DEFAULT_SESSION_EMAIL, DEFAULT_SESSION_PASSWORD } from './index';\n\n//#endregion\n\n//#region create taon context\nconst host = UtilsOs.isRunningInCloudflareWorker()\n ? ''\n : `http://localhost:${Number(\n Helpers.readFile('.taon/libs-apps-ports/HOST_BACKEND_PORT_1'),\n )}`;\n// console.log({ overrideRemoteHost });\n\nconst TaonSessionActiveCtx = UtilsOs.isRunningInCloudflareWorker()\n ? ({} as any)\n : !UtilsOs.isRunningInCliMode()\n ? ({} as ReturnType<typeof Taon.createContext>)\n : TaonSessionAbstractContext.cloneAsRemote({\n overrideRemoteHost: host,\n overrideContextName: 'SessionContext',\n });\n//#endregion\n\n//#region CLI / global scope\n/**\n * This class is for handling global arguments. *\n * Cli engine will parse: hello:world:from:global:arg to helloWorldFromGlobalArg\n * (lower case, camel case) .. so you don't need to worry about misspelling\n * arguments\n */\nclass $Global extends BaseCommandLineFeature<{}> {\n //#region initialize (before each method)\n protected async __initialize__() {\n/* */\n/* */\n/* */\n return (void 0);\n await super.__initialize__();\n }\n //#endregion\n\n //#region _\n /**\n * When you execute cli without arguments:`$ cli`\n */\n public _() {\n console.log(`Hello world from cli`);\n this._exit();\n }\n //#endregion\n\n //#region menu\n async menu() {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region ping\n /**\n * When you execute: `$ cli hello:world:from:global:arg`\n * (or `$ cli helloWorldFromGlobalArg`)\n */\n async ping() {\n const taonSessionController = await TaonSessionActiveCtx.getClassInstance(\n TaonSessionController,\n );\n\n try {\n const data = await taonSessionController.helloWorld().request!();\n console.log(data.body.text);\n } catch (error) {\n console.error(error);\n }\n\n this._exit();\n }\n //#endregion\n}\n//#endregion\n\n//#region CLI / Version Scope\n/**\n *\n */\nclass $Version extends BaseCommandLineFeature<{\n anyCLIparamsHere: string;\n}> {\n /**\n * When you execute: `$ cli version`\n */\n public _() {\n console.log(`Hello world from version argument`);\n this._exit();\n }\n\n /**\n * When you execute: `$ cli version:getFromPackageJson`\n */\n public getFromPackageJson() {\n const ver = UtilsJson.getValue(\n this.project.pathFor('package.json'),\n 'version',\n {\n defaultValue: '<not defined>',\n },\n );\n console.log(`Version from packageJson ${ver}`);\n this._exit(0);\n }\n}\n//#endregion\n\n//#region start cli\n/**\n *\n * @param argsv process.argsv\n * @param filename needed if you want ipc communicaiton\n */\nexport async function startCli(\n argsv: string[],\n filename: string,\n): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n}\n//#endregion\n\nexport default startCli;\n","//#region imports\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n Index,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuditEventsDefaultsValues } from './taon-audit-events.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonAuditEventsEntity',\n createTable: true,\n})\nexport class TaonAuditEventsEntity extends TaonBaseAbstractEntity<TaonAuditEventsEntity> {\n/* */\n/* */\n \n\n/* */\n/* */\n \n type!: string;\n\n /**\n * Who performed the action.\n */\n\n/* */\n/* */\n \n actorUserId?: number;\n\n /**\n * Who/what was affected.\n */\n\n/* */\n/* */\n \n targetType?: string;\n\n/* */\n/* */\n \n targetId?: string;\n\n/* */\n/* */\n \n sessionId?: number;\n\n/* */\n/* */\n \n ip?: string;\n\n/* */\n/* */\n \n userAgent?: string;\n\n/* */\n/* */\n \n data?: Record<string, any>;\n\n/* */\n/* */\n \n createdAt!: Date;\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonAuditEventsRepository',\n})\nexport class TaonAuditEventsRepository extends TaonBaseRepository<TaonAuditEventsEntity> {\n entityClassResolveFn: () => typeof TaonAuditEventsEntity = () => TaonAuditEventsEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsRepository } from './taon-audit-events.repository';\n//#endregion\n\n@TaonController<TaonAuditEventsController>({\n className: 'TaonAuditEventsController',\n allowedMethods: [],\n})\nexport class TaonAuditEventsController extends TaonBaseCrudController<TaonAuditEventsEntity> {\n entityClassResolveFn: () => typeof TaonAuditEventsEntity = () =>\n TaonAuditEventsEntity;\n\n taonAuditEventsRepository = this.injectCustomRepo(TaonAuditEventsRepository);\n\n //#region methods & getters / hello world\n /**\n * TODO remove this demo example method\n */\n @GET()\n helloWord(@Query('yourName') yourName: string): Taon.Response<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonAuditEventsController } from './taon-audit-events.controller';\nimport type { TaonAuditEventsEntity } from './taon-audit-events.entity';\n\n@Injectable()\nexport class TaonAuditEventsApiService extends TaonBaseAngularService {\n private taonAuditEventsController = this.injectController(TaonAuditEventsController);\n\n public get allMyEntities$(): Observable<TaonAuditEventsEntity[]> {\n return this.taonAuditEventsController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n public helloWorld(user:string): Observable<string> {\n return this.taonAuditEventsController.helloWord(user).request!().observable.pipe(\n map(res => res.responseText as string),\n );\n }\n}\n","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonAuditEventsProvider',\n})\nexport class TaonAuditEventsProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonAuditEventsMiddleware',\n})\nexport class TaonAuditEventsMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsProvider } from './taon-audit-events.provider';\n//#endregion\n\n@TaonSubscriber<TaonAuditEventsSubscriber>({\n className: 'TaonAuditEventsSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonAuditEventsSubscriber extends TaonBaseSubscriberForEntity {\n taonAuditEventsProvider = this.injectProvider(TaonAuditEventsProvider);\n listenTo(): typeof TaonAuditEventsEntity {\n return TaonAuditEventsEntity;\n }\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonAuditEventsEntity } from './taon-audit-events.entity';\nimport { TaonAuditEventsController } from './taon-audit-events.controller';\nimport { TaonAuditEventsRepository } from './taon-audit-events.repository';\nimport { TaonAuditEventsProvider } from './taon-audit-events.provider';\nimport { TaonAuditEventsMiddleware } from './taon-audit-events.middleware';\nimport { TaonAuditEventsSubscriber } from './taon-audit-events.subscriber';\n//#endregion\n\nexport const TaonAuditEventsContext = createContext(() => ({\n contextName: 'TaonAuditEventsContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonAuditEventsEntity },\n controllers: { TaonAuditEventsController },\n repositories: { TaonAuditEventsRepository },\n providers: { TaonAuditEventsProvider },\n middlewares: { TaonAuditEventsMiddleware },\n subscribers: { TaonAuditEventsSubscriber },\n}));","import type { TaonAuditEventsEntity } from './taon-audit-events.entity';\n\nexport const TaonAuditEventsDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonAuditEventsEntity>;","export enum TaonAuditEventsState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonAuditEventsState } from './taon-audit-events.models';\n\nexport namespace TaonAuditEventsUtils {\n export function isActive(state: string): state is TaonAuditEventsState {\n return state === 'active';\n }\n}","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { RouterOutlet } from '@angular/router';\n//#endregion\n\n@Component({\n selector: 'app-taon-authorization-backoffice',\n templateUrl: './taon-authorization-backoffice.component.html',\n styleUrls: ['./taon-authorization-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AsyncPipe, RouterOutlet],\n})\nexport class TaonAuthorizationBackofficeComponent {\n componentLoaded = false;\n\n onRouteActivate(component: any): void {\n this.componentLoaded = !!component;\n }\n\n onRouteDeactivate(component: any): void {\n this.componentLoaded = false;\n }\n}\n","@if (!componentLoaded) {\n <code>\n In authorization section you can manager Group, Roles and Persmission inside\n system.\n </code>\n}\n\n<router-outlet\n (activate)=\"onRouteActivate($event)\"\n (deactivate)=\"onRouteDeactivate($event)\"></router-outlet>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\n//#endregion\n\nexport const TaonAuthorizationBackofficeRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-authorization-backoffice.component').then(\n m => m.TaonAuthorizationBackofficeComponent,\n ),\n\n children: [\n adminLazyRoute({\n path: 'groups',\n menuItem: 'Groups',\n icon: 'groups',\n expandable: false,\n loader: () =>\n import('../taon-group/taon-group-backoffice/taon-group-backoffice.routes').then(\n m => m.TaonGroupBackofficeRoutes,\n ),\n }),\n adminLazyRoute({\n path: 'roles',\n menuItem: 'Roles',\n icon: 'recent_actors',\n expandable: false,\n loader: () =>\n import('../taon-role/taon-role-backoffice/taon-role-backoffice.routes').then(\n m => m.TaonRoleBackofficeRoutes,\n ),\n }),\n adminLazyRoute({\n path: 'permissions',\n menuItem: 'Permissions',\n icon: 'approval',\n expandable: false,\n loader: () =>\n import('../taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes').then(\n m => m.TaonPermissionBackofficeRoutes,\n ),\n }),\n ],\n },\n];\n\n/**\n * By default exporting TaonAuthorizationBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonAuthorizationBackofficeRoutes;\n","import type { TaonGroupEntity } from './taon-group.entity';\n\nexport const TaonGroupDefaultsValues = {\n\n} as Partial<TaonGroupEntity>;\n","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonNotificationRecipientEntity } from '../taon-notification/taon-notification-recipient.entity';\nimport {\n Column,\n CreateDateColumn,\n CustomColumn,\n ManyToOne,\n OneToMany,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonNotificationDefaultsValues } from './taon-notification.constants';\n//#endregion\n\n@TaonEntity({\n className: 'TaonNotificationEntity',\n createTable: true,\n})\nexport class TaonNotificationEntity extends TaonBaseAbstractEntity<TaonNotificationEntity> {\n /**\n * Stable machine-readable code.\n *\n * video.processing.finished\n * auth.session.revoked\n * payment.success\n */\n\n/* */\n/* */\n \n type!: string;\n\n/* */\n/* */\n \n title!: string;\n\n/* */\n/* */\n \n message?: string;\n\n /**\n * Optional route/action.\n *\n * /projects/123\n * /videos/abc\n */\n\n/* */\n/* */\n \n actionUrl?: string;\n\n /**\n * Arbitrary strongly-typed-by-your-code payload.\n */\n\n/* */\n/* */\n \n data?: Record<string, any>;\n\n/* */\n/* */\n \n createdByUserId?: number;\n\n/* */\n/* */\n \n createdAt!: Date;\n\n/* */\n/* */\n \n expiresAt?: Date;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n \n recipients!: TaonNotificationRecipientEntity[];\n}\n","//#region imports\nimport { TaonBaseRepository, TaonRepository } from 'taon/browser';\nimport { Raw } from 'taon-typeorm/browser';\n\nimport { TaonNotificationEntity } from './taon-notification.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonNotificationRepository',\n})\nexport class TaonNotificationRepository extends TaonBaseRepository<TaonNotificationEntity> {\n entityClassResolveFn: () => typeof TaonNotificationEntity = () => TaonNotificationEntity;\n\n /**\n * TODO remove this demo example method\n */\n async countEntitesWithEvenId(): Promise<number> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n}","//#region imports\nimport {\n Taon,\n ClassHelpers,\n TaonController,\n TaonBaseCrudController,\n Query,\n GET,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationRepository } from './taon-notification.repository';\n//#endregion\n\n@TaonController<TaonNotificationController>({\n className: 'TaonNotificationController',\n allowedMethods: [],\n})\nexport class TaonNotificationController extends TaonBaseCrudController<TaonNotificationEntity> {\n entityClassResolveFn: () => typeof TaonNotificationEntity = () =>\n TaonNotificationEntity;\n\n taonNotificationRepository = this.injectCustomRepo(\n TaonNotificationRepository,\n );\n\n //#region methods & getters / hello world\n /**\n * TODO remove this demo example method\n */\n @GET()\n helloWord(@Query('yourName') yourName: string): Taon.Response<string> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport type { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationController } from './taon-notification.controller';\n\n@Injectable()\nexport class TaonNotificationApiService extends TaonBaseAngularService {\n private taonNotificationController = this.injectController(TaonNotificationController);\n\n public get allMyEntities$(): Observable<TaonNotificationEntity[]> {\n return this.taonNotificationController.getAll().request!().observable.pipe(\n map(res => res.body?.json),\n );\n }\n\n public helloWorld(user:string): Observable<string> {\n return this.taonNotificationController.helloWord(user).request!().observable.pipe(\n map(res => res.responseText as string),\n );\n }\n}","//#region imports\nimport { TaonSessionUserEntity } from '../taon-session-user/taon-session-user.entity';\nimport { TaonNotificationEntity } from '../taon-notification/taon-notification.entity';\nimport {\n Column,\n DateTimeColumn,\n ManyToOne,\n StringColumn,\n Taon,\n TaonBaseAbstractEntity,\n TaonEntity,\n} from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n\n//#endregion\n\n@TaonEntity({\n className: 'TaonNotificationRecipientEntity',\n createTable: true,\n})\nexport class TaonNotificationRecipientEntity extends TaonBaseAbstractEntity<TaonNotificationRecipientEntity> {\n/* */\n/* */\n/* */\n/* */\n \n notificationId!: number;\n\n/* */\n/* */\n \n userId!: number;\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n notification!: TaonNotificationEntity;\n\n/* */\n/* */\n/* */\n/* */\n \n user!: TaonSessionUserEntity;\n\n/* */\n/* */\n \n readAt?: Date;\n\n/* */\n/* */\n \n dismissedAt?: Date;\n\n/* */\n/* */\n \n deliveredAt?: Date;\n}\n","//#region imports\nimport { Taon, TaonBaseMiddleware, TaonMiddleware } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonMiddleware({\n className: 'TaonNotificationMiddleware',\n})\nexport class TaonNotificationMiddleware extends TaonBaseMiddleware {}","//#region imports\nimport { Taon, TaonBaseProvider, TaonProvider } from 'taon/browser';\nimport { _ } from 'tnp-core/browser';\n//#endregion\n\n@TaonProvider({\n className: 'TaonNotificationProvider',\n})\nexport class TaonNotificationProvider extends TaonBaseProvider {\n\n\n\n}","//#region imports\nimport { TaonBaseSubscriberForEntity, TaonSubscriber } from 'taon/browser';\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationProvider } from './taon-notification.provider';\n//#endregion\n\n@TaonSubscriber<TaonNotificationSubscriber>({\n className: 'TaonNotificationSubscriber',\n // allowedEvents: ['afterUpdate'],\n})\nexport class TaonNotificationSubscriber extends TaonBaseSubscriberForEntity {\n taonNotificationProvider = this.injectProvider(TaonNotificationProvider);\n listenTo(): typeof TaonNotificationEntity {\n return TaonNotificationEntity;\n }\n}","//#region imports\nimport { createContext, TaonBaseContext } from 'taon/browser';\n\nimport { TaonNotificationRecipientEntity } from './taon-notification-recipient.entity';\nimport { TaonNotificationController } from './taon-notification.controller';\nimport { TaonNotificationEntity } from './taon-notification.entity';\nimport { TaonNotificationMiddleware } from './taon-notification.middleware';\nimport { TaonNotificationProvider } from './taon-notification.provider';\nimport { TaonNotificationRepository } from './taon-notification.repository';\nimport { TaonNotificationSubscriber } from './taon-notification.subscriber';\n//#endregion\n\nexport const TaonNotificationContext = createContext(() => ({\n contextName: 'TaonNotificationContext',\n abstract: true,\n contexts: { TaonBaseContext },\n entities: { TaonNotificationEntity, TaonNotificationRecipientEntity },\n controllers: { TaonNotificationController },\n repositories: { TaonNotificationRepository },\n providers: { TaonNotificationProvider },\n middlewares: { TaonNotificationMiddleware },\n subscribers: { TaonNotificationSubscriber },\n}));\n","import type { TaonNotificationEntity } from './taon-notification.entity';\n\nexport const TaonNotificationDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonNotificationEntity>;","export enum TaonNotificationState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonNotificationState } from './taon-notification.models';\n\nexport namespace TaonNotificationUtils {\n export function isActive(state: string): state is TaonNotificationState {\n return state === 'active';\n }\n}","import type { TaonPermissionEntity } from './taon-permission.entity';\n\nexport const TaonPermissionDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonPermissionEntity>;\n","export enum TaonPermissionState {\n Active = 'active',\n Inactive = 'inactive',\n}","import { TaonPermissionState } from './taon-permission.models';\n\nexport namespace TaonPermissionUtils {\n export function isActive(state: string): state is TaonPermissionState {\n return state === 'active';\n }\n}","import type { TaonRoleEntity } from './taon-role.entity';\n\nexport const TaonRoleDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonRoleEntity>;\n","export enum TaonRoleState {\n Active = 'active',\n Inactive = 'inactive',\n}","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n//#endregion\n\n@Component({\n selector: 'taon-role-chooser',\n templateUrl: './taon-role-chooser.component.html',\n styleUrls: ['./taon-role-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonRoleApiService, TaonGroupApiService],\n})\nexport class TaonRoleChooserComponent {\n //#region inject\n\n private readonly taonRoleApiService = inject(TaonRoleApiService);\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) groupId!: number;\n\n @Input() excludedRoleIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly roles = signal<TaonRoleEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedRoleId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadRoles();\n }\n\n //#endregion\n\n //#region getters\n\n get availableRoles(): TaonRoleEntity[] {\n return this.roles().filter(\n role => !this.excludedRoleIds.includes(role.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadRoles(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.roles.set(await this.taonRoleApiService.getAllRoles());\n } catch {\n this.roles.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const roleId = this.selectedRoleId;\n\n if (!roleId || !this.groupId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonGroupApiService.assignRoleToGroup(this.groupId, roleId);\n\n this.selectedRoleId = undefined;\n\n this.assigned.emit(roleId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedRoleId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-role-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-role-chooser__field\">\n <mat-label> Role </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedRoleId\"\n [disabled]=\"loading() || saving()\">\n @for (role of availableRoles; track role.id) {\n <mat-option [value]=\"role.id\">\n {{ role.name }} ({{ role.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No roles available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedRoleId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonRoleChooserComponent } from '../../taon-role/taon-role-chooser/taon-role-chooser.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n\nimport { TaonGroupBackofficeModels } from './taon-group-backoffice.models';\n//#endregion\n\n@Component({\n selector: 'taon-group-details',\n templateUrl: './taon-group-details.component.html',\n styleUrls: ['./taon-group-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonRoleChooserComponent,\n ],\n providers: [TaonGroupApiService, TaonBackofficeNavigationService],\n})\nexport class TaonGroupDetailsComponent implements OnChanges {\n @Input({ required: true }) group!: TaonGroupEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n ngOnChanges(): void {\n void this.loadRolesForGroup(Number(this.group.id));\n }\n //#region inject\n\n taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region state\n\n readonly roleRowsByGroupId = signal<\n Record<number, TaonGroupBackofficeModels.AssignedRoleRow[]>\n >({});\n\n readonly roleChooserGroupId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while roles are not loaded yet.\n */\n private readonly emptyRoleRows: TaonGroupBackofficeModels.AssignedRoleRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedRoleIdsByGroupId = signal<Record<number, number[]>>(\n {},\n );\n\n //#endregion\n\n //#region columns\n\n roleColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'roleId',\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Role details',\n click: (row: TaonGroupBackofficeModels.AssignedRoleRow) =>\n this.navigation.openDetails('role', row.roleId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove role from group',\n click: (row: TaonGroupBackofficeModels.AssignedRoleRow) =>\n void this.unassignRole(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n roleRowsFor(groupId: number): TaonGroupBackofficeModels.AssignedRoleRow[] {\n return this.roleRowsByGroupId()[groupId] ?? this.emptyRoleRows;\n }\n\n assignedRoleIds(groupId: number): number[] {\n return this.assignedRoleIdsByGroupId()[groupId] ?? this.emptyIds;\n }\n\n openRoleChooser(groupId: number): void {\n this.roleChooserGroupId.set(groupId);\n }\n\n closeRoleChooser(): void {\n this.roleChooserGroupId.set(undefined);\n }\n\n roleAssigned(groupId: number): void {\n this.closeRoleChooser();\n\n void this.loadRolesForGroup(groupId);\n }\n\n async loadRolesForGroup(groupId: number): Promise<void> {\n if (!groupId) {\n return;\n }\n\n const roles = await this.taonGroupApiService.getRolesForGroup(groupId);\n\n const rows = roles.map(role => ({\n groupId,\n roleId: role.id as number,\n name: role.name,\n code: role.code,\n description: role.description,\n }));\n\n this.roleRowsByGroupId.set({\n ...this.roleRowsByGroupId(),\n [groupId]: rows,\n });\n\n this.assignedRoleIdsByGroupId.set({\n ...this.assignedRoleIdsByGroupId(),\n [groupId]: rows.map(row => row.roleId),\n });\n }\n\n async unassignRole(\n row: TaonGroupBackofficeModels.AssignedRoleRow,\n ): Promise<void> {\n await this.taonGroupApiService.unassignRoleFromGroup(\n row.groupId,\n row.roleId,\n );\n\n await this.loadRolesForGroup(row.groupId);\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('group', group.id)\">Group details #{{ group.id }}</a>\n <div class=\"group-details__section\">\n <div class=\"group-details__section-header\">\n <h4 class=\"group-details__section-title\">Group roles</h4>\n\n @if (roleChooserGroupId() !== group.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openRoleChooser(group.id)\">\n <mat-icon> add_moderator </mat-icon>\n\n Assign role\n </button>\n }\n </div>\n\n @if (roleChooserGroupId() === group.id) {\n <taon-role-chooser\n [groupId]=\"group.id\"\n [excludedRoleIds]=\"assignedRoleIds(group.id)\"\n (assigned)=\"roleAssigned(group.id)\"\n (cancelled)=\"closeRoleChooser()\">\n </taon-role-chooser>\n }\n\n <taon-datatable\n [data]=\"roleRowsFor(group.id)\"\n [columns]=\"roleColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n\nimport { TaonGroupDetailsComponent } from './taon-group-details.component';\n\n@Component({\n selector: 'app-taon-group-backoffice',\n templateUrl: './taon-group-backoffice.component.html',\n styleUrls: ['./taon-group-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonGroupDetailsComponent],\n providers: [TaonGroupApiService, TaonBackofficeNavigationService],\n})\nexport class TaonGroupBackofficeComponent {\n readonly taonGroupApiService = inject(TaonGroupApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonGroupApiService.taonGroupController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Name', field: 'name', sortable: true },\n { header: 'Code', field: 'code', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Group details',\n click: (group: TaonGroupEntity) =>\n this.navigation.openDetails('group', group.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-group>\n <taon-group-details [group]=\"group\"></taon-group-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\nimport { TaonGroupApiService } from '../taon-group-api.service';\n//#endregion\n\nexport const TaonGroupBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-group-backoffice.component').then(\n m => m.TaonGroupBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'group', hideInNavigation: true },\n providers: [TaonGroupApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonGroupBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonGroupBackofficeRoutes;\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonGroupApiService } from '../taon-group-api.service';\nimport type { TaonGroupEntity } from '../taon-group.entity';\n//#endregion\n\n@Component({\n selector: 'taon-group-chooser',\n templateUrl: './taon-group-chooser.component.html',\n styleUrls: ['./taon-group-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonGroupApiService],\n})\nexport class TaonGroupChooserComponent {\n //#region inject\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) userId!: number;\n\n @Input() excludedGroupIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly groups = signal<TaonGroupEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedGroupId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadGroups();\n }\n\n //#endregion\n\n //#region getters\n\n get availableGroups(): TaonGroupEntity[] {\n return this.groups().filter(\n group => !this.excludedGroupIds.includes(group.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadGroups(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.groups.set(await this.taonGroupApiService.getAllGroups());\n } catch {\n this.groups.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const groupId = this.selectedGroupId;\n\n if (!groupId || !this.userId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonGroupApiService.assignGroupToUser(this.userId, groupId);\n\n this.selectedGroupId = undefined;\n\n this.assigned.emit(groupId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedGroupId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-group-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-group-chooser__field\">\n <mat-label> Group </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedGroupId\"\n [disabled]=\"loading() || saving()\">\n @for (group of availableGroups; track group.id) {\n <mat-option [value]=\"group.id\">\n {{ group.name }} ({{ group.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No groups available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedGroupId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\n\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n//#endregion\n\n@Component({\n selector: 'taon-permission-view-edit',\n templateUrl: './taon-permission-view-edit.component.html',\n styleUrls: ['./taon-permission-view-edit.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n ],\n providers: [TaonPermissionApiService],\n})\nexport class TaonPermissionViewEditComponent {\n //#region inject\n\n private readonly taonPermissionApiService = inject(TaonPermissionApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true })\n set permission(value: TaonPermissionEntity) {\n this._permission = value;\n\n this.description.set(value?.description ?? '');\n\n this.editMode.set(false);\n }\n\n get permission(): TaonPermissionEntity {\n return this._permission;\n }\n\n @Output() readonly descriptionChanged = new EventEmitter<string>();\n\n //#endregion\n\n //#region state\n\n private _permission!: TaonPermissionEntity;\n\n readonly description = signal('');\n\n readonly draftDescription = signal('');\n\n readonly editMode = signal(false);\n\n readonly saving = signal(false);\n\n //#endregion\n\n //#region methods\n\n edit(): void {\n this.draftDescription.set(this.description());\n\n this.editMode.set(true);\n }\n\n cancel(): void {\n this.draftDescription.set(this.description());\n\n this.editMode.set(false);\n }\n\n async save(): Promise<void> {\n if (!this.permission?.id) {\n return;\n }\n\n const newDescription = this.draftDescription();\n\n this.saving.set(true);\n\n try {\n await this.taonPermissionApiService.updateDescription(\n this.permission.id as number,\n newDescription,\n );\n\n this.permission.description = newDescription;\n\n this.description.set(newDescription);\n\n this.editMode.set(false);\n\n this.descriptionChanged.emit(newDescription);\n } finally {\n this.saving.set(false);\n }\n }\n\n //#endregion\n}\n","<div class=\"taon-permission-view-edit\">\n @if (editMode()) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-permission-view-edit__field\">\n <mat-label> Description </mat-label>\n\n <textarea\n matInput\n rows=\"4\"\n [ngModel]=\"draftDescription()\"\n (ngModelChange)=\"draftDescription.set($event)\"\n [disabled]=\"saving()\">\n </textarea>\n </mat-form-field>\n\n <div class=\"taon-permission-view-edit__actions\">\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"save()\">\n <mat-icon> save </mat-icon>\n\n Save\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n </div>\n } @else {\n <div class=\"taon-permission-view-edit__description\">\n {{ description() || 'No description' }}\n </div>\n\n <div class=\"taon-permission-view-edit__actions\">\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"edit()\">\n <mat-icon> edit </mat-icon>\n\n Edit\n </button>\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, Input, inject } from '@angular/core';\nimport { RouterLink } from '@angular/router';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonPermissionViewEditComponent } from '../taon-permission-view-edit/taon-permission-view-edit.component';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n\n@Component({\n selector: 'taon-permission-details',\n template: `\n <a [routerLink]=\"navigation.detailsLink('permission', permission.id)\">Permission details #{{ permission.id }}</a>\n <div class=\"permission-details__section\">\n <h4 class=\"permission-details__section-title\">Description</h4>\n <taon-permission-view-edit [permission]=\"permission\"></taon-permission-view-edit>\n </div>\n `,\n styleUrls: ['./taon-permission-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterLink, TaonPermissionViewEditComponent],\n providers: [TaonBackofficeNavigationService],\n})\nexport class TaonPermissionDetailsComponent {\n @Input({ required: true }) permission!: TaonPermissionEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n}\n","//#region imports\nimport { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n\nimport { TaonPermissionDetailsComponent } from './taon-permission-details.component';\n//#endregion\n\n@Component({\n selector: 'app-taon-permission-backoffice',\n templateUrl: './taon-permission-backoffice.component.html',\n styleUrls: ['./taon-permission-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TaonDatatableComponent,\n TaonPermissionDetailsComponent,\n ],\n providers: [TaonPermissionApiService, TaonBackofficeNavigationService],\n})\nexport class TaonPermissionBackofficeComponent {\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n taonPermissionApiService = inject(TaonPermissionApiService);\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n public get crud() {\n return this.taonPermissionApiService.taonPermissionController;\n }\n\n columns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'id',\n sortable: true,\n showExpand: true,\n },\n {\n header: 'Name',\n field: 'name',\n sortable: true,\n },\n {\n header: 'Code',\n field: 'code',\n sortable: true,\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Permission details',\n click: (permission: TaonPermissionEntity) =>\n this.navigation.openDetails('permission', permission.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n\n<ng-template\n #expansionTemplate\n let-permission>\n <taon-permission-details [permission]=\"permission\"></taon-permission-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\n\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\n//#endregion\n\nexport const TaonPermissionBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-permission-backoffice.component').then(\n m => m.TaonPermissionBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'permission', hideInNavigation: true },\n providers: [TaonPermissionApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonPermissionBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonPermissionBackofficeRoutes;\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n Input,\n Output,\n inject,\n signal,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\n\nimport { TaonRoleApiService } from '../../taon-role/taon-role-api.service';\nimport { TaonPermissionApiService } from '../taon-permission-api.service';\nimport type { TaonPermissionEntity } from '../taon-permission.entity';\n//#endregion\n\n@Component({\n selector: 'taon-permission-chooser',\n templateUrl: './taon-permission-chooser.component.html',\n styleUrls: ['./taon-permission-chooser.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n FormsModule,\n MatButtonModule,\n MatFormFieldModule,\n MatIconModule,\n MatSelectModule,\n ],\n providers: [TaonPermissionApiService, TaonRoleApiService],\n})\nexport class TaonPermissionChooserComponent {\n //#region inject\n\n private readonly taonPermissionApiService = inject(TaonPermissionApiService);\n\n private readonly taonRoleApiService = inject(TaonRoleApiService);\n\n //#endregion\n\n //#region inputs & outputs\n\n @Input({ required: true }) roleId!: number;\n\n @Input() excludedPermissionIds: number[] = [];\n\n @Output() readonly assigned = new EventEmitter<number>();\n\n @Output() readonly cancelled = new EventEmitter<void>();\n\n //#endregion\n\n //#region state\n\n readonly permissions = signal<TaonPermissionEntity[]>([]);\n\n readonly loading = signal(false);\n\n readonly saving = signal(false);\n\n selectedPermissionId?: number;\n\n //#endregion\n\n //#region constructor\n\n constructor() {\n void this.loadPermissions();\n }\n\n //#endregion\n\n //#region getters\n\n get availablePermissions(): TaonPermissionEntity[] {\n return this.permissions().filter(\n permission =>\n !this.excludedPermissionIds.includes(permission.id as number),\n );\n }\n\n //#endregion\n\n //#region methods\n\n async loadPermissions(): Promise<void> {\n this.loading.set(true);\n\n try {\n this.permissions.set(\n await this.taonPermissionApiService.getAllPermissions(),\n );\n } catch {\n this.permissions.set([]);\n } finally {\n this.loading.set(false);\n }\n }\n\n async assign(): Promise<void> {\n const permissionId = this.selectedPermissionId;\n\n if (!permissionId || !this.roleId) {\n return;\n }\n\n this.saving.set(true);\n\n try {\n await this.taonRoleApiService.assignPermissionToRole(\n this.roleId,\n permissionId,\n );\n\n this.selectedPermissionId = undefined;\n\n this.assigned.emit(permissionId);\n } finally {\n this.saving.set(false);\n }\n }\n\n cancel(): void {\n this.selectedPermissionId = undefined;\n\n this.cancelled.emit();\n }\n\n //#endregion\n}\n","<div class=\"taon-permission-chooser\">\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"taon-permission-chooser__field\">\n <mat-label> Permission </mat-label>\n\n <mat-select\n [(ngModel)]=\"selectedPermissionId\"\n [disabled]=\"loading() || saving()\">\n @for (permission of availablePermissions; track permission.id) {\n <mat-option [value]=\"permission.id\">\n {{ permission.name }} ({{ permission.code }})\n </mat-option>\n } @empty {\n <mat-option [disabled]=\"true\"> No permissions available </mat-option>\n }\n </mat-select>\n </mat-form-field>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n [disabled]=\"!selectedPermissionId || saving()\"\n (click)=\"assign()\">\n <mat-icon> add </mat-icon>\n\n Assign\n </button>\n\n <button\n mat-button\n type=\"button\"\n [disabled]=\"saving()\"\n (click)=\"cancel()\">\n Cancel\n </button>\n</div>\n","//#region imports\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonPermissionChooserComponent } from '../../taon-permission/taon-permission-chooser/taon-permission-chooser.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n\nimport { TaonRoleBackofficeModels } from './taon-role-backoffice.models';\n//#endregion\n\n@Component({\n selector: 'taon-role-details',\n templateUrl: './taon-role-details.component.html',\n styleUrls: ['./taon-role-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonPermissionChooserComponent,\n ],\n providers: [TaonRoleApiService, TaonBackofficeNavigationService],\n})\nexport class TaonRoleDetailsComponent implements OnChanges {\n @Input({ required: true }) role!: TaonRoleEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n ngOnChanges(): void {\n void this.loadPermissionsForRole(Number(this.role.id));\n }\n //#region inject\n\n taonRoleApiService = inject(TaonRoleApiService);\n\n //#endregion\n\n //#region state\n\n readonly permissionRowsByRoleId = signal<\n Record<number, TaonRoleBackofficeModels.AssignedPermissionRow[]>\n >({});\n\n readonly permissionChooserRoleId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while permissions are not loaded yet.\n */\n private readonly emptyPermissionRows: TaonRoleBackofficeModels.AssignedPermissionRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedPermissionIdsByRoleId = signal<\n Record<number, number[]>\n >({});\n\n //#endregion\n\n //#region columns\n\n permissionColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'permissionId',\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Permission details',\n click: (row: TaonRoleBackofficeModels.AssignedPermissionRow) =>\n this.navigation.openDetails('permission', row.permissionId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove permission from role',\n click: (row: TaonRoleBackofficeModels.AssignedPermissionRow) =>\n void this.unassignPermission(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n permissionRowsFor(\n roleId: number,\n ): TaonRoleBackofficeModels.AssignedPermissionRow[] {\n return this.permissionRowsByRoleId()[roleId] ?? this.emptyPermissionRows;\n }\n\n assignedPermissionIds(roleId: number): number[] {\n return this.assignedPermissionIdsByRoleId()[roleId] ?? this.emptyIds;\n }\n\n openPermissionChooser(roleId: number): void {\n this.permissionChooserRoleId.set(roleId);\n }\n\n closePermissionChooser(): void {\n this.permissionChooserRoleId.set(undefined);\n }\n\n permissionAssigned(roleId: number): void {\n this.closePermissionChooser();\n\n void this.loadPermissionsForRole(roleId);\n }\n\n async loadPermissionsForRole(roleId: number): Promise<void> {\n if (!roleId) {\n return;\n }\n\n const permissions =\n await this.taonRoleApiService.getPermissionsForRole(roleId);\n\n const rows = permissions.map(permission => ({\n roleId,\n permissionId: permission.id as number,\n name: permission.name,\n code: permission.code,\n description: permission.description,\n }));\n\n this.permissionRowsByRoleId.set({\n ...this.permissionRowsByRoleId(),\n [roleId]: rows,\n });\n\n this.assignedPermissionIdsByRoleId.set({\n ...this.assignedPermissionIdsByRoleId(),\n [roleId]: rows.map(row => row.permissionId),\n });\n }\n\n async unassignPermission(\n row: TaonRoleBackofficeModels.AssignedPermissionRow,\n ): Promise<void> {\n await this.taonRoleApiService.unassignPermissionFromRole(\n row.roleId,\n row.permissionId,\n );\n\n await this.loadPermissionsForRole(row.roleId);\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('role', role.id)\">Role details #{{ role.id }}</a>\n <div class=\"role-details__section\">\n <div class=\"role-details__section-header\">\n <h4 class=\"role-details__section-title\">Role permissions</h4>\n\n @if (permissionChooserRoleId() !== role.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openPermissionChooser(role.id)\">\n <mat-icon> add </mat-icon>\n\n Assign permission\n </button>\n }\n </div>\n\n @if (permissionChooserRoleId() === role.id) {\n <taon-permission-chooser\n [roleId]=\"role.id\"\n [excludedPermissionIds]=\"assignedPermissionIds(role.id)\"\n (assigned)=\"permissionAssigned(role.id)\"\n (cancelled)=\"closePermissionChooser()\">\n </taon-permission-chooser>\n }\n\n <taon-datatable\n [data]=\"permissionRowsFor(role.id)\"\n [columns]=\"permissionColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n","import { ChangeDetectionStrategy, Component, inject } from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport type { TaonRoleEntity } from '../taon-role.entity';\n\nimport { TaonRoleDetailsComponent } from './taon-role-details.component';\n\n@Component({\n selector: 'app-taon-role-backoffice',\n templateUrl: './taon-role-backoffice.component.html',\n styleUrls: ['./taon-role-backoffice.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [TaonDatatableComponent, TaonRoleDetailsComponent],\n providers: [TaonRoleApiService, TaonBackofficeNavigationService],\n})\nexport class TaonRoleBackofficeComponent {\n readonly taonRoleApiService = inject(TaonRoleApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.taonRoleApiService.taonRoleController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Name', field: 'name', sortable: true },\n { header: 'Code', field: 'code', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Role details',\n click: (role: TaonRoleEntity) =>\n this.navigation.openDetails('role', role.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'name', 'code']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-role>\n <taon-role-details [role]=\"role\"></taon-role-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { TaonRoleApiService } from '../taon-role-api.service';\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\n//#endregion\n\nexport const TaonRoleBackofficeRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-role-backoffice.component').then(\n m => m.TaonRoleBackofficeComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'role', hideInNavigation: true },\n providers: [TaonRoleApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonRoleBackofficeRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonRoleBackofficeRoutes;\n","//#region imports\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Taon, TaonBaseAngularService } from 'taon/browser';\n\nimport { TaonProfileProvider } from './taon-profile.provider';\n//#endregion\n\n@Injectable()\nexport class TaonProfileConfigService extends TaonBaseAngularService {\n private taonProfileProvider = this.injectProvider(TaonProfileProvider);\n\n clone(): Partial<TaonProfileProvider> {\n const cloned = this.taonProfileProvider.clone();\n return cloned;\n }\n}\n","import type { TaonProfileEntity } from './taon-profile.entity';\nimport { Translation } from '@taon-dev/i18n/browser';\nimport { Taon } from 'taon/browser';\n\nconst t = Translation.for('src/lib/taon-session/taon-profile/taon-profile.constants.ts', {} as any);\n\nexport const TaonProfileDefaultsValues = {\n description: '',\n version: 0,\n id: void 0,\n} as Partial<TaonProfileEntity>;\n\nexport enum TaonProfileErrors {\n INVALID_PASSWORD_EXAMPLE_ERROR = 'INVALID_PASSWORD_EXAMPLE_ERROR',\n}\n\nexport const TaonProfileTranslationErorsMap = new Map([\n [TaonProfileErrors.INVALID_PASSWORD_EXAMPLE_ERROR, t.gettext('Invalid Password')],\n]);","//#region imports\nimport {\n TaonBaseRepository,\n TaonBaseKvRepository,\n TaonRepository,\n} from 'taon/browser';\n\nimport { TaonProfileEntity } from './taon-profile.entity';\n//#endregion\n\n@TaonRepository({\n className: 'TaonProfileKvRepository',\n})\nexport class TaonProfileKvRepository extends TaonBaseKvRepository<{\n usersToNotify: TaonProfileEntity[];\n}> {\n async notifyUsers(users: TaonProfileEntity[]) {\n this.set('usersToNotify', users);\n }\n}","//#region imports\nimport { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n forwardRef,\n inject,\n signal,\n} from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { RouterLink } from '@angular/router';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonGroupApiService } from '../../taon-group/taon-group-api.service';\nimport { TaonGroupChooserComponent } from '../../taon-group/taon-group-chooser/taon-group-chooser.component';\nimport type { TaonGroupEntity } from '../../taon-group/taon-group.entity';\nimport { TaonProfilePictureComponent } from '../../taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component';\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonSessionApiService } from '../../taon-session/taon-session.api.service';\nimport type { TaonSessionUserEntity } from '../taon-session-user.entity';\n\nimport { TaonSessionBackofficeUsersModels } from './taon-session-backoffice-users.models';\nimport { of } from 'rxjs';\n//#endregion\n\n@Component({\n selector: 'taon-session-user-details',\n templateUrl: './taon-session-user-details.component.html',\n styleUrls: ['./taon-session-backoffice-users.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n RouterLink,\n MatButtonModule,\n MatIconModule,\n TaonDatatableComponent,\n TaonGroupChooserComponent,\n TaonProfilePictureComponent,\n ],\n providers: [\n TaonGroupApiService,\n TaonBackofficeNavigationService,\n forwardRef(() => TaonSessionApiService),\n ],\n})\nexport class TaonSessionUserDetailsComponent implements OnChanges {\n @Input({ required: true }) user!: TaonSessionUserEntity;\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n readonly taonSessionApiService = inject(TaonSessionApiService);\n\n context$ = this.taonSessionApiService.context();\n\n ngOnChanges(): void {\n void this.loadGroupsForUser(Number(this.user.id));\n }\n //#region inject\n\n private readonly taonGroupApiService = inject(TaonGroupApiService);\n\n //#endregion\n\n //#region state\n\n readonly groupRowsByUserId = signal<\n Record<number, TaonSessionBackofficeUsersModels.AssignedGroupRow[]>\n >({});\n\n readonly groupChooserUserId = signal<number | undefined>(undefined);\n\n /**\n * Stable reference, so that nested datatables do not reload on every\n * change detection cycle while groups are not loaded yet.\n */\n private readonly emptyGroupRows: TaonSessionBackofficeUsersModels.AssignedGroupRow[] =\n [];\n\n private readonly emptyIds: number[] = [];\n\n private readonly assignedGroupIdsByUserId = signal<Record<number, number[]>>(\n {},\n );\n\n //#endregion\n\n //#region columns\n\n identityColumns: MtxGridColumn[] = [\n {\n header: 'Provider',\n field: 'provider',\n },\n {\n header: 'Email',\n field: 'email',\n },\n ];\n\n groupColumns: MtxGridColumn[] = [\n {\n header: 'ID',\n field: 'groupId',\n showExpand: true,\n },\n {\n header: 'Name',\n field: 'name',\n },\n {\n header: 'Code',\n field: 'code',\n },\n {\n header: 'Description',\n field: 'description',\n },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'Group details',\n click: (row: TaonSessionBackofficeUsersModels.AssignedGroupRow) =>\n this.navigation.openDetails('group', row.groupId),\n },\n {\n type: 'icon',\n icon: 'delete',\n color: 'warn',\n tooltip: 'Remove group from user',\n click: (row: TaonSessionBackofficeUsersModels.AssignedGroupRow) =>\n void this.unassignGroup(row),\n },\n ],\n },\n ];\n\n //#endregion\n\n //#region methods\n\n groupRowsFor(\n userId: number,\n ): TaonSessionBackofficeUsersModels.AssignedGroupRow[] {\n return this.groupRowsByUserId()[userId] ?? this.emptyGroupRows;\n }\n\n assignedGroupIds(userId: number): number[] {\n return this.assignedGroupIdsByUserId()[userId] ?? this.emptyIds;\n }\n\n openGroupChooser(userId: number): void {\n this.groupChooserUserId.set(userId);\n }\n\n closeGroupChooser(): void {\n this.groupChooserUserId.set(undefined);\n }\n\n groupAssigned(userId: number): void {\n this.closeGroupChooser();\n\n void this.loadGroupsForUser(userId);\n }\n\n async loadGroupsForUser(userId: number): Promise<void> {\n if (!userId) {\n return;\n }\n\n const groups = await this.taonGroupApiService.getGroupsForUser(userId);\n\n const rows = groups.map(group => ({\n userId,\n groupId: group.id as number,\n name: group.name,\n code: group.code,\n description: group.description,\n roles: this.roleRowsFromGroup(group),\n }));\n\n this.groupRowsByUserId.set({\n ...this.groupRowsByUserId(),\n [userId]: rows,\n });\n\n this.assignedGroupIdsByUserId.set({\n ...this.assignedGroupIdsByUserId(),\n [userId]: rows.map(row => row.groupId),\n });\n }\n\n async unassignGroup(\n row: TaonSessionBackofficeUsersModels.AssignedGroupRow,\n ): Promise<void> {\n await this.taonGroupApiService.unassignGroupFromUser(\n row.userId,\n row.groupId,\n );\n\n await this.loadGroupsForUser(row.userId);\n }\n\n //#endregion\n\n //#region private methods\n\n private roleRowsFromGroup(\n group: TaonGroupEntity,\n ): TaonSessionBackofficeUsersModels.AssignedGroupRoleRow[] {\n const rolesById = new Map<\n number,\n TaonSessionBackofficeUsersModels.AssignedGroupRoleRow\n >();\n\n for (const groupRole of group.groupRoles ?? []) {\n const role = groupRole.role;\n if (role) {\n rolesById.set(Number(role.id), {\n roleId: Number(role.id),\n name: role.name,\n });\n }\n }\n\n return [...rolesById.values()];\n }\n\n //#endregion\n}\n","<a [routerLink]=\"navigation.detailsLink('user', user.id)\">User details #{{ user.id }}</a>\n <!-- profile -->\n <div class=\"user-details__profile\">\n <div class=\"user-details__profile-picture\">\n <taon-profile-picture\n [userId]=\"user.id\"\n [readOnly]=\"!(context$ | async)?.isSuperUser\">\n </taon-profile-picture>\n </div>\n\n <div class=\"user-details__profile-fields\">\n <div class=\"user-details__profile-field\">\n <span class=\"user-details__profile-label\"> First Name </span>\n\n <span class=\"user-details__profile-value\"> - </span>\n </div>\n\n <div class=\"user-details__profile-field\">\n <span class=\"user-details__profile-label\"> Surname </span>\n\n <span class=\"user-details__profile-value\"> - </span>\n </div>\n </div>\n </div>\n\n <!-- groups -->\n <div class=\"user-details__section\">\n <div class=\"user-details__section-header\">\n <h4 class=\"user-details__section-title\">User groups</h4>\n\n @if (groupChooserUserId() !== user.id) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"openGroupChooser(user.id)\">\n <mat-icon> group_add </mat-icon>\n\n Assign group\n </button>\n }\n </div>\n\n @if (groupChooserUserId() === user.id) {\n <taon-group-chooser\n [userId]=\"user.id\"\n [excludedGroupIds]=\"assignedGroupIds(user.id)\"\n (assigned)=\"groupAssigned(user.id)\"\n (cancelled)=\"closeGroupChooser()\">\n </taon-group-chooser>\n }\n\n <taon-datatable\n [data]=\"groupRowsFor(user.id)\"\n [columns]=\"groupColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\"\n [expansionTemplate]=\"groupExpansionTemplate\">\n </taon-datatable>\n </div>\n\n <!-- providers -->\n <div class=\"user-details__section\">\n <h4 class=\"user-details__section-title\">Providers</h4>\n\n <taon-datatable\n [data]=\"user.identities\"\n [columns]=\"identityColumns\"\n [pageSize]=\"5\"\n [hideSearch]=\"true\"\n [hideAddButton]=\"true\"\n [showPaginator]=\"false\"\n searchMode=\"simple\">\n </taon-datatable>\n </div>\n\n\n<ng-template\n #groupExpansionTemplate\n let-group>\n <div class=\"user-details__group-roles\">\n <span class=\"user-details__section-title\"> Roles from groups </span>\n\n <ul class=\"user-details__role-list\">\n @for (role of group.roles; track role.roleId) {\n <li class=\"user-details__role-item\">\n <a [routerLink]=\"navigation.detailsLink('role', role.roleId)\">{{ role.name }}</a>\n </li>\n } @empty {\n <li class=\"user-details__role-item\">\n No roles available through this group\n </li>\n }\n </ul>\n </div>\n</ng-template>\n","import { AsyncPipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { map } from 'rxjs';\n\nimport { TaonGroupDetailsComponent } from '../../taon-group/taon-group-backoffice/taon-group-details.component';\nimport { TaonPermissionDetailsComponent } from '../../taon-permission/taon-permission-backoffice/taon-permission-details.component';\nimport { TaonRoleDetailsComponent } from '../../taon-role/taon-role-backoffice/taon-role-details.component';\nimport { TaonSessionUserDetailsComponent } from '../../taon-session-user/taon-session-backoffice-users/taon-session-user-details.component';\n\nimport type { TaonBackofficeDetail } from './taon-backoffice-details.resolver';\nimport { TaonSessionDetailsComponent } from './taon-session-details.component';\n\n@Component({\n selector: 'taon-backoffice-details-page',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AsyncPipe,\n forwardRef(() => TaonSessionUserDetailsComponent),\n forwardRef(() => TaonGroupDetailsComponent),\n forwardRef(() => TaonRoleDetailsComponent),\n forwardRef(() => TaonPermissionDetailsComponent),\n forwardRef(() => TaonSessionDetailsComponent),\n ],\n template: `\n @if (detail$ | async; as detail) {\n @switch (detail.kind) {\n @case ('session') {\n <h2>Session #{{ detail.entity.id }}</h2>\n <taon-session-details\n [sessionId]=\"detail.entity.id\"\n [detail]=\"detail.entity\"></taon-session-details>\n }\n @case ('user') {\n <h2>User: {{ detail.entity.username }} (#{{ detail.entity.id }})</h2>\n <taon-session-user-details\n [user]=\"detail.entity\"></taon-session-user-details>\n }\n @case ('group') {\n <h2>Group: {{ detail.entity.name }} (#{{ detail.entity.id }})</h2>\n <taon-group-details [group]=\"detail.entity\"></taon-group-details>\n }\n @case ('role') {\n <h2>Role: {{ detail.entity.name }} (#{{ detail.entity.id }})</h2>\n <taon-role-details [role]=\"detail.entity\"></taon-role-details>\n }\n @case ('permission') {\n <h2>\n Permission: {{ detail.entity.name }} (#{{ detail.entity.id }})\n </h2>\n <taon-permission-details\n [permission]=\"detail.entity\"></taon-permission-details>\n }\n }\n }\n `,\n})\nexport class TaonBackofficeDetailsPageComponent {\n readonly detail$ = inject(ActivatedRoute).data.pipe(\n map(data => data['detail'] as TaonBackofficeDetail),\n );\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n forwardRef,\n inject,\n} from '@angular/core';\nimport { MtxGridColumn } from '@ng-matero/extensions/grid';\nimport { TaonDatatableComponent } from '@taon-dev/ui/browser';\n\nimport { TaonBackofficeNavigationService } from '../../taon-session/taon-session-backoffice/taon-backoffice-navigation.service';\nimport { TaonSessionUserApiService } from '../taon-session-user-api.service';\nimport type { TaonSessionUserEntity } from '../taon-session-user.entity';\n\nimport { TaonSessionUserDetailsComponent } from './taon-session-user-details.component';\n\n@Component({\n selector: 'app-taon-session-backoffice-users',\n templateUrl: './taon-session-backoffice-users.component.html',\n styleUrls: ['./taon-session-backoffice-users.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n TaonDatatableComponent,\n forwardRef(() => TaonSessionUserDetailsComponent),\n ],\n providers: [TaonSessionUserApiService, TaonBackofficeNavigationService],\n})\nexport class TaonSessionBackofficeUsersComponent {\n readonly userApiService = inject(TaonSessionUserApiService);\n\n readonly navigation = inject(TaonBackofficeNavigationService);\n\n public get crud() {\n return this.userApiService.taonSessionUserController;\n }\n\n readonly columns: MtxGridColumn[] = [\n { header: 'ID', field: 'id', sortable: true, showExpand: true },\n { header: 'Username', field: 'username', sortable: true },\n {\n header: 'Actions',\n field: 'actions',\n type: 'button',\n buttons: [\n {\n type: 'icon',\n icon: 'open_in_new',\n tooltip: 'User details',\n click: (user: TaonSessionUserEntity) =>\n this.navigation.openDetails('user', user.id),\n },\n ],\n },\n ];\n\n add(): void {}\n}\n","<taon-datatable\n [entityCrudController]=\"crud\"\n [columns]=\"columns\"\n [allowedColumns]=\"['id', 'username']\"\n searchMode=\"advanced\"\n (addingItem)=\"add()\"\n [expansionTemplate]=\"expansionTemplate\">\n</taon-datatable>\n<ng-template #expansionTemplate let-user>\n <taon-session-user-details [user]=\"user\"></taon-session-user-details>\n</ng-template>\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { TaonSessionUserApiService } from '../taon-session-user-api.service';\nimport { taonBackofficeDetailsResolver } from '../../taon-session/taon-session-backoffice/taon-backoffice-details.resolver';\n//#endregion\n\nexport const TaonSessionBackofficeUsersRoutes: Routes = [\n {\n path: '',\n pathMatch: 'full',\n loadComponent: () =>\n import('./taon-session-backoffice-users.component').then(\n m => m.TaonSessionBackofficeUsersComponent,\n ),\n },\n {\n path: ':id',\n data: { kind: 'user', hideInNavigation: true },\n providers: [TaonSessionUserApiService],\n resolve: { detail: taonBackofficeDetailsResolver },\n loadComponent: () =>\n import('../../taon-session/taon-session-backoffice/taon-backoffice-details-page.component').then(\n m => m.TaonBackofficeDetailsPageComponent,\n ),\n },\n];\n\n/**\n * By default exporting TaonSessionBackofficeUsersRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonSessionBackofficeUsersRoutes;\n","//#region imports\nimport { Routes } from '@angular/router';\nimport { adminLazyRoute } from '@taon-dev/ui/browser';\n//#endregion\n\nexport const TaonProfilePictureRoutes: Routes = [\n {\n path: '',\n loadComponent: () =>\n import('./taon-profile-picture.component').then(m => m.TaonProfilePictureComponent),\n\n children: [\n // adminLazyRoute({\n // path: 'dashboard',\n // menuItem: 'Dashboard',\n // icon: 'dashboard',\n // expandable: false,\n // loader: () =>\n // import('./anothermodule.routes').then(m => m.DashboardRoutes),\n // }),\n ],\n },\n];\n\n/**\n * By default exporting TaonProfilePictureRoutes,\n * the command `taon generate:app:routes`\n * will automatically add them to the root routes in ./src/app.ts.\n */\n// export default TaonProfilePictureRoutes;","// @ts-nocheck\n// This file is auto-generated during init process. Do not modify.\n// This disable this auto generate file.\n// set property \"shouldGenerateAutogenIndexFile: false\" \n// in taon.jsonc of your project. \nexport * from './build-info._auto-generated_'; \nexport * from './my-organization-proj'; \nexport * from './start-cli'; \nexport * from './taon-audit-events/taon-audit-events-api.service'; // @browser\nexport * from './taon-audit-events/taon-audit-events.abstract.context'; \nexport * from './taon-audit-events/taon-audit-events.constants'; \nexport * from './taon-audit-events/taon-audit-events.controller'; \nexport * from './taon-audit-events/taon-audit-events.entity'; \nexport * from './taon-audit-events/taon-audit-events.middleware'; \nexport * from './taon-audit-events/taon-audit-events.models'; \nexport * from './taon-audit-events/taon-audit-events.provider'; \nexport * from './taon-audit-events/taon-audit-events.repository'; \nexport * from './taon-audit-events/taon-audit-events.subscriber'; \nexport * from './taon-audit-events/taon-audit-events.utils'; \nexport * from './taon-auth-context/taon-auth-context.abstract.context'; \nexport * from './taon-auth-context/taon-auth-context.entity'; \nexport * from './taon-auth-context/taon-auth-context.repository'; \nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.component'; // @browser\nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.models'; \nexport * from './taon-authorization-backoffice/taon-authorization-backoffice.routes'; // @browser\nexport * from './taon-group/taon-group-api.service'; // @browser\nexport * from './taon-group/taon-group-role.entity'; \nexport * from './taon-group/taon-group-role.repository'; \nexport * from './taon-group/taon-group.abstract.context'; \nexport * from './taon-group/taon-group.constants'; \nexport * from './taon-group/taon-group.controller'; \nexport * from './taon-group/taon-group.entity'; \nexport * from './taon-group/taon-group.middleware'; \nexport * from './taon-group/taon-group.provider'; \nexport * from './taon-group/taon-group.repository'; \nexport * from './taon-notification/taon-notification-api.service'; // @browser\nexport * from './taon-notification/taon-notification-recipient.entity'; \nexport * from './taon-notification/taon-notification.abstract.context'; \nexport * from './taon-notification/taon-notification.constants'; \nexport * from './taon-notification/taon-notification.controller'; \nexport * from './taon-notification/taon-notification.entity'; \nexport * from './taon-notification/taon-notification.middleware'; \nexport * from './taon-notification/taon-notification.models'; \nexport * from './taon-notification/taon-notification.provider'; \nexport * from './taon-notification/taon-notification.repository'; \nexport * from './taon-notification/taon-notification.subscriber'; \nexport * from './taon-notification/taon-notification.utils'; \nexport * from './taon-permission/taon-permission-api.service'; // @browser\nexport * from './taon-permission/taon-permission.abstract.context'; \nexport * from './taon-permission/taon-permission.constants'; \nexport * from './taon-permission/taon-permission.controller'; \nexport * from './taon-permission/taon-permission.entity'; \nexport * from './taon-permission/taon-permission.middleware'; \nexport * from './taon-permission/taon-permission.models'; \nexport * from './taon-permission/taon-permission.provider'; \nexport * from './taon-permission/taon-permission.repository'; \nexport * from './taon-permission/taon-permission.subscriber'; \nexport * from './taon-permission/taon-permission.utils'; \nexport * from './taon-role/taon-role-api.service'; // @browser\nexport * from './taon-role/taon-role-permission.entity'; \nexport * from './taon-role/taon-role-permission.repository'; \nexport * from './taon-role/taon-role.abstract.context'; \nexport * from './taon-role/taon-role.constants'; \nexport * from './taon-role/taon-role.controller'; \nexport * from './taon-role/taon-role.entity'; \nexport * from './taon-role/taon-role.models'; \nexport * from './taon-role/taon-role.provider'; \nexport * from './taon-role/taon-role.repository'; \nexport * from './taon-session/taon-session.abstract.context'; \nexport * from './taon-session/taon-session.api.service'; // @browser\nexport * from './taon-session/taon-session.config.service'; // @browser\nexport * from './taon-session/taon-session.controller'; \nexport * from './taon-session/taon-session.entity'; \nexport * from './taon-session/taon-session.kv.repository'; \nexport * from './taon-session/taon-session.middleware'; \nexport * from './taon-session/taon-session.models'; \nexport * from './taon-session/taon-session.provider'; \nexport * from './taon-session/taon-session.repository'; \nexport * from './taon-session/taon-session.state.service'; // @browser\nexport * from './taon-session/taon-session.utils'; \nexport * from './taon-session/taon-session.validators'; \nexport * from './taon-session-user/taon-session-user-api.service'; // @browser\nexport * from './taon-session-user/taon-session-user-group.entity'; \nexport * from './taon-session-user/taon-session-user-group.repository'; \nexport * from './taon-session-user/taon-session-user-identity.entity'; \nexport * from './taon-session-user/taon-session-user-identity.repository'; \nexport * from './taon-session-user/taon-session-user-role.entity'; \nexport * from './taon-session-user/taon-session-user.abstract.context'; \nexport * from './taon-session-user/taon-session-user.constants'; \nexport * from './taon-session-user/taon-session-user.controller'; \nexport * from './taon-session-user/taon-session-user.entity'; \nexport * from './taon-session-user/taon-session-user.middleware'; \nexport * from './taon-session-user/taon-session-user.models'; \nexport * from './taon-session-user/taon-session-user.provider'; \nexport * from './taon-session-user/taon-session-user.repository'; \nexport * from './taon-session-user/taon-session-user.subscriber'; \nexport * from './taon-session-user/taon-session-user.utils'; \nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.component'; // @browser\nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.models'; \nexport * from './taon-group/taon-group-backoffice/taon-group-backoffice.routes'; // @browser\nexport * from './taon-group/taon-group-backoffice/taon-group-details.component'; // @browser\nexport * from './taon-group/taon-group-chooser/taon-group-chooser.component'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.component'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.models'; \nexport * from './taon-permission/taon-permission-backoffice/taon-permission-backoffice.routes'; // @browser\nexport * from './taon-permission/taon-permission-backoffice/taon-permission-details.component'; // @browser\nexport * from './taon-permission/taon-permission-chooser/taon-permission-chooser.component'; // @browser\nexport * from './taon-permission/taon-permission-view-edit/taon-permission-view-edit.component'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.component'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.models'; \nexport * from './taon-role/taon-role-backoffice/taon-role-backoffice.routes'; // @browser\nexport * from './taon-role/taon-role-backoffice/taon-role-details.component'; // @browser\nexport * from './taon-role/taon-role-chooser/taon-role-chooser.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.abstract.context'; \nexport * from './taon-session/taon-profile/taon-profile.api.service'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.config.service'; // @browser\nexport * from './taon-session/taon-profile/taon-profile.constants'; \nexport * from './taon-session/taon-profile/taon-profile.controller'; \nexport * from './taon-session/taon-profile/taon-profile.entity'; \nexport * from './taon-session/taon-profile/taon-profile.kv.repository'; \nexport * from './taon-session/taon-profile/taon-profile.models'; \nexport * from './taon-session/taon-profile/taon-profile.provider'; \nexport * from './taon-session/taon-session/taon-session.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-details-page.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-details.resolver'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-backoffice-navigation.service'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.api.service'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.component'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.controller'; \nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.models'; \nexport * from './taon-session/taon-session-backoffice/taon-session-backoffice.routes'; // @browser\nexport * from './taon-session/taon-session-backoffice/taon-session-details.component'; // @browser\nexport * from './taon-session/taon-session-button/taon-session-button.component'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.component'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.models'; \nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-backoffice-users.routes'; // @browser\nexport * from './taon-session-user/taon-session-backoffice-users/taon-session-user-details.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.component'; // @browser\nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.models'; \nexport * from './taon-session/taon-profile/taon-profile-picture/taon-profile-picture.routes'; // @browser\nexport * from './taon-session/taon-session/social-buttons/google-login-register-button.component'; // @browser\nexport * from './taon-session/taon-session/taon-session-profile/taon-session-profile.component'; // @browser\nexport * from './taon-session/taon-session/taon-session-profile/taon-session-profile.models'; ","export * from './migrations';\nexport * from './env';\nexport * from './index._auto-generated_';\n/* */ \nexport default {};\n\nexport const DEFAULT_SESSION_PASSWORD = 'ddd';\n\nexport const DEFAULT_SESSION_EMAIL = 'test@test.com';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["t","i1","signal","catchError","map","i6","i7","i2","i3","i5"],"mappings":"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"}
|