diff --git a/apps/sim/connectors/google-workspace/api-errors.ts b/apps/sim/connectors/google-workspace/api-errors.ts index c1b67f95bd6..8ca0b403d16 100644 --- a/apps/sim/connectors/google-workspace/api-errors.ts +++ b/apps/sim/connectors/google-workspace/api-errors.ts @@ -54,6 +54,13 @@ const RATE_LIMIT_REASONS = new Set([ 'RATE_LIMIT_EXCEEDED', ]) +/** Whether a Google error reason reports an exhausted rate or usage quota rather than a denial. */ +export function isGoogleQuotaReason(reason: string): boolean { + return ( + RATE_LIMIT_REASONS.has(reason) || reason === 'dailyLimitExceeded' || reason === 'quotaExceeded' + ) +} + export function safeGoogleErrorReasons(reasons: readonly string[]): string[] { return [...new Set(reasons.filter((reason) => SAFE_REASONS.has(reason)))] } @@ -119,13 +126,7 @@ export class GoogleApiError extends ConnectorSourceError { const safeReasons = safeGoogleErrorReasons(reasons) const suffix = safeReasons.length ? ` (${safeReasons.join(', ')})` : '' const category = - status === 429 || - safeReasons.some( - (reason) => - RATE_LIMIT_REASONS.has(reason) || - reason === 'dailyLimitExceeded' || - reason === 'quotaExceeded' - ) + status === 429 || safeReasons.some(isGoogleQuotaReason) ? 'rate_limit' : status >= 500 ? 'provider_unavailable' diff --git a/apps/sim/connectors/utils.test.ts b/apps/sim/connectors/utils.test.ts index b8640d29a75..4325ac4fde4 100644 --- a/apps/sim/connectors/utils.test.ts +++ b/apps/sim/connectors/utils.test.ts @@ -72,6 +72,7 @@ import { isIndexableConnectorFile, isSkippableMicrosoftGraphFolderError, isSkippedDocument, + looksLikeHtml, MICROSOFT_GRAPH_MAX_CURSOR_ENCODED_BYTES, MICROSOFT_GRAPH_MAX_ITEM_ID_BYTES, MICROSOFT_GRAPH_MAX_PENDING_FOLDERS, @@ -1754,3 +1755,14 @@ describe('BoundedLines', () => { }) }) }) + +describe('looksLikeHtml', () => { + it('recognizes elements with valid tag syntax', () => { + for (const markup of ['
', '
', 'Who:
a@b.co
Notes & links
| Widget | 2 |