( path: string, requestId: string )
| 52 | } |
| 53 | |
| 54 | async function resolveZoomChallengeSecrets( |
| 55 | path: string, |
| 56 | requestId: string |
| 57 | ): Promise<Array<{ secretToken: string }>> { |
| 58 | const rows = await db |
| 59 | .select({ |
| 60 | providerConfig: webhook.providerConfig, |
| 61 | userId: workflow.userId, |
| 62 | workspaceId: workflow.workspaceId, |
| 63 | }) |
| 64 | .from(webhook) |
| 65 | .innerJoin(workflow, eq(webhook.workflowId, workflow.id)) |
| 66 | .where(and(eq(webhook.path, path), eq(webhook.provider, 'zoom'), eq(webhook.isActive, true))) |
| 67 | |
| 68 | const resolvedRows = await Promise.all( |
| 69 | rows.map(async (row) => { |
| 70 | const rawConfig = |
| 71 | row.providerConfig && |
| 72 | typeof row.providerConfig === 'object' && |
| 73 | !Array.isArray(row.providerConfig) |
| 74 | ? (row.providerConfig as Record<string, unknown>) |
| 75 | : {} |
| 76 | |
| 77 | try { |
| 78 | const config = await resolveEnvVarsInObject( |
| 79 | rawConfig, |
| 80 | row.userId, |
| 81 | row.workspaceId ?? undefined |
| 82 | ) |
| 83 | const secretToken = typeof config.secretToken === 'string' ? config.secretToken : '' |
| 84 | return { secretToken } |
| 85 | } catch (error) { |
| 86 | logger.warn(`[${requestId}] Failed to resolve Zoom webhook secret for challenge`, { |
| 87 | error: toError(error).message, |
| 88 | path, |
| 89 | }) |
| 90 | return { secretToken: '' } |
| 91 | } |
| 92 | }) |
| 93 | ) |
| 94 | |
| 95 | return resolvedRows.filter((row) => row.secretToken) |
| 96 | } |
| 97 | |
| 98 | export const zoomHandler: WebhookProviderHandler = { |
| 99 | /** |
no test coverage detected