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,51 @@
{
"Open-source product analytics": "Open-Source-Produktanalytik",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Klicke hier](https://posthog.com/docs/api/overview#personal-api-keys-recommended), um zu erfahren, wie du deinen persönlichen API-Schlüssel erhältst.\n",
"Create Event": "Ereignis erstellen",
"Create Project": "Projekt erstellen",
"Custom API Call": "Eigener API-Aufruf",
"Create an event inside a project": "Ereignis innerhalb eines Projekts erstellen",
"Create a posthog project": "Ein posthog Projekt erstellen",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"Event name": "Ereignisname",
"Event type": "Ereignistyp",
"Distinct Id": "Unterschiedliche Id",
"Properties": "Eigenschaften",
"Context": "Kontext",
"Message ID": "Nachrichten-ID",
"Category": "Kategorie",
"Name": "Name",
"Slack Incoming Webhook": "Slack eingehender Webhook",
"Anonymize IPs": "IPs anonymisieren",
"Is demo project": "Ist Demo-Projekt",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"The event name": "Name des Ereignisses",
"User's Distinct Id": "Unterschiedliche Id des Benutzers",
"The event properties": "Die Ereignis-Eigenschaften",
"The event context,": "Der Eventkontext",
"The message id,": "Die Nachricht Id",
"The event category.": "Die Ereignis-Kategorie.",
"Project Name": "Projekt Name",
"Slack incoming webhook": "Slack eingehender Webhook",
"Whether to anonymize incoming IP addresses.": "Gibt an, ob eingehende IP-Adressen anonymisiert werden sollen.",
"If this is a demo project": "Wenn dies ein Demo-Projekt ist",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"Alias": "Alias",
"Capture": "Erfassen",
"Identify": "Identifizieren",
"Page": "Seite",
"Screen": "Bildschirm",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Análisis de productos de código abierto",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Haz clic aquí](https://posthog.com/docs/api/overview#personal-api-keys-recommended) para aprender cómo obtener tu clave API personal.\n",
"Create Event": "Crear Evento",
"Create Project": "Crear proyecto",
"Custom API Call": "Llamada API personalizada",
"Create an event inside a project": "Crear un evento dentro de un proyecto",
"Create a posthog project": "Crear un proyecto posthog",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"Event name": "Nombre del evento",
"Event type": "Tipo de evento",
"Distinct Id": "Id distinto",
"Properties": "Propiedades",
"Context": "Contexto",
"Message ID": "ID del mensaje",
"Category": "Categoría",
"Name": "Nombre",
"Slack Incoming Webhook": "Webhook entrante de Slack",
"Anonymize IPs": "Anonimizar los IP",
"Is demo project": "Es proyecto demo",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"The event name": "El nombre del evento",
"User's Distinct Id": "Id del Distinto del Usuario",
"The event properties": "Las propiedades del evento",
"The event context,": "El contexto del evento,",
"The message id,": "El id del mensaje,",
"The event category.": "La categoría de eventos.",
"Project Name": "Nombre del proyecto",
"Slack incoming webhook": "Webhook entrante de Slack",
"Whether to anonymize incoming IP addresses.": "Si desea anonimizar las direcciones IP entrantes.",
"If this is a demo project": "Si este es un proyecto de demostración",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"Alias": "Alias",
"Capture": "Captura",
"Identify": "Identificar",
"Page": "Pgina",
"Screen": "Pantalla",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Analyses de produits open source",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Cliquez ici](https://posthog.com/docs/api/overview#personal-api-keys-recommended) pour apprendre comment obtenir votre clé d'API personnelle.\n",
"Create Event": "Créer un événement",
"Create Project": "Créer un projet",
"Custom API Call": "Appel API personnalisé",
"Create an event inside a project": "Créer un événement dans un projet",
"Create a posthog project": "Créer un projet posthog",
"Make a custom API call to a specific endpoint": "Passez un appel API personnalisé à un point de terminaison spécifique",
"Event name": "Nom de l'événement",
"Event type": "Type d'événement",
"Distinct Id": "Id Distinct",
"Properties": "Propriétés",
"Context": "Contexte",
"Message ID": "ID du message",
"Category": "Catégorie",
"Name": "Nom",
"Slack Incoming Webhook": "Webhook entrant Slack",
"Anonymize IPs": "Anonymiser les IP",
"Is demo project": "Est un projet démo",
"Method": "Méthode",
"Headers": "En-têtes",
"Query Parameters": "Paramètres de requête",
"Body": "Corps",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'attente (en secondes)",
"The event name": "Le nom de l'événement",
"User's Distinct Id": "Id distinctif de l'utilisateur",
"The event properties": "Propriétés de l'événement",
"The event context,": "Le contexte de l'événement,",
"The message id,": "L'identifiant du message",
"The event category.": "La catégorie d'événements.",
"Project Name": "Project Name",
"Slack incoming webhook": "Webhook entrant Slack",
"Whether to anonymize incoming IP addresses.": "Si l'on doit anonymiser les adresses IP entrantes.",
"If this is a demo project": "Si c'est un projet de démo",
"Authorization headers are injected automatically from your connection.": "Les en-têtes d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"Alias": "Alias",
"Capture": "Capturer",
"Identify": "Identifier",
"Page": "Page",
"Screen": "Ecran",
"GET": "OBTENIR",
"POST": "POSTER",
"PATCH": "PATCH",
"PUT": "EFFACER",
"DELETE": "SUPPRIMER",
"HEAD": "TÊTE"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "オープンソースの製品分析",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) で、個人用APIキーの取得方法を学びます。\n",
"Create Event": "イベントを作成",
"Create Project": "プロジェクトを作成",
"Custom API Call": "カスタムAPI通話",
"Create an event inside a project": "プロジェクト内でイベントを作成する",
"Create a posthog project": "ポスログプロジェクトを作成",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"Event name": "イベント名",
"Event type": "イベントの種類",
"Distinct Id": "個別ID",
"Properties": "プロパティー",
"Context": "コンテキスト",
"Message ID": "メッセージID",
"Category": "カテゴリ",
"Name": "Name",
"Slack Incoming Webhook": "Slack Incoming Webhook",
"Anonymize IPs": "IPの匿名化",
"Is demo project": "デモプロジェクト",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"The event name": "イベント名",
"User's Distinct Id": "User's Distinct Id",
"The event properties": "イベントのプロパティ",
"The event context,": "イベントのコンテキスト",
"The message id,": "メッセージ ID",
"The event category.": "イベントカテゴリ。",
"Project Name": "プロジェクト名",
"Slack incoming webhook": "WebhookをSlack incoming",
"Whether to anonymize incoming IP addresses.": "受信IPアドレスを匿名化するかどうかを設定します。",
"If this is a demo project": "デモプロジェクトの場合",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"Alias": "Alias",
"Capture": "Capture",
"Identify": "識別",
"Page": "ページ",
"Screen": "画面",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Open-source product analytics",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Klik hier](https://posthog.com/docs/api/overview#personal-api-keys-recommended) om te leren hoe uw persoonlijke API-sleutel te verkrijgen.\n",
"Create Event": "Gebeurtenis aanmaken",
"Create Project": "Project aanmaken",
"Custom API Call": "Custom API Call",
"Create an event inside a project": "Maak een event aan binnen een project",
"Create a posthog project": "Maak een posthog project",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"Event name": "Naam van gebeurtenis",
"Event type": "Gebeurtenis type",
"Distinct Id": "Verschillende ID",
"Properties": "Eigenschappen",
"Context": "Context",
"Message ID": "Bericht ID",
"Category": "categorie",
"Name": "Naam",
"Slack Incoming Webhook": "Toegestane binnenkomende Webhook",
"Anonymize IPs": "IP anonimiseren",
"Is demo project": "Is demo-project",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"The event name": "Naam van de gebeurtenis",
"User's Distinct Id": "Gebruiker's Distinct Id",
"The event properties": "Eigenschappen van de gebeurtenis",
"The event context,": "De gebeurtenis context,",
"The message id,": "Het bericht id,",
"The event category.": "De gebeurtenis categorie.",
"Project Name": "Projectnaam",
"Slack incoming webhook": "Toegestane inkomende webhook",
"Whether to anonymize incoming IP addresses.": "Inkomende IP adressen anonimiseren.",
"If this is a demo project": "Als dit een demo-project is",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"Alias": "Alias",
"Capture": "Vastleggen",
"Identify": "Identificeren",
"Page": "Pagina",
"Screen": "Scherm",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Análise de produtos de código aberto",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Clique aqui](https://posthog.com/docs/api/overview#personal-api-keys-recommended) para aprender como obter sua chave de API pessoal.\n",
"Create Event": "Criar evento",
"Create Project": "Criar Projeto",
"Custom API Call": "Chamada de API personalizada",
"Create an event inside a project": "Criar um evento dentro de um projeto",
"Create a posthog project": "Criar um projeto posthog",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"Event name": "Nome do evento",
"Event type": "Tipo de evento",
"Distinct Id": "ID distinto",
"Properties": "propriedades",
"Context": "Contexto",
"Message ID": "ID da mensagem",
"Category": "categoria",
"Name": "Nome",
"Slack Incoming Webhook": "Webhook recebido do Slack",
"Anonymize IPs": "Anonimizar IPs",
"Is demo project": "É um projeto de demonstração",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"The event name": "Nome do evento",
"User's Distinct Id": "Identificação distinta do usuário",
"The event properties": "As propriedades do evento",
"The event context,": "O contexto de evento,",
"The message id,": "O id da mensagem,",
"The event category.": "A categoria do evento.",
"Project Name": "Nome do Projeto",
"Slack incoming webhook": "Webhook de entrada Slack",
"Whether to anonymize incoming IP addresses.": "Se deseja anonimizar endereços IP recebidos.",
"If this is a demo project": "Se este é um projeto de demonstração",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"Alias": "Alias",
"Capture": "Capturar",
"Identify": "Identificar",
"Page": "Página",
"Screen": "Tela",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA"
}

