diff --git a/packages/backend/src/apps/invoice-ninja/index.ts b/packages/backend/src/apps/invoice-ninja/index.ts index 9c8d681b..522367ea 100644 --- a/packages/backend/src/apps/invoice-ninja/index.ts +++ b/packages/backend/src/apps/invoice-ninja/index.ts @@ -1,6 +1,7 @@ import defineApp from '../../helpers/define-app'; import addAuthHeader from './common/add-auth-header'; import auth from './auth'; +import triggers from './triggers'; export default defineApp({ name: 'Invoice Ninja', @@ -13,4 +14,5 @@ export default defineApp({ supportsConnections: true, beforeRequest: [addAuthHeader], auth, + triggers, }); diff --git a/packages/backend/src/apps/invoice-ninja/triggers/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/index.ts new file mode 100644 index 00000000..485e3929 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/triggers/index.ts @@ -0,0 +1,3 @@ +import newClients from './new-clients'; + +export default [newClients]; diff --git a/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts b/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts new file mode 100644 index 00000000..72944212 --- /dev/null +++ b/packages/backend/src/apps/invoice-ninja/triggers/new-clients/index.ts @@ -0,0 +1,65 @@ +import Crypto from 'crypto'; +import isEmpty from 'lodash/isEmpty'; +import defineTrigger from '../../../../helpers/define-trigger'; + +type Response = { + data: { + data: { + id: string; + event_id: string; + target_url: string; + format: string; + }; + }; +}; + +export default defineTrigger({ + name: 'New clients', + key: 'newClients', + type: 'webhook', + description: 'Triggers when a new client is added.', + arguments: [], + + async run($) { + const dataItem = { + raw: $.request.body, + meta: { + internalId: Crypto.randomUUID(), + }, + }; + + $.pushTriggerItem(dataItem); + }, + + async testRun($) { + const lastExecutionStep = await $.getLastExecutionStep(); + + if (!isEmpty(lastExecutionStep?.dataOut)) { + $.pushTriggerItem({ + raw: lastExecutionStep.dataOut, + meta: { + internalId: '', + }, + }); + } + }, + + async registerHook($) { + const CREATE_CLIENT_EVENT_ID = '1'; + + const payload = { + target_url: $.webhookUrl, + event_id: CREATE_CLIENT_EVENT_ID, + format: 'JSON', + rest_method: 'post', + }; + + const response: Response = await $.http.post('/v1/webhooks', payload); + + await $.flow.setRemoteWebhookId(response.data.data.id); + }, + + async unregisterHook($) { + await $.http.delete(`/v1/webhooks/${$.flow.remoteWebhookId}`); + }, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 51b78622..2c058d6a 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -174,6 +174,7 @@ export default defineConfig({ collapsible: true, collapsed: true, items: [ + { text: 'Triggers', link: '/apps/invoice-ninja/triggers' }, { text: 'Connection', link: '/apps/invoice-ninja/connection' }, ], }, diff --git a/packages/docs/pages/apps/invoice-ninja/triggers.md b/packages/docs/pages/apps/invoice-ninja/triggers.md new file mode 100644 index 00000000..e4f346d0 --- /dev/null +++ b/packages/docs/pages/apps/invoice-ninja/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/invoice-ninja.svg +items: + - name: New clients + desc: Triggers when a new client is added. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index f293d57e..aaf04bfb 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -17,6 +17,7 @@ The following integrations are currently supported by Automatisch. - [Google Sheets](/apps/google-sheets/triggers) - [HTTP Request](/apps/http-request/actions) - [HubSpot](/apps/hubspot/actions) +- [Invoice Ninja](/apps/invoice-ninja/triggers) - [Mattermost](/apps/mattermost/actions) - [Miro](/apps/miro/actions) - [Notion](/apps/notion/triggers)