From 5c86debb1b66d62f32fe03b12c5b837811b49d74 Mon Sep 17 00:00:00 2001 From: Mohammad AbuAboud Date: Mon, 4 Mar 2024 20:46:23 +0100 Subject: [PATCH] refactor: move webhook into pieces --- package.json | 1 + .../handler/context/test-execution-context.ts | 1 - .../engine/src/lib/helper/logging-utils.ts | 1 - .../pieces/community/framework/package.json | 2 +- .../pieces/community/webhook/.eslintrc.json | 33 ++++ packages/pieces/community/webhook/README.md | 7 + .../pieces/community/webhook/package.json | 4 + .../pieces/community/webhook/project.json | 43 +++++ .../pieces/community/webhook/src/index.ts | 13 ++ .../webhook/src/lib/triggers/catch-hook.ts | 36 ++++ .../pieces/community/webhook/tsconfig.json | 19 ++ .../community/webhook/tsconfig.lib.json | 11 ++ .../common/1709581196563-migrate-webhook.ts | 81 +++++++++ .../1709505632771-SetNotNullOnPlatform.ts | 0 ...1709581196564-migrate-webhook-templates.ts | 79 ++++++++ .../src/app/database/postgres-connection.ts | 7 +- .../api/src/app/database/sqlite-connection.ts | 2 + .../flow-version/flow-version.service.ts | 3 - .../trigger-events/trigger-event.service.ts | 3 - .../integration/ce/flows/flow-worker.test.ts | 14 +- packages/shared/package.json | 2 +- packages/shared/src/index.ts | 2 +- packages/shared/src/lib/flows/flow-helper.ts | 11 +- .../shared/src/lib/flows/flow-operations.ts | 6 +- .../shared/src/lib/flows/triggers/trigger.ts | 12 -- packages/ui/common/src/lib/utils/utils.ts | 4 - .../flow-item-content.component.ts | 2 - .../mentions-list.component.html | 5 - ...ebhook-trigger-mention-item.component.html | 40 ----- .../webhook-trigger-mention-item.component.ts | 106 ----------- ...ui-feature-builder-form-controls.module.ts | 2 - .../edit-step-form-container.component.html | 24 --- .../edit-step-form-container.component.ts | 26 +-- .../src/lib/flow-right-sidebar.component.html | 3 - .../src/lib/step-type-sidebar/common.ts | 2 +- .../step-type-sidebar.component.ts | 10 -- .../src/lib/store/builder/builder.selector.ts | 10 +- .../src/lib/store/flow/flow.effects.ts | 1 - .../feature-builder-test-steps/src/index.ts | 1 - .../test-piece-webhook-trigger.component.html | 12 +- .../test-piece-webhook-trigger.component.ts | 22 +++ .../test-webhook-trigger.component.html | 87 --------- .../test-webhook-trigger.component.ts | 168 ------------------ .../ui-feature-builder-test-steps.module.ts | 2 - .../src/lib/pipes/trigger-icon.pipe.ts | 2 - .../src/lib/pipes/trigger-tooltip.pipe.ts | 2 - .../src/lib/services/piece-meta.service.ts | 11 -- tsconfig.base.json | 3 + 48 files changed, 395 insertions(+), 543 deletions(-) create mode 100644 packages/pieces/community/webhook/.eslintrc.json create mode 100644 packages/pieces/community/webhook/README.md create mode 100644 packages/pieces/community/webhook/package.json create mode 100644 packages/pieces/community/webhook/project.json create mode 100644 packages/pieces/community/webhook/src/index.ts create mode 100644 packages/pieces/community/webhook/src/lib/triggers/catch-hook.ts create mode 100644 packages/pieces/community/webhook/tsconfig.json create mode 100644 packages/pieces/community/webhook/tsconfig.lib.json create mode 100644 packages/server/api/src/app/database/migration/common/1709581196563-migrate-webhook.ts rename packages/server/api/src/app/database/migration/{ => postgres}/1709505632771-SetNotNullOnPlatform.ts (100%) create mode 100644 packages/server/api/src/app/database/migration/postgres/1709581196564-migrate-webhook-templates.ts delete mode 100644 packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.html delete mode 100644 packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.ts delete mode 100644 packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.html delete mode 100644 packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.ts diff --git a/package.json b/package.json index 7ee997e21b..0c19e18ed5 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "cli": "npx ts-node packages/cli/src/index.ts", "create-piece": "npx ts-node packages/cli/src/index.ts pieces create", "create-action": "npx ts-node packages/cli/src/index.ts actions create", + "create-trigger": "npx ts-node packages/cli/src/index.ts triggers create", "sync-pieces": "npx ts-node packages/cli/src/index.ts pieces sync", "publish-piece": "npx ts-node tools/scripts/pieces/publish-piece.ts" }, diff --git a/packages/engine/src/lib/handler/context/test-execution-context.ts b/packages/engine/src/lib/handler/context/test-execution-context.ts index 69b993d8fb..d4814b0282 100644 --- a/packages/engine/src/lib/handler/context/test-execution-context.ts +++ b/packages/engine/src/lib/handler/context/test-execution-context.ts @@ -46,7 +46,6 @@ export const testExecutionContext = { case ActionType.CODE: case TriggerType.EMPTY: case TriggerType.PIECE: - case TriggerType.WEBHOOK: flowExecutionContext = flowExecutionContext.upsertStep(step.name, GenericStepOutput.create({ input: step.settings, type: stepType, diff --git a/packages/engine/src/lib/helper/logging-utils.ts b/packages/engine/src/lib/helper/logging-utils.ts index 2a54450223..680f626f05 100644 --- a/packages/engine/src/lib/helper/logging-utils.ts +++ b/packages/engine/src/lib/helper/logging-utils.ts @@ -21,7 +21,6 @@ async function trimStepOutput(stepOutput: StepOutput): Promise { modified.input = await applyFunctionToValues(modified.input, trim) switch (modified.type) { case ActionType.BRANCH: - case TriggerType.WEBHOOK: case TriggerType.EMPTY: case TriggerType.PIECE: modified.output = await applyFunctionToValues(modified.output, trim) diff --git a/packages/pieces/community/framework/package.json b/packages/pieces/community/framework/package.json index 4fb9125dfa..f63ac06486 100644 --- a/packages/pieces/community/framework/package.json +++ b/packages/pieces/community/framework/package.json @@ -1,5 +1,5 @@ { "name": "@activepieces/pieces-framework", - "version": "0.7.21", + "version": "0.7.22", "type": "commonjs" } \ No newline at end of file diff --git a/packages/pieces/community/webhook/.eslintrc.json b/packages/pieces/community/webhook/.eslintrc.json new file mode 100644 index 0000000000..359ff63d51 --- /dev/null +++ b/packages/pieces/community/webhook/.eslintrc.json @@ -0,0 +1,33 @@ +{ + "extends": [ + "../../../../.eslintrc.json" + ], + "ignorePatterns": [ + "!**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.tsx", + "*.js", + "*.jsx" + ], + "rules": {} + }, + { + "files": [ + "*.ts", + "*.tsx" + ], + "rules": {} + }, + { + "files": [ + "*.js", + "*.jsx" + ], + "rules": {} + } + ] +} \ No newline at end of file diff --git a/packages/pieces/community/webhook/README.md b/packages/pieces/community/webhook/README.md new file mode 100644 index 0000000000..8b3dda2c08 --- /dev/null +++ b/packages/pieces/community/webhook/README.md @@ -0,0 +1,7 @@ +# pieces-webhook + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build pieces-webhook` to build the library. diff --git a/packages/pieces/community/webhook/package.json b/packages/pieces/community/webhook/package.json new file mode 100644 index 0000000000..911c46d1bb --- /dev/null +++ b/packages/pieces/community/webhook/package.json @@ -0,0 +1,4 @@ +{ + "name": "@activepieces/piece-webhook", + "version": "0.0.1" +} diff --git a/packages/pieces/community/webhook/project.json b/packages/pieces/community/webhook/project.json new file mode 100644 index 0000000000..d0c41aa657 --- /dev/null +++ b/packages/pieces/community/webhook/project.json @@ -0,0 +1,43 @@ +{ + "name": "pieces-webhook", + "$schema": "../../../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/pieces/community/webhook/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nx/js:tsc", + "outputs": [ + "{options.outputPath}" + ], + "options": { + "outputPath": "dist/packages/pieces/community/webhook", + "tsConfig": "packages/pieces/community/webhook/tsconfig.lib.json", + "packageJson": "packages/pieces/community/webhook/package.json", + "main": "packages/pieces/community/webhook/src/index.ts", + "assets": [ + "packages/pieces/community/webhook/*.md" + ], + "buildableProjectDepsInPackageJsonType": "dependencies", + "updateBuildableProjectDepsInPackageJson": true + } + }, + "publish": { + "command": "node tools/scripts/publish.mjs pieces-webhook {args.ver} {args.tag}", + "dependsOn": [ + "build" + ] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": [ + "{options.outputFile}" + ], + "options": { + "lintFilePatterns": [ + "packages/pieces/community/webhook/**/*.ts" + ] + } + } + }, + "tags": [] +} \ No newline at end of file diff --git a/packages/pieces/community/webhook/src/index.ts b/packages/pieces/community/webhook/src/index.ts new file mode 100644 index 0000000000..09b4f20d3b --- /dev/null +++ b/packages/pieces/community/webhook/src/index.ts @@ -0,0 +1,13 @@ + +import { createPiece, PieceAuth } from "@activepieces/pieces-framework"; +import { catchRequest } from "./lib/triggers/catch-hook"; + +export const webhook = createPiece({ + displayName: "Webhook", + auth: PieceAuth.None(), + minimumSupportedRelease: '0.21.0', + logoUrl: "https://cdn.activepieces.com/pieces/webhook.svg", + authors: [], + actions: [], + triggers: [catchRequest], +}); diff --git a/packages/pieces/community/webhook/src/lib/triggers/catch-hook.ts b/packages/pieces/community/webhook/src/lib/triggers/catch-hook.ts new file mode 100644 index 0000000000..5e26d7f4f0 --- /dev/null +++ b/packages/pieces/community/webhook/src/lib/triggers/catch-hook.ts @@ -0,0 +1,36 @@ + +import { createTrigger, Property, TriggerStrategy } from '@activepieces/pieces-framework'; + +const message = ` +Copy the following URL: +**{{webhookUrl}}** + + +If you are expecting a reply from this webhook, append **/sync** to the URL. + +In that case, you will also have to add an HTTP step with **return response** to the end of your flow. + +If the flow takes more than **30 seconds**, it will give a **408 Request Timeout** response. +`; + +export const catchRequest = createTrigger({ + name: 'catch_request', + displayName: 'Catch Request', + description: 'Receive incoming HTTP/webhooks using any HTTP method such as GET, POST, PUT, DELETE, etc.', + props: { + markdown: Property.MarkDown({ + value: message + }), + }, + sampleData: null, + type: TriggerStrategy.WEBHOOK, + async onEnable() { + // ignore + }, + async onDisable() { + // ignore + }, + async run(context) { + return [context.payload] + } +}) \ No newline at end of file diff --git a/packages/pieces/community/webhook/tsconfig.json b/packages/pieces/community/webhook/tsconfig.json new file mode 100644 index 0000000000..059cd81661 --- /dev/null +++ b/packages/pieces/community/webhook/tsconfig.json @@ -0,0 +1,19 @@ +{ + "extends": "../../../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + } + ] +} diff --git a/packages/pieces/community/webhook/tsconfig.lib.json b/packages/pieces/community/webhook/tsconfig.lib.json new file mode 100644 index 0000000000..28369ef762 --- /dev/null +++ b/packages/pieces/community/webhook/tsconfig.lib.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "commonjs", + "outDir": "../../../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "exclude": ["jest.config.ts", "src/**/*.spec.ts", "src/**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/packages/server/api/src/app/database/migration/common/1709581196563-migrate-webhook.ts b/packages/server/api/src/app/database/migration/common/1709581196563-migrate-webhook.ts new file mode 100644 index 0000000000..57fc614bcf --- /dev/null +++ b/packages/server/api/src/app/database/migration/common/1709581196563-migrate-webhook.ts @@ -0,0 +1,81 @@ +import { logger } from 'server-shared' +import { MigrationInterface, QueryRunner } from 'typeorm' + +const FLOW_VERSION_TABLE = 'flow_version' + +export class MigrateWebhook1709581196563 implements MigrationInterface { + name = 'MigrateWebhook1709581196563' + + public async up(queryRunner: QueryRunner): Promise { + logger.info('MigrateWebhook1709581196563, started') + + let count = 0 + const flowVersionsIds = await queryRunner.query('SELECT id FROM flow_version') + + for (const { id } of flowVersionsIds) { + const [flowVersion] = await queryRunner.query('SELECT * FROM flow_version WHERE id = $1', [id]) + const step = parseJson(flowVersion.trigger) + const isString = typeof flowVersion.trigger === 'string' + if (step.type === 'WEBHOOK') { + step.type = 'PIECE_TRIGGER' + step.settings = { + input: {}, + 'inputUiInfo': step.settings.inputUiInfo, + triggerName: 'catch_request', + pieceName: '@activepieces/piece-webhook', + pieceVersion: '~0.0.1', + 'pieceType': 'OFFICIAL', + 'packageType': 'REGISTRY', + } + count++ + const result = isString ? JSON.stringify(step) : step + await queryRunner.query( + `UPDATE ${FLOW_VERSION_TABLE} SET trigger = $1 WHERE id = $2`, + [result, flowVersion.id], + ) + } + } + logger.info('MigrateWebhook1709581196563, finished flows ' + count) + } + + public async down(queryRunner: QueryRunner): Promise { + logger.info('rolling back MigrateWebhook1709581196563, started') + + let count = 0 + const flowVersionsIds = await queryRunner.query('SELECT id FROM flow_version') + + for (const { id } of flowVersionsIds) { + const [flowVersion] = await queryRunner.query('SELECT * FROM flow_version WHERE id = $1', [id]) + + const step = parseJson(flowVersion.trigger) + const isString = typeof flowVersion.trigger === 'string' + if (step.type === 'PIECE_TRIGGER') { + if (step.settings.pieceName === '@activepieces/piece-webhook') { + step.type = 'WEBHOOK' + step.settings = { + 'inputUiInfo': step.settings.inputUiInfo, + } + count++ + const result = isString ? JSON.stringify(step) : step + await queryRunner.query( + `UPDATE ${FLOW_VERSION_TABLE} SET trigger = $1 WHERE id = $2`, + [result, flowVersion.id], + ) + } + } + } + logger.info( + 'rolling back MigrateWebhook1709581196563, finished flows ' + count, + ) + } +} + + +const parseJson = (json: string) => { + try { + return JSON.parse(json) + } + catch (e) { + return json + } +} diff --git a/packages/server/api/src/app/database/migration/1709505632771-SetNotNullOnPlatform.ts b/packages/server/api/src/app/database/migration/postgres/1709505632771-SetNotNullOnPlatform.ts similarity index 100% rename from packages/server/api/src/app/database/migration/1709505632771-SetNotNullOnPlatform.ts rename to packages/server/api/src/app/database/migration/postgres/1709505632771-SetNotNullOnPlatform.ts diff --git a/packages/server/api/src/app/database/migration/postgres/1709581196564-migrate-webhook-templates.ts b/packages/server/api/src/app/database/migration/postgres/1709581196564-migrate-webhook-templates.ts new file mode 100644 index 0000000000..234fcd3609 --- /dev/null +++ b/packages/server/api/src/app/database/migration/postgres/1709581196564-migrate-webhook-templates.ts @@ -0,0 +1,79 @@ +import { logger } from 'server-shared' +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class MigrateWebhookTemplate1709581196564 implements MigrationInterface { + name = 'MigrateWebhookTemplate1709581196564' + + public async up(queryRunner: QueryRunner): Promise { + logger.info('MigrateWebhookTemplate1709581196564, started') + + let count = 0 + const flowVersionsIds = await queryRunner.query('SELECT id FROM flow_template') + + for (const { id } of flowVersionsIds) { + const [flowVersion] = await queryRunner.query('SELECT * FROM flow_template WHERE id = $1', [id]) + const step = parseJson(flowVersion.template.trigger) + const isString = typeof flowVersion.template.trigger === 'string' + if (step.type === 'WEBHOOK') { + step.type = 'PIECE_TRIGGER' + step.settings = { + input: {}, + 'inputUiInfo': step.settings.inputUiInfo, + triggerName: 'catch_request', + pieceName: '@activepieces/piece-webhook', + pieceVersion: '~0.0.1', + 'pieceType': 'OFFICIAL', + 'packageType': 'REGISTRY', + } + count++ + const result = isString ? JSON.stringify(step) : step + await queryRunner.query( + 'UPDATE flow_template SET template = $1 WHERE id = $2', + [result, flowVersion.id], + ) + } + } + logger.info('MigrateWebhookTemplate1709581196564, finished flows ' + count) + } + + public async down(queryRunner: QueryRunner): Promise { + logger.info('rolling back MigrateWebhookTemplate1709581196564, started') + + let count = 0 + const flowVersionsIds = await queryRunner.query('SELECT id FROM flow_template') + + for (const { id } of flowVersionsIds) { + const [flowVersion] = await queryRunner.query('SELECT * FROM flow_template WHERE id = $1', [id]) + + const step = parseJson(flowVersion.template.trigger) + const isString = typeof flowVersion.template.trigger === 'string' + if (step.type === 'PIECE_TRIGGER') { + if (step.settings.pieceName === '@activepieces/piece-webhook') { + step.type = 'WEBHOOK' + step.settings = { + 'inputUiInfo': step.settings.inputUiInfo, + } + count++ + const result = isString ? JSON.stringify(step) : step + await queryRunner.query( + 'UPDATE flow_template SET template = $1 WHERE id = $2', + [result, flowVersion.id], + ) + } + } + } + logger.info( + 'rolling back MigrateWebhookTemplate1709581196564, finished flows ' + count, + ) + } +} + + +const parseJson = (json: string) => { + try { + return JSON.parse(json) + } + catch (e) { + return json + } +} diff --git a/packages/server/api/src/app/database/postgres-connection.ts b/packages/server/api/src/app/database/postgres-connection.ts index d231915910..c566f254f3 100644 --- a/packages/server/api/src/app/database/postgres-connection.ts +++ b/packages/server/api/src/app/database/postgres-connection.ts @@ -110,7 +110,9 @@ import { MakePlatformNotNullable1705969874745 } from './migration/postgres/17059 import { AddPlatformToPostgres1709052740378 } from './migration/postgres/1709052740378-AddPlatformToPostgres' import { AddSlugToGitRepo1709151540095 } from './migration/postgres/1709151540095-add-slug-to-git-repo' import { DropUnusedPlatformIndex1709500873378 } from './migration/postgres/1709500873378-DropUnusedPlatformIndex' -import { SetNotNullOnPlatform1709505632771 } from './migration/1709505632771-SetNotNullOnPlatform' +import { SetNotNullOnPlatform1709505632771 } from './migration/postgres/1709505632771-SetNotNullOnPlatform' +import { MigrateWebhook1709581196563 } from './migration/common/1709581196563-migrate-webhook' +import { MigrateWebhookTemplate1709581196564 } from './migration/postgres/1709581196564-migrate-webhook-templates' const getSslConfig = (): boolean | TlsOptions => { const useSsl = system.get(SystemProp.POSTGRES_USE_SSL) @@ -183,6 +185,7 @@ const getMigrations = (): (new () => MigrationInterface)[] => { AddTriggerTestStrategy1707087022764, AddCategoriesToPieceMetadataPostgres1707231704973, AddUniqueStoreConstraint1708521505204, + MigrateWebhook1709581196563, ] const edition = getEdition() @@ -236,6 +239,7 @@ const getMigrations = (): (new () => MigrationInterface)[] => { MakePlatformNotNullable1705969874745, AddSlugToGitRepo1709151540095, DropUnusedPlatformIndex1709500873378, + MigrateWebhookTemplate1709581196564, ) break case ApEdition.ENTERPRISE: @@ -282,6 +286,7 @@ const getMigrations = (): (new () => MigrationInterface)[] => { MakePlatformNotNullable1705969874745, AddSlugToGitRepo1709151540095, DropUnusedPlatformIndex1709500873378, + MigrateWebhookTemplate1709581196564, ) break case ApEdition.COMMUNITY: diff --git a/packages/server/api/src/app/database/sqlite-connection.ts b/packages/server/api/src/app/database/sqlite-connection.ts index 83c0eac902..af6e54697d 100644 --- a/packages/server/api/src/app/database/sqlite-connection.ts +++ b/packages/server/api/src/app/database/sqlite-connection.ts @@ -33,6 +33,7 @@ import { AddTriggerTestStrategy1707087022764 } from './migration/common/17070870 import { AddCategoriesToPieceMetadata1707229986819 } from './migration/sqlite/1707229986819-AddCategoriesToPieceMetadata' import { AddUniqueStoreConstraint1708527446535 } from './migration/sqlite/1708527446535-AddUniqueStoreConstraint' import { CreateDefaultPlaformSqlite1709051625110 } from './migration/sqlite/1709051625110-CreateDefaultPlaformSqlite' +import { MigrateWebhook1709581196563 } from './migration/common/1709581196563-migrate-webhook' const getSqliteDatabaseFilePath = (): string => { const apConfigDirectoryPath = system.getOrThrow(SystemProp.CONFIG_PATH) @@ -83,6 +84,7 @@ const getMigrations = (): (new () => MigrationInterface)[] => { AddCategoriesToPieceMetadata1707229986819, AddUniqueStoreConstraint1708527446535, CreateDefaultPlaformSqlite1709051625110, + MigrateWebhook1709581196563, ] const edition = getEdition() if (edition !== ApEdition.COMMUNITY) { diff --git a/packages/server/api/src/app/flows/flow-version/flow-version.service.ts b/packages/server/api/src/app/flows/flow-version/flow-version.service.ts index 9eabbbe163..06e8ac7076 100644 --- a/packages/server/api/src/app/flows/flow-version/flow-version.service.ts +++ b/packages/server/api/src/app/flows/flow-version/flow-version.service.ts @@ -459,9 +459,6 @@ async function prepareRequest( projectId, }) break - default: - clonedRequest.request.valid = true - break } break diff --git a/packages/server/api/src/app/flows/trigger-events/trigger-event.service.ts b/packages/server/api/src/app/flows/trigger-events/trigger-event.service.ts index c7bfcc6a5b..11f69af740 100644 --- a/packages/server/api/src/app/flows/trigger-events/trigger-event.service.ts +++ b/packages/server/api/src/app/flows/trigger-events/trigger-event.service.ts @@ -62,8 +62,6 @@ export const triggerEventService = { const trigger = flow.version.trigger const emptyPage = paginationHelper.createPage([], null) switch (trigger.type) { - case TriggerType.WEBHOOK: - throw new Error('Cannot be tested') case TriggerType.PIECE: { await deleteOldFilesForTestData({ projectId, @@ -167,7 +165,6 @@ function getSourceName(trigger: Trigger): string { return `${pieceName}@${pieceVersion}:${triggerName}` } - case TriggerType.WEBHOOK: case TriggerType.EMPTY: return trigger.type } diff --git a/packages/server/api/test/integration/ce/flows/flow-worker.test.ts b/packages/server/api/test/integration/ce/flows/flow-worker.test.ts index f4eb461fd4..b224cbd568 100644 --- a/packages/server/api/test/integration/ce/flows/flow-worker.test.ts +++ b/packages/server/api/test/integration/ce/flows/flow-worker.test.ts @@ -6,6 +6,8 @@ import { FlowVersionState, RunEnvironment, TriggerType, + PackageType, + PieceType, } from '@activepieces/shared' import { FastifyInstance } from 'fastify' import { databaseConnection } from '../../../../src/app/database/database-connection' @@ -55,8 +57,16 @@ describe('flow execution', () => { updatedBy: mockUser.id, state: FlowVersionState.LOCKED, trigger: { - type: TriggerType.WEBHOOK, + type: TriggerType.PIECE, settings: { + pieceName: '@activepieces/piece-schedule', + pieceVersion: '0.1.0', + input: { + run_on_weekends: false, + }, + triggerName: 'everyHourTrigger', + 'pieceType': PieceType.OFFICIAL, + 'packageType': PackageType.REGISTRY, inputUiInfo: {}, }, valid: true, @@ -145,7 +155,7 @@ describe('flow execution', () => { ).toEqual({ steps: { webhook: { - type: 'WEBHOOK', + type: 'PIECE_TRIGGER', status: 'SUCCEEDED', input: {}, output: {}, diff --git a/packages/shared/package.json b/packages/shared/package.json index 5ee293e913..ebec65a1f0 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,5 +1,5 @@ { "name": "@activepieces/shared", - "version": "0.10.90", + "version": "0.10.91", "type": "commonjs" } diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index ac3aad7735..ca13e7eae2 100755 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -30,7 +30,7 @@ export * from './lib/flows/actions/action' export { StoreEntry, StoreEntryId } from './lib/store-entry/store-entry' export * from './lib/user' export { TestFlowRunRequestBody } from './lib/flow-run/test-flow-run-request' -export { Trigger, EmptyTrigger, PieceTriggerSettings, PieceTrigger, WebhookTrigger, TriggerType, AUTHENTICATION_PROPERTY_NAME } from './lib/flows/triggers/trigger' +export { Trigger, EmptyTrigger, PieceTriggerSettings, PieceTrigger, TriggerType, AUTHENTICATION_PROPERTY_NAME } from './lib/flows/triggers/trigger' export { FlowVersion, FlowVersionState, FlowVersionId, FlowVersionMetadata } from './lib/flows/flow-version' export { Flow, FlowId } from './lib/flows/flow' export * from './lib/file' diff --git a/packages/shared/src/lib/flows/flow-helper.ts b/packages/shared/src/lib/flows/flow-helper.ts index 359213aeac..ad48d3ffb3 100755 --- a/packages/shared/src/lib/flows/flow-helper.ts +++ b/packages/shared/src/lib/flows/flow-helper.ts @@ -604,16 +604,8 @@ function createTrigger( settings: request.settings, } break - case TriggerType.WEBHOOK: - trigger = { - ...baseProperties, - type: TriggerType.WEBHOOK, - settings: request.settings, - } - break } - trigger.valid = - (request.valid ?? true) && triggerSchemaValidation.Check(trigger) + trigger.valid = (request.valid ?? true) && triggerSchemaValidation.Check(trigger) return trigger } @@ -678,7 +670,6 @@ export function getImportOperations( case ActionType.CODE: case ActionType.PIECE: case TriggerType.PIECE: - case TriggerType.WEBHOOK: case TriggerType.EMPTY: { break diff --git a/packages/shared/src/lib/flows/flow-operations.ts b/packages/shared/src/lib/flows/flow-operations.ts index 47d7cc1dc6..85436640d5 100755 --- a/packages/shared/src/lib/flows/flow-operations.ts +++ b/packages/shared/src/lib/flows/flow-operations.ts @@ -3,7 +3,7 @@ import { CodeActionSchema, BranchActionSchema, LoopOnItemsActionSchema, PieceActionSchema, Action, } from './actions/action' import { FlowStatus } from './flow' -import { EmptyTrigger, PieceTrigger, WebhookTrigger } from './triggers/trigger' +import { EmptyTrigger, PieceTrigger } from './triggers/trigger' import { Static, Type } from '@sinclair/typebox' @@ -43,7 +43,7 @@ export type LockFlowRequest = Static export const ImportFlowRequest = Type.Object({ displayName: Type.String({}), - trigger: Type.Union([Type.Composite([WebhookTrigger, optionalNextAction]), Type.Composite([PieceTrigger, optionalNextAction]), Type.Composite([EmptyTrigger, optionalNextAction])]), + trigger: Type.Union([Type.Composite([PieceTrigger, optionalNextAction]), Type.Composite([EmptyTrigger, optionalNextAction])]), }) export type ImportFlowRequest = Static @@ -91,7 +91,7 @@ export const AddActionRequest = Type.Object({ }) export type AddActionRequest = Static -export const UpdateTriggerRequest = Type.Union([EmptyTrigger, PieceTrigger, WebhookTrigger]) +export const UpdateTriggerRequest = Type.Union([EmptyTrigger, PieceTrigger]) export type UpdateTriggerRequest = Static export const UpdateFlowStatusRequest = Type.Object({ diff --git a/packages/shared/src/lib/flows/triggers/trigger.ts b/packages/shared/src/lib/flows/triggers/trigger.ts index 884f2c7b10..080435448e 100755 --- a/packages/shared/src/lib/flows/triggers/trigger.ts +++ b/packages/shared/src/lib/flows/triggers/trigger.ts @@ -6,7 +6,6 @@ export const AUTHENTICATION_PROPERTY_NAME = 'auth' export enum TriggerType { EMPTY = 'EMPTY', - WEBHOOK = 'WEBHOOK', PIECE = 'PIECE_TRIGGER', } @@ -25,16 +24,6 @@ export const EmptyTrigger = Type.Object({ export type EmptyTrigger = Static -export const WebhookTrigger = Type.Object({ - ...commonProps, - type: Type.Literal(TriggerType.WEBHOOK), - settings: Type.Object({ - inputUiInfo: SampleDataSettingsObject, - }), -}) - -export type WebhookTrigger = Static - export const PieceTriggerSettings = Type.Object({ pieceName: Type.String({}), pieceVersion: VersionType, @@ -56,7 +45,6 @@ export const PieceTrigger = Type.Object({ export type PieceTrigger = Static export const Trigger = Type.Union([ - WebhookTrigger, PieceTrigger, EmptyTrigger, ]) diff --git a/packages/ui/common/src/lib/utils/utils.ts b/packages/ui/common/src/lib/utils/utils.ts index b6af5e4ae6..18bf543529 100755 --- a/packages/ui/common/src/lib/utils/utils.ts +++ b/packages/ui/common/src/lib/utils/utils.ts @@ -2,10 +2,6 @@ import { ActionType, TriggerType } from '@activepieces/shared'; export function getDisplayNameForTrigger(triggerType: TriggerType) { switch (triggerType) { - case TriggerType.WEBHOOK: { - return $localize`Webhook Trigger`; - break; - } case TriggerType.EMPTY: { return $localize`Empty Trigger`; } diff --git a/packages/ui/feature-builder-canvas/src/lib/components/flow-item-tree/flow-item/flow-item-content/flow-item-content.component.ts b/packages/ui/feature-builder-canvas/src/lib/components/flow-item-tree/flow-item/flow-item-content/flow-item-content.component.ts index b2363439ec..e46965e209 100755 --- a/packages/ui/feature-builder-canvas/src/lib/components/flow-item-tree/flow-item/flow-item-content/flow-item-content.component.ts +++ b/packages/ui/feature-builder-canvas/src/lib/components/flow-item-tree/flow-item/flow-item-content/flow-item-content.component.ts @@ -211,8 +211,6 @@ export class FlowItemContentComponent implements OnInit { .pipe(map((p) => p.displayName)); case TriggerType.EMPTY: return of($localize`Choose a trigger`); - case TriggerType.WEBHOOK: - return of($localize`Webhook trigger`); } } extractChildStepsIconsUrls() { diff --git a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/mentions-list.component.html b/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/mentions-list.component.html index ebc95473c5..b63a902a66 100644 --- a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/mentions-list.component.html +++ b/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/mentions-list.component.html @@ -36,11 +36,6 @@ (mentionClicked)="mentionClicked($event)" [stepMention]="stepMention"> - - - - diff --git a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.html b/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.html deleted file mode 100644 index 6286055a57..0000000000 --- a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.html +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - -
-
- Send sample data first -
-
- This trigger needs to have data sent to it, to use as sample data -
-
- Go to trigger - -
-
-
-
- - diff --git a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.ts b/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.ts deleted file mode 100644 index 6b4a93d9a5..0000000000 --- a/packages/ui/feature-builder-form-controls/src/lib/interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component.ts +++ /dev/null @@ -1,106 +0,0 @@ -import { - ChangeDetectionStrategy, - Component, - EventEmitter, - Input, - OnInit, - Output, -} from '@angular/core'; -import { FormControl, FormGroup } from '@angular/forms'; -import { MatDialog } from '@angular/material/dialog'; -import { TriggerType, WebhookTrigger } from '@activepieces/shared'; -import { - MentionTreeNode, - traverseStepOutputAndReturnMentionTree, -} from '../../utils'; -import { MentionsTreeCacheService } from '../mentions-tree-cache.service'; -import { map, Observable, tap } from 'rxjs'; -import { Store } from '@ngrx/store'; -import { - CustomPathMentionDialogComponent, - CustomPathMentionDialogData, -} from '../custom-path-mention-dialog/custom-path-mention-dialog.component'; -import { Step, canvasActions } from '@activepieces/ui/feature-builder-store'; -import { MentionListItem } from '@activepieces/ui/common'; - -@Component({ - selector: 'app-webhook-trigger-mention-item', - templateUrl: './webhook-trigger-mention-item.component.html', - changeDetection: ChangeDetectionStrategy.OnPush, -}) -export class WebhookTriggerMentionItemComponent implements OnInit { - expandSample = false; - sampleData: MentionTreeNode[] | undefined = undefined; - nodesFilteredWithSearch$: Observable>; - @Input() - set stepMention(val: MentionListItem & { step: Step }) { - if (val.step.type !== TriggerType.WEBHOOK) { - throw new Error('Step is not a webhook trigger'); - } - this._stepMention = val as MentionListItem & { step: WebhookTrigger }; - } - @Input() stepIndex: number; - @Output() mentionEmitted: EventEmitter = new EventEmitter(); - customPathDialogClosed$: Observable; - _stepMention: MentionListItem & { step: WebhookTrigger }; - pathFormGroup: FormGroup<{ path: FormControl }>; - search$: Observable; - constructor( - private dialogService: MatDialog, - private mentionsTreeCache: MentionsTreeCacheService, - private store: Store - ) {} - ngOnInit(): void { - this.sampleData = traverseStepOutputAndReturnMentionTree( - this._stepMention.step.settings.inputUiInfo.currentSelectedData, - this._stepMention.step.name, - this._stepMention.step.displayName - ).children; - if (this.sampleData) { - this.mentionsTreeCache.setStepMentionsTree(this._stepMention.step.name, { - children: this.sampleData, - }); - } - this.search$ = this.mentionsTreeCache.listSearchBarObs$.pipe( - tap((res) => { - this.expandSample = !!res; - }) - ); - this.nodesFilteredWithSearch$ = - this.mentionsTreeCache.listSearchBarObs$.pipe( - map((res) => { - const markedNodesToShow = this.mentionsTreeCache.markNodesToShow( - this._stepMention.step.name, - res - ); - return markedNodesToShow; - }) - ); - } - - openPathDialog() { - const dialogData: CustomPathMentionDialogData = { - defaultValue: 'trigger', - dialogTitle: 'Webhook Payload Path', - entityName: 'webhook payload', - placeHolder: 'eg. trigger.headers', - stepDisplayName: this._stepMention.step.displayName, - stepName: 'trigger', - }; - this.customPathDialogClosed$ = this.dialogService - .open(CustomPathMentionDialogComponent, { data: dialogData }) - .afterClosed() - .pipe( - tap((val) => { - if (val) { - this.mentionEmitted.emit(val); - } - }) - ); - } - selectStep() { - this.store.dispatch( - canvasActions.selectStepByName({ stepName: this._stepMention.step.name }) - ); - } -} diff --git a/packages/ui/feature-builder-form-controls/src/lib/ui-feature-builder-form-controls.module.ts b/packages/ui/feature-builder-form-controls/src/lib/ui-feature-builder-form-controls.module.ts index dcfc8d2612..e605d645ba 100644 --- a/packages/ui/feature-builder-form-controls/src/lib/ui-feature-builder-form-controls.module.ts +++ b/packages/ui/feature-builder-form-controls/src/lib/ui-feature-builder-form-controls.module.ts @@ -25,7 +25,6 @@ import { AuthConfigsPipe } from './pipes/auth-configs.pipe'; import { PiecePropertiesFormComponent } from './piece-properties-form/piece-properties-form.component'; import { MatTreeModule } from '@angular/material/tree'; import { QuillModule } from 'ngx-quill'; -import { WebhookTriggerMentionItemComponent } from './interpolating-text-form-control/mentions-list/webhook-trigger-mention-item/webhook-trigger-mention-item.component'; import { BuilderAutocompleteDropdownHandlerComponent } from './interpolating-text-form-control/builder-autocomplete-dropdown-handler/builder-autocomplete-dropdown-handler.component'; import { AutocompleteDropdownSizesButtonsComponent } from './interpolating-text-form-control/mentions-list/autocomplete-dropdown-sizes-buttons/autocomplete-dropdown-sizes-buttons.component'; import { MarkdownModule } from 'ngx-markdown'; @@ -75,7 +74,6 @@ const exportedDeclarations = [ MentionListItemTemplateComponent, PieceTriggerMentionItemComponent, StepMentionsTreeComponent, - WebhookTriggerMentionItemComponent, AuthConfigsPipe, AutocompleteDropdownSizesButtonsComponent, SelectedAuthConfigsPipe, diff --git a/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.html b/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.html index ac5a3b54a8..fa889771cd 100755 --- a/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.html +++ b/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.html @@ -1,29 +1,5 @@
-
- -
- -
-

URL: -

- - - - - -
-
-
- - -
diff --git a/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.ts b/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.ts index ee7d18f495..1758f50d32 100755 --- a/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.ts +++ b/packages/ui/feature-builder-right-sidebar/src/lib/edit-step-sidebar/edit-step-form-container/edit-step-form-container.component.ts @@ -152,23 +152,14 @@ export class EditStepFormContainerComponent { }), debounceTime(350), tap((res) => { - if ( - this._selectedStep.type === TriggerType.PIECE || - this._selectedStep.type === TriggerType.WEBHOOK - ) { - if (this._selectedStep.type === TriggerType.WEBHOOK) { - this.updateNonAppWebhookTrigger(res.step!); + if (this._selectedStep.type === TriggerType.PIECE) { + const newTriggerSettings = this.createPieceSettings(res.step!); + const trigger = + res.metadata?.triggers[newTriggerSettings.triggerName]; + if (trigger?.type === TriggerStrategy.APP_WEBHOOK) { + this.updateAppWebhookTrigger(res.step!, trigger); } else { - const newTriggerSettings = this.createPieceSettings( - res.step! - ); - const trigger = - res.metadata?.triggers[newTriggerSettings.triggerName]; - if (trigger?.type === TriggerStrategy.APP_WEBHOOK) { - this.updateAppWebhookTrigger(res.step!, trigger); - } else { - this.updateNonAppWebhookTrigger(res.step!); - } + this.updateNonAppWebhookTrigger(res.step!); } } else { this.store.dispatch( @@ -255,9 +246,6 @@ export class EditStepFormContainerComponent { return this.createPieceSettings(currentStep); } case TriggerType.EMPTY: - case TriggerType.WEBHOOK: { - return inputControlValue; - } case ActionType.LOOP_ON_ITEMS: case ActionType.BRANCH: { const settings: BranchActionSettings | LoopOnItemsActionSettings = { diff --git a/packages/ui/feature-builder-right-sidebar/src/lib/flow-right-sidebar.component.html b/packages/ui/feature-builder-right-sidebar/src/lib/flow-right-sidebar.component.html index 46ef6fc0c6..15793c5e1f 100755 --- a/packages/ui/feature-builder-right-sidebar/src/lib/flow-right-sidebar.component.html +++ b/packages/ui/feature-builder-right-sidebar/src/lib/flow-right-sidebar.component.html @@ -46,9 +46,6 @@ *ngIf="currentStep.type === ActionType.PIECE || currentStep.type === ActionType.BRANCH || currentStep.type === ActionType.LOOP_ON_ITEMS || currentStep.type === ActionType.CODE" [step]="currentStep"> - { return coreSteps.includes(step.type); diff --git a/packages/ui/feature-builder-right-sidebar/src/lib/step-type-sidebar/step-type-sidebar.component.ts b/packages/ui/feature-builder-right-sidebar/src/lib/step-type-sidebar/step-type-sidebar.component.ts index e32975628a..3ccb23c94f 100755 --- a/packages/ui/feature-builder-right-sidebar/src/lib/step-type-sidebar/step-type-sidebar.component.ts +++ b/packages/ui/feature-builder-right-sidebar/src/lib/step-type-sidebar/step-type-sidebar.component.ts @@ -270,16 +270,6 @@ export class StepTypeSidebarComponent implements OnInit, AfterViewInit { settings: undefined, }; break; - case TriggerType.WEBHOOK: - trigger = { - ...base, - valid: true, - type: TriggerType.WEBHOOK, - settings: { - inputUiInfo: { currentSelectedData: '' }, - }, - }; - break; case TriggerType.PIECE: trigger = { ...base, diff --git a/packages/ui/feature-builder-store/src/lib/store/builder/builder.selector.ts b/packages/ui/feature-builder-store/src/lib/store/builder/builder.selector.ts index 88d31306df..1d0519c3ad 100755 --- a/packages/ui/feature-builder-store/src/lib/store/builder/builder.selector.ts +++ b/packages/ui/feature-builder-store/src/lib/store/builder/builder.selector.ts @@ -143,11 +143,7 @@ const selectCurrentStepSettings = createSelector( const selectTriggerSelectedSampleData = createSelector( selectCurrentStep, (step) => { - if ( - step && - (step.type === TriggerType.PIECE || step.type === TriggerType.WEBHOOK) && - step.settings.inputUiInfo - ) { + if (step && step.type === TriggerType.PIECE && step.settings.inputUiInfo) { return step.settings.inputUiInfo.currentSelectedData; } return undefined; @@ -453,8 +449,6 @@ function findStepLogoUrlForMentions( return 'assets/img/custom/piece/emptyTrigger.png'; case ActionType.BRANCH: return 'assets/img/custom/piece/branch_mention.png'; - case TriggerType.WEBHOOK: - return 'assets/img/custom/piece/webhook_mention.png'; case ActionType.LOOP_ON_ITEMS: return 'assets/img/custom/piece/loop_mention.png'; case ActionType.CODE: @@ -511,8 +505,6 @@ const selectFlowTriggerIsTested = createSelector(selectCurrentFlow, (flow) => { switch (flow.version.trigger.type) { case TriggerType.EMPTY: return false; - case TriggerType.WEBHOOK: - return !!flow.version.trigger.settings.inputUiInfo.currentSelectedData; case TriggerType.PIECE: return !!flow.version.trigger.settings.inputUiInfo.currentSelectedData; } diff --git a/packages/ui/feature-builder-store/src/lib/store/flow/flow.effects.ts b/packages/ui/feature-builder-store/src/lib/store/flow/flow.effects.ts index af6b52d381..7f4de5566c 100755 --- a/packages/ui/feature-builder-store/src/lib/store/flow/flow.effects.ts +++ b/packages/ui/feature-builder-store/src/lib/store/flow/flow.effects.ts @@ -202,7 +202,6 @@ export class FlowsEffects { case ActionType.CODE: case ActionType.LOOP_ON_ITEMS: case TriggerType.PIECE: - case TriggerType.WEBHOOK: case ActionType.PIECE: { const actionsToDispatch: Array = [ canvasActions.setRightSidebar({ diff --git a/packages/ui/feature-builder-test-steps/src/index.ts b/packages/ui/feature-builder-test-steps/src/index.ts index b40431c012..907009487c 100644 --- a/packages/ui/feature-builder-test-steps/src/index.ts +++ b/packages/ui/feature-builder-test-steps/src/index.ts @@ -2,7 +2,6 @@ export * from './lib/test-action/test-action.component'; export * from './lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component'; export * from './lib/ui-feature-builder-test-steps.module'; export * from './lib/test-steps-core.component'; -export * from './lib/test-webhook-trigger/test-webhook-trigger.component'; export * from './lib/test-polling-trigger/test-polling-trigger.component'; import '@angular/localize/init'; diff --git a/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.html b/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.html index 2a05f1b784..1b4b2eabff 100644 --- a/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.html +++ b/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.html @@ -16,11 +16,13 @@ [disabled]="(isValid$ | async) === false || (isSaving$ | async) === true" i18n>Test Trigger
-
- Or -
- Use Mock - Data + +
+ Or +
+ Use Mock + Data +
diff --git a/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.ts b/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.ts index cb99d11699..7d82e4ab68 100644 --- a/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.ts +++ b/packages/ui/feature-builder-test-steps/src/lib/test-piece-webhook-trigger/test-piece-webhook-trigger.component.ts @@ -53,6 +53,7 @@ export class TestPieceWebhookTriggerComponent extends TestStepCoreComponent { deleteWebhookSimulation$: Observable; useMockData$: Observable; test: Observable; + pieceSampleData$: Observable; constructor( testStepService: TestStepService, store: Store, @@ -88,6 +89,27 @@ export class TestPieceWebhookTriggerComponent extends TestStepCoreComponent { }) ); + this.pieceSampleData$ = this.store + .select(BuilderSelectors.selectCurrentStep) + .pipe( + take(1), + switchMap((step) => { + if (step && step.type === TriggerType.PIECE) { + return this.actionMetaService + .getPieceMetadata( + step.settings.pieceName, + step.settings.pieceVersion + ) + .pipe( + map((piece) => { + return piece.triggers[step.settings.triggerName].sampleData; + }) + ); + } + return of(null); + }) + ); + this.initaillySelectedSampleData$ = this.store .select(BuilderSelectors.selectStepTestSampleData) .pipe( diff --git a/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.html b/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.html deleted file mode 100644 index 10533a3b07..0000000000 --- a/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.html +++ /dev/null @@ -1,87 +0,0 @@ -
-
- Generate Sample Data -
- -
-
- - - Send Data - -
-
- - -
-
- - Tested Successfully -
-
- -
- Retest -
- - - - Data - - - -
(Result {{currentResults.length-idx}})
-
{{res.created | date:"short"}}
-
-
-
- - - - -
- -
-
-
- Testing trigger -
- Cancel -
- - -
- - Action Required -
-

- Please send data to the webhook endpoint to - test the step. -

- -
- - -
-
-
- -
- -
- -
-
- - - - - diff --git a/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.ts b/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.ts deleted file mode 100644 index cbcf3ce52e..0000000000 --- a/packages/ui/feature-builder-test-steps/src/lib/test-webhook-trigger/test-webhook-trigger.component.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { Component } from '@angular/core'; -import { Store } from '@ngrx/store'; -import { - BehaviorSubject, - forkJoin, - interval, - map, - merge, - Observable, - of, - Subject, - switchMap, - take, - takeUntil, - tap, -} from 'rxjs'; -import { TriggerType } from '@activepieces/shared'; -import { FormControl } from '@angular/forms'; -import deepEqual from 'deep-equal'; -import { TestStepCoreComponent } from '../test-steps-core.component'; -import { TestStepService } from '@activepieces/ui/common'; -import { - BuilderSelectors, - FlowsActions, -} from '@activepieces/ui/feature-builder-store'; - -export interface WebhookHistoricalData { - payload: unknown; - created: string; -} -@Component({ - selector: 'app-test-webhook-trigger', - templateUrl: './test-webhook-trigger.component.html', -}) -export class TestWebhookTriggerComponent extends TestStepCoreComponent { - currentResults$: BehaviorSubject; - testStep$: Observable; - foundNewResult$: Subject = new Subject(); - loading = false; - selectedDataControl: FormControl = new FormControl(); - saveNewSelectedData$: Observable; - initialHistoricalData$: Observable; - initaillySelectedSampleData$: Observable; - stopSelectedDataControlListener$ = new Subject(); - cancelTesting$ = new Subject(); - saveAfterNewDataIsLoaded$: Observable; - constructor(testStepService: TestStepService, store: Store) { - super(testStepService, store); - this.initialObservables(); - } - - private initialObservables() { - this.setSelectedDataControlListener(); - this.initialHistoricalData$ = this.store - .select(BuilderSelectors.selectCurrentFlow) - .pipe( - switchMap((flow) => { - return this.testStepService.getTriggerEventsResults( - flow.id?.toString() || '' - ); - }), - map((res) => { - return res.data; - }), - tap((res) => { - this.currentResults$ = new BehaviorSubject( - res - ); - }) - ); - this.initaillySelectedSampleData$ = this.store - .select(BuilderSelectors.selectTriggerSelectedSampleData) - .pipe( - tap((res) => { - this.stopSelectedDataControlListener$.next(true); - this.selectedDataControl.setValue(res); - this.setSelectedDataControlListener(); - }) - ); - } - - private setSelectedDataControlListener() { - this.saveNewSelectedData$ = this.selectedDataControl.valueChanges.pipe( - takeUntil(this.stopSelectedDataControlListener$), - tap(() => { - this.saveNewResultToStep(); - }), - map(() => void 0) - ); - } - - testStep() { - this.loading = true; - this.testStep$ = this.store.select(BuilderSelectors.selectCurrentFlow).pipe( - take(1), - switchMap((flow) => { - const stopListening$ = merge(this.cancelTesting$, this.foundNewResult$); - return interval(this.POLLING_TEST_INTERVAL_MS).pipe( - takeUntil(stopListening$), - switchMap(() => { - return this.createResultsChecker(flow.id.toString()); - }) - ); - }) - ); - } - - createResultsChecker(flowId: string) { - const observables = { - currentResults: of(this.currentResults$.value), - resultsChecked: this.testStepService.getTriggerEventsResults(flowId), - }; - return forkJoin(observables).pipe( - map((res) => { - const newResults = [ - ...res.resultsChecked.data.filter( - (e) => - res.currentResults.find((res) => res.created === e.created) === - undefined - ), - ]; - - if (newResults.length > 0) { - this.loading = false; - this.selectedDataControl.setValue( - newResults[newResults.length - 1].payload - ); - this.foundNewResult$.next(true); - const resultsList = [...newResults, ...res.currentResults]; - this.currentResults$.next(resultsList); - this.testStepService.elevateResizer$.next(true); - return resultsList; - } - return []; - }) - ); - } - saveNewResultToStep() { - this.saveAfterNewDataIsLoaded$ = this.store - .select(BuilderSelectors.selectCurrentStep) - .pipe( - take(1), - tap((step) => { - if (step && step.type === TriggerType.WEBHOOK) { - const clone = { ...step }; - clone.settings = { - inputUiInfo: { - currentSelectedData: this.selectedDataControl.value, - }, - }; - this.store.dispatch( - FlowsActions.updateTrigger({ - operation: clone, - }) - ); - } - }), - map(() => void 0) - ); - } - dropdownCompareWithFunction = (opt: unknown, formControlValue: unknown) => { - return formControlValue !== undefined && deepEqual(opt, formControlValue); - }; - cancelTesting() { - this.loading = false; - this.cancelTesting$.next(true); - } -} diff --git a/packages/ui/feature-builder-test-steps/src/lib/ui-feature-builder-test-steps.module.ts b/packages/ui/feature-builder-test-steps/src/lib/ui-feature-builder-test-steps.module.ts index a0e5200842..3f729940e1 100644 --- a/packages/ui/feature-builder-test-steps/src/lib/ui-feature-builder-test-steps.module.ts +++ b/packages/ui/feature-builder-test-steps/src/lib/ui-feature-builder-test-steps.module.ts @@ -2,14 +2,12 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { UiCommonModule } from '@activepieces/ui/common'; import { TestPollingTriggerComponent } from './test-polling-trigger/test-polling-trigger.component'; -import { TestWebhookTriggerComponent } from './test-webhook-trigger/test-webhook-trigger.component'; import { TestPieceWebhookTriggerComponent } from './test-piece-webhook-trigger/test-piece-webhook-trigger.component'; import { TimeagoModule } from 'ngx-timeago'; import { TestActionComponent } from './test-action/test-action.component'; const exportedDeclarations = [ TestPollingTriggerComponent, - TestWebhookTriggerComponent, TestActionComponent, TestPieceWebhookTriggerComponent, ]; diff --git a/packages/ui/feature-dashboard/src/lib/pipes/trigger-icon.pipe.ts b/packages/ui/feature-dashboard/src/lib/pipes/trigger-icon.pipe.ts index 2bb16370d9..0e6e0f698b 100644 --- a/packages/ui/feature-dashboard/src/lib/pipes/trigger-icon.pipe.ts +++ b/packages/ui/feature-dashboard/src/lib/pipes/trigger-icon.pipe.ts @@ -9,8 +9,6 @@ export class TriggerIconPipe implements PipeTransform { transform(flow: PopulatedFlow): string { const trigger = flow.version.trigger; switch (trigger.type) { - case TriggerType.WEBHOOK: - return 'assets/img/custom/triggers/instant-filled.svg'; case TriggerType.PIECE: { const cronExpression = flow.schedule?.cronExpression; if (cronExpression) { diff --git a/packages/ui/feature-dashboard/src/lib/pipes/trigger-tooltip.pipe.ts b/packages/ui/feature-dashboard/src/lib/pipes/trigger-tooltip.pipe.ts index c4677cc468..bc3cb92c20 100644 --- a/packages/ui/feature-dashboard/src/lib/pipes/trigger-tooltip.pipe.ts +++ b/packages/ui/feature-dashboard/src/lib/pipes/trigger-tooltip.pipe.ts @@ -10,8 +10,6 @@ export class TriggerTooltipPipe implements PipeTransform { transform(flow: PopulatedFlow, locale: string): string { const trigger = flow.version.trigger; switch (trigger.type) { - case TriggerType.WEBHOOK: - return $localize`Real time flow`; case TriggerType.PIECE: { const cronExpression = flow.schedule?.cronExpression; return cronExpression diff --git a/packages/ui/feature-pieces/src/lib/services/piece-meta.service.ts b/packages/ui/feature-pieces/src/lib/services/piece-meta.service.ts index d262e977f0..ea5c06eb8c 100644 --- a/packages/ui/feature-pieces/src/lib/services/piece-meta.service.ts +++ b/packages/ui/feature-pieces/src/lib/services/piece-meta.service.ts @@ -99,12 +99,6 @@ export class PieceMetadataService { ]; public triggerItemsDetails: FlowItemDetails[] = [ - { - type: TriggerType.WEBHOOK, - name: 'Webhook', - description: 'Trigger flow by calling a unique web url', - logoUrl: '/assets/img/custom/piece/webhook.svg', - }, { type: TriggerType.EMPTY, name: 'Trigger', @@ -271,11 +265,6 @@ export class PieceMetadataService { url: 'assets/img/custom/piece/loop_mention.png', key: 'loop', }; - case TriggerType.WEBHOOK: - return { - url: 'assets/img/custom/piece/webhook_mention.png', - key: 'webhook', - }; } throw new Error("Step type isn't accounted for"); diff --git a/tsconfig.base.json b/tsconfig.base.json index 5c5dad6831..3d6a73c21c 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -516,6 +516,9 @@ "@activepieces/piece-webflow": [ "packages/pieces/community/webflow/src/index.ts" ], + "@activepieces/piece-webhook": [ + "packages/pieces/community/webhook/src/index.ts" + ], "@activepieces/piece-whatsable": [ "packages/pieces/community/whatsable/src/index.ts" ],