[CleanUp] Post api keys and webhooks migration cleanup (#13576)

This commit is contained in:
nitin
2025-08-05 12:43:09 +05:30
committed by GitHub
parent df9136c6c0
commit 676cf838af
15 changed files with 7 additions and 169 deletions
@@ -799,7 +799,6 @@ export enum FeatureFlagKey {
IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED',
IS_WORKFLOW_BRANCH_ENABLED = 'IS_WORKFLOW_BRANCH_ENABLED',
IS_WORKFLOW_FILTERING_ENABLED = 'IS_WORKFLOW_FILTERING_ENABLED',
IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED = 'IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED',
IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED'
}
@@ -763,7 +763,6 @@ export enum FeatureFlagKey {
IS_UNIQUE_INDEXES_ENABLED = 'IS_UNIQUE_INDEXES_ENABLED',
IS_WORKFLOW_BRANCH_ENABLED = 'IS_WORKFLOW_BRANCH_ENABLED',
IS_WORKFLOW_FILTERING_ENABLED = 'IS_WORKFLOW_FILTERING_ENABLED',
IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED = 'IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED',
IS_WORKSPACE_MIGRATION_V2_ENABLED = 'IS_WORKSPACE_MIGRATION_V2_ENABLED'
}
@@ -16,8 +16,8 @@ import { MessageQueueService } from 'src/engine/core-modules/message-queue/servi
import { SubscriptionsJob } from 'src/engine/subscriptions/subscriptions.job';
import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/workspace-event.type';
import { UpsertTimelineActivityFromInternalEvent } from 'src/modules/timeline/jobs/upsert-timeline-activity-from-internal-event.job';
import { CallWebhookJobsJob } from 'src/modules/webhook/jobs/call-webhook-jobs.job';
import { ObjectRecordEventForWebhook } from 'src/modules/webhook/types/object-record-event-for-webhook.type';
import { CallWebhookJobsJob } from 'src/engine/core-modules/webhook/jobs/call-webhook-jobs.job';
import { ObjectRecordEventForWebhook } from 'src/engine/core-modules/webhook/types/object-record-event-for-webhook.type';
@Injectable()
export class EntityEventsToDbListener {
@@ -10,7 +10,6 @@ export enum FeatureFlagKey {
IS_WORKFLOW_FILTERING_ENABLED = 'IS_WORKFLOW_FILTERING_ENABLED',
IS_WORKFLOW_BRANCH_ENABLED = 'IS_WORKFLOW_BRANCH_ENABLED',
IS_RELATION_CONNECT_ENABLED = 'IS_RELATION_CONNECT_ENABLED',
IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED = 'IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED',
IS_FIELDS_PERMISSIONS_ENABLED = 'IS_FIELDS_PERMISSIONS_ENABLED',
IS_CORE_VIEW_SYNCING_ENABLED = 'IS_CORE_VIEW_SYNCING_ENABLED',
IS_TWO_FACTOR_AUTHENTICATION_ENABLED = 'IS_TWO_FACTOR_AUTHENTICATION_ENABLED',
@@ -31,7 +31,7 @@ import { FavoriteModule } from 'src/modules/favorite/favorite.module';
import { MessagingModule } from 'src/modules/messaging/messaging.module';
import { TimelineJobModule } from 'src/modules/timeline/jobs/timeline-job.module';
import { TimelineActivityModule } from 'src/modules/timeline/timeline-activity.module';
import { WebhookJobModule } from 'src/modules/webhook/jobs/webhook-job.module';
import { WebhookJobModule } from 'src/engine/core-modules/webhook/jobs/webhook-job.module';
import { WorkflowModule } from 'src/modules/workflow/workflow.module';
@Module({
@@ -11,8 +11,8 @@ import { WorkspaceEventBatch } from 'src/engine/workspace-event-emitter/types/wo
import {
CallWebhookJob,
CallWebhookJobData,
} from 'src/modules/webhook/jobs/call-webhook.job';
import { ObjectRecordEventForWebhook } from 'src/modules/webhook/types/object-record-event-for-webhook.type';
} from 'src/engine/core-modules/webhook/jobs/call-webhook.job';
import { ObjectRecordEventForWebhook } from 'src/engine/core-modules/webhook/types/object-record-event-for-webhook.type';
import { removeSecretFromWebhookRecord } from 'src/utils/remove-secret-from-webhook-record';
@Processor(MessageQueue.webhookQueue)
@@ -3,8 +3,8 @@ import { Module } from '@nestjs/common';
import { AuditModule } from 'src/engine/core-modules/audit/audit.module';
import { WebhookModule } from 'src/engine/core-modules/webhook/webhook.module';
import { CallWebhookJobsJob } from 'src/modules/webhook/jobs/call-webhook-jobs.job';
import { CallWebhookJob } from 'src/modules/webhook/jobs/call-webhook.job';
import { CallWebhookJobsJob } from 'src/engine/core-modules/webhook/jobs/call-webhook-jobs.job';
import { CallWebhookJob } from 'src/engine/core-modules/webhook/jobs/call-webhook.job';
@Module({
imports: [HttpModule, AuditModule, WebhookModule],
@@ -133,7 +133,6 @@ describe('WorkspaceEntityManager', () => {
IS_WORKFLOW_FILTERING_ENABLED: false,
IS_WORKFLOW_BRANCH_ENABLED: false,
IS_RELATION_CONNECT_ENABLED: false,
IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED: false,
IS_FIELDS_PERMISSIONS_ENABLED: false,
IS_CORE_VIEW_SYNCING_ENABLED: false,
IS_TWO_FACTOR_AUTHENTICATION_ENABLED: false,
@@ -159,7 +158,6 @@ describe('WorkspaceEntityManager', () => {
IS_MORPH_RELATION_ENABLED: false,
IS_WORKFLOW_FILTERING_ENABLED: false,
IS_RELATION_CONNECT_ENABLED: false,
IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED: false,
IS_FIELDS_PERMISSIONS_ENABLED: true,
IS_CORE_VIEW_SYNCING_ENABLED: false,
IS_TWO_FACTOR_AUTHENTICATION_ENABLED: false,
@@ -29,12 +29,6 @@ export const ACTIVITY_STANDARD_FIELD_IDS = {
assignee: '20202020-4259-48e4-9e77-6b92991906d5',
};
export const API_KEY_STANDARD_FIELD_IDS = {
name: '20202020-72e6-4079-815b-436ce8a62f23',
expiresAt: '20202020-659b-4241-af59-66515b8e7d40',
revokedAt: '20202020-06ab-44b5-8faf-f6e407685001',
};
export const ATTACHMENT_STANDARD_FIELD_IDS = {
name: '20202020-87a5-48f8-bbf7-ade388825a57',
fullPath: '20202020-0d19-453d-8e8d-fbcda8ca3747',
@@ -447,14 +441,6 @@ export const VIEW_STANDARD_FIELD_IDS = {
anyFieldFilterValue: '20202020-3143-46c0-bb05-034063ce0703',
};
export const WEBHOOK_STANDARD_FIELD_IDS = {
targetUrl: '20202020-1229-45a8-8cf4-85c9172aae12',
operation: '20202020-15b7-458e-bf30-74770a54410c',
operations: '20202020-15b7-458e-bf30-74770a54411c',
description: '20202020-15b7-458e-bf30-74770a54410d',
secret: '20202020-97ce-410f-bff9-e9ccb038fb67',
};
export const WORKFLOW_AUTOMATED_TRIGGER_STANDARD_FIELD_IDS = {
type: '20202020-3319-4234-a34c-3f92c1ab56e7',
settings: '20202020-3319-4234-a34c-bac8f903de12',
@@ -552,7 +538,6 @@ export const CUSTOM_OBJECT_STANDARD_FIELD_IDS = {
export const STANDARD_OBJECT_FIELD_IDS = {
activityTarget: ACTIVITY_TARGET_STANDARD_FIELD_IDS,
activity: ACTIVITY_STANDARD_FIELD_IDS,
apiKey: API_KEY_STANDARD_FIELD_IDS,
attachment: ATTACHMENT_STANDARD_FIELD_IDS,
blocklist: BLOCKLIST_STANDARD_FIELD_IDS,
behavioralEvent: BEHAVIORAL_EVENT_STANDARD_FIELD_IDS,
@@ -585,7 +570,6 @@ export const STANDARD_OBJECT_FIELD_IDS = {
viewFilter: VIEW_FILTER_STANDARD_FIELD_IDS,
viewSort: VIEW_SORT_STANDARD_FIELD_IDS,
view: VIEW_STANDARD_FIELD_IDS,
webhook: WEBHOOK_STANDARD_FIELD_IDS,
workflow: WORKFLOW_STANDARD_FIELD_IDS,
workflowRun: WORKFLOW_RUN_STANDARD_FIELD_IDS,
workflowVersion: WORKFLOW_VERSION_STANDARD_FIELD_IDS,
@@ -9,7 +9,6 @@ export const STANDARD_OBJECT_IDS = {
// TODO: check if activity, activityTarget and comment can be deleted
activityTarget: '20202020-2945-440e-8d1a-f84672d33d5e',
activity: '20202020-39aa-4a89-843b-eb5f2a8b677f',
apiKey: '20202020-4c00-401d-8cda-ec6a4c41cd7d',
attachment: '20202020-bd3d-4c60-8dca-571c71d4447a',
blocklist: '20202020-0408-4f38-b8a8-4d5e3e26e24d',
behavioralEvent: '20202020-983d-416b-a5ee-bdd0da3d0f8f',
@@ -43,7 +42,6 @@ export const STANDARD_OBJECT_IDS = {
viewFilterGroup: '20202020-b920-4b11-92aa-9b07d878e542',
viewSort: '20202020-e46a-47a8-939a-e5d911f83531',
view: '20202020-722e-4739-8e2c-0c372d661f49',
webhook: '20202020-be4d-4e08-811d-0fffcd13ffd4',
workflow: '20202020-62be-406c-b9ca-8caa50d51392',
workflowEventListener: '20202020-92aa-462f-965c-a785b00e9989',
workflowRun: '20202020-4e28-4e95-a9d7-6c00874f843c',
@@ -1,4 +1,3 @@
import { ApiKeyWorkspaceEntity } from 'src/modules/api-key/standard-objects/api-key.workspace-entity';
import { AttachmentWorkspaceEntity } from 'src/modules/attachment/standard-objects/attachment.workspace-entity';
import { BlocklistWorkspaceEntity } from 'src/modules/blocklist/standard-objects/blocklist.workspace-entity';
import { CalendarChannelEventAssociationWorkspaceEntity } from 'src/modules/calendar/common/standard-objects/calendar-channel-event-association.workspace-entity';
@@ -28,7 +27,6 @@ import { ViewFilterWorkspaceEntity } from 'src/modules/view/standard-objects/vie
import { ViewGroupWorkspaceEntity } from 'src/modules/view/standard-objects/view-group.workspace-entity';
import { ViewSortWorkspaceEntity } from 'src/modules/view/standard-objects/view-sort.workspace-entity';
import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.workspace-entity';
import { WebhookWorkspaceEntity } from 'src/modules/webhook/standard-objects/webhook.workspace-entity';
import { WorkflowAutomatedTriggerWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-automated-trigger.workspace-entity';
import { WorkflowRunWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-run.workspace-entity';
import { WorkflowVersionWorkspaceEntity } from 'src/modules/workflow/common/standard-objects/workflow-version.workspace-entity';
@@ -71,6 +69,4 @@ export const standardObjectMetadataDefinitions = [
PersonWorkspaceEntity,
TaskWorkspaceEntity,
TaskTargetWorkspaceEntity,
ApiKeyWorkspaceEntity,
WebhookWorkspaceEntity,
];
@@ -1,57 +0,0 @@
import { msg } from '@lingui/core/macro';
import { FieldMetadataType } from 'twenty-shared/types';
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 { WorkspaceGate } from 'src/engine/twenty-orm/decorators/workspace-gate.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 { API_KEY_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@WorkspaceEntity({
standardId: STANDARD_OBJECT_IDS.apiKey,
namePlural: 'apiKeys',
labelSingular: msg`API Key`,
labelPlural: msg`API Keys`,
description: msg`An API key`,
icon: STANDARD_OBJECT_ICONS.apiKey,
labelIdentifierStandardId: API_KEY_STANDARD_FIELD_IDS.name,
})
@WorkspaceIsSystem()
@WorkspaceGate({
featureFlag: 'IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED',
excludeFromDatabase: false,
excludeFromWorkspaceApi: true,
})
export class ApiKeyWorkspaceEntity extends BaseWorkspaceEntity {
@WorkspaceField({
standardId: API_KEY_STANDARD_FIELD_IDS.name,
type: FieldMetadataType.TEXT,
label: msg`Name`,
description: msg`ApiKey name`,
icon: 'IconLink',
})
name: string;
@WorkspaceField({
standardId: API_KEY_STANDARD_FIELD_IDS.expiresAt,
type: FieldMetadataType.DATE_TIME,
label: msg`Expiration date`,
description: msg`ApiKey expiration date`,
icon: 'IconCalendar',
})
expiresAt: Date;
@WorkspaceField({
standardId: API_KEY_STANDARD_FIELD_IDS.revokedAt,
type: FieldMetadataType.DATE_TIME,
label: msg`Revocation date`,
description: msg`ApiKey revocation date`,
icon: 'IconCalendar',
})
@WorkspaceIsNullable()
revokedAt?: Date | null;
}
@@ -1,78 +0,0 @@
import { msg } from '@lingui/core/macro';
import { FieldMetadataType } from 'twenty-shared/types';
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 { WorkspaceGate } from 'src/engine/twenty-orm/decorators/workspace-gate.decorator';
import { WorkspaceIsDeprecated } from 'src/engine/twenty-orm/decorators/workspace-is-deprecated.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 { WEBHOOK_STANDARD_FIELD_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-field-ids';
import { STANDARD_OBJECT_ICONS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-icons';
import { STANDARD_OBJECT_IDS } from 'src/engine/workspace-manager/workspace-sync-metadata/constants/standard-object-ids';
@WorkspaceEntity({
standardId: STANDARD_OBJECT_IDS.webhook,
namePlural: 'webhooks',
labelSingular: msg`Webhook`,
labelPlural: msg`Webhooks`,
description: msg`A webhook`,
icon: STANDARD_OBJECT_ICONS.webhook,
labelIdentifierStandardId: WEBHOOK_STANDARD_FIELD_IDS.targetUrl,
})
@WorkspaceIsSystem()
@WorkspaceGate({
featureFlag: 'IS_WORKSPACE_API_KEY_WEBHOOK_GRAPHQL_ENABLED',
excludeFromDatabase: false,
excludeFromWorkspaceApi: true,
})
export class WebhookWorkspaceEntity extends BaseWorkspaceEntity {
@WorkspaceField({
standardId: WEBHOOK_STANDARD_FIELD_IDS.targetUrl,
type: FieldMetadataType.TEXT,
label: msg`Target Url`,
description: msg`Webhook target url`,
icon: 'IconLink',
})
targetUrl: string;
@WorkspaceField({
standardId: WEBHOOK_STANDARD_FIELD_IDS.operation,
type: FieldMetadataType.TEXT,
label: msg`Operation`,
description: msg`Webhook operation`,
icon: 'IconCheckbox',
})
@WorkspaceIsDeprecated()
operation: string;
@WorkspaceField({
standardId: WEBHOOK_STANDARD_FIELD_IDS.operations,
type: FieldMetadataType.ARRAY,
label: msg`Operations`,
description: msg`Webhook operations`,
icon: 'IconCheckbox',
defaultValue: ['*.*'],
})
operations: string[];
@WorkspaceField({
standardId: WEBHOOK_STANDARD_FIELD_IDS.description,
type: FieldMetadataType.TEXT,
label: msg`Description`,
description: undefined,
icon: 'IconInfo',
})
@WorkspaceIsNullable()
description: string;
@WorkspaceField({
standardId: WEBHOOK_STANDARD_FIELD_IDS.secret,
type: FieldMetadataType.TEXT,
label: msg`Secret`,
description: msg`Optional secret used to compute the HMAC signature for webhook payloads. This secret is shared between Twenty and the webhook consumer to authenticate webhook requests.`,
icon: 'IconLock',
})
secret: string;
}