@webiny/api-core 6.4.11 → 6.6.0-alpha.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/ApiCoreFeature.d.ts +2 -2
- package/ApiCoreFeature.js +29 -5
- package/ApiCoreFeature.js.map +1 -1
- package/exports/api/security/api-key.d.ts +1 -0
- package/exports/api/security/api-key.js +1 -0
- package/exports/api.d.ts +3 -1
- package/exports/api.js +2 -1
- package/features/ai/Ai.d.ts +3 -3
- package/features/ai/Ai.js +60 -23
- package/features/ai/Ai.js.map +1 -1
- package/features/ai/AnthropicSdkFactory.js +12 -0
- package/features/ai/AnthropicSdkFactory.js.map +1 -1
- package/features/ai/OpenAiSdkFactory.js +16 -0
- package/features/ai/OpenAiSdkFactory.js.map +1 -1
- package/features/ai/TextExtractor/DefaultTextExtractor.d.ts +9 -0
- package/features/ai/TextExtractor/DefaultTextExtractor.js +28 -0
- package/features/ai/TextExtractor/DefaultTextExtractor.js.map +1 -0
- package/features/ai/TextExtractor/abstractions.d.ts +12 -0
- package/features/ai/TextExtractor/abstractions.js +5 -0
- package/features/ai/TextExtractor/abstractions.js.map +1 -0
- package/features/ai/TextExtractor/index.d.ts +3 -0
- package/features/ai/TextExtractor/index.js +2 -0
- package/features/ai/TextExtractor/parsers/docxParser.d.ts +1 -0
- package/features/ai/TextExtractor/parsers/docxParser.js +111 -0
- package/features/ai/TextExtractor/parsers/docxParser.js.map +1 -0
- package/features/ai/abstractions.d.ts +18 -7
- package/features/ai/abstractions.js +1 -2
- package/features/ai/abstractions.js.map +1 -1
- package/features/ai/events.d.ts +59 -0
- package/features/ai/events.js +41 -0
- package/features/ai/events.js.map +1 -0
- package/features/ai/feature.js +6 -2
- package/features/ai/feature.js.map +1 -1
- package/features/ai/index.d.ts +8 -2
- package/features/ai/index.js +4 -1
- package/features/ai/toolPipeline/AiOutputToolRegistry.d.ts +11 -0
- package/features/ai/toolPipeline/AiOutputToolRegistry.js +31 -0
- package/features/ai/toolPipeline/AiOutputToolRegistry.js.map +1 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.d.ts +10 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.js +36 -0
- package/features/ai/toolPipeline/AiToolPipelineRunner.js.map +1 -0
- package/features/ai/toolPipeline/abstractions.d.ts +23 -0
- package/features/ai/toolPipeline/abstractions.js +7 -0
- package/features/ai/toolPipeline/abstractions.js.map +1 -0
- package/features/ai/toolPipeline/index.d.ts +2 -0
- package/features/ai/toolPipeline/index.js +1 -0
- package/features/dateFormatter/DefaultDateFormatter.d.ts +15 -0
- package/features/dateFormatter/DefaultDateFormatter.js +20 -0
- package/features/dateFormatter/DefaultDateFormatter.js.map +1 -0
- package/features/dateFormatter/abstractions.d.ts +13 -0
- package/features/dateFormatter/abstractions.js +5 -0
- package/features/dateFormatter/abstractions.js.map +1 -0
- package/features/dateFormatter/feature.d.ts +4 -0
- package/features/dateFormatter/feature.js +11 -0
- package/features/dateFormatter/feature.js.map +1 -0
- package/features/dateFormatter/index.d.ts +3 -0
- package/features/dateFormatter/index.js +2 -0
- package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.d.ts +13 -0
- package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.js +49 -0
- package/features/featureFlags/decorators/FeatureFlagsWithLicenseDecorator.js.map +1 -0
- package/features/hashing/ScryptHasher.d.ts +11 -0
- package/features/hashing/ScryptHasher.js +74 -0
- package/features/hashing/ScryptHasher.js.map +1 -0
- package/features/hashing/abstractions.d.ts +18 -0
- package/features/hashing/abstractions.js +5 -0
- package/features/hashing/abstractions.js.map +1 -0
- package/features/hashing/feature.d.ts +4 -0
- package/features/hashing/feature.js +11 -0
- package/features/hashing/feature.js.map +1 -0
- package/features/hashing/index.d.ts +2 -0
- package/features/hashing/index.js +1 -0
- package/features/requestContext/RawAuthToken.d.ts +14 -0
- package/features/requestContext/RawAuthToken.js +19 -0
- package/features/requestContext/RawAuthToken.js.map +1 -0
- package/features/requestContext/RawTenantId.d.ts +14 -0
- package/features/requestContext/RawTenantId.js +19 -0
- package/features/requestContext/RawTenantId.js.map +1 -0
- package/features/requestContext/RequestIdentityLoader.d.ts +19 -0
- package/features/requestContext/RequestIdentityLoader.js +26 -0
- package/features/requestContext/RequestIdentityLoader.js.map +1 -0
- package/features/requestContext/RequestTenantLoader.d.ts +18 -0
- package/features/requestContext/RequestTenantLoader.js +52 -0
- package/features/requestContext/RequestTenantLoader.js.map +1 -0
- package/features/requestContext/abstractions.d.ts +53 -0
- package/features/requestContext/abstractions.js +8 -0
- package/features/requestContext/abstractions.js.map +1 -0
- package/features/requestContext/feature.d.ts +11 -0
- package/features/requestContext/feature.js +17 -0
- package/features/requestContext/feature.js.map +1 -0
- package/features/requestContext/index.d.ts +2 -0
- package/features/requestContext/index.js +2 -0
- package/features/security/IdentityContext/IdentityContext.d.ts +3 -3
- package/features/security/IdentityContext/IdentityContext.js +6 -6
- package/features/security/IdentityContext/IdentityContext.js.map +1 -1
- package/features/security/apiKeys/ApiKeyAuthenticator.d.ts +14 -0
- package/features/security/apiKeys/ApiKeyAuthenticator.js +36 -0
- package/features/security/apiKeys/ApiKeyAuthenticator.js.map +1 -0
- package/features/security/apiKeys/ApiKeyAuthorizer.d.ts +10 -0
- package/features/security/apiKeys/ApiKeyAuthorizer.js +15 -0
- package/features/security/apiKeys/ApiKeyAuthorizer.js.map +1 -0
- package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js +11 -6
- package/features/security/apiKeys/CreateApiKey/CreateApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.d.ts +1 -1
- package/features/security/apiKeys/GetApiKey/GetApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.d.ts +1 -3
- package/features/security/apiKeys/GetApiKeyBySlug/GetApiKeyBySlugUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.d.ts +1 -1
- package/features/security/apiKeys/GetApiKeyBySlug/abstractions.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.d.ts +1 -3
- package/features/security/apiKeys/GetApiKeyByToken/GetApiKeyByTokenUseCase.js.map +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.d.ts +1 -1
- package/features/security/apiKeys/GetApiKeyByToken/abstractions.js.map +1 -1
- package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js +9 -3
- package/features/security/apiKeys/UpdateApiKey/UpdateApiKeyUseCase.js.map +1 -1
- package/features/security/apiKeys/feature.js +11 -2
- package/features/security/apiKeys/feature.js.map +1 -1
- package/features/security/apiKeys/shared/ApiKeyProvider.d.ts +3 -5
- package/features/security/apiKeys/shared/ApiKeyProvider.js +6 -21
- package/features/security/apiKeys/shared/ApiKeyProvider.js.map +1 -1
- package/features/security/apiKeys/shared/ApiKeysRepository.d.ts +1 -0
- package/features/security/apiKeys/shared/ApiKeysRepository.js +19 -4
- package/features/security/apiKeys/shared/ApiKeysRepository.js.map +1 -1
- package/features/security/apiKeys/shared/generateToken.d.ts +1 -1
- package/features/security/apiKeys/shared/generateToken.js.map +1 -1
- package/features/security/apiKeys/shared/schemas.d.ts +2 -2
- package/features/security/apiKeys/shared/schemas.js +2 -2
- package/features/security/apiKeys/shared/schemas.js.map +1 -1
- package/features/security/apiKeys/shared/types.d.ts +1 -1
- package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.d.ts +4 -4
- package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js +5 -5
- package/features/security/authorization/GroupsTeamsAuthorizer/GetPermissionsFromIdentity.js.map +1 -1
- package/features/security/roles/CreateRole/CreateRoleUseCase.js +11 -6
- package/features/security/roles/CreateRole/CreateRoleUseCase.js.map +1 -1
- package/features/security/roles/CreateRole/schema.d.ts +1 -1
- package/features/security/roles/CreateRole/schema.js +1 -1
- package/features/security/roles/CreateRole/schema.js.map +1 -1
- package/features/security/roles/Installer/RolesInstaller.js +0 -1
- package/features/security/roles/Installer/RolesInstaller.js.map +1 -1
- package/features/security/roles/UpdateRole/UpdateRoleUseCase.js +9 -3
- package/features/security/roles/UpdateRole/UpdateRoleUseCase.js.map +1 -1
- package/features/security/roles/UpdateRole/schema.d.ts +1 -1
- package/features/security/roles/UpdateRole/schema.js +1 -1
- package/features/security/roles/UpdateRole/schema.js.map +1 -1
- package/features/security/shared/description.d.ts +4 -0
- package/features/security/shared/description.js +7 -0
- package/features/security/shared/description.js.map +1 -0
- package/features/security/shared/index.d.ts +1 -0
- package/features/security/shared/index.js +1 -0
- package/features/security/teams/CreateTeam/CreateTeamUseCase.d.ts +3 -1
- package/features/security/teams/CreateTeam/CreateTeamUseCase.js +20 -8
- package/features/security/teams/CreateTeam/CreateTeamUseCase.js.map +1 -1
- package/features/security/teams/CreateTeam/schema.d.ts +1 -1
- package/features/security/teams/CreateTeam/schema.js +1 -1
- package/features/security/teams/CreateTeam/schema.js.map +1 -1
- package/features/security/teams/UpdateTeam/UpdateTeamUseCase.d.ts +3 -1
- package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js +20 -5
- package/features/security/teams/UpdateTeam/UpdateTeamUseCase.js.map +1 -1
- package/features/security/teams/UpdateTeam/schema.d.ts +1 -1
- package/features/security/teams/UpdateTeam/schema.js +1 -1
- package/features/security/teams/UpdateTeam/schema.js.map +1 -1
- package/features/security/teams/shared/resolveRoleIdentifiers.d.ts +17 -0
- package/features/security/teams/shared/resolveRoleIdentifiers.js +32 -0
- package/features/security/teams/shared/resolveRoleIdentifiers.js.map +1 -0
- package/features/security/utils/getPermissionsFromRoles.d.ts +1 -1
- package/features/serviceDiscovery/ServiceDiscovery.d.ts +17 -0
- package/features/serviceDiscovery/ServiceDiscovery.js +22 -0
- package/features/serviceDiscovery/ServiceDiscovery.js.map +1 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.d.ts +1 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js +111 -0
- package/features/serviceDiscovery/__tests__/ServiceDiscovery.test.js.map +1 -0
- package/features/serviceDiscovery/index.d.ts +3 -0
- package/features/serviceDiscovery/index.js +1 -0
- package/features/slugify/DefaultSlugify.d.ts +8 -0
- package/features/slugify/DefaultSlugify.js +20 -0
- package/features/slugify/DefaultSlugify.js.map +1 -0
- package/features/slugify/abstractions.d.ts +12 -0
- package/features/slugify/abstractions.js +5 -0
- package/features/slugify/abstractions.js.map +1 -0
- package/features/slugify/feature.d.ts +4 -0
- package/features/slugify/feature.js +11 -0
- package/features/slugify/feature.js.map +1 -0
- package/features/slugify/index.d.ts +3 -0
- package/features/slugify/index.js +2 -0
- package/features/storageOperations/abstractions.d.ts +21 -0
- package/features/storageOperations/abstractions.js +10 -0
- package/features/storageOperations/abstractions.js.map +1 -0
- package/features/stringFormatter/DefaultStringFormatter.d.ts +17 -0
- package/features/stringFormatter/DefaultStringFormatter.js +19 -0
- package/features/stringFormatter/DefaultStringFormatter.js.map +1 -0
- package/features/stringFormatter/abstractions.d.ts +11 -0
- package/features/stringFormatter/abstractions.js +5 -0
- package/features/stringFormatter/abstractions.js.map +1 -0
- package/features/stringFormatter/feature.d.ts +4 -0
- package/features/stringFormatter/feature.js +13 -0
- package/features/stringFormatter/feature.js.map +1 -0
- package/features/stringFormatter/index.d.ts +3 -0
- package/features/stringFormatter/index.js +2 -0
- package/features/task/TaskDefinition/abstractions.d.ts +76 -4
- package/features/task/TaskDefinition/abstractions.js +2 -1
- package/features/task/TaskDefinition/abstractions.js.map +1 -1
- package/features/tenancy/CreateTenant/CreateTenantUseCase.d.ts +1 -1
- package/features/tenancy/InstallTenant/InstallTenantUseCase.d.ts +1 -1
- package/features/tenancy/UpdateTenant/UpdateTenantUseCase.d.ts +2 -2
- package/features/users/CreateUser/decorators/CreateUserWithWcpIncrement.d.ts +1 -1
- package/features/wcp/WcpContext/WcpContext.d.ts +10 -5
- package/features/wcp/WcpContext/WcpContext.js +23 -2
- package/features/wcp/WcpContext/WcpContext.js.map +1 -1
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.d.ts +25 -7
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js +57 -25
- package/features/wcp/WcpContext/decorators/WcpContextWithFeatureFlagsDecorator.js.map +1 -1
- package/features/wcp/WcpContext/feature.d.ts +1 -2
- package/features/wcp/WcpContext/feature.js +2 -2
- package/features/wcp/WcpContext/feature.js.map +1 -1
- package/features/wcp/WcpContext/index.d.ts +0 -1
- package/features/wcp/WcpContext/types.d.ts +0 -4
- package/features/wcp/WcpFeature.d.ts +1 -1
- package/features/wcp/WcpFeature.js +7 -2
- package/features/wcp/WcpFeature.js.map +1 -1
- package/features/wcp/WcpLicenseLoader.d.ts +25 -0
- package/features/wcp/WcpLicenseLoader.js +58 -0
- package/features/wcp/WcpLicenseLoader.js.map +1 -0
- package/features/wcp/WcpLicenseProvider.d.ts +21 -0
- package/features/wcp/WcpLicenseProvider.js +14 -0
- package/features/wcp/WcpLicenseProvider.js.map +1 -0
- package/features/wcp/resolveWcpProjectEnvironment.d.ts +9 -0
- package/features/wcp/resolveWcpProjectEnvironment.js +23 -0
- package/features/wcp/resolveWcpProjectEnvironment.js.map +1 -0
- package/graphql/ApiCoreSchemaFactory.d.ts +15 -0
- package/graphql/ApiCoreSchemaFactory.js +52 -0
- package/graphql/ApiCoreSchemaFactory.js.map +1 -0
- package/graphql/featureFlags/FeatureFlagsSchemaFactory.d.ts +9 -0
- package/graphql/featureFlags/FeatureFlagsSchemaFactory.js +49 -0
- package/graphql/featureFlags/FeatureFlagsSchemaFactory.js.map +1 -0
- package/graphql/security/NotAuthorizedResponse.d.ts +1 -1
- package/graphql/security/NotAuthorizedResponse.js +1 -1
- package/graphql/security/NotAuthorizedResponse.js.map +1 -1
- package/graphql/security/SecuritySchemaFactory.d.ts +14 -0
- package/graphql/security/SecuritySchemaFactory.js +23 -0
- package/graphql/security/SecuritySchemaFactory.js.map +1 -0
- package/graphql/security/addApiKeySchema.d.ts +2 -0
- package/graphql/security/{apiKey.gql.js → addApiKeySchema.js} +45 -27
- package/graphql/security/addApiKeySchema.js.map +1 -0
- package/graphql/security/addIdentitySchema.d.ts +2 -0
- package/graphql/security/{identity.gql.js → addIdentitySchema.js} +52 -35
- package/graphql/security/addIdentitySchema.js.map +1 -0
- package/graphql/security/addRoleSchema.d.ts +2 -0
- package/graphql/security/addRoleSchema.js +137 -0
- package/graphql/security/addRoleSchema.js.map +1 -0
- package/graphql/security/addSecurityBaseSchema.d.ts +2 -0
- package/graphql/security/{base.gql.js → addSecurityBaseSchema.js} +14 -16
- package/graphql/security/addSecurityBaseSchema.js.map +1 -0
- package/graphql/security/addTeamSchema.d.ts +2 -0
- package/graphql/security/addTeamSchema.js +157 -0
- package/graphql/security/addTeamSchema.js.map +1 -0
- package/graphql/system/SystemSchemaFactory.d.ts +9 -0
- package/graphql/system/SystemSchemaFactory.js +66 -0
- package/graphql/system/SystemSchemaFactory.js.map +1 -0
- package/graphql/users/UsersSchemaFactory.d.ts +9 -0
- package/graphql/users/UsersSchemaFactory.js +191 -0
- package/graphql/users/UsersSchemaFactory.js.map +1 -0
- package/graphql/wcp/WcpSchemaFactory.d.ts +9 -0
- package/graphql/wcp/{graphql.js → WcpSchemaFactory.js} +28 -18
- package/graphql/wcp/WcpSchemaFactory.js.map +1 -0
- package/index.d.ts +3 -1
- package/index.js +3 -1
- package/package.json +21 -24
- package/testing/environment.d.ts +14 -0
- package/testing/environment.js +18 -0
- package/testing/environment.js.map +1 -0
- package/types/core.d.ts +17 -5
- package/types/security.d.ts +1 -7
- package/types/tenancy.d.ts +0 -17
- package/types/users.d.ts +0 -13
- package/createApiCore.d.ts +0 -7
- package/createApiCore.js +0 -22
- package/createApiCore.js.map +0 -1
- package/features/ai/AiModelRegistry.d.ts +0 -12
- package/features/ai/AiModelRegistry.js +0 -28
- package/features/ai/AiModelRegistry.js.map +0 -1
- package/graphql/security/apiKey.gql.d.ts +0 -4
- package/graphql/security/apiKey.gql.js.map +0 -1
- package/graphql/security/base.gql.d.ts +0 -4
- package/graphql/security/base.gql.js.map +0 -1
- package/graphql/security/identity.gql.d.ts +0 -4
- package/graphql/security/identity.gql.js.map +0 -1
- package/graphql/security/index.d.ts +0 -1
- package/graphql/security/index.js +0 -15
- package/graphql/security/index.js.map +0 -1
- package/graphql/security/role.gql.d.ts +0 -4
- package/graphql/security/role.gql.js +0 -106
- package/graphql/security/role.gql.js.map +0 -1
- package/graphql/security/team.gql.d.ts +0 -4
- package/graphql/security/team.gql.js +0 -119
- package/graphql/security/team.gql.js.map +0 -1
- package/graphql/system/createSystemGraphQL.d.ts +0 -2
- package/graphql/system/createSystemGraphQL.js +0 -54
- package/graphql/system/createSystemGraphQL.js.map +0 -1
- package/graphql/users/user.gql.d.ts +0 -3
- package/graphql/users/user.gql.js +0 -167
- package/graphql/users/user.gql.js.map +0 -1
- package/graphql/wcp/graphql.d.ts +0 -2
- package/graphql/wcp/graphql.js.map +0 -1
- package/legacy/security/LegacyContext.d.ts +0 -36
- package/legacy/security/LegacyContext.js +0 -152
- package/legacy/security/LegacyContext.js.map +0 -1
- package/legacy/security/createSecurityContext.d.ts +0 -3
- package/legacy/security/createSecurityContext.js +0 -10
- package/legacy/security/createSecurityContext.js.map +0 -1
- package/legacy/security/plugins/apiKeyAuthentication.d.ts +0 -7
- package/legacy/security/plugins/apiKeyAuthentication.js +0 -20
- package/legacy/security/plugins/apiKeyAuthentication.js.map +0 -1
- package/legacy/security/plugins/apiKeyAuthorization.d.ts +0 -6
- package/legacy/security/plugins/apiKeyAuthorization.js +0 -13
- package/legacy/security/plugins/apiKeyAuthorization.js.map +0 -1
- package/legacy/security/plugins/authenticateUsingCookie.d.ts +0 -5
- package/legacy/security/plugins/authenticateUsingCookie.js +0 -23
- package/legacy/security/plugins/authenticateUsingCookie.js.map +0 -1
- package/legacy/security/plugins/authenticateUsingHttpHeader.d.ts +0 -5
- package/legacy/security/plugins/authenticateUsingHttpHeader.js +0 -20
- package/legacy/security/plugins/authenticateUsingHttpHeader.js.map +0 -1
- package/legacy/security/plugins/secureHeaders.d.ts +0 -1
- package/legacy/security/plugins/secureHeaders.js +0 -30
- package/legacy/security/plugins/secureHeaders.js.map +0 -1
- package/legacy/tenancy/LegacyContext.d.ts +0 -15
- package/legacy/tenancy/LegacyContext.js +0 -57
- package/legacy/tenancy/LegacyContext.js.map +0 -1
- package/legacy/tenancy/createTenancyContext.d.ts +0 -3
- package/legacy/tenancy/createTenancyContext.js +0 -31
- package/legacy/tenancy/createTenancyContext.js.map +0 -1
- package/legacy/users/LegacyContext.d.ts +0 -13
- package/legacy/users/LegacyContext.js +0 -55
- package/legacy/users/LegacyContext.js.map +0 -1
- package/legacy/users/createAdminUsersContext.d.ts +0 -3
- package/legacy/users/createAdminUsersContext.js +0 -12
- package/legacy/users/createAdminUsersContext.js.map +0 -1
- package/legacy/wcp/LegacyWcpContext.d.ts +0 -33
- package/legacy/wcp/LegacyWcpContext.js +0 -84
- package/legacy/wcp/LegacyWcpContext.js.map +0 -1
- package/legacy/wcp/context.d.ts +0 -5
- package/legacy/wcp/context.js +0 -46
- package/legacy/wcp/context.js.map +0 -1
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
|
+
import { ErrorResponse, Response } from "@webiny/api-graphql/responses.js";
|
|
3
|
+
import { FeatureFlags } from "../../features/featureFlags/abstractions.js";
|
|
4
|
+
class FeatureFlagsSchemaFactoryImpl {
|
|
5
|
+
async execute(builder) {
|
|
6
|
+
builder.addTypeDefs(`
|
|
7
|
+
type FeatureFlagsError {
|
|
8
|
+
code: String
|
|
9
|
+
message: String
|
|
10
|
+
data: JSON
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
type FeatureFlagsResponse {
|
|
14
|
+
data: JSON
|
|
15
|
+
error: FeatureFlagsError
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
extend type Query {
|
|
19
|
+
featureFlags: FeatureFlagsResponse
|
|
20
|
+
}
|
|
21
|
+
`);
|
|
22
|
+
builder.addResolver({
|
|
23
|
+
path: "Query.featureFlags",
|
|
24
|
+
dependencies: [
|
|
25
|
+
FeatureFlags
|
|
26
|
+
],
|
|
27
|
+
resolver: (featureFlags)=>async ()=>{
|
|
28
|
+
try {
|
|
29
|
+
return new Response(featureFlags.get().toDto());
|
|
30
|
+
} catch (e) {
|
|
31
|
+
return new ErrorResponse({
|
|
32
|
+
code: "COULD_NOT_GET_FEATURE_FLAGS",
|
|
33
|
+
message: e.message,
|
|
34
|
+
data: null,
|
|
35
|
+
stack: e.stack
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return builder;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const FeatureFlagsSchemaFactory = CoreGraphQLSchemaFactory.createImplementation({
|
|
44
|
+
implementation: FeatureFlagsSchemaFactoryImpl,
|
|
45
|
+
dependencies: []
|
|
46
|
+
});
|
|
47
|
+
export { FeatureFlagsSchemaFactory };
|
|
48
|
+
|
|
49
|
+
//# sourceMappingURL=FeatureFlagsSchemaFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/featureFlags/FeatureFlagsSchemaFactory.js","sources":["../../../src/graphql/featureFlags/FeatureFlagsSchemaFactory.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\nimport { ErrorResponse, Response } from \"@webiny/api-graphql/responses.js\";\nimport { FeatureFlags } from \"~/features/featureFlags/abstractions.js\";\n\nclass FeatureFlagsSchemaFactoryImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(builder: IGraphQLSchemaBuilder): Promise<IGraphQLSchemaBuilder> {\n builder.addTypeDefs(/* GraphQL */ `\n type FeatureFlagsError {\n code: String\n message: String\n data: JSON\n }\n\n type FeatureFlagsResponse {\n data: JSON\n error: FeatureFlagsError\n }\n\n extend type Query {\n featureFlags: FeatureFlagsResponse\n }\n `);\n\n builder.addResolver({\n path: \"Query.featureFlags\",\n dependencies: [FeatureFlags],\n resolver: (featureFlags: FeatureFlags.Interface) => async () => {\n try {\n return new Response(featureFlags.get().toDto());\n } catch (e) {\n return new ErrorResponse({\n code: \"COULD_NOT_GET_FEATURE_FLAGS\",\n message: e.message,\n data: null,\n stack: e.stack\n });\n }\n }\n });\n\n return builder;\n }\n}\n\nexport const FeatureFlagsSchemaFactory = CoreGraphQLSchemaFactory.createImplementation({\n implementation: FeatureFlagsSchemaFactoryImpl,\n dependencies: []\n});\n"],"names":["FeatureFlagsSchemaFactoryImpl","builder","FeatureFlags","featureFlags","Response","e","ErrorResponse","FeatureFlagsSchemaFactory","CoreGraphQLSchemaFactory"],"mappings":";;;AAKA,MAAMA;IACF,MAAM,QAAQC,OAA8B,EAAkC;QAC1EA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;QAenC,CAAC;QAEDA,QAAQ,WAAW,CAAC;YAChB,MAAM;YACN,cAAc;gBAACC;aAAa;YAC5B,UAAU,CAACC,eAAyC;oBAChD,IAAI;wBACA,OAAO,IAAIC,SAASD,aAAa,GAAG,GAAG,KAAK;oBAChD,EAAE,OAAOE,GAAG;wBACR,OAAO,IAAIC,cAAc;4BACrB,MAAM;4BACN,SAASD,EAAE,OAAO;4BAClB,MAAM;4BACN,OAAOA,EAAE,KAAK;wBAClB;oBACJ;gBACJ;QACJ;QAEA,OAAOJ;IACX;AACJ;AAEO,MAAMM,4BAA4BC,yBAAyB,oBAAoB,CAAC;IACnF,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphql/security/NotAuthorizedResponse.js","sources":["../../../src/graphql/security/NotAuthorizedResponse.ts"],"sourcesContent":["import { ErrorResponse } from \"@webiny/
|
|
1
|
+
{"version":3,"file":"graphql/security/NotAuthorizedResponse.js","sources":["../../../src/graphql/security/NotAuthorizedResponse.ts"],"sourcesContent":["import { ErrorResponse } from \"@webiny/api-graphql/responses.js\";\n\ninterface NotAuthorizedResponseArgsType {\n message: string;\n code: string | null;\n data: any | null;\n}\n\n/** GraphQL not-authorized response helper. */\nexport class NotAuthorizedResponse extends ErrorResponse {\n constructor({ message, code, data }: Partial<NotAuthorizedResponseArgsType> = {}) {\n super({\n message: message || \"Not authorized!\",\n code: code || \"SECURITY_NOT_AUTHORIZED\",\n data\n });\n }\n}\n\nexport default NotAuthorizedResponse;\n"],"names":["NotAuthorizedResponse","ErrorResponse","message","code","data"],"mappings":";AASO,MAAMA,8BAA8BC;IACvC,YAAY,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAA0C,GAAG,CAAC,CAAC,CAAE;QAC9E,KAAK,CAAC;YACF,SAASF,WAAW;YACpB,MAAMC,QAAQ;YACdC;QACJ;IACJ;AACJ;AAEA,uCAAeJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
|
+
import type { IGraphQLSchemaBuilder } from "@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js";
|
|
3
|
+
/**
|
|
4
|
+
* The security schema is one cohesive domain (it shares the SecurityQuery / SecurityMutation /
|
|
5
|
+
* SecurityError / SecurityBooleanResponse base types), composed of five internal parts:
|
|
6
|
+
* base, team, apiKey, role, identity.
|
|
7
|
+
*/
|
|
8
|
+
declare class SecuritySchemaFactoryImpl implements CoreGraphQLSchemaFactory.Interface {
|
|
9
|
+
execute(builder: IGraphQLSchemaBuilder): Promise<IGraphQLSchemaBuilder>;
|
|
10
|
+
}
|
|
11
|
+
export declare const SecuritySchemaFactory: typeof SecuritySchemaFactoryImpl & {
|
|
12
|
+
__abstraction: import("@webiny/di").Abstraction<import("@webiny/api-graphql/graphql/abstractions.core.js").ICoreGraphQLSchemaFactory>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CoreGraphQLSchemaFactory } from "@webiny/api-graphql/graphql/abstractions.js";
|
|
2
|
+
import { addSecurityBaseSchema } from "./addSecurityBaseSchema.js";
|
|
3
|
+
import { addApiKeySchema } from "./addApiKeySchema.js";
|
|
4
|
+
import { addRoleSchema } from "./addRoleSchema.js";
|
|
5
|
+
import { addTeamSchema } from "./addTeamSchema.js";
|
|
6
|
+
import { addIdentitySchema } from "./addIdentitySchema.js";
|
|
7
|
+
class SecuritySchemaFactoryImpl {
|
|
8
|
+
async execute(builder) {
|
|
9
|
+
addSecurityBaseSchema(builder);
|
|
10
|
+
addTeamSchema(builder);
|
|
11
|
+
addApiKeySchema(builder);
|
|
12
|
+
addRoleSchema(builder);
|
|
13
|
+
addIdentitySchema(builder);
|
|
14
|
+
return builder;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const SecuritySchemaFactory = CoreGraphQLSchemaFactory.createImplementation({
|
|
18
|
+
implementation: SecuritySchemaFactoryImpl,
|
|
19
|
+
dependencies: []
|
|
20
|
+
});
|
|
21
|
+
export { SecuritySchemaFactory };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=SecuritySchemaFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/security/SecuritySchemaFactory.js","sources":["../../../src/graphql/security/SecuritySchemaFactory.ts"],"sourcesContent":["import { CoreGraphQLSchemaFactory } from \"@webiny/api-graphql/graphql/abstractions.js\";\nimport type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\nimport { addSecurityBaseSchema } from \"./addSecurityBaseSchema.js\";\nimport { addApiKeySchema } from \"./addApiKeySchema.js\";\nimport { addRoleSchema } from \"./addRoleSchema.js\";\nimport { addTeamSchema } from \"./addTeamSchema.js\";\nimport { addIdentitySchema } from \"./addIdentitySchema.js\";\n\n/**\n * The security schema is one cohesive domain (it shares the SecurityQuery / SecurityMutation /\n * SecurityError / SecurityBooleanResponse base types), composed of five internal parts:\n * base, team, apiKey, role, identity.\n */\nclass SecuritySchemaFactoryImpl implements CoreGraphQLSchemaFactory.Interface {\n async execute(builder: IGraphQLSchemaBuilder): Promise<IGraphQLSchemaBuilder> {\n addSecurityBaseSchema(builder);\n addTeamSchema(builder);\n addApiKeySchema(builder);\n addRoleSchema(builder);\n addIdentitySchema(builder);\n\n return builder;\n }\n}\n\nexport const SecuritySchemaFactory = CoreGraphQLSchemaFactory.createImplementation({\n implementation: SecuritySchemaFactoryImpl,\n dependencies: []\n});\n"],"names":["SecuritySchemaFactoryImpl","builder","addSecurityBaseSchema","addTeamSchema","addApiKeySchema","addRoleSchema","addIdentitySchema","SecuritySchemaFactory","CoreGraphQLSchemaFactory"],"mappings":";;;;;;AAaA,MAAMA;IACF,MAAM,QAAQC,OAA8B,EAAkC;QAC1EC,sBAAsBD;QACtBE,cAAcF;QACdG,gBAAgBH;QAChBI,cAAcJ;QACdK,kBAAkBL;QAElB,OAAOA;IACX;AACJ;AAEO,MAAMM,wBAAwBC,yBAAyB,oBAAoB,CAAC;IAC/E,gBAAgBR;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { ErrorResponse, Response } from "@webiny/
|
|
2
|
-
import { GraphQLSchemaPlugin } from "@webiny/handler-graphql/plugins/GraphQLSchemaPlugin.js";
|
|
1
|
+
import { ErrorResponse, Response } from "@webiny/api-graphql/responses.js";
|
|
3
2
|
import { CreateApiKeyUseCase } from "../../features/security/apiKeys/CreateApiKey/index.js";
|
|
4
3
|
import { UpdateApiKeyUseCase } from "../../features/security/apiKeys/UpdateApiKey/index.js";
|
|
5
4
|
import { DeleteApiKeyUseCase } from "../../features/security/apiKeys/DeleteApiKey/index.js";
|
|
6
5
|
import { ListApiKeysUseCase } from "../../features/security/apiKeys/ListApiKeys/index.js";
|
|
7
6
|
import { GetApiKeyUseCase } from "../../features/security/apiKeys/GetApiKey/index.js";
|
|
8
|
-
const
|
|
9
|
-
|
|
7
|
+
const addApiKeySchema = (builder)=>{
|
|
8
|
+
builder.addTypeDefs(`
|
|
10
9
|
type SecurityApiKey {
|
|
11
10
|
id: ID
|
|
12
11
|
name: String
|
|
@@ -47,44 +46,63 @@ const apiKey_gql = new GraphQLSchemaPlugin({
|
|
|
47
46
|
updateApiKey(id: ID!, data: SecurityApiKeyInput!): SecurityApiKeyResponse
|
|
48
47
|
deleteApiKey(id: ID!): SecurityBooleanResponse
|
|
49
48
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
`);
|
|
50
|
+
builder.addResolver({
|
|
51
|
+
path: "SecurityQuery.listApiKeys",
|
|
52
|
+
dependencies: [
|
|
53
|
+
ListApiKeysUseCase
|
|
54
|
+
],
|
|
55
|
+
resolver: (list)=>async ()=>{
|
|
55
56
|
const result = await list.execute();
|
|
56
57
|
if (result.isOk()) return new Response(result.value);
|
|
57
58
|
return new ErrorResponse(result.error);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
builder.addResolver({
|
|
62
|
+
path: "SecurityQuery.getApiKey",
|
|
63
|
+
dependencies: [
|
|
64
|
+
GetApiKeyUseCase
|
|
65
|
+
],
|
|
66
|
+
resolver: (getById)=>async ({ args })=>{
|
|
61
67
|
const result = await getById.execute(args.id);
|
|
62
68
|
if (result.isOk()) return new Response(result.value);
|
|
63
69
|
return new ErrorResponse(result.error);
|
|
64
70
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
71
|
+
});
|
|
72
|
+
builder.addResolver({
|
|
73
|
+
path: "SecurityMutation.createApiKey",
|
|
74
|
+
dependencies: [
|
|
75
|
+
CreateApiKeyUseCase
|
|
76
|
+
],
|
|
77
|
+
resolver: (createApiKey)=>async ({ args })=>{
|
|
69
78
|
const result = await createApiKey.execute(args.data);
|
|
70
79
|
if (result.isOk()) return new Response(result.value);
|
|
71
80
|
return new ErrorResponse(result.error);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
builder.addResolver({
|
|
84
|
+
path: "SecurityMutation.updateApiKey",
|
|
85
|
+
dependencies: [
|
|
86
|
+
UpdateApiKeyUseCase
|
|
87
|
+
],
|
|
88
|
+
resolver: (updateApiKey)=>async ({ args })=>{
|
|
75
89
|
const result = await updateApiKey.execute(args.id, args.data);
|
|
76
90
|
if (result.isOk()) return new Response(result.value);
|
|
77
91
|
return new ErrorResponse(result.error);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
builder.addResolver({
|
|
95
|
+
path: "SecurityMutation.deleteApiKey",
|
|
96
|
+
dependencies: [
|
|
97
|
+
DeleteApiKeyUseCase
|
|
98
|
+
],
|
|
99
|
+
resolver: (deleteApiKey)=>async ({ args })=>{
|
|
81
100
|
const result = await deleteApiKey.execute(args.id);
|
|
82
101
|
if (result.isOk()) return new Response(true);
|
|
83
102
|
return new ErrorResponse(result.error);
|
|
84
103
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
export default apiKey_gql;
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
export { addApiKeySchema };
|
|
89
107
|
|
|
90
|
-
//# sourceMappingURL=
|
|
108
|
+
//# sourceMappingURL=addApiKeySchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/security/addApiKeySchema.js","sources":["../../../src/graphql/security/addApiKeySchema.ts"],"sourcesContent":["import { Response, ErrorResponse } from \"@webiny/api-graphql/responses.js\";\nimport type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\nimport { CreateApiKeyUseCase } from \"~/features/security/apiKeys/CreateApiKey/index.js\";\nimport { UpdateApiKeyUseCase } from \"~/features/security/apiKeys/UpdateApiKey/index.js\";\nimport { DeleteApiKeyUseCase } from \"~/features/security/apiKeys/DeleteApiKey/index.js\";\nimport { ListApiKeysUseCase } from \"~/features/security/apiKeys/ListApiKeys/index.js\";\nimport { GetApiKeyUseCase } from \"~/features/security/apiKeys/GetApiKey/index.js\";\n\nexport const addApiKeySchema = (builder: IGraphQLSchemaBuilder): void => {\n builder.addTypeDefs(/* GraphQL */ `\n type SecurityApiKey {\n id: ID\n name: String\n slug: String\n description: String\n token: String\n permissions: [JSON]\n createdOn: DateTime\n createdBy: SecurityCreatedBy\n }\n\n input SecurityApiKeyInput {\n id: ID\n name: String!\n slug: String\n description: String\n token: String\n permissions: [JSON]!\n }\n\n type SecurityApiKeyResponse {\n data: SecurityApiKey\n error: SecurityError\n }\n\n type SecurityApiKeyListResponse {\n data: [SecurityApiKey!]\n error: SecurityError\n }\n\n extend type SecurityQuery {\n listApiKeys: SecurityApiKeyListResponse\n getApiKey(id: ID!): SecurityApiKeyResponse\n }\n\n extend type SecurityMutation {\n createApiKey(data: SecurityApiKeyInput!): SecurityApiKeyResponse\n updateApiKey(id: ID!, data: SecurityApiKeyInput!): SecurityApiKeyResponse\n deleteApiKey(id: ID!): SecurityBooleanResponse\n }\n `);\n\n builder.addResolver({\n path: \"SecurityQuery.listApiKeys\",\n dependencies: [ListApiKeysUseCase],\n resolver: (list: ListApiKeysUseCase.Interface) => async () => {\n const result = await list.execute();\n\n if (result.isOk()) {\n return new Response(result.value);\n }\n return new ErrorResponse(result.error);\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"SecurityQuery.getApiKey\",\n dependencies: [GetApiKeyUseCase],\n resolver:\n (getById: GetApiKeyUseCase.Interface) =>\n async ({ args }) => {\n const result = await getById.execute(args.id);\n\n if (result.isOk()) {\n return new Response(result.value);\n }\n return new ErrorResponse(result.error);\n }\n });\n\n builder.addResolver<{ data: any }>({\n path: \"SecurityMutation.createApiKey\",\n dependencies: [CreateApiKeyUseCase],\n resolver:\n (createApiKey: CreateApiKeyUseCase.Interface) =>\n async ({ args }) => {\n const result = await createApiKey.execute(args.data);\n\n if (result.isOk()) {\n return new Response(result.value);\n }\n return new ErrorResponse(result.error);\n }\n });\n\n builder.addResolver<{ id: string; data: any }>({\n path: \"SecurityMutation.updateApiKey\",\n dependencies: [UpdateApiKeyUseCase],\n resolver:\n (updateApiKey: UpdateApiKeyUseCase.Interface) =>\n async ({ args }) => {\n const result = await updateApiKey.execute(args.id, args.data);\n\n if (result.isOk()) {\n return new Response(result.value);\n }\n return new ErrorResponse(result.error);\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"SecurityMutation.deleteApiKey\",\n dependencies: [DeleteApiKeyUseCase],\n resolver:\n (deleteApiKey: DeleteApiKeyUseCase.Interface) =>\n async ({ args }) => {\n const result = await deleteApiKey.execute(args.id);\n\n if (result.isOk()) {\n return new Response(true);\n }\n return new ErrorResponse(result.error);\n }\n });\n};\n"],"names":["addApiKeySchema","builder","ListApiKeysUseCase","list","result","Response","ErrorResponse","GetApiKeyUseCase","getById","args","CreateApiKeyUseCase","createApiKey","UpdateApiKeyUseCase","updateApiKey","DeleteApiKeyUseCase","deleteApiKey"],"mappings":";;;;;;AAQO,MAAMA,kBAAkB,CAACC;IAC5BA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCnC,CAAC;IAEDA,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YAACC;SAAmB;QAClC,UAAU,CAACC,OAAuC;gBAC9C,MAAMC,SAAS,MAAMD,KAAK,OAAO;gBAEjC,IAAIC,OAAO,IAAI,IACX,OAAO,IAAIC,SAASD,OAAO,KAAK;gBAEpC,OAAO,IAAIE,cAAcF,OAAO,KAAK;YACzC;IACJ;IAEAH,QAAQ,WAAW,CAAiB;QAChC,MAAM;QACN,cAAc;YAACM;SAAiB;QAChC,UACI,CAACC,UACD,OAAO,EAAEC,IAAI,EAAE;gBACX,MAAML,SAAS,MAAMI,QAAQ,OAAO,CAACC,KAAK,EAAE;gBAE5C,IAAIL,OAAO,IAAI,IACX,OAAO,IAAIC,SAASD,OAAO,KAAK;gBAEpC,OAAO,IAAIE,cAAcF,OAAO,KAAK;YACzC;IACR;IAEAH,QAAQ,WAAW,CAAgB;QAC/B,MAAM;QACN,cAAc;YAACS;SAAoB;QACnC,UACI,CAACC,eACD,OAAO,EAAEF,IAAI,EAAE;gBACX,MAAML,SAAS,MAAMO,aAAa,OAAO,CAACF,KAAK,IAAI;gBAEnD,IAAIL,OAAO,IAAI,IACX,OAAO,IAAIC,SAASD,OAAO,KAAK;gBAEpC,OAAO,IAAIE,cAAcF,OAAO,KAAK;YACzC;IACR;IAEAH,QAAQ,WAAW,CAA4B;QAC3C,MAAM;QACN,cAAc;YAACW;SAAoB;QACnC,UACI,CAACC,eACD,OAAO,EAAEJ,IAAI,EAAE;gBACX,MAAML,SAAS,MAAMS,aAAa,OAAO,CAACJ,KAAK,EAAE,EAAEA,KAAK,IAAI;gBAE5D,IAAIL,OAAO,IAAI,IACX,OAAO,IAAIC,SAASD,OAAO,KAAK;gBAEpC,OAAO,IAAIE,cAAcF,OAAO,KAAK;YACzC;IACR;IAEAH,QAAQ,WAAW,CAAiB;QAChC,MAAM;QACN,cAAc;YAACa;SAAoB;QACnC,UACI,CAACC,eACD,OAAO,EAAEN,IAAI,EAAE;gBACX,MAAML,SAAS,MAAMW,aAAa,OAAO,CAACN,KAAK,EAAE;gBAEjD,IAAIL,OAAO,IAAI,IACX,OAAO,IAAIC,SAAS;gBAExB,OAAO,IAAIC,cAAcF,OAAO,KAAK;YACzC;IACR;AACJ"}
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { ErrorResponse, Response } from "@webiny/handler-graphql";
|
|
1
|
+
import { ErrorResponse, Response } from "@webiny/api-graphql";
|
|
3
2
|
import { EventPublisher } from "../../features/eventPublisher/index.js";
|
|
4
3
|
import { AfterLoginEvent } from "../../features/security/login/index.js";
|
|
5
4
|
import { GetIdentityProfileUseCase } from "../../features/users/GetIdentityProfile/index.js";
|
|
6
5
|
import { TeamsRepository } from "../../features/security/teams/shared/abstractions.js";
|
|
7
6
|
import { RolesRepository } from "../../features/security/roles/shared/abstractions.js";
|
|
8
7
|
import { IdentityContext } from "../../features/security/IdentityContext/index.js";
|
|
8
|
+
import { TenantContext } from "../../features/tenancy/TenantContext/index.js";
|
|
9
|
+
import { GetTenantByIdUseCase } from "../../features/tenancy/GetTenantById/index.js";
|
|
10
|
+
import { GetRootTenantUseCase } from "../../features/tenancy/GetRootTenant/index.js";
|
|
9
11
|
import { ProfileMapper } from "./ProfileMapper.js";
|
|
10
|
-
const getDefaultTenant = async (
|
|
11
|
-
const identity =
|
|
12
|
+
const getDefaultTenant = async (identityContext, getTenantById, getRootTenant)=>{
|
|
13
|
+
const identity = identityContext.getIdentity();
|
|
12
14
|
const defaultTenantId = identity.context.defaultTenantId ?? "root";
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
15
|
-
|
|
15
|
+
const tenantResult = await getTenantById.execute(defaultTenantId);
|
|
16
|
+
if (tenantResult.isOk()) return tenantResult.value;
|
|
17
|
+
const rootResult = await getRootTenant.execute();
|
|
18
|
+
if (rootResult.isFail()) throw rootResult.error;
|
|
19
|
+
return rootResult.value;
|
|
16
20
|
};
|
|
17
|
-
const
|
|
18
|
-
|
|
21
|
+
const addIdentitySchema = (builder)=>{
|
|
22
|
+
builder.addTypeDefs(`
|
|
19
23
|
type SecurityIdentityTenant {
|
|
20
24
|
id: ID!
|
|
21
25
|
name: String!
|
|
@@ -62,28 +66,30 @@ const identity_gql = new GraphQLSchemaPlugin({
|
|
|
62
66
|
"Login using idToken obtained from a 3rd party identity provider"
|
|
63
67
|
login: SecurityIdentityLoginResponse
|
|
64
68
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
`);
|
|
70
|
+
builder.addResolver({
|
|
71
|
+
path: "SecurityMutation.login",
|
|
72
|
+
dependencies: [
|
|
73
|
+
IdentityContext,
|
|
74
|
+
EventPublisher,
|
|
75
|
+
RolesRepository,
|
|
76
|
+
TeamsRepository,
|
|
77
|
+
GetIdentityProfileUseCase
|
|
78
|
+
],
|
|
79
|
+
resolver: (identityContext, eventPublisher, rolesRepo, teamsRepo, getProfile)=>async ()=>{
|
|
70
80
|
const identity = identityContext.getIdentity();
|
|
71
81
|
if (identity.isAnonymous()) return new ErrorResponse({
|
|
72
82
|
code: "Security/Identity/NotAuthenticated",
|
|
73
83
|
message: "Unauthenticated!"
|
|
74
84
|
});
|
|
75
85
|
try {
|
|
76
|
-
const eventPublisher = context.container.resolve(EventPublisher);
|
|
77
86
|
await eventPublisher.publish(new AfterLoginEvent({
|
|
78
87
|
identity
|
|
79
88
|
}));
|
|
80
89
|
} catch (err) {
|
|
81
90
|
return new ErrorResponse(err);
|
|
82
91
|
}
|
|
83
|
-
const
|
|
84
|
-
const teamsRepo = context.container.resolve(TeamsRepository);
|
|
85
|
-
const getProfile = context.container.resolve(GetIdentityProfileUseCase);
|
|
86
|
-
const result = await context.security.withoutAuthorization(async ()=>getProfile.execute(identity.id));
|
|
92
|
+
const result = await identityContext.withoutAuthorization(async ()=>getProfile.execute(identity.id));
|
|
87
93
|
if (result.isFail()) return new ErrorResponse({
|
|
88
94
|
code: "Security/Identity/NotAuthorized",
|
|
89
95
|
message: "Missing user profile!"
|
|
@@ -102,20 +108,31 @@ const identity_gql = new GraphQLSchemaPlugin({
|
|
|
102
108
|
teams
|
|
103
109
|
});
|
|
104
110
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
});
|
|
112
|
+
builder.addResolver({
|
|
113
|
+
path: "SecurityIdentity.defaultTenant",
|
|
114
|
+
dependencies: [
|
|
115
|
+
IdentityContext,
|
|
116
|
+
GetTenantByIdUseCase,
|
|
117
|
+
GetRootTenantUseCase
|
|
118
|
+
],
|
|
119
|
+
resolver: (identityContext, getTenantById, getRootTenant)=>()=>getDefaultTenant(identityContext, getTenantById, getRootTenant)
|
|
120
|
+
});
|
|
121
|
+
builder.addResolver({
|
|
122
|
+
path: "SecurityIdentity.currentTenant",
|
|
123
|
+
dependencies: [
|
|
124
|
+
TenantContext
|
|
125
|
+
],
|
|
126
|
+
resolver: (tenantContext)=>()=>tenantContext.getTenant()
|
|
127
|
+
});
|
|
128
|
+
builder.addResolver({
|
|
129
|
+
path: "SecurityIdentity.permissions",
|
|
130
|
+
dependencies: [
|
|
131
|
+
IdentityContext
|
|
132
|
+
],
|
|
133
|
+
resolver: (identityContext)=>()=>identityContext.listPermissions()
|
|
134
|
+
});
|
|
135
|
+
};
|
|
119
136
|
const getRoles = async (user, rolesRepo)=>{
|
|
120
137
|
const roleIds = user.roles ?? [];
|
|
121
138
|
if (roleIds.length > 0) {
|
|
@@ -148,6 +165,6 @@ const getTeams = async (user, teamsRepo)=>{
|
|
|
148
165
|
}
|
|
149
166
|
return [];
|
|
150
167
|
};
|
|
151
|
-
export
|
|
168
|
+
export { addIdentitySchema };
|
|
152
169
|
|
|
153
|
-
//# sourceMappingURL=
|
|
170
|
+
//# sourceMappingURL=addIdentitySchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/security/addIdentitySchema.js","sources":["../../../src/graphql/security/addIdentitySchema.ts"],"sourcesContent":["import type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\nimport { ErrorResponse, Response } from \"@webiny/api-graphql\";\nimport { EventPublisher } from \"~/features/eventPublisher/index.js\";\nimport { AfterLoginEvent } from \"~/features/security/login/index.js\";\nimport { GetIdentityProfileUseCase } from \"~/features/users/GetIdentityProfile/index.js\";\nimport type { AdminUser } from \"~/types/users.js\";\nimport { TeamsRepository } from \"~/features/security/teams/shared/abstractions.js\";\nimport { RolesRepository } from \"~/features/security/roles/shared/abstractions.js\";\nimport { IdentityContext } from \"~/features/security/IdentityContext/index.js\";\nimport { TenantContext } from \"~/features/tenancy/TenantContext/index.js\";\nimport { GetTenantByIdUseCase } from \"~/features/tenancy/GetTenantById/index.js\";\nimport { GetRootTenantUseCase } from \"~/features/tenancy/GetRootTenant/index.js\";\nimport { ProfileMapper } from \"./ProfileMapper.js\";\n\nconst getDefaultTenant = async (\n identityContext: IdentityContext.Interface,\n getTenantById: GetTenantByIdUseCase.Interface,\n getRootTenant: GetRootTenantUseCase.Interface\n) => {\n const identity = identityContext.getIdentity();\n const defaultTenantId = identity.context.defaultTenantId ?? \"root\";\n\n const tenantResult = await getTenantById.execute(defaultTenantId);\n if (tenantResult.isOk()) {\n return tenantResult.value;\n }\n\n const rootResult = await getRootTenant.execute();\n if (rootResult.isFail()) {\n throw rootResult.error;\n }\n return rootResult.value;\n};\n\nexport const addIdentitySchema = (builder: IGraphQLSchemaBuilder): void => {\n builder.addTypeDefs(/* GraphQL */ `\n type SecurityIdentityTenant {\n id: ID!\n name: String!\n }\n type SecurityIdentityProfileRole {\n id: String!\n slug: String!\n name: String!\n }\n\n type SecurityIdentityProfileTeam {\n id: String!\n slug: String!\n name: String!\n }\n\n type SecurityIdentityProfile {\n firstName: String\n lastName: String\n email: String\n avatar: JSON\n external: Boolean!\n createdOn: DateTime!\n }\n\n type SecurityIdentity {\n id: ID!\n type: String!\n displayName: String!\n roles: [SecurityIdentityProfileRole!]!\n teams: [SecurityIdentityProfileTeam!]!\n permissions: [JSON!]!\n profile: SecurityIdentityProfile!\n currentTenant: SecurityIdentityTenant!\n defaultTenant: SecurityIdentityTenant!\n }\n\n type SecurityIdentityLoginResponse {\n data: SecurityIdentity\n error: SecurityError\n }\n\n extend type SecurityMutation {\n \"Login using idToken obtained from a 3rd party identity provider\"\n login: SecurityIdentityLoginResponse\n }\n `);\n\n builder.addResolver({\n path: \"SecurityMutation.login\",\n dependencies: [\n IdentityContext,\n EventPublisher,\n RolesRepository,\n TeamsRepository,\n GetIdentityProfileUseCase\n ],\n resolver:\n (\n identityContext: IdentityContext.Interface,\n eventPublisher: EventPublisher.Interface,\n rolesRepo: RolesRepository.Interface,\n teamsRepo: TeamsRepository.Interface,\n getProfile: GetIdentityProfileUseCase.Interface\n ) =>\n async () => {\n const identity = identityContext.getIdentity();\n if (identity.isAnonymous()) {\n return new ErrorResponse({\n code: \"Security/Identity/NotAuthenticated\",\n message: \"Unauthenticated!\"\n });\n }\n\n try {\n await eventPublisher.publish(new AfterLoginEvent({ identity }));\n } catch (err) {\n return new ErrorResponse(err);\n }\n\n const result = await identityContext.withoutAuthorization(async () => {\n return getProfile.execute(identity.id);\n });\n\n if (result.isFail()) {\n return new ErrorResponse({\n code: \"Security/Identity/NotAuthorized\",\n message: \"Missing user profile!\"\n });\n }\n\n const user = result.value;\n\n const [roles, teams] = await Promise.all([\n getRoles(user, rolesRepo),\n getTeams(user, teamsRepo)\n ]);\n\n const profileMapper = new ProfileMapper();\n const profile = await profileMapper.toDTO(user);\n\n return new Response({\n ...identity.toJson(),\n profile,\n roles,\n teams\n });\n }\n });\n\n builder.addResolver({\n path: \"SecurityIdentity.defaultTenant\",\n dependencies: [IdentityContext, GetTenantByIdUseCase, GetRootTenantUseCase],\n resolver:\n (\n identityContext: IdentityContext.Interface,\n getTenantById: GetTenantByIdUseCase.Interface,\n getRootTenant: GetRootTenantUseCase.Interface\n ) =>\n () =>\n getDefaultTenant(identityContext, getTenantById, getRootTenant)\n });\n\n builder.addResolver({\n path: \"SecurityIdentity.currentTenant\",\n dependencies: [TenantContext],\n resolver: (tenantContext: TenantContext.Interface) => () => tenantContext.getTenant()\n });\n\n builder.addResolver({\n path: \"SecurityIdentity.permissions\",\n dependencies: [IdentityContext],\n resolver: (identityContext: IdentityContext.Interface) => () =>\n identityContext.listPermissions()\n });\n};\n\nconst getRoles = async (user: AdminUser, rolesRepo: RolesRepository.Interface) => {\n const roleIds = user.roles ?? [];\n if (roleIds.length > 0) {\n const result = await rolesRepo.list({\n where: { id_in: roleIds }\n });\n\n if (result.isOk()) {\n return result.value.map(role => ({\n id: role.id,\n slug: role.slug,\n name: role.name\n }));\n }\n }\n\n return [];\n};\n\nconst getTeams = async (user: AdminUser, teamsRepo: TeamsRepository.Interface) => {\n const teamIds = user.teams ?? [];\n if (teamIds.length > 0) {\n const result = await teamsRepo.list({\n where: { id_in: teamIds }\n });\n if (result.isOk()) {\n return result.value.map(team => ({\n id: team.id,\n slug: team.slug,\n name: team.name\n }));\n }\n }\n return [];\n};\n"],"names":["getDefaultTenant","identityContext","getTenantById","getRootTenant","identity","defaultTenantId","tenantResult","rootResult","addIdentitySchema","builder","IdentityContext","EventPublisher","RolesRepository","TeamsRepository","GetIdentityProfileUseCase","eventPublisher","rolesRepo","teamsRepo","getProfile","ErrorResponse","AfterLoginEvent","err","result","user","roles","teams","Promise","getRoles","getTeams","profileMapper","ProfileMapper","profile","Response","GetTenantByIdUseCase","GetRootTenantUseCase","TenantContext","tenantContext","roleIds","role","teamIds","team"],"mappings":";;;;;;;;;;;AAcA,MAAMA,mBAAmB,OACrBC,iBACAC,eACAC;IAEA,MAAMC,WAAWH,gBAAgB,WAAW;IAC5C,MAAMI,kBAAkBD,SAAS,OAAO,CAAC,eAAe,IAAI;IAE5D,MAAME,eAAe,MAAMJ,cAAc,OAAO,CAACG;IACjD,IAAIC,aAAa,IAAI,IACjB,OAAOA,aAAa,KAAK;IAG7B,MAAMC,aAAa,MAAMJ,cAAc,OAAO;IAC9C,IAAII,WAAW,MAAM,IACjB,MAAMA,WAAW,KAAK;IAE1B,OAAOA,WAAW,KAAK;AAC3B;AAEO,MAAMC,oBAAoB,CAACC;IAC9BA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA+CnC,CAAC;IAEDA,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YACVC;YACAC;YACAC;YACAC;YACAC;SACH;QACD,UACI,CACIb,iBACAc,gBACAC,WACAC,WACAC,aAEJ;gBACI,MAAMd,WAAWH,gBAAgB,WAAW;gBAC5C,IAAIG,SAAS,WAAW,IACpB,OAAO,IAAIe,cAAc;oBACrB,MAAM;oBACN,SAAS;gBACb;gBAGJ,IAAI;oBACA,MAAMJ,eAAe,OAAO,CAAC,IAAIK,gBAAgB;wBAAEhB;oBAAS;gBAChE,EAAE,OAAOiB,KAAK;oBACV,OAAO,IAAIF,cAAcE;gBAC7B;gBAEA,MAAMC,SAAS,MAAMrB,gBAAgB,oBAAoB,CAAC,UAC/CiB,WAAW,OAAO,CAACd,SAAS,EAAE;gBAGzC,IAAIkB,OAAO,MAAM,IACb,OAAO,IAAIH,cAAc;oBACrB,MAAM;oBACN,SAAS;gBACb;gBAGJ,MAAMI,OAAOD,OAAO,KAAK;gBAEzB,MAAM,CAACE,OAAOC,MAAM,GAAG,MAAMC,QAAQ,GAAG,CAAC;oBACrCC,SAASJ,MAAMP;oBACfY,SAASL,MAAMN;iBAClB;gBAED,MAAMY,gBAAgB,IAAIC;gBAC1B,MAAMC,UAAU,MAAMF,cAAc,KAAK,CAACN;gBAE1C,OAAO,IAAIS,SAAS;oBAChB,GAAG5B,SAAS,MAAM,EAAE;oBACpB2B;oBACAP;oBACAC;gBACJ;YACJ;IACR;IAEAhB,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YAACC;YAAiBuB;YAAsBC;SAAqB;QAC3E,UACI,CACIjC,iBACAC,eACAC,gBAEJ,IACIH,iBAAiBC,iBAAiBC,eAAeC;IAC7D;IAEAM,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YAAC0B;SAAc;QAC7B,UAAU,CAACC,gBAA2C,IAAMA,cAAc,SAAS;IACvF;IAEA3B,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YAACC;SAAgB;QAC/B,UAAU,CAACT,kBAA+C,IACtDA,gBAAgB,eAAe;IACvC;AACJ;AAEA,MAAM0B,WAAW,OAAOJ,MAAiBP;IACrC,MAAMqB,UAAUd,KAAK,KAAK,IAAI,EAAE;IAChC,IAAIc,QAAQ,MAAM,GAAG,GAAG;QACpB,MAAMf,SAAS,MAAMN,UAAU,IAAI,CAAC;YAChC,OAAO;gBAAE,OAAOqB;YAAQ;QAC5B;QAEA,IAAIf,OAAO,IAAI,IACX,OAAOA,OAAO,KAAK,CAAC,GAAG,CAACgB,CAAAA,OAAS;gBAC7B,IAAIA,KAAK,EAAE;gBACX,MAAMA,KAAK,IAAI;gBACf,MAAMA,KAAK,IAAI;YACnB;IAER;IAEA,OAAO,EAAE;AACb;AAEA,MAAMV,WAAW,OAAOL,MAAiBN;IACrC,MAAMsB,UAAUhB,KAAK,KAAK,IAAI,EAAE;IAChC,IAAIgB,QAAQ,MAAM,GAAG,GAAG;QACpB,MAAMjB,SAAS,MAAML,UAAU,IAAI,CAAC;YAChC,OAAO;gBAAE,OAAOsB;YAAQ;QAC5B;QACA,IAAIjB,OAAO,IAAI,IACX,OAAOA,OAAO,KAAK,CAAC,GAAG,CAACkB,CAAAA,OAAS;gBAC7B,IAAIA,KAAK,EAAE;gBACX,MAAMA,KAAK,IAAI;gBACf,MAAMA,KAAK,IAAI;YACnB;IAER;IACA,OAAO,EAAE;AACb"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { ErrorResponse, ListErrorResponse, ListResponse, Response } from "@webiny/api-graphql/responses.js";
|
|
2
|
+
import { GetRoleUseCase } from "../../features/security/roles/GetRole/index.js";
|
|
3
|
+
import { ListRolesUseCase } from "../../features/security/roles/ListRoles/index.js";
|
|
4
|
+
import { CreateRoleUseCase } from "../../features/security/roles/CreateRole/index.js";
|
|
5
|
+
import { UpdateRoleUseCase } from "../../features/security/roles/UpdateRole/index.js";
|
|
6
|
+
import { DeleteRoleUseCase } from "../../features/security/roles/DeleteRole/index.js";
|
|
7
|
+
const addRoleSchema = (builder)=>{
|
|
8
|
+
builder.addTypeDefs(`
|
|
9
|
+
type SecurityRole {
|
|
10
|
+
id: ID
|
|
11
|
+
name: String
|
|
12
|
+
slug: String
|
|
13
|
+
createdOn: DateTime
|
|
14
|
+
description: String
|
|
15
|
+
permissions: [JSON]
|
|
16
|
+
system: Boolean!
|
|
17
|
+
plugin: Boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
input SecurityRoleCreateInput {
|
|
21
|
+
name: String!
|
|
22
|
+
slug: String!
|
|
23
|
+
description: String
|
|
24
|
+
permissions: [JSON!]!
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
input SecurityRoleUpdateInput {
|
|
28
|
+
name: String
|
|
29
|
+
description: String
|
|
30
|
+
permissions: [JSON!]
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
type SecurityRoleResponse {
|
|
34
|
+
data: SecurityRole
|
|
35
|
+
error: SecurityError
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type SecurityRoleListResponse {
|
|
39
|
+
data: [SecurityRole]
|
|
40
|
+
error: SecurityError
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
input GetRoleWhereInput {
|
|
44
|
+
id: ID
|
|
45
|
+
slug: String
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
extend type SecurityQuery {
|
|
49
|
+
getRole(where: GetRoleWhereInput!): SecurityRoleResponse
|
|
50
|
+
listRoles: SecurityRoleListResponse
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
extend type SecurityMutation {
|
|
54
|
+
createRole(data: SecurityRoleCreateInput!): SecurityRoleResponse
|
|
55
|
+
updateRole(id: ID!, data: SecurityRoleUpdateInput!): SecurityRoleResponse
|
|
56
|
+
deleteRole(id: ID!): SecurityBooleanResponse
|
|
57
|
+
}
|
|
58
|
+
`);
|
|
59
|
+
builder.addResolver({
|
|
60
|
+
path: "SecurityQuery.getRole",
|
|
61
|
+
dependencies: [
|
|
62
|
+
GetRoleUseCase
|
|
63
|
+
],
|
|
64
|
+
resolver: (useCase)=>async ({ args })=>{
|
|
65
|
+
try {
|
|
66
|
+
const result = await useCase.execute(args.where);
|
|
67
|
+
if (result.isFail()) throw result.error;
|
|
68
|
+
return new Response(result.value);
|
|
69
|
+
} catch (e) {
|
|
70
|
+
return new ErrorResponse(e);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
builder.addResolver({
|
|
75
|
+
path: "SecurityQuery.listRoles",
|
|
76
|
+
dependencies: [
|
|
77
|
+
ListRolesUseCase
|
|
78
|
+
],
|
|
79
|
+
resolver: (useCase)=>async ()=>{
|
|
80
|
+
try {
|
|
81
|
+
const result = await useCase.execute();
|
|
82
|
+
if (result.isFail()) throw result.error;
|
|
83
|
+
return new ListResponse(result.value);
|
|
84
|
+
} catch (e) {
|
|
85
|
+
return new ListErrorResponse(e);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
builder.addResolver({
|
|
90
|
+
path: "SecurityMutation.createRole",
|
|
91
|
+
dependencies: [
|
|
92
|
+
CreateRoleUseCase
|
|
93
|
+
],
|
|
94
|
+
resolver: (useCase)=>async ({ args })=>{
|
|
95
|
+
try {
|
|
96
|
+
const result = await useCase.execute(args.data);
|
|
97
|
+
if (result.isFail()) throw result.error;
|
|
98
|
+
return new Response(result.value);
|
|
99
|
+
} catch (e) {
|
|
100
|
+
return new ErrorResponse(e);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
builder.addResolver({
|
|
105
|
+
path: "SecurityMutation.updateRole",
|
|
106
|
+
dependencies: [
|
|
107
|
+
UpdateRoleUseCase
|
|
108
|
+
],
|
|
109
|
+
resolver: (useCase)=>async ({ args })=>{
|
|
110
|
+
try {
|
|
111
|
+
const result = await useCase.execute(args.id, args.data);
|
|
112
|
+
if (result.isFail()) throw result.error;
|
|
113
|
+
return new Response(result.value);
|
|
114
|
+
} catch (e) {
|
|
115
|
+
return new ErrorResponse(e);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
builder.addResolver({
|
|
120
|
+
path: "SecurityMutation.deleteRole",
|
|
121
|
+
dependencies: [
|
|
122
|
+
DeleteRoleUseCase
|
|
123
|
+
],
|
|
124
|
+
resolver: (useCase)=>async ({ args })=>{
|
|
125
|
+
try {
|
|
126
|
+
const result = await useCase.execute(args.id);
|
|
127
|
+
if (result.isFail()) throw result.error;
|
|
128
|
+
return new Response(true);
|
|
129
|
+
} catch (e) {
|
|
130
|
+
return new ErrorResponse(e);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
};
|
|
135
|
+
export { addRoleSchema };
|
|
136
|
+
|
|
137
|
+
//# sourceMappingURL=addRoleSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/security/addRoleSchema.js","sources":["../../../src/graphql/security/addRoleSchema.ts"],"sourcesContent":["import {\n ErrorResponse,\n ListErrorResponse,\n ListResponse,\n Response\n} from \"@webiny/api-graphql/responses.js\";\nimport type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\nimport { GetRoleUseCase } from \"~/features/security/roles/GetRole/index.js\";\nimport { ListRolesUseCase } from \"~/features/security/roles/ListRoles/index.js\";\nimport { CreateRoleUseCase } from \"~/features/security/roles/CreateRole/index.js\";\nimport { UpdateRoleUseCase } from \"~/features/security/roles/UpdateRole/index.js\";\nimport { DeleteRoleUseCase } from \"~/features/security/roles/DeleteRole/index.js\";\n\nexport const addRoleSchema = (builder: IGraphQLSchemaBuilder): void => {\n builder.addTypeDefs(/* GraphQL */ `\n type SecurityRole {\n id: ID\n name: String\n slug: String\n createdOn: DateTime\n description: String\n permissions: [JSON]\n system: Boolean!\n plugin: Boolean\n }\n\n input SecurityRoleCreateInput {\n name: String!\n slug: String!\n description: String\n permissions: [JSON!]!\n }\n\n input SecurityRoleUpdateInput {\n name: String\n description: String\n permissions: [JSON!]\n }\n\n type SecurityRoleResponse {\n data: SecurityRole\n error: SecurityError\n }\n\n type SecurityRoleListResponse {\n data: [SecurityRole]\n error: SecurityError\n }\n\n input GetRoleWhereInput {\n id: ID\n slug: String\n }\n\n extend type SecurityQuery {\n getRole(where: GetRoleWhereInput!): SecurityRoleResponse\n listRoles: SecurityRoleListResponse\n }\n\n extend type SecurityMutation {\n createRole(data: SecurityRoleCreateInput!): SecurityRoleResponse\n updateRole(id: ID!, data: SecurityRoleUpdateInput!): SecurityRoleResponse\n deleteRole(id: ID!): SecurityBooleanResponse\n }\n `);\n\n builder.addResolver<{ where: any }>({\n path: \"SecurityQuery.getRole\",\n dependencies: [GetRoleUseCase],\n resolver:\n (useCase: GetRoleUseCase.Interface) =>\n async ({ args }) => {\n try {\n const result = await useCase.execute(args.where);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n });\n\n builder.addResolver({\n path: \"SecurityQuery.listRoles\",\n dependencies: [ListRolesUseCase],\n resolver: (useCase: ListRolesUseCase.Interface) => async () => {\n try {\n const result = await useCase.execute();\n if (result.isFail()) {\n throw result.error;\n }\n return new ListResponse(result.value);\n } catch (e) {\n return new ListErrorResponse(e);\n }\n }\n });\n\n builder.addResolver<{ data: any }>({\n path: \"SecurityMutation.createRole\",\n dependencies: [CreateRoleUseCase],\n resolver:\n (useCase: CreateRoleUseCase.Interface) =>\n async ({ args }) => {\n try {\n const result = await useCase.execute(args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n });\n\n builder.addResolver<{ id: string; data: any }>({\n path: \"SecurityMutation.updateRole\",\n dependencies: [UpdateRoleUseCase],\n resolver:\n (useCase: UpdateRoleUseCase.Interface) =>\n async ({ args }) => {\n try {\n const result = await useCase.execute(args.id, args.data);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(result.value);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n });\n\n builder.addResolver<{ id: string }>({\n path: \"SecurityMutation.deleteRole\",\n dependencies: [DeleteRoleUseCase],\n resolver:\n (useCase: DeleteRoleUseCase.Interface) =>\n async ({ args }) => {\n try {\n const result = await useCase.execute(args.id);\n if (result.isFail()) {\n throw result.error;\n }\n return new Response(true);\n } catch (e) {\n return new ErrorResponse(e);\n }\n }\n });\n};\n"],"names":["addRoleSchema","builder","GetRoleUseCase","useCase","args","result","Response","e","ErrorResponse","ListRolesUseCase","ListResponse","ListErrorResponse","CreateRoleUseCase","UpdateRoleUseCase","DeleteRoleUseCase"],"mappings":";;;;;;AAaO,MAAMA,gBAAgB,CAACC;IAC1BA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkDnC,CAAC;IAEDA,QAAQ,WAAW,CAAiB;QAChC,MAAM;QACN,cAAc;YAACC;SAAe;QAC9B,UACI,CAACC,UACD,OAAO,EAAEC,IAAI,EAAE;gBACX,IAAI;oBACA,MAAMC,SAAS,MAAMF,QAAQ,OAAO,CAACC,KAAK,KAAK;oBAC/C,IAAIC,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAEtB,OAAO,IAAIC,SAASD,OAAO,KAAK;gBACpC,EAAE,OAAOE,GAAG;oBACR,OAAO,IAAIC,cAAcD;gBAC7B;YACJ;IACR;IAEAN,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,cAAc;YAACQ;SAAiB;QAChC,UAAU,CAACN,UAAwC;gBAC/C,IAAI;oBACA,MAAME,SAAS,MAAMF,QAAQ,OAAO;oBACpC,IAAIE,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAEtB,OAAO,IAAIK,aAAaL,OAAO,KAAK;gBACxC,EAAE,OAAOE,GAAG;oBACR,OAAO,IAAII,kBAAkBJ;gBACjC;YACJ;IACJ;IAEAN,QAAQ,WAAW,CAAgB;QAC/B,MAAM;QACN,cAAc;YAACW;SAAkB;QACjC,UACI,CAACT,UACD,OAAO,EAAEC,IAAI,EAAE;gBACX,IAAI;oBACA,MAAMC,SAAS,MAAMF,QAAQ,OAAO,CAACC,KAAK,IAAI;oBAC9C,IAAIC,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAEtB,OAAO,IAAIC,SAASD,OAAO,KAAK;gBACpC,EAAE,OAAOE,GAAG;oBACR,OAAO,IAAIC,cAAcD;gBAC7B;YACJ;IACR;IAEAN,QAAQ,WAAW,CAA4B;QAC3C,MAAM;QACN,cAAc;YAACY;SAAkB;QACjC,UACI,CAACV,UACD,OAAO,EAAEC,IAAI,EAAE;gBACX,IAAI;oBACA,MAAMC,SAAS,MAAMF,QAAQ,OAAO,CAACC,KAAK,EAAE,EAAEA,KAAK,IAAI;oBACvD,IAAIC,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAEtB,OAAO,IAAIC,SAASD,OAAO,KAAK;gBACpC,EAAE,OAAOE,GAAG;oBACR,OAAO,IAAIC,cAAcD;gBAC7B;YACJ;IACR;IAEAN,QAAQ,WAAW,CAAiB;QAChC,MAAM;QACN,cAAc;YAACa;SAAkB;QACjC,UACI,CAACX,UACD,OAAO,EAAEC,IAAI,EAAE;gBACX,IAAI;oBACA,MAAMC,SAAS,MAAMF,QAAQ,OAAO,CAACC,KAAK,EAAE;oBAC5C,IAAIC,OAAO,MAAM,IACb,MAAMA,OAAO,KAAK;oBAEtB,OAAO,IAAIC,SAAS;gBACxB,EAAE,OAAOC,GAAG;oBACR,OAAO,IAAIC,cAAcD;gBAC7B;YACJ;IACR;AACJ"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const base_gql = new GraphQLSchemaPlugin({
|
|
4
|
-
typeDefs: `
|
|
1
|
+
const addSecurityBaseSchema = (builder)=>{
|
|
2
|
+
builder.addTypeDefs(`
|
|
5
3
|
type SecurityMutation {
|
|
6
4
|
_empty: String
|
|
7
5
|
}
|
|
@@ -34,16 +32,16 @@ const base_gql = new GraphQLSchemaPlugin({
|
|
|
34
32
|
data: Boolean
|
|
35
33
|
error: SecurityError
|
|
36
34
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
export
|
|
35
|
+
`);
|
|
36
|
+
builder.addResolver({
|
|
37
|
+
path: "Query.security",
|
|
38
|
+
resolver: ()=>async ()=>({})
|
|
39
|
+
});
|
|
40
|
+
builder.addResolver({
|
|
41
|
+
path: "Mutation.security",
|
|
42
|
+
resolver: ()=>async ()=>({})
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
export { addSecurityBaseSchema };
|
|
48
46
|
|
|
49
|
-
//# sourceMappingURL=
|
|
47
|
+
//# sourceMappingURL=addSecurityBaseSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graphql/security/addSecurityBaseSchema.js","sources":["../../../src/graphql/security/addSecurityBaseSchema.ts"],"sourcesContent":["import type { IGraphQLSchemaBuilder } from \"@webiny/api-graphql/features/GraphQLSchemaBuilder/abstractions.js\";\n\nexport const addSecurityBaseSchema = (builder: IGraphQLSchemaBuilder): void => {\n builder.addTypeDefs(/* GraphQL */ `\n type SecurityMutation {\n _empty: String\n }\n\n type SecurityQuery {\n _empty: String\n }\n\n extend type Query {\n security: SecurityQuery\n }\n\n extend type Mutation {\n security: SecurityMutation\n }\n\n type SecurityCreatedBy {\n id: ID\n displayName: String\n }\n\n type SecurityError {\n code: String\n message: String\n data: JSON\n stack: String\n }\n\n type SecurityBooleanResponse {\n data: Boolean\n error: SecurityError\n }\n `);\n\n builder.addResolver({\n path: \"Query.security\",\n resolver: () => async () => ({})\n });\n\n builder.addResolver({\n path: \"Mutation.security\",\n resolver: () => async () => ({})\n });\n};\n"],"names":["addSecurityBaseSchema","builder"],"mappings":"AAEO,MAAMA,wBAAwB,CAACC;IAClCA,QAAQ,WAAW,CAAe,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAiCnC,CAAC;IAEDA,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,UAAU,IAAM,UAAa,EAAC;IAClC;IAEAA,QAAQ,WAAW,CAAC;QAChB,MAAM;QACN,UAAU,IAAM,UAAa,EAAC;IAClC;AACJ"}
|