Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,24 @@
import { taskadeAuth } from '../../';
import { createAction } from '@activepieces/pieces-framework';
import { taskadeProps } from '../common/props';
import { TaskadeAPIClient } from '../common/client';
export const completeTaskAction = createAction({
auth: taskadeAuth,
name: 'taskade-complete-task',
displayName: 'Complete Task',
description: 'Complete a task in a project.',
props: {
workspace_id: taskadeProps.workspace_id,
folder_id: taskadeProps.folder_id,
project_id: taskadeProps.project_id,
task_id: taskadeProps.task_id,
},
async run(context) {
const { project_id, task_id } = context.propsValue;
const client = new TaskadeAPIClient(context.auth.secret_text);
return await client.completeTask(project_id, task_id);
},
});

View File

@@ -0,0 +1,68 @@
import { taskadeAuth } from '../../';
import { createAction, Property } from '@activepieces/pieces-framework';
import { taskadeProps } from '../common/props';
import { TaskadeAPIClient } from '../common/client';
export const createTaskAction = createAction({
auth: taskadeAuth,
name: 'taskade-create-task',
displayName: 'Create Task',
description: 'Creates a new task.',
props: {
workspace_id: taskadeProps.workspace_id,
folder_id: taskadeProps.folder_id,
project_id: taskadeProps.project_id,
content_type: Property.StaticDropdown({
displayName: 'Content Type',
required: true,
defaultValue: 'text/markdown',
options: {
disabled: false,
options: [
{
label: 'text/markdown',
value: 'text/markdown',
},
{
label: 'text/plain',
value: 'text/plain',
},
],
},
}),
content: Property.LongText({
displayName: 'Task Content',
required: true,
}),
placement: Property.StaticDropdown({
displayName: 'Placement',
description: 'Placement of task in block',
required: true,
defaultValue: 'afterbegin',
options: {
disabled: false,
options: [
{
label: 'afterbegin',
value: 'afterbegin',
},
{
label: 'beforeend',
value: 'beforeend',
},
],
},
}),
},
async run(context) {
const { project_id, content_type, content, placement } = context.propsValue;
const client = new TaskadeAPIClient(context.auth.secret_text);
return await client.createTask(project_id, {
content,
contentType: content_type,
placement,
});
},
});

View File

@@ -0,0 +1,24 @@
import { taskadeAuth } from '../../';
import { createAction } from '@activepieces/pieces-framework';
import { taskadeProps } from '../common/props';
import { TaskadeAPIClient } from '../common/client';
export const deleteTaskAction = createAction({
auth: taskadeAuth,
name: 'taskade-delete-task',
displayName: 'Delete Task',
description: 'Delete an existing task in a project.',
props: {
workspace_id: taskadeProps.workspace_id,
folder_id: taskadeProps.folder_id,
project_id: taskadeProps.project_id,
task_id: taskadeProps.task_id,
},
async run(context) {
const { project_id, task_id } = context.propsValue;
const client = new TaskadeAPIClient(context.auth.secret_text);
return await client.deleteTask(project_id, task_id);
},
});