diff --git a/packages/backend/src/apps/asana/dynamic-data/index.js b/packages/backend/src/apps/asana/dynamic-data/index.js new file mode 100644 index 00000000..749767f2 --- /dev/null +++ b/packages/backend/src/apps/asana/dynamic-data/index.js @@ -0,0 +1,3 @@ +import listWorkspaces from './list-workspaces/index.js'; + +export default [listWorkspaces]; diff --git a/packages/backend/src/apps/asana/dynamic-data/list-workspaces/index.js b/packages/backend/src/apps/asana/dynamic-data/list-workspaces/index.js new file mode 100644 index 00000000..0a6e2923 --- /dev/null +++ b/packages/backend/src/apps/asana/dynamic-data/list-workspaces/index.js @@ -0,0 +1,34 @@ +export default { + name: 'List workspaces', + key: 'listWorkspaces', + + async run($) { + const workspaces = { + data: [], + }; + + const params = { + limit: 100, + offset: undefined, + }; + + do { + const { + data: { data, next_page }, + } = await $.http.get('/1.0/workspaces', { params }); + + params.offset = next_page?.offset; + + if (data) { + for (const workspace of data) { + workspaces.data.push({ + value: workspace.gid, + name: workspace.name, + }); + } + } + } while (params.offset); + + return workspaces; + }, +}; diff --git a/packages/backend/src/apps/asana/index.js b/packages/backend/src/apps/asana/index.js index 3e287342..ca4f41ca 100644 --- a/packages/backend/src/apps/asana/index.js +++ b/packages/backend/src/apps/asana/index.js @@ -1,6 +1,8 @@ import defineApp from '../../helpers/define-app.js'; import addAuthHeader from './common/add-auth-header.js'; import auth from './auth/index.js'; +import dynamicData from './dynamic-data/index.js'; +import triggers from './triggers/index.js'; export default defineApp({ name: 'Asana', @@ -13,4 +15,6 @@ export default defineApp({ supportsConnections: true, beforeRequest: [addAuthHeader], auth, + dynamicData, + triggers, }); diff --git a/packages/backend/src/apps/asana/triggers/index.js b/packages/backend/src/apps/asana/triggers/index.js new file mode 100644 index 00000000..e8bf262f --- /dev/null +++ b/packages/backend/src/apps/asana/triggers/index.js @@ -0,0 +1,3 @@ +import newProjects from './new-projects/index.js'; + +export default [newProjects]; diff --git a/packages/backend/src/apps/asana/triggers/new-projects/index.js b/packages/backend/src/apps/asana/triggers/new-projects/index.js new file mode 100644 index 00000000..1ef025f5 --- /dev/null +++ b/packages/backend/src/apps/asana/triggers/new-projects/index.js @@ -0,0 +1,59 @@ +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'New projects', + key: 'newProjects', + pollInterval: 15, + description: 'Triggers when a new project is created.', + arguments: [ + { + label: 'Workspace', + key: 'workspaceId', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listWorkspaces', + }, + ], + }, + }, + ], + + async run($) { + const workspaceId = $.step.parameters.workspaceId; + + const params = { + limit: 100, + offset: undefined, + workspace: workspaceId, + }; + + do { + const { + data: { data, next_page }, + } = await $.http.get('/1.0/projects', { + params, + }); + + params.offset = next_page?.offset; + + if (data) { + for (const project of data) { + $.pushTriggerItem({ + raw: project, + meta: { + internalId: project.gid, + }, + }); + } + } + } while (params.offset); + }, +}); diff --git a/packages/docs/pages/apps/asana/triggers.md b/packages/docs/pages/apps/asana/triggers.md new file mode 100644 index 00000000..8c8b7aba --- /dev/null +++ b/packages/docs/pages/apps/asana/triggers.md @@ -0,0 +1,12 @@ +--- +favicon: /favicons/asana.svg +items: + - name: New projects + desc: Triggers when a new project is created. +--- + + + + diff --git a/packages/docs/pages/guide/available-apps.md b/packages/docs/pages/guide/available-apps.md index ad2b4c0c..09ac4e59 100644 --- a/packages/docs/pages/guide/available-apps.md +++ b/packages/docs/pages/guide/available-apps.md @@ -4,6 +4,7 @@ The following integrations are currently supported by Automatisch. - [Airtable](/apps/airtable/actions) - [Appwrite](/apps/appwrite/triggers) +- [Asana](/apps/asana/triggers) - [Carbone](/apps/carbone/actions) - [Datastore](/apps/datastore/actions) - [DeepL](/apps/deepl/actions)