View File

@@ -0,0 +1,50 @@
{
"PostHog": "Постхог",
"Open-source product analytics": "Аналитика продуктов с открытым исходным кодом",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n",
"Create Event": "Создать событие",
"Create Project": "Создать проект",
"Custom API Call": "Пользовательский вызов API",
"Create an event inside a project": "Создать событие внутри проекта",
"Create a posthog project": "Создать проект Posthog",
"Make a custom API call to a specific endpoint": "Сделать пользовательский API вызов к определенной конечной точке",
"Event name": "Название события",
"Event type": "Тип события",
"Distinct Id": "Идентификатор отдельного",
"Properties": "Свойства",
"Context": "Контекст",
"Message ID": "ID сообщения",
"Category": "Категория",
"Name": "Наименование",
"Slack Incoming Webhook": "Входящий Slack Webhook",
"Anonymize IPs": "Анонимизировать IP",
"Is demo project": "Демонстрационный проект",
"Method": "Метод",
"Headers": "Заголовки",
"Query Parameters": "Параметры запроса",
"Body": "Тело",
"No Error on Failure": "Нет ошибок при ошибке",
"Timeout (in seconds)": "Таймаут (в секундах)",
"The event name": "Название события",
"User's Distinct Id": "Идентификатор отдельного пользователя",
"The event properties": "Свойства события",
"The event context,": "Контекст события,",
"The message id,": "Идентификатор сообщения,",
"The event category.": "Категория события.",
"Project Name": "Название проекта",
"Slack incoming webhook": "Перехватывать входящие вебхуки",
"Whether to anonymize incoming IP addresses.": "Анонимизировать ли входящие IP адреса.",
"If this is a demo project": "Если это демо-проект",
"Authorization headers are injected automatically from your connection.": "Заголовки авторизации включаются автоматически из вашего соединения.",
"Alias": "Alias",
"Capture": "Захват",
"Identify": "Определить",
"Page": "Страница",
"Screen": "Экран",
"GET": "ПОЛУЧИТЬ",
"POST": "ПОСТ",
"PATCH": "ПАТЧ",
"PUT": "ПОКУПИТЬ",
"DELETE": "УДАЛИТЬ",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Open-source product analytics",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n",
"Create Event": "Create Event",
"Create Project": "Create Project",
"Custom API Call": "Custom API Call",
"Create an event inside a project": "Create an event inside a project",
"Create a posthog project": "Create a posthog project",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Event name": "Event name",
"Event type": "Event type",
"Distinct Id": "Distinct Id",
"Properties": "Properties",
"Context": "Context",
"Message ID": "Message ID",
"Category": "Category",
"Name": "Name",
"Slack Incoming Webhook": "Slack Incoming Webhook",
"Anonymize IPs": "Anonymize IPs",
"Is demo project": "Is demo project",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The event name": "The event name",
"User's Distinct Id": "User's Distinct Id",
"The event properties": "The event properties",
"The event context,": "The event context,",
"The message id,": "The message id,",
"The event category.": "The event category.",
"Project Name": "Project Name",
"Slack incoming webhook": "Slack incoming webhook",
"Whether to anonymize incoming IP addresses.": "Whether to anonymize incoming IP addresses.",
"If this is a demo project": "If this is a demo project",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Alias": "Alias",
"Capture": "Capture",
"Identify": "Identify",
"Page": "Page",
"Screen": "Screen",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,50 @@
{
"PostHog": "PostHog",
"Open-source product analytics": "Open-source product analytics",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n",
"Create Event": "Create Event",
"Create Project": "Create Project",
"Custom API Call": "Custom API Call",
"Create an event inside a project": "Create an event inside a project",
"Create a posthog project": "Create a posthog project",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"Event name": "Event name",
"Event type": "Event type",
"Distinct Id": "Distinct Id",
"Properties": "Properties",
"Context": "Context",
"Message ID": "Message ID",
"Category": "Category",
"Name": "Name",
"Slack Incoming Webhook": "Slack Incoming Webhook",
"Anonymize IPs": "Anonymize IPs",
"Is demo project": "Is demo project",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"The event name": "The event name",
"User's Distinct Id": "User's Distinct Id",
"The event properties": "The event properties",
"The event context,": "The event context,",
"The message id,": "The message id,",
"The event category.": "The event category.",
"Project Name": "Project Name",
"Slack incoming webhook": "Slack incoming webhook",
"Whether to anonymize incoming IP addresses.": "Whether to anonymize incoming IP addresses.",
"If this is a demo project": "If this is a demo project",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Alias": "Alias",
"Capture": "Capture",
"Identify": "Identify",
"Page": "Page",
"Screen": "Screen",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD"
}

View File

@@ -0,0 +1,51 @@
{
"Open-source product analytics": "Open-source product analytics",
"\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n": "\n[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.\n",
"Create Event": "Create Event",
"Create Project": "Create Project",
"Custom API Call": "自定义 API 呼叫",
"Create an event inside a project": "Create an event inside a project",
"Create a posthog project": "Create a posthog project",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"Event name": "Event name",
"Event type": "Event type",
"Distinct Id": "Distinct Id",
"Properties": "Properties",
"Context": "Context",
"Message ID": "Message ID",
"Category": "Category",
"Name": "名称",
"Slack Incoming Webhook": "Slack Incoming Webhook",
"Anonymize IPs": "Anonymize IPs",
"Is demo project": "Is demo project",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"The event name": "The event name",
"User's Distinct Id": "User's Distinct Id",
"The event properties": "The event properties",
"The event context,": "The event context,",
"The message id,": "The message id,",
"The event category.": "The event category.",
"Project Name": "项目名称",
"Slack incoming webhook": "Slack incoming webhook",
"Whether to anonymize incoming IP addresses.": "Whether to anonymize incoming IP addresses.",
"If this is a demo project": "If this is a demo project",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"Alias": "Alias",
"Capture": "Capture",
"Identify": "Identify",
"Page": "Page",
"Screen": "Screen",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色"
}

View File

@@ -0,0 +1,38 @@
import { createCustomApiCallAction } from '@activepieces/pieces-common';
import { PieceAuth, createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { posthogCreateEvent } from './lib/actions/create-event';
import { posthogCreateProject } from './lib/actions/create-project';
const authenticationMarkdown = `
[Click here](https://posthog.com/docs/api/overview#personal-api-keys-recommended) to learn how to obtain your Personal API key.
`;
export const posthogAuth = PieceAuth.SecretText({
displayName: 'Personal API Key',
description: authenticationMarkdown,
required: true,
});
export const posthog = createPiece({
displayName: 'PostHog',
description: 'Open-source product analytics',
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/posthog.png',
categories: [PieceCategory.BUSINESS_INTELLIGENCE],
auth: posthogAuth,
actions: [
posthogCreateEvent,
posthogCreateProject,
createCustomApiCallAction({
baseUrl: () => 'https://app.posthog.com',
auth: posthogAuth,
authMapping: async (auth) => ({
Authorization: `Bearer ${auth}`,
}),
}),
],
authors: ["kishanprmr","MoShizzle","khaledmashaly","abuaboud"],
triggers: [],
});

View File

@@ -0,0 +1,92 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
HttpRequest,
} from '@activepieces/pieces-common';
import { EventBody, EventCaptureResponse } from '../common/models';
import { posthogAuth } from '../..';
export const posthogCreateEvent = createAction({
auth: posthogAuth,
name: 'create_event',
displayName: 'Create Event',
description: 'Create an event inside a project',
props: {
event: Property.ShortText({
displayName: 'Event name',
description: 'The event name',
required: true,
}),
event_type: Property.StaticDropdown({
displayName: 'Event type',
required: true,
options: {
options: [
{ label: 'Alias', value: 'alias' },
{ label: 'Capture', value: 'capture' },
{ label: 'Identify', value: 'screen' },
{ label: 'Page', value: 'page' },
{ label: 'Screen', value: 'screen' },
],
},
}),
distinct_id: Property.ShortText({
displayName: 'Distinct Id',
description: "User's Distinct Id",
required: true,
}),
properties: Property.Object({
displayName: 'Properties',
description: 'The event properties',
required: false,
}),
context: Property.Object({
displayName: 'Context',
description: 'The event context,',
required: false,
}),
message_id: Property.ShortText({
displayName: 'Message ID',
description: 'The message id,',
required: false,
}),
category: Property.ShortText({
displayName: 'Category',
description: 'The event category.',
required: false,
}),
},
async run(context) {
const body: EventBody = {
event: context.propsValue.event,
type: context.propsValue.event_type!,
api_key: context.auth.secret_text,
messageId: context.propsValue.message_id,
context: context.propsValue.context || {},
properties: context.propsValue.properties || {},
distinct_id: context.propsValue.distinct_id,
category: context.propsValue.category,
};
const request: HttpRequest<EventBody> = {
method: HttpMethod.POST,
url: `https://app.posthog.com/capture/`,
body,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: context.auth.secret_text,
},
};
const result = await httpClient.sendRequest<EventCaptureResponse>(request);
console.debug('Event creation response', result);
if (result.status === 200) {
return result.body;
}
return result;
},
});

