From 1a4ba35ef480d3891648465bf3fcec48445e0d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Wed, 8 Nov 2023 17:40:58 +0300 Subject: [PATCH] feat(xero): add new bank transactions trigger --- .../src/apps/xero/common/auth-scope.ts | 1 + .../src/apps/xero/dynamic-data/index.ts | 3 + .../dynamic-data/list-organizations/index.ts | 27 +++++++++ packages/backend/src/apps/xero/index.ts | 4 ++ .../backend/src/apps/xero/triggers/index.ts | 3 + .../triggers/new-bank-transactions/index.ts | 60 +++++++++++++++++++ packages/docs/pages/apps/xero/triggers.md | 12 ++++ 7 files changed, 110 insertions(+) create mode 100644 packages/backend/src/apps/xero/dynamic-data/index.ts create mode 100644 packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts create mode 100644 packages/backend/src/apps/xero/triggers/index.ts create mode 100644 packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts create mode 100644 packages/docs/pages/apps/xero/triggers.md diff --git a/packages/backend/src/apps/xero/common/auth-scope.ts b/packages/backend/src/apps/xero/common/auth-scope.ts index 7a60349e..85ae1d3c 100644 --- a/packages/backend/src/apps/xero/common/auth-scope.ts +++ b/packages/backend/src/apps/xero/common/auth-scope.ts @@ -4,6 +4,7 @@ const authScope: string[] = [ 'profile', 'email', 'accounting.transactions', + 'accounting.settings', ]; export default authScope; diff --git a/packages/backend/src/apps/xero/dynamic-data/index.ts b/packages/backend/src/apps/xero/dynamic-data/index.ts new file mode 100644 index 00000000..8d8bd601 --- /dev/null +++ b/packages/backend/src/apps/xero/dynamic-data/index.ts @@ -0,0 +1,3 @@ +import listOrganizations from './list-organizations'; + +export default [listOrganizations]; diff --git a/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts b/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts new file mode 100644 index 00000000..a8bc6406 --- /dev/null +++ b/packages/backend/src/apps/xero/dynamic-data/list-organizations/index.ts @@ -0,0 +1,27 @@ +import { IGlobalVariable, IJSONObject } from '@automatisch/types'; + +export default { + name: 'List organizations', + key: 'listOrganizations', + + async run($: IGlobalVariable) { + const organizations: { + data: IJSONObject[]; + } = { + data: [], + }; + + const { data } = await $.http.get('/api.xro/2.0/Organisation'); + + if (data.Organisations?.length) { + for (const organization of data.Organisations) { + organizations.data.push({ + value: organization.OrganisationID, + name: organization.Name, + }); + } + } + + return organizations; + }, +}; diff --git a/packages/backend/src/apps/xero/index.ts b/packages/backend/src/apps/xero/index.ts index 806e388e..b8915616 100644 --- a/packages/backend/src/apps/xero/index.ts +++ b/packages/backend/src/apps/xero/index.ts @@ -1,6 +1,8 @@ import defineApp from '../../helpers/define-app'; import addAuthHeader from './common/add-auth-header'; import auth from './auth'; +import triggers from './triggers'; +import dynamicData from './dynamic-data'; export default defineApp({ name: 'Xero', @@ -13,4 +15,6 @@ export default defineApp({ supportsConnections: true, beforeRequest: [addAuthHeader], auth, + triggers, + dynamicData, }); diff --git a/packages/backend/src/apps/xero/triggers/index.ts b/packages/backend/src/apps/xero/triggers/index.ts new file mode 100644 index 00000000..b5f9efbe --- /dev/null +++ b/packages/backend/src/apps/xero/triggers/index.ts @@ -0,0 +1,3 @@ +import newBankTransactions from './new-bank-transactions'; + +export default [newBankTransactions]; diff --git a/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts b/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts new file mode 100644 index 00000000..aaf8080d --- /dev/null +++ b/packages/backend/src/apps/xero/triggers/new-bank-transactions/index.ts @@ -0,0 +1,60 @@ +import defineTrigger from '../../../../helpers/define-trigger'; + +export default defineTrigger({ + name: 'New bank transactions', + key: 'newBankTransactions', + pollInterval: 15, + description: 'Triggers when a new bank transaction occurs.', + arguments: [ + { + label: 'Organization', + key: 'organizationId', + type: 'dropdown' as const, + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listOrganizations', + }, + ], + }, + }, + ], + + async run($) { + const params = { + page: 1, + order: 'Date DESC', + }; + + let nextPage = false; + do { + const { data } = await $.http.get('/api.xro/2.0/BankTransactions', { + params, + }); + params.page = params.page + 1; + + if (data.BankTransactions?.length) { + for (const bankTransaction of data.BankTransactions) { + $.pushTriggerItem({ + raw: bankTransaction, + meta: { + internalId: bankTransaction.BankTransactionID, + }, + }); + } + } + + if (data.BankTransactions?.length === 100) { + nextPage = true; + } else { + nextPage = false; + } + } while (nextPage); + }, +}); diff --git a/packages/docs/pages/apps/xero/triggers.md b/packages/docs/pages/apps/xero/triggers.md new file mode 100644 index 00000000..088a4950 --- /dev/null +++ b/packages/docs/pages/apps/xero/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/xero.svg +items: + - name: New bank transactions + desc: Triggers when a new bank transaction occurs. +--- + + + +