diff --git a/packages/backend/src/apps/google-drive/triggers/index.ts b/packages/backend/src/apps/google-drive/triggers/index.ts index 3e0e1eb8..2ef00f43 100644 --- a/packages/backend/src/apps/google-drive/triggers/index.ts +++ b/packages/backend/src/apps/google-drive/triggers/index.ts @@ -1,4 +1,5 @@ import newFiles from './new-files'; import newFilesInFolder from './new-files-in-folder'; +import newFolders from './new-folders'; -export default [newFiles, newFilesInFolder]; +export default [newFiles, newFilesInFolder, newFolders]; diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts new file mode 100644 index 00000000..e327ee9e --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/index.ts @@ -0,0 +1,35 @@ +import defineTrigger from '../../../../helpers/define-trigger'; +import newFolders from './new-folders'; + +export default defineTrigger({ + name: 'New Folders', + key: 'newFolders', + pollInterval: 15, + description: + 'Triggers when a new folder is added directly to a specific folder (but not its subfolder).', + arguments: [ + { + label: 'Folder', + key: 'folderId', + type: 'dropdown' as const, + required: false, + description: + 'Check a specific folder for new subfolders. Please note: new folders added to subfolders inside the folder you choose here will NOT trigger this flow. Defaults to the top-level folder if none is picked.', + variables: false, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listFolders', + }, + ], + }, + }, + ], + + async run($) { + await newFolders($); + }, +}); diff --git a/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts new file mode 100644 index 00000000..40c52e7e --- /dev/null +++ b/packages/backend/src/apps/google-drive/triggers/new-folders/new-folders.ts @@ -0,0 +1,36 @@ +import { IGlobalVariable } from '@automatisch/types'; + +const newFolders = async ($: IGlobalVariable) => { + let q = "mimeType='application/vnd.google-apps.folder'"; + if ($.step.parameters.folderId) { + q += ` and '${$.step.parameters.folderId}' in parents`; + } else { + q += ` and parents in 'root'`; + } + + const params = { + pageToken: undefined as unknown as string, + orderBy: 'createdTime desc', + fields: '*', + pageSize: 1000, + q, + }; + + do { + const { data } = await $.http.get(`/v3/files`, { params }); + params.pageToken = data.nextPageToken; + + if (data.files?.length) { + for (const file of data.files) { + $.pushTriggerItem({ + raw: file, + meta: { + internalId: file.id, + }, + }); + } + } + } while (params.pageToken); +}; + +export default newFolders;