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,18 @@
{
"extends": ["../../../../.eslintrc.json"],
"ignorePatterns": ["!**/*"],
"overrides": [
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx"],
"rules": {}
},
{
"files": ["*.js", "*.jsx"],
"rules": {}
}
]
}

View File

@@ -0,0 +1,7 @@
# pieces-postgres
This library was generated with [Nx](https://nx.dev).
## Running lint
Run `nx lint pieces-postgres` to execute the lint via [ESLint](https://eslint.org/).

View File

@@ -0,0 +1,8 @@
{
"name": "@activepieces/piece-postgres",
"version": "0.1.17",
"dependencies": {
"pg": "8.11.3",
"pg-format": "1.0.4"
}
}

View File

@@ -0,0 +1,51 @@
{
"name": "pieces-postgres",
"$schema": "../../../../node_modules/nx/schemas/project-schema.json",
"sourceRoot": "packages/pieces/community/postgres/src",
"projectType": "library",
"targets": {
"build": {
"executor": "@nx/js:tsc",
"outputs": [
"{options.outputPath}"
],
"options": {
"outputPath": "dist/packages/pieces/community/postgres",
"tsConfig": "packages/pieces/community/postgres/tsconfig.lib.json",
"packageJson": "packages/pieces/community/postgres/package.json",
"main": "packages/pieces/community/postgres/src/index.ts",
"assets": [
"packages/pieces/community/postgres/*.md",
{
"input": "packages/pieces/community/postgres/src/i18n",
"output": "./src/i18n",
"glob": "**/!(i18n.json)"
}
],
"buildableProjectDepsInPackageJsonType": "dependencies",
"updateBuildableProjectDepsInPackageJson": true
},
"dependsOn": [
"^build",
"prebuild"
]
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": [
"{options.outputFile}"
]
},
"prebuild": {
"executor": "nx:run-commands",
"options": {
"cwd": "packages/pieces/community/postgres",
"command": "bun install --no-save --silent"
},
"dependsOn": [
"^build"
]
}
},
"tags": []
}

View File

@@ -0,0 +1,43 @@
{
"Postgres": "Postgres",
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "Host",
"Port": "Port",
"User": "User",
"Password": "Password",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "Table name",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "Ascending",
"Descending": "Descending"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "Die weltweit fortschrittlichste Open-Source-relationale Datenbank",
"Host": "Host",
"Port": "Port",
"User": "Benutzer",
"Password": "Kennwort",
"Database": "Datenbank",
"Enable SSL": "SSL aktivieren",
"Verify server certificate": "Serverzertifikat überprüfen",
"Certificate": "Zertifikat",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Ein String, der den Hostnamen des zu verbindenden PostgreSQL-Servers angibt.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Ein Integer, der den Port des PostgreSQL-Servers angibt, mit dem eine Verbindung hergestellt werden soll.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Ein String, der den Benutzer angibt, sich wie bei der Verbindung zum PostgreSQL-Server zu authentifizieren.",
"A string indicating the password to use for authentication.": "Ein String, der das Passwort für die Authentifizierung angibt.",
"A string indicating the name of the database to connect to.": "Ein String, der den Namen der zu verbindenden Datenbank angibt.",
"Connect to the postgres database over SSL": "Mit der Postgres-Datenbank über SSL verbinden",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Überprüfen Sie das Serverzertifikat gegen vertrauenswürdige CAs oder eine CA, die im folgenden Zertifikatsfeld angegeben wird. Dies wird fehlschlagen, wenn der Datenbankserver ein selbst signiertes Zertifikat verwendet.",
"The CA certificate to use for verification of server certificate.": "Das CA-Zertifikat, das zur Überprüfung des Serverzertifikats verwendet wird.",
"Run Query": "Abfrage ausführen",
"Markdown": "Markdown",
"Query": "Abfrage",
"Arguments": "Argumente",
"Query Timeout": "Abfrage-Timeout",
"Connection Timeout (ms)": "Verbindungs-Timeout (ms)",
"Application Name": "Anwendungsname",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **HINWEIS** Fügen Sie dynamische Eingaben direkt in den Abfrage-String ein. Verwenden Sie stattdessen $1, $2, $3 und fügen Sie sie in Args für parametrierte Abfragen hinzu, um **SQL-Injektion zu verhindern.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Bitte verwenden Sie $1, $2 etc. für parametrierte Abfragen, um SQL-Einschleusung zu vermeiden.",
"Arguments to be used in the query": "Argumente, die in der Abfrage verwendet werden sollen",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Ein Integer, der die maximale Anzahl an Millisekunden angibt, die vor dem Timing auf den Abschluss einer Abfrage warten sollen.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Ein Integer, der die maximale Anzahl an Millisekunden angibt, die vor dem Timing auf die Einrichtung einer Verbindung warten sollen.",
"A string indicating the name of the client application connecting to the server.": "Ein String, der den Namen der Client-Anwendung angibt, die sich mit dem Server verbindet.",
"New Row": "Neue Zeile",
"triggered when a new row is added": "ausgelöst wenn eine neue Zeile hinzugefügt wird",
"Table name": "Tabellenname",
"Column to order by": "Zu bestellende Spalte nach",
"Order Direction": "Bestellrichtung",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**HINWEIS:** Der Trigger holt die neuesten Zeilen mit der angegebenen Reihenfolge nach Spalte (neueste zuerst) und wird dann weiter abfragen, bis die letzte Zeile erreicht ist.",
"Use something like a created timestamp or an auto-incrementing ID.": "Benutzen Sie so etwas wie einen erstellten Zeitstempel oder eine automatisch inkrementelle ID.",
"The direction to sort by such that the newest rows are fetched first.": "Die zu sortierende Richtung, so dass die neuesten Zeilen zuerst abgerufen werden.",
"Ascending": "Aufsteigend",
"Descending": "Absteigend"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "La base de datos relacional de código abierto más avanzada del mundo",
"Host": "Anfitrión",
"Port": "Puerto",
"User": "Usuario",
"Password": "Contraseña",
"Database": "Base de datos",
"Enable SSL": "Activar SSL",
"Verify server certificate": "Verificar certificado del servidor",
"Certificate": "Certificado",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Una cadena que indica el nombre de host del servidor PostgreSQL al que conectar.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Un entero que indica el puerto del servidor PostgreSQL al que conectar.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Una cadena que indica al usuario a autenticarse como cuando se conecta al servidor PostgreSQL.",
"A string indicating the password to use for authentication.": "Una cadena que indica la contraseña a usar para la autenticación.",
"A string indicating the name of the database to connect to.": "Una cadena que indica el nombre de la base de datos a la que conectar.",
"Connect to the postgres database over SSL": "Conectar a la base de datos postgres a través de SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verifique el certificado del servidor contra CAs confiables o una CA proporcionada en el campo de certificado a continuación. Esto fallará si el servidor de base de datos está usando un certificado autofirmado.",
"The CA certificate to use for verification of server certificate.": "Certificado CA a utilizar para la verificación del certificado del servidor.",
"Run Query": "Ejecutar consulta",
"Markdown": "Markdown",
"Query": "Consulta",
"Arguments": "Argumentos",
"Query Timeout": "Tiempo de espera",
"Connection Timeout (ms)": "Tiempo de espera de conexión (ms)",
"Application Name": "Nombre de la aplicación",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Utilice $1, $2, etc. para consultas parametrizadas para evitar la inyección SQL.",
"Arguments to be used in the query": "Argumentos a usar en la consulta",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Un entero que indica el número máximo de milisegundos a esperar a que se complete una consulta antes de agotar el tiempo de espera.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Un entero que indica el número máximo de milisegundos a esperar a que se establezca una conexión antes de agotar el tiempo de espera.",
"A string indicating the name of the client application connecting to the server.": "Una cadena que indica el nombre de la aplicación cliente que se conecta al servidor.",
"New Row": "Nueva fila",
"triggered when a new row is added": "activado cuando se añade una nueva fila",
"Table name": "Nombre de tabla",
"Column to order by": "Columna para ordenar por",
"Order Direction": "Dirección del pedido",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTA:** El disparador obtiene las últimas filas usando el orden proporcionado por columna (más reciente primero), y luego continuarán las encuestas hasta que se alcance la última fila anterior.",
"Use something like a created timestamp or an auto-incrementing ID.": "Usa algo como una marca de tiempo creada o un ID auto-incrementante.",
"The direction to sort by such that the newest rows are fetched first.": "La dirección para ordenar por tal que las filas más recientes se obtengan primero.",
"Ascending": "Ascendiente",
"Descending": "Descendiente"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "La base de données relationnelle open-source la plus avancée du monde",
"Host": "Hôte",
"Port": "Port",
"User": "Utilisateur",
"Password": "Password",
"Database": "Base de données",
"Enable SSL": "Activer SSL",
"Verify server certificate": "Vérifier le certificat du serveur",
"Certificate": "Certificat",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Une chaîne de caractères indiquant le nom d'hôte du serveur PostgreSQL auquel se connecter.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Un entier indiquant le port du serveur PostgreSQL auquel se connecter.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Une chaîne de caractères indiquant l'utilisateur à authentifier lors de la connexion au serveur PostgreSQL.",
"A string indicating the password to use for authentication.": "Une chaîne de caractères indiquant le mot de passe à utiliser pour l'authentification.",
"A string indicating the name of the database to connect to.": "Une chaîne indiquant le nom de la base de données à laquelle se connecter.",
"Connect to the postgres database over SSL": "Se connecter à la base de données postgres par SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Vérifiez le certificat du serveur par rapport aux AC de confiance ou à une AC fournie dans le champ de certificat ci-dessous. Cela échouera si le serveur de base de données utilise un certificat auto-signé.",
"The CA certificate to use for verification of server certificate.": "Le certificat d'AC à utiliser pour la vérification du certificat du serveur.",
"Run Query": "Exécuter la requête",
"Markdown": "Markdown",
"Query": "Requête",
"Arguments": "Arguments",
"Query Timeout": "Délai d'attente de la requête",
"Connection Timeout (ms)": "Délai de connexion (ms)",
"Application Name": "Nom de l'application",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **NE PAS** insérer une entrée dynamique directement dans la chaîne de requête. À la place, utilisez $1, $2, $3 et ajoutez-les dans args pour les requêtes paramétrées pour éviter **l'injection SQL.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Veuillez utiliser $1, $2, etc. pour les requêtes paramétrées pour éviter l'injection SQL.",
"Arguments to be used in the query": "Arguments à utiliser dans la requête",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Un entier indiquant le nombre maximum de millisecondes à attendre qu'une requête soit terminée avant de la mettre en attente.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Un entier indiquant le nombre maximum de millisecondes à attendre qu'une connexion soit établie avant le délai d'attente.",
"A string indicating the name of the client application connecting to the server.": "Une chaîne de caractères indiquant le nom de l'application cliente se connectant au serveur.",
"New Row": "Nouvelle ligne",
"triggered when a new row is added": "déclenché lorsqu'une nouvelle ligne est ajoutée",
"Table name": "Nom du tableau",
"Column to order by": "Colonne à ordonner par",
"Order Direction": "Direction de la commande",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** Le trigger récupère les dernières lignes en utilisant l'ordre fourni par colonne (plus récent en premier), puis continuera de voter jusqu'à ce que la dernière ligne précédente soit atteinte.",
"Use something like a created timestamp or an auto-incrementing ID.": "Utilisez quelque chose comme un timestamp créé ou un ID auto-incrémentant.",
"The direction to sort by such that the newest rows are fetched first.": "La direction à suivre pour trier de telle sorte que les lignes les plus récentes soient récupérées en premier.",
"Ascending": "Ascendant",
"Descending": "Descendant"
}

View File

@@ -0,0 +1,43 @@
{
"Postgres": "Postgres",
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "Host",
"Port": "Port",
"User": "User",
"Password": "Password",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "Table name",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "Ascending",
"Descending": "Descending"
}

View File

@@ -0,0 +1,43 @@
{
"Postgres": "Postgres",
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "Host",
"Port": "Port",
"User": "User",
"Password": "Password",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "Table name",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "Naik",
"Descending": "Menurun"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "世界で最も先進的なオープンソースリレーショナルデータベース",
"Host": "ホスト",
"Port": "ポート",
"User": "ユーザー",
"Password": "Password",
"Database": "データベース",
"Enable SSL": "SSLを有効にする",
"Verify server certificate": "サーバー証明書を確認する",
"Certificate": "証明書",
" A string indicating the hostname of the PostgreSQL server to connect to.": " 接続先のPostgreSQLサーバーのホスト名を示す文字列。",
"An integer indicating the port of the PostgreSQL server to connect to.": "接続先のPostgreSQLサーバーのポートを示す整数。",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "PostgreSQLサーバーへの接続時として認証するユーザーを示す文字列。",
"A string indicating the password to use for authentication.": "認証に使用するパスワードを示す文字列",
"A string indicating the name of the database to connect to.": "接続するデータベースの名前を示す文字列。",
"Connect to the postgres database over SSL": "SSLを介してpostgresデータベースに接続します",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "以下の証明書フィールドに記載されている CA または認証局に対してサーバー証明書を確認します。 これは、データベースサーバーが自己署名証明書を使用している場合に失敗します。",
"The CA certificate to use for verification of server certificate.": "サーバー証明書の検証に使用する CA 証明書。",
"Run Query": "クエリの実行",
"Markdown": "Markdown",
"Query": "クエリ",
"Arguments": "引数",
"Query Timeout": "クエリのタイムアウト",
"Connection Timeout (ms)": "接続タイムアウト (ms)",
"Application Name": "アプリケーション名",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **動的入力を直接クエリ文字列に挿入しない** 。 代わりに、$1、$2、$3を使用して、**SQLインジェクション** を防ぐためにパラメータ化されたクエリのために引数に追加します。",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "SQLインジェクションを避けるためにパラメータ化されたクエリには、$1、$2などを使用してください。",
"Arguments to be used in the query": "クエリで使用する引数",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "タイムアウト前にクエリが完了するまで待機する最大ミリ秒数を示す整数。",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "タイミングアウト前に接続が確立されるまでの最大ミリ秒数を示す整数。",
"A string indicating the name of the client application connecting to the server.": "サーバーに接続しているクライアント・アプリケーションの名前を示す文字列。",
"New Row": "新しい行",
"triggered when a new row is added": "新しい行が追加されたときにトリガーされます。",
"Table name": "テーブル名",
"Column to order by": "次の順序の列",
"Order Direction": "注文の方向",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**注意:** トリガーは与えられた順序で最新の行を取得します(最新の順序)。 最後の行に達するまでポーリングを続けます。",
"Use something like a created timestamp or an auto-incrementing ID.": "作成したタイムスタンプや自動インクリメントIDのようなものを使用します。",
"The direction to sort by such that the newest rows are fetched first.": "最新の行が最初に取得されるように並べ替える方向。",
"Ascending": "昇順",
"Descending": "降順"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "'s Werelds meest geavanceerde open-source relationele database",
"Host": "Hostnaam",
"Port": "Poort",
"User": "Gebruiker",
"Password": "Wachtwoord",
"Database": "Database",
"Enable SSL": "SSL inschakelen",
"Verify server certificate": "Servercertificaat verifiëren",
"Certificate": "Certificaat",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Een string die de hostnaam van de PostgreSQL server aangeeft om mee te verbinden.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Een geheel getal geeft de poort aan van de PostgreSQL server om verbinding mee te maken.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Een string die de gebruiker aangeeft te verifiëren bij het verbinden met de PostgreSQL server.",
"A string indicating the password to use for authentication.": "Een tekenreeks die het wachtwoord aangeeft om te gebruiken voor authenticatie.",
"A string indicating the name of the database to connect to.": "Een string die de naam van de database aangeeft waarmee je verbinding wilt maken.",
"Connect to the postgres database over SSL": "Maak verbinding met de postgres database via SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verifieer het servercertificaat tegen vertrouwde CA's of een CA in het onderstaande certificaatveld. Dit zal mislukken als de databaseserver een zelf ondertekend certificaat gebruikt.",
"The CA certificate to use for verification of server certificate.": "Het CA-certificaat om te gebruiken voor verificatie van servercertificaat.",
"Run Query": "Query uitvoeren",
"Markdown": "Markdown",
"Query": "Zoekopdracht",
"Arguments": "Argumenten",
"Query Timeout": "Query time-out",
"Connection Timeout (ms)": "Verbinding Timeout (ms)",
"Application Name": "Applicatie Naam",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **NIET** voeg dynamische invoer rechtstreeks in de querystring in. Gebruik in plaats daarvan $1, $2, $3 en voeg ze toe aan args voor geparameteriseerde queries om **SQL injectie te voorkomen.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Gelieve $1, $2, etc. te gebruiken voor geparameteriseerde zoekopdrachten om SQL-injectie te voorkomen.",
"Arguments to be used in the query": "Argumenten te gebruiken in de query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Een integer geeft het maximale aantal milliseconden aan om te wachten tot een query is voltooid voordat de deadline is bereikt.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Een integer geeft het maximale aantal milliseconden aan om te wachten tot er een verbinding is gemaakt voordat er een time-out is opgetreden.",
"A string indicating the name of the client application connecting to the server.": "Een string die de naam aangeeft van de client applicatie die naar de server verbindt.",
"New Row": "Nieuwe rij",
"triggered when a new row is added": "geactiveerd wanneer een nieuwe rij wordt toegevoegd",
"Table name": "Tabel naam",
"Column to order by": "Kolom sorteren op",
"Order Direction": "Order richting",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**Let op:** De trigger haalt de laatste rijen met behulp van de opgegeven volgorde per kolom (nieuwste eerst), en zal dan doorgaan met stemmen tot de vorige rij is bereikt.",
"Use something like a created timestamp or an auto-incrementing ID.": "Gebruik iets als een gecreëerde tijdstempel of een auto-verhoging ID.",
"The direction to sort by such that the newest rows are fetched first.": "De richting die gesorteerd moet worden zodat de nieuwste rijen eerst opgehaald worden.",
"Ascending": "Oplopend",
"Descending": "Aflopend"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "A base de dados de código aberto mais avançada do mundo",
"Host": "Servidor",
"Port": "Porta",
"User": "Usuário",
"Password": "Senha",
"Database": "Banco",
"Enable SSL": "Habilitar SSL",
"Verify server certificate": "Verificar certificado do servidor",
"Certificate": "Certificado",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Uma seqüência de caracteres indicando o nome de host do servidor PostgreSQL a ser conectado.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Um inteiro indicando a porta do servidor PostgreSQL a ser conectado.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Uma string indicando o usuário a autenticar como ao se conectar ao servidor PostgreSQL.",
"A string indicating the password to use for authentication.": "Uma string indicando a senha a ser usada para autenticação.",
"A string indicating the name of the database to connect to.": "Uma string que indica o nome do banco de dados a ser conectado.",
"Connect to the postgres database over SSL": "Conectar ao banco de dados postgres via SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verifique o certificado do servidor contra CAs confiáveis ou uma CA fornecida no campo de certificado abaixo. Isto irá falhar se o servidor de banco de dados estiver utilizando um certificado auto-assinado.",
"The CA certificate to use for verification of server certificate.": "O certificado da CA a ser usado para verificação do certificado do servidor.",
"Run Query": "Executar consulta",
"Markdown": "Markdown",
"Query": "Requisição",
"Arguments": "Parâmetros",
"Query Timeout": "Consulta expirada",
"Connection Timeout (ms)": "Tempo limite da conexão (ms)",
"Application Name": "Nome da aplicação",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **NÃO** insira a entrada dinâmica diretamente na string de consulta. Em vez disso, use $1, $2, $3 e adicione-os em argumentos para consultas parametrizadas para evitar **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Por favor, use $1, $2, etc. para consultas parametrizadas para evitar injeção de SQL.",
"Arguments to be used in the query": "Argumentos a serem usados na consulta",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Um inteiro indicando o número máximo de milissegundos a esperar que uma consulta seja concluída antes do tempo limite.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Um inteiro indicando o número máximo de milissegundos a esperar que uma conexão seja estabelecida antes do tempo limite.",
"A string indicating the name of the client application connecting to the server.": "Uma string indicando o nome da aplicação cliente conectando ao servidor.",
"New Row": "Nova linha",
"triggered when a new row is added": "acionado quando uma nova linha é adicionada",
"Table name": "Nome da tabela",
"Column to order by": "Coluna para ordenar por",
"Order Direction": "Direção da ordem",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTA:** O gatilho obtém as linhas mais recentes usando a ordem por coluna fornecida (a mais recente primeiro), e então continuará a sondagem até que a última linha seja alcançada.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use algo como um timestamp criado ou uma ID de auto-incrementação.",
"The direction to sort by such that the newest rows are fetched first.": "A direção para ordenar por tal que as linhas mais recentes são buscadas primeiro.",
"Ascending": "Crescente",
"Descending": "Decrescente"
}

View File

@@ -0,0 +1,43 @@
{
"Postgres": "Postgres",
"The world's most advanced open-source relational database": "Наиболее продвинутая реляционная база данных с открытым исходным кодом в мире",
"Host": "Хост",
"Port": "Порт",
"User": "Пользователь",
"Password": "Пароль",
"Database": "База данных",
"Enable SSL": "Включить SSL",
"Verify server certificate": "Проверить сертификат сервера",
"Certificate": "Сертификат",
" A string indicating the hostname of the PostgreSQL server to connect to.": " Строка, указывающая имя хоста сервера PostgreSQL для подключения.",
"An integer indicating the port of the PostgreSQL server to connect to.": "Целое число, указывающее порт PostgreSQL сервера для подключения.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "Строка, указывающая пользователя аутентифицироваться как при подключении к серверу PostgreSQL.",
"A string indicating the password to use for authentication.": "Строка, указывающая пароль, используемый для аутентификации.",
"A string indicating the name of the database to connect to.": "Строка, указывающая имя базы данных для подключения.",
"Connect to the postgres database over SSL": "Подключение к базе данных postgres через SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Проверить сертификат сервера против доверенных CA или CA, указанных в поле ниже. Это не сработает, если сервер базы данных использует самоподписанный сертификат.",
"The CA certificate to use for verification of server certificate.": "Сертификат ЦА, используемый для проверки сертификата сервера.",
"Run Query": "Запустить запрос",
"Markdown": "Markdown",
"Query": "Запрос",
"Arguments": "Аргументы",
"Query Timeout": "Таймаут запроса",
"Connection Timeout (ms)": "Таймаут соединения (мс)",
"Application Name": "Название приложения",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** вставить динамический ввод непосредственно в строку запроса. Вместо этого используйте $1, $2, $3 и добавьте их в аргументы для параметризированных запросов, чтобы предотвратить инъекцию **SQL.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Пожалуйста, используйте $1, $2 и т.д., чтобы избежать впрыскивания SQL.",
"Arguments to be used in the query": "Аргументы, используемые в запросе",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "Целое число, указывающее максимальное количество миллисекунд в ожидании выполнения запроса до истечения таймаута.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "Целое число, указывающее максимальное количество миллисекунд в ожидании установления соединения до истечения лимита.",
"A string indicating the name of the client application connecting to the server.": "Строка, указывающая имя клиентского приложения, подключаемого к серверу.",
"New Row": "Новая строка",
"triggered when a new row is added": "срабатывает при добавлении новой строки",
"Table name": "Название таблицы",
"Column to order by": "Столбец для заказа на",
"Order Direction": "Направление заказа",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**ПРИМЕЧАНИЕ:** Триггер получает последние строки, используя указанный порядок по столбцу (сначала новые), и будет продолжать голосовать до тех пор, пока не будет достигнута предыдущая строка.",
"Use something like a created timestamp or an auto-incrementing ID.": "Используйте что-то вроде созданной отметки времени или автоматического увеличения идентификатора.",
"The direction to sort by such that the newest rows are fetched first.": "Направление сортировки, по которому сначала получаются самые новые строки.",
"Ascending": "По возрастанию",
"Descending": "По убыванию"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "Host",
"Port": "Port",
"User": "User",
"Password": "Password",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "Table name",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "Ascending",
"Descending": "Descending"
}

View File

@@ -0,0 +1,43 @@
{
"Postgres": "Postgres",
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "Host",
"Port": "Port",
"User": "User",
"Password": "Password",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "Table name",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "Tăng dần",
"Descending": "Giảm dần"
}

View File

@@ -0,0 +1,42 @@
{
"The world's most advanced open-source relational database": "The world's most advanced open-source relational database",
"Host": "主机",
"Port": "端口",
"User": "用户",
"Password": "密码",
"Database": "Database",
"Enable SSL": "Enable SSL",
"Verify server certificate": "Verify server certificate",
"Certificate": "Certificate",
" A string indicating the hostname of the PostgreSQL server to connect to.": " A string indicating the hostname of the PostgreSQL server to connect to.",
"An integer indicating the port of the PostgreSQL server to connect to.": "An integer indicating the port of the PostgreSQL server to connect to.",
"A string indicating the user to authenticate as when connecting to the PostgreSQL server.": "A string indicating the user to authenticate as when connecting to the PostgreSQL server.",
"A string indicating the password to use for authentication.": "A string indicating the password to use for authentication.",
"A string indicating the name of the database to connect to.": "A string indicating the name of the database to connect to.",
"Connect to the postgres database over SSL": "Connect to the postgres database over SSL",
"Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.": "Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.",
"The CA certificate to use for verification of server certificate.": "The CA certificate to use for verification of server certificate.",
"Run Query": "Run Query",
"Markdown": "Markdown",
"Query": "Query",
"Arguments": "Arguments",
"Query Timeout": "Query Timeout",
"Connection Timeout (ms)": "Connection Timeout (ms)",
"Application Name": "Application Name",
"\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**": "\n **DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**",
"Please use $1, $2, etc. for parameterized queries to avoid SQL injection.": "Please use $1, $2, etc. for parameterized queries to avoid SQL injection.",
"Arguments to be used in the query": "Arguments to be used in the query",
"An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.": "An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.",
"An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.": "An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.",
"A string indicating the name of the client application connecting to the server.": "A string indicating the name of the client application connecting to the server.",
"New Row": "New Row",
"triggered when a new row is added": "triggered when a new row is added",
"Table name": "表格名称",
"Column to order by": "Column to order by",
"Order Direction": "Order Direction",
"**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.": "**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.",
"Use something like a created timestamp or an auto-incrementing ID.": "Use something like a created timestamp or an auto-incrementing ID.",
"The direction to sort by such that the newest rows are fetched first.": "The direction to sort by such that the newest rows are fetched first.",
"Ascending": "升序",
"Descending": "降序"
}

View File

@@ -0,0 +1,96 @@
import {
PieceAuth,
Property,
createPiece,
} from '@activepieces/pieces-framework';
import { AppConnectionType, PieceCategory } from '@activepieces/shared';
import { runQuery } from './lib/actions/run-query';
import { newRow } from './lib/triggers/new-row';
import { pgClient } from './lib/common';
export const postgresAuth = PieceAuth.CustomAuth({
props: {
host: Property.ShortText({
displayName: 'Host',
required: true,
description:
' A string indicating the hostname of the PostgreSQL server to connect to.',
}),
port: Property.Number({
displayName: 'Port',
defaultValue: 5432,
description:
'An integer indicating the port of the PostgreSQL server to connect to.',
required: true,
}),
user: Property.ShortText({
displayName: 'User',
required: true,
description:
'A string indicating the user to authenticate as when connecting to the PostgreSQL server.',
}),
password: PieceAuth.SecretText({
displayName: 'Password',
description:
'A string indicating the password to use for authentication.',
required: true,
}),
database: Property.ShortText({
displayName: 'Database',
description:
'A string indicating the name of the database to connect to.',
required: true,
}),
enable_ssl: Property.Checkbox({
displayName: 'Enable SSL',
description: 'Connect to the postgres database over SSL',
required: true,
defaultValue: true,
}),
reject_unauthorized: Property.Checkbox({
displayName: 'Verify server certificate',
description:
'Verify the server certificate against trusted CAs or a CA provided in the certificate field below. This will fail if the database server is using a self signed certificate.',
required: true,
defaultValue: false,
}),
certificate: Property.LongText({
displayName: 'Certificate',
description:
'The CA certificate to use for verification of server certificate.',
defaultValue: '',
required: false,
}),
},
required: true,
validate: async ({ auth }) => {
try {
const client = await pgClient({
type: AppConnectionType.CUSTOM_AUTH,
props: auth,
});
await client.end();
}
catch (e) {
return {
valid: false,
error: JSON.stringify(e)
};
}
return {
valid: true,
};
}
});
export const postgres = createPiece({
displayName: 'Postgres',
description: "The world's most advanced open-source relational database",
minimumSupportedRelease: '0.30.0',
categories: [PieceCategory.DEVELOPER_TOOLS],
logoUrl: 'https://cdn.activepieces.com/pieces/postgres.png',
authors: ["AbdullahBitar", "Willianwg", "dentych", "kishanprmr", "AbdulTheActivePiecer", "khaledmashaly", "abuaboud"],
auth: postgresAuth,
actions: [runQuery],
triggers: [newRow],
});

View File

@@ -0,0 +1,67 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import pg from 'pg';
import { postgresAuth } from '../..';
import { pgClient } from '../common';
export const runQuery = createAction({
auth: postgresAuth,
name: 'run-query',
displayName: 'Run Query',
description: 'Run Query',
props: {
markdown: Property.MarkDown({
value: `
**DO NOT** insert dynamic input directly into the query string. Instead, use $1, $2, $3 and add them in args for parameterized queries to prevent **SQL injection.**`
}),
query: Property.ShortText({
displayName: 'Query',
description: 'Please use $1, $2, etc. for parameterized queries to avoid SQL injection.',
required: true,
}),
args: Property.Array({
displayName: 'Arguments',
description: 'Arguments to be used in the query',
required: false,
}),
query_timeout: Property.Number({
displayName: 'Query Timeout',
description:
'An integer indicating the maximum number of milliseconds to wait for a query to complete before timing out.',
required: false,
defaultValue: 30000,
}),
connection_timeout_ms: Property.Number({
displayName: 'Connection Timeout (ms)',
description:
'An integer indicating the maximum number of milliseconds to wait for a connection to be established before timing out.',
required: false,
defaultValue: 30000,
}),
application_name: Property.ShortText({
displayName: 'Application Name',
description:
'A string indicating the name of the client application connecting to the server.',
required: false,
}),
},
async run(context) {
const client = await pgClient(context.auth, context.propsValue.query_timeout, context.propsValue.application_name, context.propsValue.connection_timeout_ms);
const { query } = context.propsValue;
const queryWithMetadata = `
/* Source : /projects/${context.project.id}/flows/${context.flows.current.id}/runs/${context.run.id} */
${query}
`
const args = context.propsValue.args || [];
return new Promise((resolve, reject) => {
client.query(queryWithMetadata, args, function (error: any, results: { rows: unknown }) {
if (error) {
client.end();
return reject(error);
}
resolve(results.rows);
client.end();
});
});
},
});

View File

@@ -0,0 +1,36 @@
import { AppConnectionValueForAuthProperty, } from "@activepieces/pieces-framework";
import { postgresAuth } from "..";
import { Client } from "pg";
export const pgClient = async (auth: AppConnectionValueForAuthProperty<typeof postgresAuth>, query_timeout = 30000, application_name: string | undefined = undefined , connectionTimeoutMillis = 30000) => {
const {
host,
user,
database,
password,
port,
enable_ssl,
reject_unauthorized: rejectUnauthorized,
certificate,
} = auth.props;
const sslConf = {
rejectUnauthorized: rejectUnauthorized,
ca: certificate && certificate.length > 0 ? certificate : undefined,
};
const client = new Client({
host,
port: Number(port),
user,
password,
database,
ssl: enable_ssl ? sslConf : undefined,
query_timeout: Number(query_timeout),
statement_timeout: Number(query_timeout),
application_name,
connectionTimeoutMillis: Number(connectionTimeoutMillis),
});
await client.connect();
return client;
}

View File

@@ -0,0 +1,200 @@
import { createTrigger, TriggerStrategy, PiecePropValueSchema, Property, AppConnectionValueForAuthProperty } from '@activepieces/pieces-framework';
import { DedupeStrategy, Polling, pollingHelper } from '@activepieces/pieces-common';
import crypto from 'crypto';
import { postgresAuth } from '../..';
import { pgClient } from '../common';
import format from 'pg-format';
import dayjs from 'dayjs';
type OrderDirection = 'ASC' | 'DESC';
const polling: Polling<AppConnectionValueForAuthProperty<typeof postgresAuth>, {
table: {
table_schema: string,
table_name: string
}, order_by: string, order_direction: OrderDirection | undefined
}> = {
strategy: DedupeStrategy.LAST_ITEM,
items: async ({ auth, propsValue, lastItemId }) => {
const client = await pgClient(auth)
try {
const lastItem = lastItemId as string;
const query = constructQuery({ table: propsValue.table, order_by: propsValue.order_by, lastItem: lastItem, order_direction: propsValue.order_direction })
const result = await client.query(query);
const items = result.rows.map(function (row) {
const rowHash = crypto.createHash('md5').update(JSON.stringify(row)).digest('hex');
const isTimestamp = dayjs(row[propsValue.order_by]).isValid();
const orderValue = isTimestamp ? dayjs(row[propsValue.order_by]).toISOString() : row[propsValue.order_by];
return {
id: orderValue + '|' + rowHash,
data: row,
}
});
return items;
} finally {
await client.end();
}
}
};
function constructQuery({ table, order_by, lastItem, order_direction }: { table: { table_name: string, table_schema: string }, order_by: string, order_direction: OrderDirection | undefined, lastItem: string }): string {
const lastOrderKey = (lastItem ? lastItem.split('|')[0] : null);
if (lastOrderKey === null) {
switch (order_direction) {
case 'ASC':
return format(`SELECT * FROM %I.%I ORDER BY %I ASC LIMIT 5`, table.table_schema, table.table_name, order_by);
case 'DESC':
return format(`SELECT * FROM %I.%I ORDER BY %I DESC LIMIT 5`, table.table_schema, table.table_name, order_by);
default:
throw new Error(JSON.stringify({
message: 'Invalid order direction',
order_direction: order_direction,
}));
}
} else {
switch (order_direction) {
case 'ASC':
return format(`SELECT * FROM %I.%I WHERE %I <= %L ORDER BY %I ASC`, table.table_schema, table.table_name, order_by, lastOrderKey, order_by);
case 'DESC':
return format(`SELECT * FROM %I.%I WHERE %I >= %L ORDER BY %I DESC`, table.table_schema, table.table_name, order_by, lastOrderKey, order_by);
default:
throw new Error(JSON.stringify({
message: 'Invalid order direction',
order_direction: order_direction,
}));
}
}
}
export const newRow = createTrigger({
name: 'new-row',
auth: postgresAuth,
displayName: 'New Row',
description: 'triggered when a new row is added',
props: {
description: Property.MarkDown({
value: `**NOTE:** The trigger fetches the latest rows using the provided order by column (newest first), and then will keep polling until the previous last row is reached.`,
}),
table: Property.Dropdown({
auth: postgresAuth,
displayName: 'Table name',
required: true,
refreshers: ['auth'],
refreshOnSearch: false,
options: async ({ auth }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please authenticate first',
};
}
const client = await pgClient(auth)
try {
const result = await client.query(
`SELECT table_schema, table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE'`
);
const options = result.rows.map(row => ({
label: `${row.table_schema}.${row.table_name}`,
value: {
table_schema: row.table_schema,
table_name: row.table_name,
},
}));
return {
disabled: false,
options,
};
} finally {
await client.end();
}
}
}),
order_by: Property.Dropdown({
auth: postgresAuth,
displayName: 'Column to order by',
description: 'Use something like a created timestamp or an auto-incrementing ID.',
required: true,
refreshers: ['table'],
refreshOnSearch: false,
options: async ({ auth, table }) => {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'Please authenticate first',
};
}
if (!table) {
return {
disabled: true,
options: [],
placeholder: 'Please select a table',
};
}
const client = await pgClient(auth)
try {
const { table_name, table_schema } = table as { table_schema: string, table_name: string };
const query = `
SELECT column_name
FROM information_schema.columns
WHERE table_schema = $1
AND table_name = $2
`;
const params = [table_schema, table_name];
const result = await client.query(query, params);
const options = result.rows.map(f => {
return {
label: f.column_name,
value: f.column_name,
};
})
return {
disabled: false,
options,
};
} finally {
await client.end();
}
}
}),
order_direction: Property.StaticDropdown<OrderDirection>({
displayName: 'Order Direction',
description: 'The direction to sort by such that the newest rows are fetched first.',
required: true,
options: {
options: [
{
label: 'Ascending',
value: 'ASC',
},
{
label: 'Descending',
value: 'DESC',
},
]
},
defaultValue: 'DESC',
}),
},
sampleData: {},
type: TriggerStrategy.POLLING,
async test(context) {
return await pollingHelper.test(polling, context);
},
async onEnable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onEnable(polling, { store, propsValue, auth });
},
async onDisable(context) {
const { store, auth, propsValue } = context;
await pollingHelper.onDisable(polling, { store, propsValue, auth });
},
async run(context) {
return await pollingHelper.poll(polling, context);
},
});

View File

@@ -0,0 +1,16 @@
{
"extends": "../../../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.lib.json"
}
],
"compilerOptions": {
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
}
}

View File

@@ -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"]
}