Fix googleApisSetRequestExtraParams (#6455)

This commit is contained in:
Weiko
2024-07-30 16:08:59 +02:00
committed by GitHub
parent 68e3730be1
commit b85ae7e1ac
23 changed files with 106 additions and 118 deletions

View File

@ -315,6 +315,7 @@ export type Mutation = {
disablePostgresProxy: PostgresCredentials; disablePostgresProxy: PostgresCredentials;
emailPasswordResetLink: EmailPasswordResetLink; emailPasswordResetLink: EmailPasswordResetLink;
enablePostgresProxy: PostgresCredentials; enablePostgresProxy: PostgresCredentials;
enableWorkflowTrigger: Scalars['Boolean'];
exchangeAuthorizationCode: ExchangeAuthCode; exchangeAuthorizationCode: ExchangeAuthCode;
generateApiKeyToken: ApiKeyToken; generateApiKeyToken: ApiKeyToken;
generateJWT: AuthTokens; generateJWT: AuthTokens;
@ -377,6 +378,11 @@ export type MutationEmailPasswordResetLinkArgs = {
}; };
export type MutationEnableWorkflowTriggerArgs = {
workflowVersionId: Scalars['String'];
};
export type MutationExchangeAuthorizationCodeArgs = { export type MutationExchangeAuthorizationCodeArgs = {
authorizationCode: Scalars['String']; authorizationCode: Scalars['String'];
clientSecret?: InputMaybe<Scalars['String']>; clientSecret?: InputMaybe<Scalars['String']>;

View File

@ -1,6 +1,6 @@
import { DataSource } from 'typeorm'; import { DataSource } from 'typeorm';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
const tableName = 'featureFlag'; const tableName = 'featureFlag';
@ -16,47 +16,47 @@ export const seedFeatureFlags = async (
.orIgnore() .orIgnore()
.values([ .values([
{ {
key: FeatureFlagKeys.IsBlocklistEnabled, key: FeatureFlagKey.IsBlocklistEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsAirtableIntegrationEnabled, key: FeatureFlagKey.IsAirtableIntegrationEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsPostgreSQLIntegrationEnabled, key: FeatureFlagKey.IsPostgreSQLIntegrationEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsEventObjectEnabled, key: FeatureFlagKey.IsEventObjectEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: false, value: false,
}, },
{ {
key: FeatureFlagKeys.IsStripeIntegrationEnabled, key: FeatureFlagKey.IsStripeIntegrationEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsMessagingAliasFetchingEnabled, key: FeatureFlagKey.IsMessagingAliasFetchingEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsGoogleCalendarSyncV2Enabled, key: FeatureFlagKey.IsGoogleCalendarSyncV2Enabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsFunctionSettingsEnabled, key: FeatureFlagKey.IsFunctionSettingsEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: true, value: true,
}, },
{ {
key: FeatureFlagKeys.IsWorkflowEnabled, key: FeatureFlagKey.IsWorkflowEnabled,
workspaceId: workspaceId, workspaceId: workspaceId,
value: false, value: false,
}, },

View File

@ -1,20 +1,18 @@
import { Args, Query, Resolver, ArgsType, Field } from '@nestjs/graphql';
import { ForbiddenException, UseGuards } from '@nestjs/common'; import { ForbiddenException, UseGuards } from '@nestjs/common';
import { Args, ArgsType, Field, Query, Resolver } from '@nestjs/graphql';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { User } from 'src/engine/core-modules/user/user.entity';
import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import {
FeatureFlagEntity,
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
import { AISQLQueryResult } from 'src/engine/core-modules/ai-sql-query/dtos/ai-sql-query-result.dto';
import { AISQLQueryService } from 'src/engine/core-modules/ai-sql-query/ai-sql-query.service'; import { AISQLQueryService } from 'src/engine/core-modules/ai-sql-query/ai-sql-query.service';
import { AISQLQueryResult } from 'src/engine/core-modules/ai-sql-query/dtos/ai-sql-query-result.dto';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { User } from 'src/engine/core-modules/user/user.entity';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { AuthUser } from 'src/engine/decorators/auth/auth-user.decorator';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard';
@ArgsType() @ArgsType()
class GetAISQLQueryArgs { class GetAISQLQueryArgs {
@ -40,13 +38,13 @@ export class AISQLQueryResolver {
const isCopilotEnabledFeatureFlag = const isCopilotEnabledFeatureFlag =
await this.featureFlagRepository.findOneBy({ await this.featureFlagRepository.findOneBy({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsCopilotEnabled, key: FeatureFlagKey.IsCopilotEnabled,
value: true, value: true,
}); });
if (!isCopilotEnabledFeatureFlag?.value) { if (!isCopilotEnabledFeatureFlag?.value) {
throw new ForbiddenException( throw new ForbiddenException(
`${FeatureFlagKeys.IsCopilotEnabled} feature flag is disabled`, `${FeatureFlagKey.IsCopilotEnabled} feature flag is disabled`,
); );
} }

View File

@ -13,12 +13,10 @@ import {
GoogleAPIScopeConfig, GoogleAPIScopeConfig,
GoogleAPIsOauthExchangeCodeForTokenStrategy, GoogleAPIsOauthExchangeCodeForTokenStrategy,
} from 'src/engine/core-modules/auth/strategies/google-apis-oauth-exchange-code-for-token.auth.strategy'; } from 'src/engine/core-modules/auth/strategies/google-apis-oauth-exchange-code-for-token.auth.strategy';
import {
FeatureFlagEntity,
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util'; import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
@Injectable() @Injectable()
export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard( export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard(
@ -52,7 +50,7 @@ export class GoogleAPIsOauthExchangeCodeForTokenGuard extends AuthGuard(
isMessagingAliasFetchingEnabled: isMessagingAliasFetchingEnabled:
!!(await this.featureFlagRepository.findOneBy({ !!(await this.featureFlagRepository.findOneBy({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsMessagingAliasFetchingEnabled, key: FeatureFlagKey.IsMessagingAliasFetchingEnabled,
value: true, value: true,
})), })),
}; };

View File

@ -10,13 +10,11 @@ import { Repository } from 'typeorm';
import { TokenService } from 'src/engine/core-modules/auth/services/token.service'; import { TokenService } from 'src/engine/core-modules/auth/services/token.service';
import { GoogleAPIScopeConfig } from 'src/engine/core-modules/auth/strategies/google-apis-oauth-exchange-code-for-token.auth.strategy'; import { GoogleAPIScopeConfig } from 'src/engine/core-modules/auth/strategies/google-apis-oauth-exchange-code-for-token.auth.strategy';
import {
FeatureFlagEntity,
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
import { GoogleAPIsOauthRequestCodeStrategy } from 'src/engine/core-modules/auth/strategies/google-apis-oauth-request-code.auth.strategy'; import { GoogleAPIsOauthRequestCodeStrategy } from 'src/engine/core-modules/auth/strategies/google-apis-oauth-request-code.auth.strategy';
import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util'; import { setRequestExtraParams } from 'src/engine/core-modules/auth/utils/google-apis-set-request-extra-params.util';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
@Injectable() @Injectable()
export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') { export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') {
@ -49,7 +47,7 @@ export class GoogleAPIsOauthRequestCodeGuard extends AuthGuard('google-apis') {
isMessagingAliasFetchingEnabled: isMessagingAliasFetchingEnabled:
!!(await this.featureFlagRepository.findOneBy({ !!(await this.featureFlagRepository.findOneBy({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsMessagingAliasFetchingEnabled, key: FeatureFlagKey.IsMessagingAliasFetchingEnabled,
value: true, value: true,
})), })),
}; };

View File

@ -3,16 +3,14 @@ import { InjectRepository } from '@nestjs/typeorm';
import { In, Repository } from 'typeorm'; import { In, Repository } from 'typeorm';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
import { import {
BillingSubscription, BillingSubscription,
SubscriptionStatus, SubscriptionStatus,
} from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
FeatureFlagEntity,
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
@Injectable() @Injectable()
export class BillingService { export class BillingService {
@ -47,7 +45,7 @@ export class BillingService {
const freeAccessFeatureFlags = await this.featureFlagRepository.find({ const freeAccessFeatureFlags = await this.featureFlagRepository.find({
where: { where: {
key: FeatureFlagKeys.IsFreeAccessEnabled, key: FeatureFlagKey.IsFreeAccessEnabled,
value: true, value: true,
}, },
select: ['workspaceId'], select: ['workspaceId'],

View File

@ -13,10 +13,8 @@ import {
SubscriptionStatus, SubscriptionStatus,
} from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
import { StripeService } from 'src/engine/core-modules/billing/stripe/stripe.service'; import { StripeService } from 'src/engine/core-modules/billing/stripe/stripe.service';
import { import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
FeatureFlagEntity, import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service'; import { UserWorkspaceService } from 'src/engine/core-modules/user-workspace/user-workspace.service';
import { User } from 'src/engine/core-modules/user/user.entity'; import { User } from 'src/engine/core-modules/user/user.entity';
import { import {
@ -57,7 +55,7 @@ export class BillingWorkspaceService {
async isBillingEnabledForWorkspace(workspaceId: string) { async isBillingEnabledForWorkspace(workspaceId: string) {
const isFreeAccessEnabled = await this.featureFlagRepository.findOneBy({ const isFreeAccessEnabled = await this.featureFlagRepository.findOneBy({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsFreeAccessEnabled, key: FeatureFlagKey.IsFreeAccessEnabled,
value: true, value: true,
}); });
@ -330,7 +328,7 @@ export class BillingWorkspaceService {
await this.featureFlagRepository.delete({ await this.featureFlagRepository.delete({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsFreeAccessEnabled, key: FeatureFlagKey.IsFreeAccessEnabled,
}); });
if ( if (

View File

@ -0,0 +1,13 @@
export enum FeatureFlagKey {
IsBlocklistEnabled = 'IS_BLOCKLIST_ENABLED',
IsEventObjectEnabled = 'IS_EVENT_OBJECT_ENABLED',
IsAirtableIntegrationEnabled = 'IS_AIRTABLE_INTEGRATION_ENABLED',
IsPostgreSQLIntegrationEnabled = 'IS_POSTGRESQL_INTEGRATION_ENABLED',
IsStripeIntegrationEnabled = 'IS_STRIPE_INTEGRATION_ENABLED',
IsCopilotEnabled = 'IS_COPILOT_ENABLED',
IsMessagingAliasFetchingEnabled = 'IS_MESSAGING_ALIAS_FETCHING_ENABLED',
IsGoogleCalendarSyncV2Enabled = 'IS_GOOGLE_CALENDAR_SYNC_V2_ENABLED',
IsFreeAccessEnabled = 'IS_FREE_ACCESS_ENABLED',
IsFunctionSettingsEnabled = 'IS_FUNCTION_SETTINGS_ENABLED',
IsWorkflowEnabled = 'IS_WORKFLOW_ENABLED',
}

View File

@ -13,22 +13,9 @@ import {
} from 'typeorm'; } from 'typeorm';
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars'; import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
export enum FeatureFlagKeys {
IsBlocklistEnabled = 'IS_BLOCKLIST_ENABLED',
IsEventObjectEnabled = 'IS_EVENT_OBJECT_ENABLED',
IsAirtableIntegrationEnabled = 'IS_AIRTABLE_INTEGRATION_ENABLED',
IsPostgreSQLIntegrationEnabled = 'IS_POSTGRESQL_INTEGRATION_ENABLED',
IsStripeIntegrationEnabled = 'IS_STRIPE_INTEGRATION_ENABLED',
IsCopilotEnabled = 'IS_COPILOT_ENABLED',
IsMessagingAliasFetchingEnabled = 'IS_MESSAGING_ALIAS_FETCHING_ENABLED',
IsGoogleCalendarSyncV2Enabled = 'IS_GOOGLE_CALENDAR_SYNC_V2_ENABLED',
IsFreeAccessEnabled = 'IS_FREE_ACCESS_ENABLED',
IsFunctionSettingsEnabled = 'IS_FUNCTION_SETTINGS_ENABLED',
IsWorkflowEnabled = 'IS_WORKFLOW_ENABLED',
}
@Entity({ name: 'featureFlag', schema: 'core' }) @Entity({ name: 'featureFlag', schema: 'core' })
@ObjectType('FeatureFlag') @ObjectType('FeatureFlag')
@Unique('IndexOnKeyAndWorkspaceIdUnique', ['key', 'workspaceId']) @Unique('IndexOnKeyAndWorkspaceIdUnique', ['key', 'workspaceId'])
@ -37,9 +24,9 @@ export class FeatureFlagEntity {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
id: string; id: string;
@Field() @Field(() => String)
@Column({ nullable: false, type: 'text' }) @Column({ nullable: false, type: 'text' })
key: FeatureFlagKeys; key: FeatureFlagKey;
@Field() @Field()
@Column({ nullable: false, type: 'uuid' }) @Column({ nullable: false, type: 'uuid' })

View File

@ -1,3 +1,3 @@
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
export type FeatureFlagMap = Record<`${FeatureFlagKeys}`, boolean>; export type FeatureFlagMap = Record<`${FeatureFlagKey}`, boolean>;

View File

@ -3,10 +3,8 @@ import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
FeatureFlagEntity, import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
@Injectable() @Injectable()
export class IsFeatureEnabledService { export class IsFeatureEnabledService {
@ -16,7 +14,7 @@ export class IsFeatureEnabledService {
) {} ) {}
public async isFeatureEnabled( public async isFeatureEnabled(
key: FeatureFlagKeys, key: FeatureFlagKey,
workspaceId: string, workspaceId: string,
): Promise<boolean> { ): Promise<boolean> {
const featureFlag = await this.featureFlagRepository.findOneBy({ const featureFlag = await this.featureFlagRepository.findOneBy({

View File

@ -1,9 +1,7 @@
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
FeatureFlagEntity, import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { RemoteServerType } from 'src/engine/metadata-modules/remote-server/remote-server.entity'; import { RemoteServerType } from 'src/engine/metadata-modules/remote-server/remote-server.entity';
import { import {
RemoteServerException, RemoteServerException,
@ -36,9 +34,9 @@ export const validateRemoteServerType = async (
const getFeatureFlagKey = (remoteServerType: RemoteServerType) => { const getFeatureFlagKey = (remoteServerType: RemoteServerType) => {
switch (remoteServerType) { switch (remoteServerType) {
case RemoteServerType.POSTGRES_FDW: case RemoteServerType.POSTGRES_FDW:
return FeatureFlagKeys.IsPostgreSQLIntegrationEnabled; return FeatureFlagKey.IsPostgreSQLIntegrationEnabled;
case RemoteServerType.STRIPE_FDW: case RemoteServerType.STRIPE_FDW:
return FeatureFlagKeys.IsStripeIntegrationEnabled; return FeatureFlagKey.IsStripeIntegrationEnabled;
default: default:
throw new RemoteServerException( throw new RemoteServerException(
`Type ${remoteServerType} is not supported.`, `Type ${remoteServerType} is not supported.`,

View File

@ -5,26 +5,24 @@ import { InjectRepository } from '@nestjs/typeorm';
import { FileUpload, GraphQLUpload } from 'graphql-upload'; import { FileUpload, GraphQLUpload } from 'graphql-upload';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';
import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service'; import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { ExecuteServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/execute-serverless-function.input';
import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { ServerlessFunctionDto } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function.dto'; import { AuthWorkspace } from 'src/engine/decorators/auth/auth-workspace.decorator';
import { ServerlessFunctionExecutionResultDto } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto'; import { JwtAuthGuard } from 'src/engine/guards/jwt.auth.guard';
import { serverlessFunctionGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils';
import { CreateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function.input';
import { CreateServerlessFunctionFromFileInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function-from-file.input'; import { CreateServerlessFunctionFromFileInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function-from-file.input';
import { UpdateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/update-serverless-function.input'; import { CreateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/create-serverless-function.input';
import { DeleteServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/delete-serverless-function.input'; import { DeleteServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/delete-serverless-function.input';
import { import { ExecuteServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/execute-serverless-function.input';
FeatureFlagEntity, import { ServerlessFunctionExecutionResultDto } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function-execution-result.dto';
FeatureFlagKeys, import { ServerlessFunctionDto } from 'src/engine/metadata-modules/serverless-function/dtos/serverless-function.dto';
} from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { UpdateServerlessFunctionInput } from 'src/engine/metadata-modules/serverless-function/dtos/update-serverless-function.input';
import { import {
ServerlessFunctionException, ServerlessFunctionException,
ServerlessFunctionExceptionCode, ServerlessFunctionExceptionCode,
} from 'src/engine/metadata-modules/serverless-function/serverless-function.exception'; } from 'src/engine/metadata-modules/serverless-function/serverless-function.exception';
import { ServerlessFunctionService } from 'src/engine/metadata-modules/serverless-function/serverless-function.service';
import { serverlessFunctionGraphQLApiExceptionHandler } from 'src/engine/metadata-modules/serverless-function/utils/serverless-function-graphql-api-exception-handler.utils';
@UseGuards(JwtAuthGuard) @UseGuards(JwtAuthGuard)
@Resolver() @Resolver()
@ -39,7 +37,7 @@ export class ServerlessFunctionResolver {
const isFunctionSettingsEnabled = const isFunctionSettingsEnabled =
await this.featureFlagRepository.findOneBy({ await this.featureFlagRepository.findOneBy({
workspaceId, workspaceId,
key: FeatureFlagKeys.IsFunctionSettingsEnabled, key: FeatureFlagKey.IsFunctionSettingsEnabled,
value: true, value: true,
}); });

View File

@ -7,10 +7,8 @@ import {
BillingSubscription, BillingSubscription,
SubscriptionStatus, SubscriptionStatus,
} from 'src/engine/core-modules/billing/entities/billing-subscription.entity'; } from 'src/engine/core-modules/billing/entities/billing-subscription.entity';
import { import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
FeatureFlagEntity, import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
FeatureFlagKeys,
} from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity'; import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { EnvironmentService } from 'src/engine/integrations/environment/environment.service'; import { EnvironmentService } from 'src/engine/integrations/environment/environment.service';
@ -55,7 +53,7 @@ export class WorkspaceStatusService {
await this.featureFlagRepository.find({ await this.featureFlagRepository.find({
where: { where: {
workspaceId: Any(workspaceIds), workspaceId: Any(workspaceIds),
key: FeatureFlagKeys.IsFreeAccessEnabled, key: FeatureFlagKey.IsFreeAccessEnabled,
value: true, value: true,
}, },
}); });

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity'; import { CustomWorkspaceEntity } from 'src/engine/twenty-orm/custom.workspace-entity';
@ -99,14 +99,14 @@ export class ActivityTargetWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'activityTargets', inverseSideFieldKey: 'activityTargets',
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
@WorkspaceIsNullable() @WorkspaceIsNullable()
workflow: Relation<WorkflowWorkspaceEntity> | null; workflow: Relation<WorkflowWorkspaceEntity> | null;
@WorkspaceJoinColumn('workflow') @WorkspaceJoinColumn('workflow')
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
workflowId: string | null; workflowId: string | null;

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
@ -147,13 +147,13 @@ export class AttachmentWorkspaceEntity extends BaseWorkspaceEntity {
}) })
@WorkspaceIsNullable() @WorkspaceIsNullable()
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
workflow: Relation<WorkflowWorkspaceEntity> | null; workflow: Relation<WorkflowWorkspaceEntity> | null;
@WorkspaceJoinColumn('workflow') @WorkspaceJoinColumn('workflow')
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
workflowId: string | null; workflowId: string | null;

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
@ -113,14 +113,14 @@ export class FavoriteWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'favorites', inverseSideFieldKey: 'favorites',
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
@WorkspaceIsNullable() @WorkspaceIsNullable()
workflow: Relation<WorkflowWorkspaceEntity> | null; workflow: Relation<WorkflowWorkspaceEntity> | null;
@WorkspaceJoinColumn('workflow') @WorkspaceJoinColumn('workflow')
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
workflowId: string; workflowId: string;

View File

@ -1,6 +1,6 @@
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { IsFeatureEnabledService } from 'src/engine/core-modules/feature-flag/services/is-feature-enabled.service'; import { IsFeatureEnabledService } from 'src/engine/core-modules/feature-flag/services/is-feature-enabled.service';
import { CacheStorageService } from 'src/engine/integrations/cache-storage/cache-storage.service'; import { CacheStorageService } from 'src/engine/integrations/cache-storage/cache-storage.service';
import { InjectCacheStorage } from 'src/engine/integrations/cache-storage/decorators/cache-storage.decorator'; import { InjectCacheStorage } from 'src/engine/integrations/cache-storage/decorators/cache-storage.decorator';
@ -108,7 +108,7 @@ export class MessagingMessagesImportService {
if ( if (
await this.isFeatureEnabledService.isFeatureEnabled( await this.isFeatureEnabledService.isFeatureEnabled(
FeatureFlagKeys.IsMessagingAliasFetchingEnabled, FeatureFlagKey.IsMessagingAliasFetchingEnabled,
workspaceId, workspaceId,
) )
) { ) {

View File

@ -1,11 +1,11 @@
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator'; import { WorkspaceField } from 'src/engine/twenty-orm/decorators/workspace-field.decorator';
import { WorkspaceGate } from 'src/engine/twenty-orm/decorators/workspace-gate.decorator'; import { WorkspaceGate } from 'src/engine/twenty-orm/decorators/workspace-gate.decorator';
import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator'; import { WorkspaceIsNullable } from 'src/engine/twenty-orm/decorators/workspace-is-nullable.decorator';
import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator'; import { WorkspaceIsSystem } from 'src/engine/twenty-orm/decorators/workspace-is-system.decorator';
import { WorkspaceEntity } from 'src/engine/twenty-orm/decorators/workspace-entity.decorator';
import { BEHAVIORAL_EVENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids'; import { BEHAVIORAL_EVENT_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids'; import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@ -19,7 +19,7 @@ import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync
}) })
@WorkspaceIsSystem() @WorkspaceIsSystem()
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsEventObjectEnabled, featureFlag: FeatureFlagKey.IsEventObjectEnabled,
}) })
export class BehavioralEventWorkspaceEntity extends BaseWorkspaceEntity { export class BehavioralEventWorkspaceEntity extends BaseWorkspaceEntity {
/** /**

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
@ -163,14 +163,14 @@ export class TimelineActivityWorkspaceEntity extends BaseWorkspaceEntity {
inverseSideFieldKey: 'timelineActivities', inverseSideFieldKey: 'timelineActivities',
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
@WorkspaceIsNullable() @WorkspaceIsNullable()
workflow: Relation<WorkflowWorkspaceEntity> | null; workflow: Relation<WorkflowWorkspaceEntity> | null;
@WorkspaceJoinColumn('workflow') @WorkspaceJoinColumn('workflow')
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
workflowId: string | null; workflowId: string | null;

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
@ -25,7 +25,7 @@ import { WorkflowWorkspaceEntity } from 'src/modules/workflow/standard-objects/w
WORKFLOW_EVENT_LISTENER_STANDARD_FIELD_IDS.eventName, WORKFLOW_EVENT_LISTENER_STANDARD_FIELD_IDS.eventName,
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
@WorkspaceIsSystem() @WorkspaceIsSystem()
export class WorkflowEventListenerWorkspaceEntity extends BaseWorkspaceEntity { export class WorkflowEventListenerWorkspaceEntity extends BaseWorkspaceEntity {

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity'; import { RelationMetadataType } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity'; import { BaseWorkspaceEntity } from 'src/engine/twenty-orm/base.workspace-entity';
@ -39,7 +39,7 @@ export type WorkflowTrigger = WorkflowDatabaseEventTrigger;
labelIdentifierStandardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name, labelIdentifierStandardId: WORKFLOW_VERSION_STANDARD_FIELD_IDS.name,
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
@WorkspaceIsSystem() @WorkspaceIsSystem()
export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity { export class WorkflowVersionWorkspaceEntity extends BaseWorkspaceEntity {

View File

@ -1,6 +1,6 @@
import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface'; import { Relation } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/relation.interface';
import { FeatureFlagKeys } from 'src/engine/core-modules/feature-flag/feature-flag.entity'; import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; import { FieldMetadataType } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { import {
RelationMetadataType, RelationMetadataType,
@ -32,7 +32,7 @@ import { WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/standard-ob
labelIdentifierStandardId: WORKFLOW_STANDARD_FIELD_IDS.name, labelIdentifierStandardId: WORKFLOW_STANDARD_FIELD_IDS.name,
}) })
@WorkspaceGate({ @WorkspaceGate({
featureFlag: FeatureFlagKeys.IsWorkflowEnabled, featureFlag: FeatureFlagKey.IsWorkflowEnabled,
}) })
export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity { export class WorkflowWorkspaceEntity extends BaseWorkspaceEntity {
@WorkspaceField({ @WorkspaceField({