View File

@@ -0,0 +1,62 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
AuthenticationType,
httpClient,
HttpMethod,
HttpRequest,
} from '@activepieces/pieces-common';
import { ProjectCreateRequest, ProjectCreateResponse } from '../common/models';
import { posthogAuth } from '../..';
export const posthogCreateProject = createAction({
auth: posthogAuth,
name: 'create_project',
displayName: 'Create Project',
description: 'Create a posthog project',
props: {
name: Property.ShortText({
displayName: 'Name',
description: 'Project Name',
required: false,
}),
slack_incoming_webhook: Property.ShortText({
displayName: 'Slack Incoming Webhook',
description: 'Slack incoming webhook',
required: false,
}),
anonymize_ips: Property.Checkbox({
displayName: 'Anonymize IPs',
description: 'Whether to anonymize incoming IP addresses.',
required: false,
}),
is_demo: Property.Checkbox({
displayName: 'Is demo project',
description: 'If this is a demo project',
required: false,
}),
},
async run(context) {
const body: ProjectCreateRequest = {
...context.propsValue,
};
const request: HttpRequest<ProjectCreateRequest> = {
method: HttpMethod.POST,
url: `https://app.posthog.com/api/projects/`,
body,
authentication: {
type: AuthenticationType.BEARER_TOKEN,
token: context.auth.secret_text,
},
};
const result = await httpClient.sendRequest<ProjectCreateResponse>(request);
console.debug('Project creation response', result);
if (result.status === 200) {
return result.body;
}
return result;
},
});

