(ctx: PollWebhookContext)
| 83 | label: 'Google Drive', |
| 84 | |
| 85 | async pollWebhook(ctx: PollWebhookContext): Promise<'success' | 'failure'> { |
| 86 | const { webhookData, workflowData, requestId, logger } = ctx |
| 87 | const webhookId = webhookData.id |
| 88 | |
| 89 | try { |
| 90 | const accessToken = await resolveOAuthCredential( |
| 91 | webhookData, |
| 92 | 'google-drive', |
| 93 | requestId, |
| 94 | logger |
| 95 | ) |
| 96 | |
| 97 | const config = getProviderConfig<GoogleDriveWebhookConfig>(webhookData.providerConfig) |
| 98 | |
| 99 | // First poll (or re-seed after 410): seed page token, preserve any existing known file IDs. |
| 100 | if (!config.pageToken) { |
| 101 | const startPageToken = await getStartPageToken(accessToken, config, requestId, logger) |
| 102 | await updateWebhookProviderConfig( |
| 103 | webhookId, |
| 104 | { pageToken: startPageToken, knownFileIds: config.knownFileIds ?? [] }, |
| 105 | logger |
| 106 | ) |
| 107 | await markWebhookSuccess(webhookId, logger) |
| 108 | logger.info( |
| 109 | `[${requestId}] First poll for webhook ${webhookId}, seeded pageToken: ${startPageToken}` |
| 110 | ) |
| 111 | return 'success' |
| 112 | } |
| 113 | |
| 114 | const { changes, newStartPageToken } = await fetchChanges( |
| 115 | accessToken, |
| 116 | config, |
| 117 | requestId, |
| 118 | logger |
| 119 | ) |
| 120 | |
| 121 | if (!changes.length) { |
| 122 | await updateWebhookProviderConfig(webhookId, { pageToken: newStartPageToken }, logger) |
| 123 | await markWebhookSuccess(webhookId, logger) |
| 124 | logger.info(`[${requestId}] No changes found for webhook ${webhookId}`) |
| 125 | return 'success' |
| 126 | } |
| 127 | |
| 128 | const filteredChanges = filterChanges(changes, config) |
| 129 | |
| 130 | if (!filteredChanges.length) { |
| 131 | await updateWebhookProviderConfig(webhookId, { pageToken: newStartPageToken }, logger) |
| 132 | await markWebhookSuccess(webhookId, logger) |
| 133 | logger.info( |
| 134 | `[${requestId}] ${changes.length} changes found but none match filters for webhook ${webhookId}` |
| 135 | ) |
| 136 | return 'success' |
| 137 | } |
| 138 | |
| 139 | logger.info( |
| 140 | `[${requestId}] Found ${filteredChanges.length} matching changes for webhook ${webhookId}` |
| 141 | ) |
| 142 |
nothing calls this directly
no test coverage detected