@webiny/api-core 6.0.0 → 6.1.0-beta.1
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/domain/security/ApiToken.d.ts +1 -0
- package/domain/security/ApiToken.js +1 -0
- package/domain/security/ApiToken.js.map +1 -1
- package/exports/api/security.d.ts +2 -0
- package/exports/api/security.js +2 -0
- package/exports/api/security.js.map +1 -1
- package/features/buildParams/abstractions.d.ts +2 -0
- package/features/buildParams/abstractions.js +2 -0
- package/features/buildParams/abstractions.js.map +1 -1
- package/features/eventPublisher/abstractions.d.ts +2 -0
- package/features/eventPublisher/abstractions.js +3 -0
- package/features/eventPublisher/abstractions.js.map +1 -1
- package/features/keyValueStore/abstractions.d.ts +4 -0
- package/features/keyValueStore/abstractions.js +4 -0
- package/features/keyValueStore/abstractions.js.map +1 -1
- package/features/logger/abstractions.d.ts +1 -0
- package/features/logger/abstractions.js +1 -0
- package/features/logger/abstractions.js.map +1 -1
- package/features/security/IdentityContext/abstractions.d.ts +1 -0
- package/features/security/IdentityContext/abstractions.js +1 -0
- package/features/security/IdentityContext/abstractions.js.map +1 -1
- package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +1 -1
- package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/CreateApiKey/abstractions.d.ts +1 -0
- package/features/security/apiKeys/CreateApiKey/abstractions.js +1 -0
- package/features/security/apiKeys/CreateApiKey/abstractions.js.map +1 -1
- package/features/security/apiKeys/CreateApiKey/events.d.ts +2 -0
- package/features/security/apiKeys/CreateApiKey/events.js +4 -0
- package/features/security/apiKeys/CreateApiKey/events.js.map +1 -1
- package/features/security/apiKeys/DeleteApiKey/abstractions.d.ts +1 -0
- package/features/security/apiKeys/DeleteApiKey/abstractions.js +1 -0
- package/features/security/apiKeys/DeleteApiKey/abstractions.js.map +1 -1
- package/features/security/apiKeys/DeleteApiKey/events.d.ts +2 -0
- package/features/security/apiKeys/DeleteApiKey/events.js +4 -0
- package/features/security/apiKeys/DeleteApiKey/events.js.map +1 -1
- package/features/security/apiKeys/GetApiKey/abstractions.d.ts +1 -0
- package/features/security/apiKeys/GetApiKey/abstractions.js +1 -0
- package/features/security/apiKeys/GetApiKey/abstractions.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -0
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js +1 -0
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -0
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.js +1 -0
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
- package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js +1 -1
- package/features/security/apiKeys/ListApiKeys/ListApiKeysUseCase.js.map +1 -1
- package/features/security/apiKeys/ListApiKeys/abstractions.d.ts +1 -0
- package/features/security/apiKeys/ListApiKeys/abstractions.js +1 -0
- package/features/security/apiKeys/ListApiKeys/abstractions.js.map +1 -1
- package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +1 -1
- package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/UpdateApiKey/abstractions.d.ts +1 -0
- package/features/security/apiKeys/UpdateApiKey/abstractions.js +1 -0
- package/features/security/apiKeys/UpdateApiKey/abstractions.js.map +1 -1
- package/features/security/apiKeys/UpdateApiKey/events.d.ts +2 -0
- package/features/security/apiKeys/UpdateApiKey/events.js +4 -0
- package/features/security/apiKeys/UpdateApiKey/events.js.map +1 -1
- package/features/security/apiKeys/shared/abstractions.d.ts +5 -2
- package/features/security/apiKeys/shared/abstractions.js +3 -0
- package/features/security/apiKeys/shared/abstractions.js.map +1 -1
- package/features/security/apiKeys/shared/schemas.d.ts +10 -71
- package/features/security/apiKeys/shared/schemas.js +4 -4
- package/features/security/apiKeys/shared/schemas.js.map +1 -1
- package/features/security/authentication/AuthenticationContext/abstractions.d.ts +1 -0
- package/features/security/authentication/AuthenticationContext/abstractions.js +1 -0
- package/features/security/authentication/AuthenticationContext/abstractions.js.map +1 -1
- package/features/security/authentication/AuthenticationContext/events.d.ts +2 -0
- package/features/security/authentication/AuthenticationContext/events.js +4 -0
- package/features/security/authentication/AuthenticationContext/events.js.map +1 -1
- package/features/security/authentication/Authenticator/abstractions.d.ts +1 -0
- package/features/security/authentication/Authenticator/abstractions.js +1 -0
- package/features/security/authentication/Authenticator/abstractions.js.map +1 -1
- package/features/security/authorization/AuthorizationContext/abstractions.d.ts +2 -0
- package/features/security/authorization/AuthorizationContext/abstractions.js +2 -0
- package/features/security/authorization/AuthorizationContext/abstractions.js.map +1 -1
- package/features/security/authorization/Authorizer/abstractions.d.ts +1 -0
- package/features/security/authorization/Authorizer/abstractions.js +1 -0
- package/features/security/authorization/Authorizer/abstractions.js.map +1 -1
- package/features/security/login/abstractions.d.ts +1 -0
- package/features/security/login/abstractions.js +2 -0
- package/features/security/login/abstractions.js.map +1 -1
- package/features/security/roles/CreateRole/CreateRoleUseCase.d.ts +1 -3
- package/features/security/roles/CreateRole/CreateRoleUseCase.js +3 -7
- package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
- package/features/security/roles/CreateRole/abstractions.d.ts +1 -0
- package/features/security/roles/CreateRole/abstractions.js +1 -0
- package/features/security/roles/CreateRole/abstractions.js.map +1 -1
- package/features/security/roles/CreateRole/events.d.ts +2 -0
- package/features/security/roles/CreateRole/events.js +4 -0
- package/features/security/roles/CreateRole/events.js.map +1 -1
- package/features/security/roles/CreateRole/schema.d.ts +2 -20
- package/features/security/roles/CreateRole/schema.js +2 -2
- package/features/security/roles/CreateRole/schema.js.map +1 -1
- package/features/security/roles/DeleteRole/abstractions.d.ts +1 -0
- package/features/security/roles/DeleteRole/abstractions.js +1 -0
- package/features/security/roles/DeleteRole/abstractions.js.map +1 -1
- package/features/security/roles/DeleteRole/events.d.ts +2 -0
- package/features/security/roles/DeleteRole/events.js +4 -0
- package/features/security/roles/DeleteRole/events.js.map +1 -1
- package/features/security/roles/GetRole/abstractions.d.ts +1 -0
- package/features/security/roles/GetRole/abstractions.js +1 -0
- package/features/security/roles/GetRole/abstractions.js.map +1 -1
- package/features/security/roles/ListRoles/abstractions.d.ts +1 -0
- package/features/security/roles/ListRoles/abstractions.js +1 -0
- package/features/security/roles/ListRoles/abstractions.js.map +1 -1
- package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +1 -1
- package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
- package/features/security/roles/UpdateRole/abstractions.d.ts +1 -0
- package/features/security/roles/UpdateRole/abstractions.js +1 -0
- package/features/security/roles/UpdateRole/abstractions.js.map +1 -1
- package/features/security/roles/UpdateRole/events.d.ts +2 -0
- package/features/security/roles/UpdateRole/events.js +4 -0
- package/features/security/roles/UpdateRole/events.js.map +1 -1
- package/features/security/roles/UpdateRole/schema.d.ts +2 -18
- package/features/security/roles/UpdateRole/schema.js +2 -2
- package/features/security/roles/UpdateRole/schema.js.map +1 -1
- package/features/security/roles/feature.js +2 -0
- package/features/security/roles/feature.js.map +1 -1
- package/features/security/roles/shared/RoleProvider.d.ts +13 -0
- package/features/security/roles/shared/RoleProvider.js +29 -0
- package/features/security/roles/shared/RoleProvider.js.map +1 -0
- package/features/security/roles/shared/RolesRepository.d.ts +3 -1
- package/features/security/roles/shared/RolesRepository.js +19 -18
- package/features/security/roles/shared/RolesRepository.js.map +1 -1
- package/features/security/roles/shared/abstractions.d.ts +19 -0
- package/features/security/roles/shared/abstractions.js +3 -0
- package/features/security/roles/shared/abstractions.js.map +1 -1
- package/features/security/shared/abstractions.d.ts +5 -14
- package/features/security/shared/abstractions.js +3 -16
- package/features/security/shared/abstractions.js.map +1 -1
- package/features/security/teams/CreateTeam/CreateTeamUseCase.d.ts +1 -3
- package/features/security/teams/CreateTeam/CreateTeamUseCase.js +3 -7
- package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
- package/features/security/teams/CreateTeam/abstractions.d.ts +1 -0
- package/features/security/teams/CreateTeam/abstractions.js +1 -0
- package/features/security/teams/CreateTeam/abstractions.js.map +1 -1
- package/features/security/teams/CreateTeam/events.d.ts +2 -0
- package/features/security/teams/CreateTeam/events.js +4 -0
- package/features/security/teams/CreateTeam/events.js.map +1 -1
- package/features/security/teams/CreateTeam/schema.d.ts +2 -12
- package/features/security/teams/DeleteTeam/abstractions.d.ts +1 -0
- package/features/security/teams/DeleteTeam/abstractions.js +1 -0
- package/features/security/teams/DeleteTeam/abstractions.js.map +1 -1
- package/features/security/teams/DeleteTeam/events.d.ts +2 -0
- package/features/security/teams/DeleteTeam/events.js +4 -0
- package/features/security/teams/DeleteTeam/events.js.map +1 -1
- package/features/security/teams/GetTeam/abstractions.d.ts +1 -0
- package/features/security/teams/GetTeam/abstractions.js +1 -0
- package/features/security/teams/GetTeam/abstractions.js.map +1 -1
- package/features/security/teams/ListTeams/abstractions.d.ts +1 -0
- package/features/security/teams/ListTeams/abstractions.js +1 -0
- package/features/security/teams/ListTeams/abstractions.js.map +1 -1
- package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +1 -1
- package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
- package/features/security/teams/UpdateTeam/abstractions.d.ts +1 -0
- package/features/security/teams/UpdateTeam/abstractions.js +1 -0
- package/features/security/teams/UpdateTeam/abstractions.js.map +1 -1
- package/features/security/teams/UpdateTeam/events.d.ts +2 -0
- package/features/security/teams/UpdateTeam/events.js +4 -0
- package/features/security/teams/UpdateTeam/events.js.map +1 -1
- package/features/security/teams/UpdateTeam/schema.d.ts +2 -10
- package/features/security/teams/feature.js +6 -0
- package/features/security/teams/feature.js.map +1 -1
- package/features/security/teams/shared/TeamProvider.d.ts +13 -0
- package/features/security/teams/shared/TeamProvider.js +29 -0
- package/features/security/teams/shared/TeamProvider.js.map +1 -0
- package/features/security/teams/shared/TeamsRepository.js +20 -18
- package/features/security/teams/shared/TeamsRepository.js.map +1 -1
- package/features/security/teams/shared/abstractions.d.ts +18 -0
- package/features/security/teams/shared/abstractions.js +3 -0
- package/features/security/teams/shared/abstractions.js.map +1 -1
- package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.d.ts +17 -0
- package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js +76 -0
- package/features/security/teams/shared/decorators/TeamsRepositoryCachingDecorator.js.map +1 -0
- package/features/security/utils/verifyJwtUsingJwk.d.ts +2 -4
- package/features/security/utils/verifyJwtUsingJwk.js +1 -1
- package/features/security/utils/verifyJwtUsingJwk.js.map +1 -1
- package/features/system/InstallSystem/abstractions.d.ts +2 -3
- package/features/system/InstallSystem/abstractions.js +2 -3
- package/features/system/InstallSystem/abstractions.js.map +1 -1
- package/features/task/TaskController/abstractions.d.ts +1 -0
- package/features/task/TaskController/abstractions.js +1 -0
- package/features/task/TaskController/abstractions.js.map +1 -1
- package/features/task/TaskDefinition/abstractions.d.ts +1 -0
- package/features/task/TaskDefinition/abstractions.js +1 -0
- package/features/task/TaskDefinition/abstractions.js.map +1 -1
- package/features/task/TaskService/abstractions.d.ts +1 -0
- package/features/task/TaskService/abstractions.js +1 -0
- package/features/task/TaskService/abstractions.js.map +1 -1
- package/features/tenancy/CreateTenant/abstractions.d.ts +5 -3
- package/features/tenancy/CreateTenant/abstractions.js +5 -3
- package/features/tenancy/CreateTenant/abstractions.js.map +1 -1
- package/features/tenancy/DeleteTenant/abstractions.d.ts +5 -0
- package/features/tenancy/DeleteTenant/abstractions.js +5 -0
- package/features/tenancy/DeleteTenant/abstractions.js.map +1 -1
- package/features/tenancy/GetTenantById/abstractions.d.ts +3 -0
- package/features/tenancy/GetTenantById/abstractions.js +3 -9
- package/features/tenancy/GetTenantById/abstractions.js.map +1 -1
- package/features/tenancy/InstallTenant/abstractions.d.ts +3 -9
- package/features/tenancy/InstallTenant/abstractions.js +3 -12
- package/features/tenancy/InstallTenant/abstractions.js.map +1 -1
- package/features/tenancy/TenantContext/abstractions.d.ts +1 -0
- package/features/tenancy/TenantContext/abstractions.js +1 -0
- package/features/tenancy/TenantContext/abstractions.js.map +1 -1
- package/features/tenancy/UpdateTenant/abstractions.d.ts +5 -0
- package/features/tenancy/UpdateTenant/abstractions.js +5 -0
- package/features/tenancy/UpdateTenant/abstractions.js.map +1 -1
- package/features/users/CreateUser/CreateUserUseCase.js +1 -1
- package/features/users/CreateUser/CreateUserUseCase.js.map +1 -1
- package/features/users/CreateUser/abstractions.d.ts +1 -0
- package/features/users/CreateUser/abstractions.js +1 -1
- package/features/users/CreateUser/abstractions.js.map +1 -1
- package/features/users/CreateUser/events.d.ts +2 -0
- package/features/users/CreateUser/events.js +4 -0
- package/features/users/CreateUser/events.js.map +1 -1
- package/features/users/CreateUser/schema.d.ts +4 -36
- package/features/users/DeleteUser/abstractions.d.ts +1 -0
- package/features/users/DeleteUser/abstractions.js +1 -1
- package/features/users/DeleteUser/abstractions.js.map +1 -1
- package/features/users/DeleteUser/events.d.ts +2 -0
- package/features/users/DeleteUser/events.js +4 -0
- package/features/users/DeleteUser/events.js.map +1 -1
- package/features/users/GetUser/abstractions.d.ts +1 -0
- package/features/users/GetUser/abstractions.js +1 -1
- package/features/users/GetUser/abstractions.js.map +1 -1
- package/features/users/ListUserTeams/abstractions.d.ts +1 -0
- package/features/users/ListUserTeams/abstractions.js +1 -1
- package/features/users/ListUserTeams/abstractions.js.map +1 -1
- package/features/users/ListUsers/abstractions.d.ts +1 -0
- package/features/users/ListUsers/abstractions.js +1 -1
- package/features/users/ListUsers/abstractions.js.map +1 -1
- package/features/users/UpdateUser/UpdateUserUseCase.js +1 -1
- package/features/users/UpdateUser/UpdateUserUseCase.js.map +1 -1
- package/features/users/UpdateUser/abstractions.d.ts +1 -0
- package/features/users/UpdateUser/abstractions.js +1 -1
- package/features/users/UpdateUser/abstractions.js.map +1 -1
- package/features/users/UpdateUser/events.d.ts +2 -0
- package/features/users/UpdateUser/events.js +4 -0
- package/features/users/UpdateUser/events.js.map +1 -1
- package/features/users/UpdateUser/schema.d.ts +4 -30
- package/features/users/shared/abstractions.d.ts +1 -0
- package/features/users/shared/abstractions.js +1 -1
- package/features/users/shared/abstractions.js.map +1 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +0 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
- package/graphql/security/NotAuthorizedResponse.d.ts +1 -0
- package/graphql/security/NotAuthorizedResponse.js +1 -0
- package/graphql/security/NotAuthorizedResponse.js.map +1 -1
- package/idp/abstractions.d.ts +4 -0
- package/idp/abstractions.js +4 -0
- package/idp/abstractions.js.map +1 -1
- package/legacy/security/createSecurityContext.js +0 -11
- package/legacy/security/createSecurityContext.js.map +1 -1
- package/models/base/BaseModel.js +2 -2
- package/models/base/BaseModel.js.map +1 -1
- package/models/base/ModelBuilder.d.ts +2 -2
- package/models/base/ModelBuilder.js +21 -2
- package/models/base/ModelBuilder.js.map +1 -1
- package/models/cms/FieldBuilder.d.ts +3 -2
- package/models/cms/FieldBuilder.js +12 -17
- package/models/cms/FieldBuilder.js.map +1 -1
- package/models/cms/FieldBuilderRegistry.d.ts +1 -1
- package/models/cms/FieldBuilderRegistry.js.map +1 -1
- package/models/cms/FieldDefinitionsBuilder.d.ts +1 -0
- package/models/cms/FieldDefinitionsBuilder.js +13 -15
- package/models/cms/FieldDefinitionsBuilder.js.map +1 -1
- package/models/cms/PrivateCmsModelBuilder.js.map +1 -1
- package/models/cms/abstractions.d.ts +1 -1
- package/models/cms/abstractions.js.map +1 -1
- package/models/cms/fieldsBuilder.md +1 -1
- package/models/simple/Page/abstractions.d.ts +1 -11
- package/package.json +20 -20
- package/types/security.d.ts +13 -10
- package/types/security.js.map +1 -1
- package/features/security/shared/abstractions.ts.bak +0 -52
- package/legacy/security/plugins/SecurityRolePlugin.d.ts +0 -16
- package/legacy/security/plugins/SecurityRolePlugin.js +0 -33
- package/legacy/security/plugins/SecurityRolePlugin.js.map +0 -1
- package/legacy/security/plugins/SecurityTeamPlugin.d.ts +0 -16
- package/legacy/security/plugins/SecurityTeamPlugin.js +0 -33
- package/legacy/security/plugins/SecurityTeamPlugin.js.map +0 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createImplementation } from "@webiny/feature/api";
|
|
2
1
|
import { Result } from "@webiny/feature/api";
|
|
3
2
|
import { TenantContext } from "../../../tenancy/TenantContext/index.js";
|
|
4
3
|
import { RolesRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
@@ -15,7 +14,7 @@ class RolesRepositoryImpl {
|
|
|
15
14
|
const tenant = this.tenantContext.getTenant();
|
|
16
15
|
|
|
17
16
|
// First check plugin roles
|
|
18
|
-
const pluginRoles = await this.rolesProvider();
|
|
17
|
+
const pluginRoles = await this.rolesProvider.getRoles();
|
|
19
18
|
const pluginRole = pluginRoles.find(r => {
|
|
20
19
|
// Match by ID or slug
|
|
21
20
|
if (params.id && r.id === params.id) {
|
|
@@ -26,12 +25,8 @@ class RolesRepositoryImpl {
|
|
|
26
25
|
}
|
|
27
26
|
return false;
|
|
28
27
|
});
|
|
29
|
-
|
|
30
|
-
// Filter by tenant if role has one
|
|
31
28
|
if (pluginRole) {
|
|
32
|
-
|
|
33
|
-
return Result.ok(pluginRole);
|
|
34
|
-
}
|
|
29
|
+
return Result.ok(pluginRole);
|
|
35
30
|
}
|
|
36
31
|
|
|
37
32
|
// Then check storage
|
|
@@ -63,13 +58,8 @@ class RolesRepositoryImpl {
|
|
|
63
58
|
});
|
|
64
59
|
|
|
65
60
|
// Get roles from plugins
|
|
66
|
-
const pluginRoles = await this.rolesProvider();
|
|
61
|
+
const pluginRoles = await this.rolesProvider.getRoles();
|
|
67
62
|
const rolesFromPlugins = pluginRoles.filter(role => {
|
|
68
|
-
// Filter by tenant - plugin roles with no tenant or matching tenant
|
|
69
|
-
if (role.tenant && role.tenant !== tenant.id) {
|
|
70
|
-
return false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
63
|
// Apply where filters if provided
|
|
74
64
|
const {
|
|
75
65
|
id_in,
|
|
@@ -92,8 +82,12 @@ class RolesRepositoryImpl {
|
|
|
92
82
|
}
|
|
93
83
|
async create(role) {
|
|
94
84
|
try {
|
|
85
|
+
const tenant = this.tenantContext.getTenant();
|
|
95
86
|
await this.storageOperations.createRole({
|
|
96
|
-
role
|
|
87
|
+
role: {
|
|
88
|
+
...role,
|
|
89
|
+
tenant: tenant.id
|
|
90
|
+
}
|
|
97
91
|
});
|
|
98
92
|
return Result.ok();
|
|
99
93
|
} catch (error) {
|
|
@@ -102,8 +96,12 @@ class RolesRepositoryImpl {
|
|
|
102
96
|
}
|
|
103
97
|
async update(role) {
|
|
104
98
|
try {
|
|
99
|
+
const tenant = this.tenantContext.getTenant();
|
|
105
100
|
await this.storageOperations.updateRole({
|
|
106
|
-
role
|
|
101
|
+
role: {
|
|
102
|
+
...role,
|
|
103
|
+
tenant: tenant.id
|
|
104
|
+
}
|
|
107
105
|
});
|
|
108
106
|
return Result.ok();
|
|
109
107
|
} catch (error) {
|
|
@@ -112,8 +110,12 @@ class RolesRepositoryImpl {
|
|
|
112
110
|
}
|
|
113
111
|
async delete(role) {
|
|
114
112
|
try {
|
|
113
|
+
const tenant = this.tenantContext.getTenant();
|
|
115
114
|
await this.storageOperations.deleteRole({
|
|
116
|
-
role
|
|
115
|
+
role: {
|
|
116
|
+
...role,
|
|
117
|
+
tenant: tenant.id
|
|
118
|
+
}
|
|
117
119
|
});
|
|
118
120
|
return Result.ok();
|
|
119
121
|
} catch (error) {
|
|
@@ -121,8 +123,7 @@ class RolesRepositoryImpl {
|
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
125
|
}
|
|
124
|
-
export const RolesRepository = createImplementation({
|
|
125
|
-
abstraction: RepositoryAbstraction,
|
|
126
|
+
export const RolesRepository = RepositoryAbstraction.createImplementation({
|
|
126
127
|
implementation: RolesRepositoryImpl,
|
|
127
128
|
dependencies: [TenantContext, SecurityStorageOperations, RolesProvider]
|
|
128
129
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["Result","TenantContext","RolesRepository","RepositoryAbstraction","SecurityStorageOperations","RolesProvider","RoleNotFoundError","RoleStorageError","RolesRepositoryImpl","constructor","tenantContext","storageOperations","rolesProvider","get","params","tenant","getTenant","pluginRoles","getRoles","pluginRole","find","r","id","slug","ok","role","getRole","where","fail","error","list","rolesFromDatabase","listRoles","sort","rolesFromPlugins","filter","id_in","slug_in","includes","create","createRole","update","updateRole","delete","deleteRole","createImplementation","implementation","dependencies"],"sources":["RolesRepository.ts"],"sourcesContent":["import { Result } from \"@webiny/feature/api\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { RolesRepository as RepositoryAbstraction } from \"./abstractions.js\";\nimport type { Role, GetRoleInput, ListRolesInput } from \"./types.js\";\nimport {\n SecurityStorageOperations,\n RolesProvider\n} from \"~/features/security/shared/abstractions.js\";\nimport { RoleNotFoundError, RoleStorageError } from \"./errors.js\";\n\nclass RolesRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private tenantContext: TenantContext.Interface,\n private storageOperations: SecurityStorageOperations.Interface,\n private rolesProvider: RolesProvider.Interface\n ) {}\n\n async get(params: GetRoleInput): Promise<Result<Role, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // First check plugin roles\n const pluginRoles = await this.rolesProvider.getRoles();\n const pluginRole = pluginRoles.find(r => {\n // Match by ID or slug\n if (params.id && r.id === params.id) {\n return true;\n }\n\n if (params.slug && r.slug === params.slug) {\n return true;\n }\n\n return false;\n });\n\n if (pluginRole) {\n return Result.ok(pluginRole);\n }\n\n // Then check storage\n const role = await this.storageOperations.getRole({\n where: {\n ...params,\n tenant: tenant.id\n }\n });\n\n if (role) {\n return Result.ok(role);\n }\n\n return Result.fail(new RoleNotFoundError());\n } catch (error) {\n return Result.fail(new RoleStorageError(error));\n }\n }\n\n async list(params: ListRolesInput): Promise<Result<Role[], RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n\n // Get roles from storage\n const rolesFromDatabase = await this.storageOperations.listRoles({\n where: {\n tenant: tenant.id,\n ...params.where\n },\n sort: params.sort || [\"createdOn_ASC\"]\n });\n\n // Get roles from plugins\n const pluginRoles = await this.rolesProvider.getRoles();\n const rolesFromPlugins = pluginRoles.filter(role => {\n // Apply where filters if provided\n const { id_in, slug_in } = params.where || {};\n if (id_in && !id_in.includes(role.id)) {\n return false;\n }\n if (slug_in && !slug_in.includes(role.slug)) {\n return false;\n }\n\n return true;\n });\n\n // Plugin roles come first (they don't have createdOn), then database roles\n return Result.ok([...rolesFromPlugins, ...rolesFromDatabase]);\n } catch (error) {\n return Result.fail(new RoleStorageError(error));\n }\n }\n\n async create(role: Role): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n await this.storageOperations.createRole({ role: { ...role, tenant: tenant.id } });\n return Result.ok();\n } catch (error) {\n return Result.fail(new RoleStorageError(error));\n }\n }\n\n async update(role: Role): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n await this.storageOperations.updateRole({ role: { ...role, tenant: tenant.id } });\n return Result.ok();\n } catch (error) {\n return Result.fail(new RoleStorageError(error));\n }\n }\n\n async delete(role: Role): Promise<Result<void, RepositoryAbstraction.Error>> {\n try {\n const tenant = this.tenantContext.getTenant();\n await this.storageOperations.deleteRole({ role: { ...role, tenant: tenant.id } });\n return Result.ok();\n } catch (error) {\n return Result.fail(new RoleStorageError(error));\n }\n }\n}\n\nexport const RolesRepository = RepositoryAbstraction.createImplementation({\n implementation: RolesRepositoryImpl,\n dependencies: [TenantContext, SecurityStorageOperations, RolesProvider]\n});\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,qBAAqB;AAC5C,SAASC,aAAa;AACtB,SAASC,eAAe,IAAIC,qBAAqB;AAEjD,SACIC,yBAAyB,EACzBC,aAAa;AAEjB,SAASC,iBAAiB,EAAEC,gBAAgB;AAE5C,MAAMC,mBAAmB,CAA4C;EACjEC,WAAWA,CACCC,aAAsC,EACtCC,iBAAsD,EACtDC,aAAsC,EAChD;IAAA,KAHUF,aAAsC,GAAtCA,aAAsC;IAAA,KACtCC,iBAAsD,GAAtDA,iBAAsD;IAAA,KACtDC,aAAsC,GAAtCA,aAAsC;EAC/C;EAEH,MAAMC,GAAGA,CAACC,MAAoB,EAAsD;IAChF,IAAI;MACA,MAAMC,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;;MAE7C;MACA,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACL,aAAa,CAACM,QAAQ,CAAC,CAAC;MACvD,MAAMC,UAAU,GAAGF,WAAW,CAACG,IAAI,CAACC,CAAC,IAAI;QACrC;QACA,IAAIP,MAAM,CAACQ,EAAE,IAAID,CAAC,CAACC,EAAE,KAAKR,MAAM,CAACQ,EAAE,EAAE;UACjC,OAAO,IAAI;QACf;QAEA,IAAIR,MAAM,CAACS,IAAI,IAAIF,CAAC,CAACE,IAAI,KAAKT,MAAM,CAACS,IAAI,EAAE;UACvC,OAAO,IAAI;QACf;QAEA,OAAO,KAAK;MAChB,CAAC,CAAC;MAEF,IAAIJ,UAAU,EAAE;QACZ,OAAOnB,MAAM,CAACwB,EAAE,CAACL,UAAU,CAAC;MAChC;;MAEA;MACA,MAAMM,IAAI,GAAG,MAAM,IAAI,CAACd,iBAAiB,CAACe,OAAO,CAAC;QAC9CC,KAAK,EAAE;UACH,GAAGb,MAAM;UACTC,MAAM,EAAEA,MAAM,CAACO;QACnB;MACJ,CAAC,CAAC;MAEF,IAAIG,IAAI,EAAE;QACN,OAAOzB,MAAM,CAACwB,EAAE,CAACC,IAAI,CAAC;MAC1B;MAEA,OAAOzB,MAAM,CAAC4B,IAAI,CAAC,IAAItB,iBAAiB,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,OAAOuB,KAAK,EAAE;MACZ,OAAO7B,MAAM,CAAC4B,IAAI,CAAC,IAAIrB,gBAAgB,CAACsB,KAAK,CAAC,CAAC;IACnD;EACJ;EAEA,MAAMC,IAAIA,CAAChB,MAAsB,EAAwD;IACrF,IAAI;MACA,MAAMC,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;;MAE7C;MACA,MAAMe,iBAAiB,GAAG,MAAM,IAAI,CAACpB,iBAAiB,CAACqB,SAAS,CAAC;QAC7DL,KAAK,EAAE;UACHZ,MAAM,EAAEA,MAAM,CAACO,EAAE;UACjB,GAAGR,MAAM,CAACa;QACd,CAAC;QACDM,IAAI,EAAEnB,MAAM,CAACmB,IAAI,IAAI,CAAC,eAAe;MACzC,CAAC,CAAC;;MAEF;MACA,MAAMhB,WAAW,GAAG,MAAM,IAAI,CAACL,aAAa,CAACM,QAAQ,CAAC,CAAC;MACvD,MAAMgB,gBAAgB,GAAGjB,WAAW,CAACkB,MAAM,CAACV,IAAI,IAAI;QAChD;QACA,MAAM;UAAEW,KAAK;UAAEC;QAAQ,CAAC,GAAGvB,MAAM,CAACa,KAAK,IAAI,CAAC,CAAC;QAC7C,IAAIS,KAAK,IAAI,CAACA,KAAK,CAACE,QAAQ,CAACb,IAAI,CAACH,EAAE,CAAC,EAAE;UACnC,OAAO,KAAK;QAChB;QACA,IAAIe,OAAO,IAAI,CAACA,OAAO,CAACC,QAAQ,CAACb,IAAI,CAACF,IAAI,CAAC,EAAE;UACzC,OAAO,KAAK;QAChB;QAEA,OAAO,IAAI;MACf,CAAC,CAAC;;MAEF;MACA,OAAOvB,MAAM,CAACwB,EAAE,CAAC,CAAC,GAAGU,gBAAgB,EAAE,GAAGH,iBAAiB,CAAC,CAAC;IACjE,CAAC,CAAC,OAAOF,KAAK,EAAE;MACZ,OAAO7B,MAAM,CAAC4B,IAAI,CAAC,IAAIrB,gBAAgB,CAACsB,KAAK,CAAC,CAAC;IACnD;EACJ;EAEA,MAAMU,MAAMA,CAACd,IAAU,EAAsD;IACzE,IAAI;MACA,MAAMV,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;MAC7C,MAAM,IAAI,CAACL,iBAAiB,CAAC6B,UAAU,CAAC;QAAEf,IAAI,EAAE;UAAE,GAAGA,IAAI;UAAEV,MAAM,EAAEA,MAAM,CAACO;QAAG;MAAE,CAAC,CAAC;MACjF,OAAOtB,MAAM,CAACwB,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,OAAOK,KAAK,EAAE;MACZ,OAAO7B,MAAM,CAAC4B,IAAI,CAAC,IAAIrB,gBAAgB,CAACsB,KAAK,CAAC,CAAC;IACnD;EACJ;EAEA,MAAMY,MAAMA,CAAChB,IAAU,EAAsD;IACzE,IAAI;MACA,MAAMV,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;MAC7C,MAAM,IAAI,CAACL,iBAAiB,CAAC+B,UAAU,CAAC;QAAEjB,IAAI,EAAE;UAAE,GAAGA,IAAI;UAAEV,MAAM,EAAEA,MAAM,CAACO;QAAG;MAAE,CAAC,CAAC;MACjF,OAAOtB,MAAM,CAACwB,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,OAAOK,KAAK,EAAE;MACZ,OAAO7B,MAAM,CAAC4B,IAAI,CAAC,IAAIrB,gBAAgB,CAACsB,KAAK,CAAC,CAAC;IACnD;EACJ;EAEA,MAAMc,MAAMA,CAAClB,IAAU,EAAsD;IACzE,IAAI;MACA,MAAMV,MAAM,GAAG,IAAI,CAACL,aAAa,CAACM,SAAS,CAAC,CAAC;MAC7C,MAAM,IAAI,CAACL,iBAAiB,CAACiC,UAAU,CAAC;QAAEnB,IAAI,EAAE;UAAE,GAAGA,IAAI;UAAEV,MAAM,EAAEA,MAAM,CAACO;QAAG;MAAE,CAAC,CAAC;MACjF,OAAOtB,MAAM,CAACwB,EAAE,CAAC,CAAC;IACtB,CAAC,CAAC,OAAOK,KAAK,EAAE;MACZ,OAAO7B,MAAM,CAAC4B,IAAI,CAAC,IAAIrB,gBAAgB,CAACsB,KAAK,CAAC,CAAC;IACnD;EACJ;AACJ;AAEA,OAAO,MAAM3B,eAAe,GAAGC,qBAAqB,CAAC0C,oBAAoB,CAAC;EACtEC,cAAc,EAAEtC,mBAAmB;EACnCuC,YAAY,EAAE,CAAC9C,aAAa,EAAEG,yBAAyB,EAAEC,aAAa;AAC1E,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
2
|
import type { Role, GetRoleInput, ListRolesInput } from "./types.js";
|
|
3
|
+
import type { SecurityPermission } from "../../../../types/security.js";
|
|
3
4
|
import { RoleNotFoundError, RoleStorageError } from "./errors.js";
|
|
4
5
|
export interface IRolesRepositoryErrors {
|
|
5
6
|
base: RoleNotFoundError | RoleStorageError;
|
|
@@ -12,9 +13,27 @@ export interface IRolesRepository {
|
|
|
12
13
|
update(data: Role): Promise<Result<void, RepositoryError>>;
|
|
13
14
|
delete(role: Role): Promise<Result<void, RepositoryError>>;
|
|
14
15
|
}
|
|
16
|
+
/** Persist and retrieve security roles. */
|
|
15
17
|
export declare const RolesRepository: import("@webiny/di").Abstraction<IRolesRepository>;
|
|
16
18
|
export declare namespace RolesRepository {
|
|
17
19
|
type Interface = IRolesRepository;
|
|
18
20
|
type Error = RepositoryError;
|
|
19
21
|
}
|
|
22
|
+
export type CodeRole = {
|
|
23
|
+
name: string;
|
|
24
|
+
slug: string;
|
|
25
|
+
description: string;
|
|
26
|
+
permissions: SecurityPermission[];
|
|
27
|
+
system?: boolean;
|
|
28
|
+
};
|
|
29
|
+
export interface IRoleFactory {
|
|
30
|
+
execute(): Promise<CodeRole[]>;
|
|
31
|
+
}
|
|
32
|
+
/** Provide code-defined security roles with permissions. */
|
|
33
|
+
export declare const RoleFactory: import("@webiny/di").Abstraction<IRoleFactory>;
|
|
34
|
+
export declare namespace RoleFactory {
|
|
35
|
+
type Interface = IRoleFactory;
|
|
36
|
+
type Return = Promise<CodeRole[]>;
|
|
37
|
+
type Role = CodeRole;
|
|
38
|
+
}
|
|
20
39
|
export {};
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
+
/** Persist and retrieve security roles. */
|
|
2
3
|
export const RolesRepository = createAbstraction("RolesRepository");
|
|
4
|
+
/** Provide code-defined security roles with permissions. */
|
|
5
|
+
export const RoleFactory = createAbstraction("RoleFactory");
|
|
3
6
|
|
|
4
7
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","RolesRepository"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Role, GetRoleInput, ListRolesInput } from \"./types.js\";\nimport { RoleNotFoundError, RoleStorageError } from \"./errors.js\";\n\nexport interface IRolesRepositoryErrors {\n base: RoleNotFoundError | RoleStorageError;\n}\n\ntype RepositoryError = IRolesRepositoryErrors[keyof IRolesRepositoryErrors];\n\nexport interface IRolesRepository {\n get(params: GetRoleInput): Promise<Result<Role, RepositoryError>>;\n list(params: ListRolesInput): Promise<Result<Role[], RepositoryError>>;\n create(data: Role): Promise<Result<void, RepositoryError>>;\n update(data: Role): Promise<Result<void, RepositoryError>>;\n delete(role: Role): Promise<Result<void, RepositoryError>>;\n}\n\nexport const RolesRepository = createAbstraction<IRolesRepository>(\"RolesRepository\");\n\nexport namespace RolesRepository {\n export type Interface = IRolesRepository;\n export type Error = RepositoryError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;
|
|
1
|
+
{"version":3,"names":["createAbstraction","RolesRepository","RoleFactory"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Role, GetRoleInput, ListRolesInput } from \"./types.js\";\nimport type { SecurityPermission } from \"~/types/security.js\";\nimport { RoleNotFoundError, RoleStorageError } from \"./errors.js\";\n\nexport interface IRolesRepositoryErrors {\n base: RoleNotFoundError | RoleStorageError;\n}\n\ntype RepositoryError = IRolesRepositoryErrors[keyof IRolesRepositoryErrors];\n\nexport interface IRolesRepository {\n get(params: GetRoleInput): Promise<Result<Role, RepositoryError>>;\n list(params: ListRolesInput): Promise<Result<Role[], RepositoryError>>;\n create(data: Role): Promise<Result<void, RepositoryError>>;\n update(data: Role): Promise<Result<void, RepositoryError>>;\n delete(role: Role): Promise<Result<void, RepositoryError>>;\n}\n\n/** Persist and retrieve security roles. */\nexport const RolesRepository = createAbstraction<IRolesRepository>(\"RolesRepository\");\n\nexport namespace RolesRepository {\n export type Interface = IRolesRepository;\n export type Error = RepositoryError;\n}\n\nexport type CodeRole = {\n name: string;\n slug: string;\n description: string;\n permissions: SecurityPermission[];\n system?: boolean;\n};\n\nexport interface IRoleFactory {\n execute(): Promise<CodeRole[]>;\n}\n\n/** Provide code-defined security roles with permissions. */\nexport const RoleFactory = createAbstraction<IRoleFactory>(\"RoleFactory\");\n\nexport namespace RoleFactory {\n export type Interface = IRoleFactory;\n export type Return = Promise<CodeRole[]>;\n export type Role = CodeRole;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAoBvD;AACA,OAAO,MAAMC,eAAe,GAAGD,iBAAiB,CAAmB,iBAAiB,CAAC;AAmBrF;AACA,OAAO,MAAME,WAAW,GAAGF,iBAAiB,CAAe,aAAa,CAAC","ignoreList":[]}
|
|
@@ -1,30 +1,21 @@
|
|
|
1
1
|
import type { SecurityStorageOperations as ISecurityStorageOperations, Role, Team } from "../../../types/security.js";
|
|
2
|
-
/**
|
|
3
|
-
* SecurityStorageOperations abstraction
|
|
4
|
-
* Provides access to all storage operations for security entities
|
|
5
|
-
*/
|
|
2
|
+
/** Storage operations for all security entities. */
|
|
6
3
|
export declare const SecurityStorageOperations: import("@webiny/di").Abstraction<ISecurityStorageOperations>;
|
|
7
4
|
export declare namespace SecurityStorageOperations {
|
|
8
5
|
type Interface = ISecurityStorageOperations;
|
|
9
6
|
}
|
|
10
|
-
/**
|
|
11
|
-
* RolesProvider abstraction
|
|
12
|
-
* Provides roles defined via plugins
|
|
13
|
-
*/
|
|
14
7
|
export interface IRolesProvider {
|
|
15
|
-
(): Promise<Role[]>;
|
|
8
|
+
getRoles(): Promise<Role[]>;
|
|
16
9
|
}
|
|
10
|
+
/** Provide roles defined via code-based factories. */
|
|
17
11
|
export declare const RolesProvider: import("@webiny/di").Abstraction<IRolesProvider>;
|
|
18
12
|
export declare namespace RolesProvider {
|
|
19
13
|
type Interface = IRolesProvider;
|
|
20
14
|
}
|
|
21
|
-
/**
|
|
22
|
-
* TeamsProvider abstraction
|
|
23
|
-
* Provides teams defined via plugins
|
|
24
|
-
*/
|
|
25
15
|
export interface ITeamsProvider {
|
|
26
|
-
(): Promise<Team[]>;
|
|
16
|
+
getTeams(): Promise<Team[]>;
|
|
27
17
|
}
|
|
18
|
+
/** Provide teams defined via code-based factories. */
|
|
28
19
|
export declare const TeamsProvider: import("@webiny/di").Abstraction<ITeamsProvider>;
|
|
29
20
|
export declare namespace TeamsProvider {
|
|
30
21
|
type Interface = ITeamsProvider;
|
|
@@ -1,22 +1,9 @@
|
|
|
1
1
|
import { createAbstraction } from "@webiny/feature/api";
|
|
2
|
-
/**
|
|
3
|
-
* SecurityStorageOperations abstraction
|
|
4
|
-
* Provides access to all storage operations for security entities
|
|
5
|
-
*/
|
|
2
|
+
/** Storage operations for all security entities. */
|
|
6
3
|
export const SecurityStorageOperations = createAbstraction("SecurityStorageOperations");
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* RolesProvider abstraction
|
|
10
|
-
* Provides roles defined via plugins
|
|
11
|
-
*/
|
|
12
|
-
|
|
4
|
+
/** Provide roles defined via code-based factories. */
|
|
13
5
|
export const RolesProvider = createAbstraction("RolesProvider");
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* TeamsProvider abstraction
|
|
17
|
-
* Provides teams defined via plugins
|
|
18
|
-
*/
|
|
19
|
-
|
|
6
|
+
/** Provide teams defined via code-based factories. */
|
|
20
7
|
export const TeamsProvider = createAbstraction("TeamsProvider");
|
|
21
8
|
|
|
22
9
|
//# sourceMappingURL=abstractions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","SecurityStorageOperations","RolesProvider","TeamsProvider"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type {\n SecurityStorageOperations as ISecurityStorageOperations,\n Role,\n Team\n} from \"~/types/security.js\";\n\n
|
|
1
|
+
{"version":3,"names":["createAbstraction","SecurityStorageOperations","RolesProvider","TeamsProvider"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport type {\n SecurityStorageOperations as ISecurityStorageOperations,\n Role,\n Team\n} from \"~/types/security.js\";\n\n/** Storage operations for all security entities. */\nexport const SecurityStorageOperations = createAbstraction<ISecurityStorageOperations>(\n \"SecurityStorageOperations\"\n);\n\nexport namespace SecurityStorageOperations {\n export type Interface = ISecurityStorageOperations;\n}\n\nexport interface IRolesProvider {\n getRoles(): Promise<Role[]>;\n}\n\n/** Provide roles defined via code-based factories. */\nexport const RolesProvider = createAbstraction<IRolesProvider>(\"RolesProvider\");\n\nexport namespace RolesProvider {\n export type Interface = IRolesProvider;\n}\n\nexport interface ITeamsProvider {\n getTeams(): Promise<Team[]>;\n}\n\n/** Provide teams defined via code-based factories. */\nexport const TeamsProvider = createAbstraction<ITeamsProvider>(\"TeamsProvider\");\n\nexport namespace TeamsProvider {\n export type Interface = ITeamsProvider;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAOvD;AACA,OAAO,MAAMC,yBAAyB,GAAGD,iBAAiB,CACtD,2BACJ,CAAC;AAUD;AACA,OAAO,MAAME,aAAa,GAAGF,iBAAiB,CAAiB,eAAe,CAAC;AAU/E;AACA,OAAO,MAAMG,aAAa,GAAGH,iBAAiB,CAAiB,eAAe,CAAC","ignoreList":[]}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { Result } from "@webiny/feature/api";
|
|
2
|
-
import { TenantContext } from "../../../../features/tenancy/TenantContext/index.js";
|
|
3
2
|
import { EventPublisher } from "../../../../features/eventPublisher/index.js";
|
|
4
3
|
import { CreateTeam } from "./abstractions.js";
|
|
5
4
|
import { TeamsRepository } from "../shared/abstractions.js";
|
|
6
5
|
import { IdentityContext } from "../../IdentityContext/abstractions.js";
|
|
7
6
|
import type { Team, CreateTeamInput } from "../shared/types.js";
|
|
8
7
|
export declare class CreateTeamUseCase implements CreateTeam.Interface {
|
|
9
|
-
private tenantContext;
|
|
10
8
|
private identityContext;
|
|
11
9
|
private eventPublisher;
|
|
12
10
|
private repository;
|
|
13
|
-
constructor(
|
|
11
|
+
constructor(identityContext: IdentityContext.Interface, eventPublisher: EventPublisher.Interface, repository: TeamsRepository.Interface);
|
|
14
12
|
execute(input: CreateTeamInput): Promise<Result<Team, CreateTeam.Error>>;
|
|
15
13
|
}
|
|
16
14
|
export declare const CreateTeamUseCaseImpl: import("@webiny/di").Implementation<typeof CreateTeamUseCase>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { mdbid } from "@webiny/utils";
|
|
2
2
|
import { createImplementation } from "@webiny/feature/api";
|
|
3
3
|
import { Result } from "@webiny/feature/api";
|
|
4
|
-
import { TenantContext } from "../../../tenancy/TenantContext/index.js";
|
|
5
4
|
import { EventPublisher } from "../../../eventPublisher/index.js";
|
|
6
5
|
import { CreateTeam } from "./abstractions.js";
|
|
7
6
|
import { TeamsRepository } from "../shared/abstractions.js";
|
|
@@ -10,8 +9,7 @@ import { createTeamValidation } from "./schema.js";
|
|
|
10
9
|
import { TeamBeforeCreateEvent, TeamAfterCreateEvent } from "./events.js";
|
|
11
10
|
import { NotAuthorizedError, TeamExistsError, TeamValidationError } from "../shared/errors.js";
|
|
12
11
|
export class CreateTeamUseCase {
|
|
13
|
-
constructor(
|
|
14
|
-
this.tenantContext = tenantContext;
|
|
12
|
+
constructor(identityContext, eventPublisher, repository) {
|
|
15
13
|
this.identityContext = identityContext;
|
|
16
14
|
this.eventPublisher = eventPublisher;
|
|
17
15
|
this.repository = repository;
|
|
@@ -23,9 +21,8 @@ export class CreateTeamUseCase {
|
|
|
23
21
|
}
|
|
24
22
|
const validation = createTeamValidation.safeParse(input);
|
|
25
23
|
if (!validation.success) {
|
|
26
|
-
return Result.fail(new TeamValidationError(validation.error.
|
|
24
|
+
return Result.fail(new TeamValidationError(validation.error.issues[0].message));
|
|
27
25
|
}
|
|
28
|
-
const tenant = this.tenantContext.getTenant();
|
|
29
26
|
const identity = this.identityContext.getIdentity();
|
|
30
27
|
const data = validation.data;
|
|
31
28
|
|
|
@@ -43,7 +40,6 @@ export class CreateTeamUseCase {
|
|
|
43
40
|
description: data.description,
|
|
44
41
|
roles: data.roles,
|
|
45
42
|
system: input.system || false,
|
|
46
|
-
tenant: tenant.id,
|
|
47
43
|
createdOn: new Date().toISOString(),
|
|
48
44
|
createdBy: {
|
|
49
45
|
id: identity.id,
|
|
@@ -70,7 +66,7 @@ export class CreateTeamUseCase {
|
|
|
70
66
|
export const CreateTeamUseCaseImpl = createImplementation({
|
|
71
67
|
abstraction: CreateTeam,
|
|
72
68
|
implementation: CreateTeamUseCase,
|
|
73
|
-
dependencies: [
|
|
69
|
+
dependencies: [IdentityContext, EventPublisher, TeamsRepository]
|
|
74
70
|
});
|
|
75
71
|
|
|
76
72
|
//# sourceMappingURL=CreateTeamUseCase.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["mdbid","createImplementation","Result","
|
|
1
|
+
{"version":3,"names":["mdbid","createImplementation","Result","EventPublisher","CreateTeam","TeamsRepository","IdentityContext","createTeamValidation","TeamBeforeCreateEvent","TeamAfterCreateEvent","NotAuthorizedError","TeamExistsError","TeamValidationError","CreateTeamUseCase","constructor","identityContext","eventPublisher","repository","execute","input","hasPermission","getPermission","fail","validation","safeParse","success","error","issues","message","identity","getIdentity","data","existingTeamResult","get","slug","isOk","team","id","name","description","roles","system","createdOn","Date","toISOString","createdBy","displayName","type","plugin","publish","result","create","isFail","ok","CreateTeamUseCaseImpl","abstraction","implementation","dependencies"],"sources":["CreateTeamUseCase.ts"],"sourcesContent":["import { mdbid } from \"@webiny/utils\";\nimport { createImplementation } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { CreateTeam } from \"./abstractions.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { IdentityContext } from \"../../IdentityContext/abstractions.js\";\nimport { createTeamValidation } from \"./schema.js\";\nimport { TeamBeforeCreateEvent, TeamAfterCreateEvent } from \"./events.js\";\nimport type { Team, CreateTeamInput } from \"../shared/types.js\";\nimport { NotAuthorizedError, TeamExistsError, TeamValidationError } from \"../shared/errors.js\";\n\nexport class CreateTeamUseCase implements CreateTeam.Interface {\n constructor(\n private identityContext: IdentityContext.Interface,\n private eventPublisher: EventPublisher.Interface,\n private repository: TeamsRepository.Interface\n ) {}\n\n async execute(input: CreateTeamInput): Promise<Result<Team, CreateTeam.Error>> {\n const hasPermission = await this.identityContext.getPermission(\"security.team\");\n\n if (!hasPermission) {\n return Result.fail(new NotAuthorizedError());\n }\n\n const validation = createTeamValidation.safeParse(input);\n if (!validation.success) {\n return Result.fail(new TeamValidationError(validation.error.issues[0].message));\n }\n\n const identity = this.identityContext.getIdentity();\n const data = validation.data;\n\n // Check if team with same slug already exists\n const existingTeamResult = await this.repository.get({ slug: data.slug });\n if (existingTeamResult.isOk()) {\n return Result.fail(new TeamExistsError(data.slug));\n }\n\n const team: Team = {\n id: mdbid(),\n name: data.name,\n slug: data.slug,\n description: data.description,\n roles: data.roles,\n system: input.system || false,\n createdOn: new Date().toISOString(),\n createdBy: {\n id: identity.id,\n displayName: identity.displayName,\n type: identity.type\n },\n plugin: false\n };\n\n await this.eventPublisher.publish(\n new TeamBeforeCreateEvent({ team, input: validation.data })\n );\n\n const result = await this.repository.create(team);\n\n if (result.isFail()) {\n return Result.fail(result.error);\n }\n\n await this.eventPublisher.publish(\n new TeamAfterCreateEvent({ team, input: validation.data })\n );\n\n return Result.ok(team);\n }\n}\n\nexport const CreateTeamUseCaseImpl = createImplementation({\n abstraction: CreateTeam,\n implementation: CreateTeamUseCase,\n dependencies: [IdentityContext, EventPublisher, TeamsRepository]\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -11,6 +11,7 @@ type CreateTeamError = ICreateTeamErrors[keyof ICreateTeamErrors] | TeamsReposit
|
|
|
11
11
|
export interface ICreateTeam {
|
|
12
12
|
execute(input: CreateTeamInput): Promise<Result<Team, CreateTeamError>>;
|
|
13
13
|
}
|
|
14
|
+
/** Create a new team. */
|
|
14
15
|
export declare const CreateTeam: import("@webiny/di").Abstraction<ICreateTeam>;
|
|
15
16
|
export declare namespace CreateTeam {
|
|
16
17
|
type Interface = ICreateTeam;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","CreateTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, CreateTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError, TeamExistsError, TeamValidationError } from \"../shared/errors.js\";\n\nexport interface ICreateTeamErrors {\n notAuthorized: NotAuthorizedError;\n teamExists: TeamExistsError;\n validation: TeamValidationError;\n}\n\ntype CreateTeamError = ICreateTeamErrors[keyof ICreateTeamErrors] | TeamsRepository.Error;\n\nexport interface ICreateTeam {\n execute(input: CreateTeamInput): Promise<Result<Team, CreateTeamError>>;\n}\n\nexport const CreateTeam = createAbstraction<ICreateTeam>(\"CreateTeam\");\n\nexport namespace CreateTeam {\n export type Interface = ICreateTeam;\n export type Error = CreateTeamError;\n}\n\nexport interface TeamBeforeCreatePayload {\n team: Team;\n input: CreateTeamInput;\n}\n\nexport interface TeamAfterCreatePayload {\n team: Team;\n input: CreateTeamInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAkBvD,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","CreateTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, CreateTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError, TeamExistsError, TeamValidationError } from \"../shared/errors.js\";\n\nexport interface ICreateTeamErrors {\n notAuthorized: NotAuthorizedError;\n teamExists: TeamExistsError;\n validation: TeamValidationError;\n}\n\ntype CreateTeamError = ICreateTeamErrors[keyof ICreateTeamErrors] | TeamsRepository.Error;\n\nexport interface ICreateTeam {\n execute(input: CreateTeamInput): Promise<Result<Team, CreateTeamError>>;\n}\n\n/** Create a new team. */\nexport const CreateTeam = createAbstraction<ICreateTeam>(\"CreateTeam\");\n\nexport namespace CreateTeam {\n export type Interface = ICreateTeam;\n export type Error = CreateTeamError;\n}\n\nexport interface TeamBeforeCreatePayload {\n team: Team;\n input: CreateTeamInput;\n}\n\nexport interface TeamAfterCreatePayload {\n team: Team;\n input: CreateTeamInput;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAkBvD;AACA,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ export declare class TeamBeforeCreateEvent extends DomainEvent<TeamBeforeCreateP
|
|
|
5
5
|
eventType: "team.beforeCreate";
|
|
6
6
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamBeforeCreateEvent>>;
|
|
7
7
|
}
|
|
8
|
+
/** Hook into team lifecycle before a team is created. */
|
|
8
9
|
export declare const TeamBeforeCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamBeforeCreateEvent>>;
|
|
9
10
|
export declare namespace TeamBeforeCreateEventHandler {
|
|
10
11
|
type Interface = IEventHandler<TeamBeforeCreateEvent>;
|
|
@@ -14,6 +15,7 @@ export declare class TeamAfterCreateEvent extends DomainEvent<TeamAfterCreatePay
|
|
|
14
15
|
eventType: "team.afterCreate";
|
|
15
16
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamAfterCreateEvent>>;
|
|
16
17
|
}
|
|
18
|
+
/** Hook into team lifecycle after a team is created. */
|
|
17
19
|
export declare const TeamAfterCreateEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamAfterCreateEvent>>;
|
|
18
20
|
export declare namespace TeamAfterCreateEventHandler {
|
|
19
21
|
type Interface = IEventHandler<TeamAfterCreateEvent>;
|
|
@@ -6,6 +6,8 @@ export class TeamBeforeCreateEvent extends DomainEvent {
|
|
|
6
6
|
return TeamBeforeCreateEventHandler;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
/** Hook into team lifecycle before a team is created. */
|
|
9
11
|
export const TeamBeforeCreateEventHandler = createAbstraction("TeamBeforeCreateEventHandler");
|
|
10
12
|
export class TeamAfterCreateEvent extends DomainEvent {
|
|
11
13
|
eventType = "team.afterCreate";
|
|
@@ -13,6 +15,8 @@ export class TeamAfterCreateEvent extends DomainEvent {
|
|
|
13
15
|
return TeamAfterCreateEventHandler;
|
|
14
16
|
}
|
|
15
17
|
}
|
|
18
|
+
|
|
19
|
+
/** Hook into team lifecycle after a team is created. */
|
|
16
20
|
export const TeamAfterCreateEventHandler = createAbstraction("TeamAfterCreateEventHandler");
|
|
17
21
|
|
|
18
22
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeCreateEvent","eventType","getHandlerAbstraction","TeamBeforeCreateEventHandler","TeamAfterCreateEvent","TeamAfterCreateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeCreatePayload, TeamAfterCreatePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeCreateEvent extends DomainEvent<TeamBeforeCreatePayload> {\n eventType = \"team.beforeCreate\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeCreateEventHandler;\n }\n}\n\nexport const TeamBeforeCreateEventHandler = createAbstraction<IEventHandler<TeamBeforeCreateEvent>>(\n \"TeamBeforeCreateEventHandler\"\n);\n\nexport namespace TeamBeforeCreateEventHandler {\n export type Interface = IEventHandler<TeamBeforeCreateEvent>;\n export type Event = TeamBeforeCreateEvent;\n}\n\nexport class TeamAfterCreateEvent extends DomainEvent<TeamAfterCreatePayload> {\n eventType = \"team.afterCreate\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterCreateEventHandler;\n }\n}\n\nexport const TeamAfterCreateEventHandler = createAbstraction<IEventHandler<TeamAfterCreateEvent>>(\n \"TeamAfterCreateEventHandler\"\n);\n\nexport namespace TeamAfterCreateEventHandler {\n export type Interface = IEventHandler<TeamAfterCreateEvent>;\n export type Event = TeamAfterCreateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeCreateEvent","eventType","getHandlerAbstraction","TeamBeforeCreateEventHandler","TeamAfterCreateEvent","TeamAfterCreateEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeCreatePayload, TeamAfterCreatePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeCreateEvent extends DomainEvent<TeamBeforeCreatePayload> {\n eventType = \"team.beforeCreate\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeCreateEventHandler;\n }\n}\n\n/** Hook into team lifecycle before a team is created. */\nexport const TeamBeforeCreateEventHandler = createAbstraction<IEventHandler<TeamBeforeCreateEvent>>(\n \"TeamBeforeCreateEventHandler\"\n);\n\nexport namespace TeamBeforeCreateEventHandler {\n export type Interface = IEventHandler<TeamBeforeCreateEvent>;\n export type Event = TeamBeforeCreateEvent;\n}\n\nexport class TeamAfterCreateEvent extends DomainEvent<TeamAfterCreatePayload> {\n eventType = \"team.afterCreate\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterCreateEventHandler;\n }\n}\n\n/** Hook into team lifecycle after a team is created. */\nexport const TeamAfterCreateEventHandler = createAbstraction<IEventHandler<TeamAfterCreateEvent>>(\n \"TeamAfterCreateEventHandler\"\n);\n\nexport namespace TeamAfterCreateEventHandler {\n export type Interface = IEventHandler<TeamAfterCreateEvent>;\n export type Event = TeamAfterCreateEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;;AAEA;AACA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
|
|
@@ -3,15 +3,5 @@ export declare const createTeamValidation: z.ZodObject<{
|
|
|
3
3
|
name: z.ZodString;
|
|
4
4
|
slug: z.ZodString;
|
|
5
5
|
description: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
6
|
-
roles: z.ZodArray<z.ZodString
|
|
7
|
-
},
|
|
8
|
-
roles: string[];
|
|
9
|
-
name: string;
|
|
10
|
-
description: string;
|
|
11
|
-
slug: string;
|
|
12
|
-
}, {
|
|
13
|
-
roles: string[];
|
|
14
|
-
name: string;
|
|
15
|
-
slug: string;
|
|
16
|
-
description?: string | undefined;
|
|
17
|
-
}>;
|
|
6
|
+
roles: z.ZodArray<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
@@ -11,6 +11,7 @@ type DeleteTeamError = IDeleteTeamErrors[keyof IDeleteTeamErrors] | TeamsReposit
|
|
|
11
11
|
export interface IDeleteTeam {
|
|
12
12
|
execute(id: string): Promise<Result<void, DeleteTeamError>>;
|
|
13
13
|
}
|
|
14
|
+
/** Delete a team. */
|
|
14
15
|
export declare const DeleteTeam: import("@webiny/di").Abstraction<IDeleteTeam>;
|
|
15
16
|
export declare namespace DeleteTeam {
|
|
16
17
|
type Interface = IDeleteTeam;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DeleteTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n CannotDeletePluginTeamsError,\n CannotDeleteSystemTeamsError\n} from \"../shared/errors.js\";\n\nexport interface IDeleteTeamErrors {\n notAuthorized: NotAuthorizedError;\n cannotDeletePlugin: CannotDeletePluginTeamsError;\n cannotDeleteSystem: CannotDeleteSystemTeamsError;\n}\n\ntype DeleteTeamError = IDeleteTeamErrors[keyof IDeleteTeamErrors] | TeamsRepository.Error;\n\nexport interface IDeleteTeam {\n execute(id: string): Promise<Result<void, DeleteTeamError>>;\n}\n\nexport const DeleteTeam = createAbstraction<IDeleteTeam>(\"DeleteTeam\");\n\nexport namespace DeleteTeam {\n export type Interface = IDeleteTeam;\n export type Error = DeleteTeamError;\n}\n\nexport interface TeamBeforeDeletePayload {\n team: Team;\n}\n\nexport interface TeamAfterDeletePayload {\n team: Team;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAsBvD,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","DeleteTeam"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport {\n NotAuthorizedError,\n CannotDeletePluginTeamsError,\n CannotDeleteSystemTeamsError\n} from \"../shared/errors.js\";\n\nexport interface IDeleteTeamErrors {\n notAuthorized: NotAuthorizedError;\n cannotDeletePlugin: CannotDeletePluginTeamsError;\n cannotDeleteSystem: CannotDeleteSystemTeamsError;\n}\n\ntype DeleteTeamError = IDeleteTeamErrors[keyof IDeleteTeamErrors] | TeamsRepository.Error;\n\nexport interface IDeleteTeam {\n execute(id: string): Promise<Result<void, DeleteTeamError>>;\n}\n\n/** Delete a team. */\nexport const DeleteTeam = createAbstraction<IDeleteTeam>(\"DeleteTeam\");\n\nexport namespace DeleteTeam {\n export type Interface = IDeleteTeam;\n export type Error = DeleteTeamError;\n}\n\nexport interface TeamBeforeDeletePayload {\n team: Team;\n}\n\nexport interface TeamAfterDeletePayload {\n team: Team;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAsBvD;AACA,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
|
|
@@ -5,6 +5,7 @@ export declare class TeamBeforeDeleteEvent extends DomainEvent<TeamBeforeDeleteP
|
|
|
5
5
|
eventType: "team.beforeDelete";
|
|
6
6
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamBeforeDeleteEvent>>;
|
|
7
7
|
}
|
|
8
|
+
/** Hook into team lifecycle before a team is deleted. */
|
|
8
9
|
export declare const TeamBeforeDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamBeforeDeleteEvent>>;
|
|
9
10
|
export declare namespace TeamBeforeDeleteEventHandler {
|
|
10
11
|
type Interface = IEventHandler<TeamBeforeDeleteEvent>;
|
|
@@ -14,6 +15,7 @@ export declare class TeamAfterDeleteEvent extends DomainEvent<TeamAfterDeletePay
|
|
|
14
15
|
eventType: "team.afterDelete";
|
|
15
16
|
getHandlerAbstraction(): import("@webiny/di").Abstraction<IEventHandler<TeamAfterDeleteEvent>>;
|
|
16
17
|
}
|
|
18
|
+
/** Hook into team lifecycle after a team is deleted. */
|
|
17
19
|
export declare const TeamAfterDeleteEventHandler: import("@webiny/di").Abstraction<IEventHandler<TeamAfterDeleteEvent>>;
|
|
18
20
|
export declare namespace TeamAfterDeleteEventHandler {
|
|
19
21
|
type Interface = IEventHandler<TeamAfterDeleteEvent>;
|
|
@@ -6,6 +6,8 @@ export class TeamBeforeDeleteEvent extends DomainEvent {
|
|
|
6
6
|
return TeamBeforeDeleteEventHandler;
|
|
7
7
|
}
|
|
8
8
|
}
|
|
9
|
+
|
|
10
|
+
/** Hook into team lifecycle before a team is deleted. */
|
|
9
11
|
export const TeamBeforeDeleteEventHandler = createAbstraction("TeamBeforeDeleteEventHandler");
|
|
10
12
|
export class TeamAfterDeleteEvent extends DomainEvent {
|
|
11
13
|
eventType = "team.afterDelete";
|
|
@@ -13,6 +15,8 @@ export class TeamAfterDeleteEvent extends DomainEvent {
|
|
|
13
15
|
return TeamAfterDeleteEventHandler;
|
|
14
16
|
}
|
|
15
17
|
}
|
|
18
|
+
|
|
19
|
+
/** Hook into team lifecycle after a team is deleted. */
|
|
16
20
|
export const TeamAfterDeleteEventHandler = createAbstraction("TeamAfterDeleteEventHandler");
|
|
17
21
|
|
|
18
22
|
//# sourceMappingURL=events.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeDeleteEvent","eventType","getHandlerAbstraction","TeamBeforeDeleteEventHandler","TeamAfterDeleteEvent","TeamAfterDeleteEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeDeletePayload, TeamAfterDeletePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeDeleteEvent extends DomainEvent<TeamBeforeDeletePayload> {\n eventType = \"team.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeDeleteEventHandler;\n }\n}\n\nexport const TeamBeforeDeleteEventHandler = createAbstraction<IEventHandler<TeamBeforeDeleteEvent>>(\n \"TeamBeforeDeleteEventHandler\"\n);\n\nexport namespace TeamBeforeDeleteEventHandler {\n export type Interface = IEventHandler<TeamBeforeDeleteEvent>;\n export type Event = TeamBeforeDeleteEvent;\n}\n\nexport class TeamAfterDeleteEvent extends DomainEvent<TeamAfterDeletePayload> {\n eventType = \"team.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterDeleteEventHandler;\n }\n}\n\nexport const TeamAfterDeleteEventHandler = createAbstraction<IEventHandler<TeamAfterDeleteEvent>>(\n \"TeamAfterDeleteEventHandler\"\n);\n\nexport namespace TeamAfterDeleteEventHandler {\n export type Interface = IEventHandler<TeamAfterDeleteEvent>;\n export type Event = TeamAfterDeleteEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;
|
|
1
|
+
{"version":3,"names":["createAbstraction","DomainEvent","TeamBeforeDeleteEvent","eventType","getHandlerAbstraction","TeamBeforeDeleteEventHandler","TeamAfterDeleteEvent","TeamAfterDeleteEventHandler"],"sources":["events.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { DomainEvent } from \"~/features/eventPublisher/index.js\";\nimport type { IEventHandler } from \"~/features/eventPublisher/index.js\";\nimport type { TeamBeforeDeletePayload, TeamAfterDeletePayload } from \"./abstractions.js\";\n\nexport class TeamBeforeDeleteEvent extends DomainEvent<TeamBeforeDeletePayload> {\n eventType = \"team.beforeDelete\" as const;\n\n getHandlerAbstraction() {\n return TeamBeforeDeleteEventHandler;\n }\n}\n\n/** Hook into team lifecycle before a team is deleted. */\nexport const TeamBeforeDeleteEventHandler = createAbstraction<IEventHandler<TeamBeforeDeleteEvent>>(\n \"TeamBeforeDeleteEventHandler\"\n);\n\nexport namespace TeamBeforeDeleteEventHandler {\n export type Interface = IEventHandler<TeamBeforeDeleteEvent>;\n export type Event = TeamBeforeDeleteEvent;\n}\n\nexport class TeamAfterDeleteEvent extends DomainEvent<TeamAfterDeletePayload> {\n eventType = \"team.afterDelete\" as const;\n\n getHandlerAbstraction() {\n return TeamAfterDeleteEventHandler;\n }\n}\n\n/** Hook into team lifecycle after a team is deleted. */\nexport const TeamAfterDeleteEventHandler = createAbstraction<IEventHandler<TeamAfterDeleteEvent>>(\n \"TeamAfterDeleteEventHandler\"\n);\n\nexport namespace TeamAfterDeleteEventHandler {\n export type Interface = IEventHandler<TeamAfterDeleteEvent>;\n export type Event = TeamAfterDeleteEvent;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AACvD,SAASC,WAAW;AAIpB,OAAO,MAAMC,qBAAqB,SAASD,WAAW,CAA0B;EAC5EE,SAAS,GAAG,mBAAmB;EAE/BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOC,4BAA4B;EACvC;AACJ;;AAEA;AACA,OAAO,MAAMA,4BAA4B,GAAGL,iBAAiB,CACzD,8BACJ,CAAC;AAOD,OAAO,MAAMM,oBAAoB,SAASL,WAAW,CAAyB;EAC1EE,SAAS,GAAG,kBAAkB;EAE9BC,qBAAqBA,CAAA,EAAG;IACpB,OAAOG,2BAA2B;EACtC;AACJ;;AAEA;AACA,OAAO,MAAMA,2BAA2B,GAAGP,iBAAiB,CACxD,6BACJ,CAAC","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ type GetTeamError = IGetTeamUseCaseErrors[keyof IGetTeamUseCaseErrors] | TeamsRe
|
|
|
9
9
|
export interface IGetTeamUseCase {
|
|
10
10
|
execute(params: GetTeamInput): Promise<Result<Team, GetTeamError>>;
|
|
11
11
|
}
|
|
12
|
+
/** Retrieve a team. */
|
|
12
13
|
export declare const GetTeamUseCase: import("@webiny/di").Abstraction<IGetTeamUseCase>;
|
|
13
14
|
export declare namespace GetTeamUseCase {
|
|
14
15
|
type Interface = IGetTeamUseCase;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","GetTeamUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, GetTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError } from \"../shared/errors.js\";\n\nexport interface IGetTeamUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n}\n\ntype GetTeamError = IGetTeamUseCaseErrors[keyof IGetTeamUseCaseErrors] | TeamsRepository.Error;\n\nexport interface IGetTeamUseCase {\n execute(params: GetTeamInput): Promise<Result<Team, GetTeamError>>;\n}\n\nexport const GetTeamUseCase = createAbstraction<IGetTeamUseCase>(\"GetTeamUseCase\");\n\nexport namespace GetTeamUseCase {\n export type Interface = IGetTeamUseCase;\n export type Error = GetTeamError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAgBvD,OAAO,MAAMC,cAAc,GAAGD,iBAAiB,CAAkB,gBAAgB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","GetTeamUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, GetTeamInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError } from \"../shared/errors.js\";\n\nexport interface IGetTeamUseCaseErrors {\n notAuthorized: NotAuthorizedError;\n}\n\ntype GetTeamError = IGetTeamUseCaseErrors[keyof IGetTeamUseCaseErrors] | TeamsRepository.Error;\n\nexport interface IGetTeamUseCase {\n execute(params: GetTeamInput): Promise<Result<Team, GetTeamError>>;\n}\n\n/** Retrieve a team. */\nexport const GetTeamUseCase = createAbstraction<IGetTeamUseCase>(\"GetTeamUseCase\");\n\nexport namespace GetTeamUseCase {\n export type Interface = IGetTeamUseCase;\n export type Error = GetTeamError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAgBvD;AACA,OAAO,MAAMC,cAAc,GAAGD,iBAAiB,CAAkB,gBAAgB,CAAC","ignoreList":[]}
|
|
@@ -9,6 +9,7 @@ type ListTeamsError = IListTeamsErrors[keyof IListTeamsErrors] | TeamsRepository
|
|
|
9
9
|
export interface IListTeams {
|
|
10
10
|
execute(params?: ListTeamsInput): Promise<Result<Team[], ListTeamsError>>;
|
|
11
11
|
}
|
|
12
|
+
/** List all teams. */
|
|
12
13
|
export declare const ListTeamsUseCase: import("@webiny/di").Abstraction<IListTeams>;
|
|
13
14
|
export declare namespace ListTeamsUseCase {
|
|
14
15
|
type Interface = IListTeams;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","ListTeamsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, ListTeamsInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError } from \"../shared/errors.js\";\n\nexport interface IListTeamsErrors {\n notAuthorized: NotAuthorizedError;\n}\n\ntype ListTeamsError = IListTeamsErrors[keyof IListTeamsErrors] | TeamsRepository.Error;\n\nexport interface IListTeams {\n execute(params?: ListTeamsInput): Promise<Result<Team[], ListTeamsError>>;\n}\n\nexport const ListTeamsUseCase = createAbstraction<IListTeams>(\"ListTeamsUseCase\");\n\nexport namespace ListTeamsUseCase {\n export type Interface = IListTeams;\n export type Error = ListTeamsError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAgBvD,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAa,kBAAkB,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["createAbstraction","ListTeamsUseCase"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\nimport { Result } from \"@webiny/feature/api\";\nimport type { Team, ListTeamsInput } from \"../shared/types.js\";\nimport { TeamsRepository } from \"../shared/abstractions.js\";\nimport { NotAuthorizedError } from \"../shared/errors.js\";\n\nexport interface IListTeamsErrors {\n notAuthorized: NotAuthorizedError;\n}\n\ntype ListTeamsError = IListTeamsErrors[keyof IListTeamsErrors] | TeamsRepository.Error;\n\nexport interface IListTeams {\n execute(params?: ListTeamsInput): Promise<Result<Team[], ListTeamsError>>;\n}\n\n/** List all teams. */\nexport const ListTeamsUseCase = createAbstraction<IListTeams>(\"ListTeamsUseCase\");\n\nexport namespace ListTeamsUseCase {\n export type Interface = IListTeams;\n export type Error = ListTeamsError;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAgBvD;AACA,OAAO,MAAMC,gBAAgB,GAAGD,iBAAiB,CAAa,kBAAkB,CAAC","ignoreList":[]}
|
|
@@ -20,7 +20,7 @@ export class UpdateTeamUseCase {
|
|
|
20
20
|
}
|
|
21
21
|
const validation = updateTeamValidation.safeParse(input);
|
|
22
22
|
if (!validation.success) {
|
|
23
|
-
return Result.fail(new TeamValidationError(validation.error.
|
|
23
|
+
return Result.fail(new TeamValidationError(validation.error.issues[0].message));
|
|
24
24
|
}
|
|
25
25
|
const existingResult = await this.repository.get({
|
|
26
26
|
id
|