diff --git a/packages/backend/src/apps/libretranslate/actions/index.js b/packages/backend/src/apps/libretranslate/actions/index.js new file mode 100644 index 00000000..f22e6e6d --- /dev/null +++ b/packages/backend/src/apps/libretranslate/actions/index.js @@ -0,0 +1,3 @@ +import translateText from './translate-text/index.js'; + +export default [translateText]; diff --git a/packages/backend/src/apps/libretranslate/actions/translate-text/index.js b/packages/backend/src/apps/libretranslate/actions/translate-text/index.js new file mode 100644 index 00000000..a9603d1a --- /dev/null +++ b/packages/backend/src/apps/libretranslate/actions/translate-text/index.js @@ -0,0 +1,86 @@ +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Translate text', + key: 'translateText', + description: 'Translate a text.', + arguments: [ + { + label: 'Text', + key: 'text', + type: 'string', + required: true, + description: 'The text to translate.', + variables: true, + }, + { + label: 'Source Language', + key: 'sourceLanguage', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listLanguages', + }, + ], + }, + }, + { + label: 'Target Language', + key: 'targetLanguage', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listLanguages', + }, + ], + }, + }, + { + label: 'Format', + key: 'format', + type: 'dropdown', + description: '', + required: false, + variables: true, + options: [ + { + label: 'Text', + value: 'text', + }, + { + label: 'HTML', + value: 'html', + }, + ], + }, + ], + + async run($) { + const { text, sourceLanguage, targetLanguage, format } = $.step.parameters; + + const body = { + q: text, + source: sourceLanguage, + target: targetLanguage, + format, + }; + + const response = await $.http.post('/translate', body); + + $.setActionItem({ raw: response.data }); + }, +}); diff --git a/packages/backend/src/apps/libretranslate/dynamic-data/index.js b/packages/backend/src/apps/libretranslate/dynamic-data/index.js new file mode 100644 index 00000000..87548285 --- /dev/null +++ b/packages/backend/src/apps/libretranslate/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listLanguages from './list-languages/index.js'; + +export default [listLanguages]; diff --git a/packages/backend/src/apps/libretranslate/dynamic-data/list-languages/index.js b/packages/backend/src/apps/libretranslate/dynamic-data/list-languages/index.js new file mode 100644 index 00000000..94c5ad03 --- /dev/null +++ b/packages/backend/src/apps/libretranslate/dynamic-data/list-languages/index.js @@ -0,0 +1,25 @@ +export default { + name: 'List languages', + key: 'listLanguages', + + async run($) { + const languages = { + data: [], + }; + + const { data } = await $.http.get('/languages'); + + if (!data?.length) { + return; + } + + for (const language of data) { + languages.data.push({ + value: language.code, + name: language.name, + }); + } + + return languages; + }, +}; diff --git a/packages/backend/src/apps/libretranslate/index.js b/packages/backend/src/apps/libretranslate/index.js index 7fa195cc..bec9a837 100644 --- a/packages/backend/src/apps/libretranslate/index.js +++ b/packages/backend/src/apps/libretranslate/index.js @@ -2,6 +2,8 @@ import defineApp from '../../helpers/define-app.js'; import auth from './auth/index.js'; import addApiKey from './common/add-api-key.js'; import setBaseUrl from './common/set-base-url.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; export default defineApp({ name: 'LibreTranslate', @@ -14,4 +16,6 @@ export default defineApp({ primaryColor: 'ffffff', beforeRequest: [setBaseUrl, addApiKey], auth, + actions, + dynamicData, }); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index d40ad2ef..97108575 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -248,6 +248,7 @@ export default defineConfig({ collapsible: true, collapsed: true, items: [ + { text: 'Actions', link: '/apps/libretranslate/actions' }, { text: 'Connection', link: '/apps/libretranslate/connection' }, ], }, diff --git a/packages/docs/pages/apps/libretranslate/actions.md b/packages/docs/pages/apps/libretranslate/actions.md new file mode 100644 index 00000000..d29d839e --- /dev/null +++ b/packages/docs/pages/apps/libretranslate/actions.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/libretranslate.svg +items: + - name: Translate text + desc: Translate a text. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index ad2b4c0c..b5f7118b 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -25,6 +25,7 @@ The following integrations are currently supported by Automatisch. - [HTTP Request](/apps/http-request/actions) - [HubSpot](/apps/hubspot/actions) - [Invoice Ninja](/apps/invoice-ninja/triggers) +- [LibreTranslate](/apps/libretranslate/actions) - [Mattermost](/apps/mattermost/actions) - [Miro](/apps/miro/actions) - [Notion](/apps/notion/triggers)