View File

@@ -0,0 +1,66 @@
import { HttpMessageBody } from '@activepieces/pieces-common';
export interface EventBody extends HttpMessageBody {
api_key?: string;
timestamp?: string;
category?: string;
distinct_id?: string;
context?: Record<string, unknown>;
properties?: Record<string, unknown>;
type: string;
event: string;
name?: string;
messageId?: string;
}
export interface EventCaptureResponse {
status?: number;
type?: string;
code?: string;
detail?: string;
attr?: string;
}
export interface ProjectCreateRequest {
name?: string;
api_key?: string;
project_id?: string;
slack_incoming_webhook?: string;
anonymize_ips?: boolean;
is_demo?: boolean;
}
export interface ProjectCreateResponse {
id: 0;
uuid: string;
organization: string;
api_token: string;
app_urls: string[];
name: string;
slack_incoming_webhook: string;
created_at: string;
updated_at: string;
anonymize_ips: boolean;
completed_snippet_onboarding: boolean;
ingested_event: boolean;
test_account_filters: Record<string, never>;
test_account_filters_default_checked: boolean;
path_cleaning_filters: Record<string, never>;
is_demo: boolean;
timezone: string;
data_attributes: Record<string, never>;
person_display_name_properties: string[];
correlation_config: Record<string, never>;
session_recording_opt_in: boolean;
capture_console_log_opt_in: boolean;
capture_performance_opt_in: boolean;
effective_membership_level: number;
access_control: boolean;
has_group_types: boolean;
primary_dashboard: number;
live_events_columns: string[];
recording_domains: string[];
person_on_events_querying_enabled: boolean;
groups_on_events_querying_enabled: boolean;
inject_web_apps: boolean;
}