{
  "version": 3,
  "sources": ["../../../../node_modules/@sniptt/guards/lib/guards/primitives.ts", "../../../../node_modules/@sniptt/guards/lib/guards/structural.ts", "../../../../node_modules/@sniptt/guards/lib/guards/convenience.ts", "../../../../node_modules/@sniptt/guards/lib/index.ts", "../../../../src/logic-functions/recall-webhook.ts", "twenty-sdk-define-stub:__twenty-sdk-define-stub__", "../../../../src/constants/universal-identifiers.ts", "../../../../src/logic-functions/constants/recall-webhook-secret-env-var-name.ts", "../../../../src/logic-functions/utils/as-record.util.ts", "../../../../src/logic-functions/utils/get-record-at-path.util.ts", "../../../../src/logic-functions/recall-api/get-recall-webhook-bot-metadata.util.ts", "../../../../src/logic-functions/utils/is-non-empty-string.util.ts", "../../../../src/logic-functions/utils/get-string.util.ts", "../../../../src/logic-functions/recall-api/extract-twenty-workspace-id-from-recall-webhook.util.ts", "../../../../src/logic-functions/recall-api/verify-recall-webhook-signature.util.ts", "../../../../src/logic-functions/utils/get-application-variable-value.util.ts"],
  "sourcesContent": [null, null, null, null, "import { isNull, isUndefined } from '@sniptt/guards';\nimport { defineLogicFunction, type RoutePayload } from 'twenty-sdk/define';\n\nimport {\n  PROCESS_RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,\n  RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,\n} from 'src/constants/universal-identifiers';\nimport { RECALL_WEBHOOK_SECRET_ENV_VAR_NAME } from 'src/logic-functions/constants/recall-webhook-secret-env-var-name';\nimport { extractTwentyWorkspaceIdFromRecallWebhook } from 'src/logic-functions/recall-api/extract-twenty-workspace-id-from-recall-webhook.util';\nimport { type RecallWebhookBody } from 'src/logic-functions/recall-api/parse-recall-webhook-event.util';\nimport { verifyRecallWebhookSignature } from 'src/logic-functions/recall-api/verify-recall-webhook-signature.util';\nimport { getApplicationVariableValue } from 'src/logic-functions/utils/get-application-variable-value.util';\nimport { isNonEmptyString } from 'src/logic-functions/utils/is-non-empty-string.util';\n\ntype RecallWebhookResolverResult = {\n  workspaceId: string;\n  targetLogicFunctionUniversalIdentifier: string;\n  payload: RecallWebhookBody;\n};\n\n// A thrown error becomes a non-2xx, which makes Svix retry; a returned result dispatches to the target.\nexport const recallWebhookRouteHandler = (\n  routePayload: RoutePayload<RecallWebhookBody>,\n): RecallWebhookResolverResult => {\n  const webhookSecret = getApplicationVariableValue(\n    RECALL_WEBHOOK_SECRET_ENV_VAR_NAME,\n  );\n\n  if (!isNonEmptyString(webhookSecret)) {\n    throw new Error(\n      'RECALL_WEBHOOK_SECRET server variable is not set. A server admin must copy it from the Recall webhook endpoint settings and set it on the Call Recorder application registration.',\n    );\n  }\n\n  const { rawBody } = routePayload;\n\n  if (isUndefined(rawBody)) {\n    throw new Error(\n      'Raw request body was not forwarded by the server; cannot verify the webhook signature',\n    );\n  }\n\n  const signatureCheck = verifyRecallWebhookSignature({\n    rawBody,\n    headers: routePayload.headers,\n    secret: webhookSecret,\n  });\n\n  if (!signatureCheck.valid) {\n    throw new Error(`Invalid webhook signature: ${signatureCheck.error}`);\n  }\n\n  const body = routePayload.body;\n\n  if (isUndefined(body) || isNull(body)) {\n    throw new Error('Webhook payload was empty');\n  }\n\n  const workspaceId = extractTwentyWorkspaceIdFromRecallWebhook(body);\n\n  if (!isNonEmptyString(workspaceId)) {\n    throw new Error(\n      'Webhook payload is missing the Twenty workspace id in the Recall bot metadata',\n    );\n  }\n\n  return {\n    workspaceId,\n    targetLogicFunctionUniversalIdentifier:\n      PROCESS_RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,\n    payload: body,\n  };\n};\n\nexport default defineLogicFunction({\n  universalIdentifier: RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,\n  name: 'recall-webhook',\n  description:\n    'Verifies Recall.ai webhook signatures and resolves the target workspace for the matching CallRecording update.',\n  timeoutSeconds: 30,\n  handler: recallWebhookRouteHandler,\n  serverRouteTriggerSettings: {\n    forwardedRequestHeaders: [\n      'webhook-id',\n      'webhook-timestamp',\n      'webhook-signature',\n      'svix-id',\n      'svix-timestamp',\n      'svix-signature',\n    ],\n  },\n});\n", "\n// Auto-generated stub for twenty-sdk/define injected by the SDK CLI build.\n// Real implementations would pull in zod, twenty-shared and ~1MB of code; at\n// runtime only `default.config.handler` is consumed, so tiny no-ops suffice.\nconst __defineFactoryStub = (config) => ({\n  success: true,\n  config,\n  errors: [],\n});\n\nconst __anyHandler = {\n  get(_target, prop) {\n    if (prop === '__esModule') return true;\n    if (prop === Symbol.toPrimitive) return () => '';\n    if (typeof prop === 'symbol') return undefined;\n    return new Proxy(() => undefined, __anyHandler);\n  },\n  apply() {\n    return new Proxy(() => undefined, __anyHandler);\n  },\n};\nconst __anyStub = new Proxy(() => undefined, __anyHandler);\n\nexport const createValidationResult = __defineFactoryStub;\nexport const defineAgent = __defineFactoryStub;\nexport const defineApplication = __defineFactoryStub;\nexport const defineApplicationRole = __defineFactoryStub;\nexport const defineCommandMenuItem = __defineFactoryStub;\nexport const defineConnectionProvider = __defineFactoryStub;\nexport const defineField = __defineFactoryStub;\nexport const defineFrontComponent = __defineFactoryStub;\nexport const defineIndex = __defineFactoryStub;\nexport const defineLogicFunction = __defineFactoryStub;\nexport const defineNavigationMenuItem = __defineFactoryStub;\nexport const defineObject = __defineFactoryStub;\nexport const definePageLayout = __defineFactoryStub;\nexport const definePageLayoutTab = __defineFactoryStub;\nexport const definePermissionFlag = __defineFactoryStub;\nexport const definePostInstallLogicFunction = __defineFactoryStub;\nexport const definePreInstallLogicFunction = __defineFactoryStub;\nexport const defineRole = __defineFactoryStub;\nexport const defineSettingsFrontComponent = __defineFactoryStub;\nexport const defineSkill = __defineFactoryStub;\nexport const defineTimelineActivityType = __defineFactoryStub;\nexport const defineUninstallLogicFunction = __defineFactoryStub;\nexport const defineView = __defineFactoryStub;\nexport const defineViewField = __defineFactoryStub;\nexport const AggregateOperations = __anyStub;\nexport const CommandMenuItemAvailabilityType = __anyStub;\nexport const DateDisplayFormat = __anyStub;\nexport const FieldMetadataSettingsOnClickAction = __anyStub;\nexport const FieldType = __anyStub;\nexport const HTTPMethod = __anyStub;\nexport const IndexType = __anyStub;\nexport const MetadataWritability = __anyStub;\nexport const NavigationMenuItemType = __anyStub;\nexport const NumberDataType = __anyStub;\nexport const ObjectOpenRecordIn = __anyStub;\nexport const ObjectRecordGroupByDateGranularity = __anyStub;\nexport const OnDeleteAction = __anyStub;\nexport const PageLayoutTabLayoutMode = __anyStub;\nexport const PageLayoutType = __anyStub;\nexport const RelationType = __anyStub;\nexport const RowLevelPermissionPredicateGroupLogicalOperator = __anyStub;\nexport const RowLevelPermissionPredicateOperand = __anyStub;\nexport const STANDARD_OBJECT = __anyStub;\nexport const STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS = __anyStub;\nexport const STANDARD_PAGE_LAYOUT = __anyStub;\nexport const STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS = __anyStub;\nexport const SYSTEM_VIEW_KEYS = __anyStub;\nexport const SystemPermissionFlag = __anyStub;\nexport const ViewCalendarLayout = __anyStub;\nexport const ViewFilterGroupLogicalOperator = __anyStub;\nexport const ViewFilterOperand = __anyStub;\nexport const ViewKey = __anyStub;\nexport const ViewOpenRecordIn = __anyStub;\nexport const ViewSortDirection = __anyStub;\nexport const ViewType = __anyStub;\nexport const ViewVisibility = __anyStub;\nexport const WidgetType = __anyStub;\nexport const canAccessFullAdminPanel = __anyStub;\nexport const canImpersonate = __anyStub;\nexport const every = __anyStub;\nexport const everyDefined = __anyStub;\nexport const everyEquals = __anyStub;\nexport const favoriteRecordIds = __anyStub;\nexport const featureFlags = __anyStub;\nexport const getFieldUniversalIdentifier = __anyStub;\nexport const getSystemRelationFieldUniversalIdentifier = __anyStub;\nexport const getSystemViewFieldUniversalIdentifier = __anyStub;\nexport const getSystemViewUniversalIdentifier = __anyStub;\nexport const hasAnySoftDeleteFilterOnView = __anyStub;\nexport const includes = __anyStub;\nexport const includesEvery = __anyStub;\nexport const isDashboardPageLayoutInEditMode = __anyStub;\nexport const isDefined = __anyStub;\nexport const isInSidePanel = __anyStub;\nexport const isLayoutCustomizationModeEnabled = __anyStub;\nexport const isNonEmptyString = __anyStub;\nexport const isSelectAll = __anyStub;\nexport const none = __anyStub;\nexport const noneDefined = __anyStub;\nexport const noneEquals = __anyStub;\nexport const numberOfSelectedRecords = __anyStub;\nexport const objectMetadataItem = __anyStub;\nexport const objectMetadataLabel = __anyStub;\nexport const objectPermissions = __anyStub;\nexport const pageType = __anyStub;\nexport const selectedRecords = __anyStub;\nexport const some = __anyStub;\nexport const someDefined = __anyStub;\nexport const someEquals = __anyStub;\nexport const someNonEmptyString = __anyStub;\nexport const targetObjectReadPermissions = __anyStub;\nexport const targetObjectWritePermissions = __anyStub;\nexport const validateFields = __anyStub;\n", "export const APPLICATION_UNIVERSAL_IDENTIFIER =\n  '8da4b8b5-5edf-4880-b51f-ab6e679ec617';\n\nexport const BOT_SCHEDULE_ATTEMPTED_AT_FIELD_UNIVERSAL_IDENTIFIER =\n  'ca1d0179-f611-46bd-ba8a-b503ea9d024e';\n\nexport const BOT_SCHEDULE_IDEMPOTENCY_KEY_FIELD_UNIVERSAL_IDENTIFIER =\n  '6f00ea4d-1c5a-47ac-8c18-baacf5ee7c3f';\n\nexport const CALENDAR_EVENT_RECONCILIATION_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '1f28c477-6423-4911-85bf-2296ef112be9';\n\nexport const CALL_RECORDER_ADDITIONAL_SUMMARY_PROMPT_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '587ead10-c514-468c-944f-17050c88dcc1';\n\nexport const CALL_RECORDER_BOT_IMAGE_BACKGROUND_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'fd0d9495-29ae-443e-84f9-4ec4d1f2d16a';\n\nexport const CALL_RECORDER_CALENDAR_BOT_SCHEDULING_ENABLED_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'e1cf956b-356f-468d-b5d9-044ed5fd9e5b';\n\nexport const CALL_RECORDER_EVERYONE_LEFT_TIMEOUT_SECONDS_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'c866ddd4-fb7b-4cb4-8ad1-5599755e495c';\n\nexport const CALL_RECORDER_FAILURE_REASON_ON_CALL_RECORDING_FIELD_UNIVERSAL_IDENTIFIER =\n  '33a577e4-02f5-48bd-8bed-d365949caa72';\n\nexport const CALL_RECORDER_JOIN_EARLY_MINUTES_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '0568ebb2-3f64-47de-8c0d-d367dfbb7462';\n\nexport const CALL_RECORDER_NAME_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'c54cbacd-ad10-40b4-9056-7aaf23846d64';\n\nexport const CALL_RECORDER_NOONE_JOINED_TIMEOUT_SECONDS_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '241180e8-d864-4160-ad02-db44a9e8d395';\n\nexport const CALL_RECORDER_PREFERENCE_ON_CALENDAR_EVENT_FIELD_UNIVERSAL_IDENTIFIER =\n  '8ee9444a-2437-4def-8e61-6e493862a4fd';\n\nexport const CALL_RECORDER_RECORDING_NOTICE_ENABLED_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'fbf5f1ef-34c7-4411-b392-e314f6d064d0';\n\nexport const CALL_RECORDER_RECORDING_NOTICE_MESSAGE_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '7103451a-2c46-4c16-bc2c-a9f28b329ee5';\n\nexport const CALL_RECORDER_SUMMARY_ENABLED_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '1d7bf052-4338-44da-b373-23f6d291a50c';\n\nexport const CALL_RECORDER_TRANSCRIPT_PROVIDER_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '598c1003-2767-4ccf-bc95-c251e6b92189';\n\nexport const CALL_RECORDER_USE_WORKSPACE_LOGO_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  'fc06a41c-d1f3-4c51-a64b-d71ed77374c1';\n\nexport const CALL_RECORDER_WAITING_ROOM_TIMEOUT_SECONDS_APP_VARIABLE_UNIVERSAL_IDENTIFIER =\n  '12e4e14d-d539-4d07-b477-4773539dd20b';\n\nexport const CALL_RECORDING_AUDIO_FIELD_UNIVERSAL_IDENTIFIER =\n  '2eafc2d0-8fec-430c-a939-65ca5fbc0f08';\n\nexport const CALL_RECORDING_SUMMARIZER_AGENT_UNIVERSAL_IDENTIFIER =\n  '388543f3-ec85-4905-ad7d-99801337ed5c';\n\nexport const CALL_RECORDING_VIDEO_FIELD_UNIVERSAL_IDENTIFIER =\n  'bb9523d3-457e-4f4b-8c79-27a77afb87da';\n\nexport const CANCEL_SCHEDULED_RECALL_BOTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'a1b0f097-edeb-45a3-a53e-bf666cbfe3a4';\n\nexport const CANCEL_RECALL_BOT_ON_CALL_RECORDING_DELETE_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '84981386-881f-4123-a2dd-82e0932ba663';\n\nexport const CANCEL_RECALL_BOTS_ON_UNINSTALL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '8f00ec95-38f0-4dc7-816a-78374affa32a';\n\nexport const CHECK_CREDITS_BEFORE_RECALL_BOT_JOIN_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'bf482989-973e-48be-994e-050431686994';\n\nexport const CLEANUP_ORPHANED_RECALL_BOTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'fa394597-dc73-4fee-9758-dea7401b0b8f';\n\nexport const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER =\n  '5fcf4d3a-0aca-42d9-9beb-7387f43ec180';\n\nexport const ENQUEUE_CALL_RECORDING_RECOVERY_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'e93a646b-31bd-45e6-86e3-9a54f4f7d141';\n\nexport const ENQUEUE_ORPHANED_RECALL_BOT_CLEANUP_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '455458ce-bbc3-4b39-a3f2-950540c9eda7';\n\nexport const GENERATE_CALL_RECORDING_SUMMARIES_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '3467c68d-5d81-4f16-8234-b4182cb17f19';\n\nexport const GENERATE_CALL_RECORDING_SUMMARY_COMMAND_MENU_ITEM_UNIVERSAL_IDENTIFIER =\n  '6b7b0989-2946-413b-9b6a-08336b418788';\n\nexport const GENERATE_CALL_RECORDING_SUMMARY_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER =\n  '4b81fd8f-5626-4d5a-a97e-0543436bb555';\n\nexport const IMPORT_CALL_RECORDING_ARTIFACTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '6b975429-7f0d-4a08-8e5e-5a830e6dc621';\n\nexport const PENDING_CALL_RECORDING_REQUESTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'd7d1170f-abb1-4c9b-8258-13219a611b03';\n\nexport const PROCESS_RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '13d9c427-447e-494a-8d3c-1af5d0bacb82';\n\nexport const RECALL_WEBHOOK_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '9215afe6-1497-4149-a49d-e608e239bbaf';\n\nexport const RECONCILE_UPCOMING_CALENDAR_EVENTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '06fafff7-c722-41d1-869d-9554736f4c53';\n\nexport const SCHEDULE_RECALL_BOT_ON_CALL_RECORDING_UPDATE_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'fad4b1b5-8b6e-48c7-a8c7-3aecae2672c1';\n\nexport const STALE_BOT_STATE_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'e362aa9b-52c6-4b7e-bb20-927e0e8d7cbe';\n\nexport const START_POST_INSTALL_BACKFILLS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '53e0acb4-b761-40c9-8aaf-554d2a5da00f';\n\nexport const SUMMARIZE_CALL_RECORDING_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  'c7a59e9c-935d-45ae-ae95-ded8d327f581';\n\nexport const SWEEP_UPCOMING_CALENDAR_EVENTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '05ab984e-c6ad-4b1c-800f-8f029dc7aac8';\n\nexport const SYNC_CALENDAR_BOT_SCHEDULING_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER =\n  '1ec45adf-8521-4a53-833f-3b9bc20f0e9d';\n", "export const RECALL_WEBHOOK_SECRET_ENV_VAR_NAME = 'RECALL_WEBHOOK_SECRET';\n", "import { isArray, isObject } from '@sniptt/guards';\n\nexport const asRecord = (value: unknown): Record<string, unknown> | undefined =>\n  isObject(value) && !isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n", "import { asRecord } from 'src/logic-functions/utils/as-record.util';\n\nexport const getRecordAtPath = (\n  record: Record<string, unknown> | undefined,\n  path: string[],\n): unknown =>\n  path.reduce<unknown>(\n    (currentValue, pathPart) => asRecord(currentValue)?.[pathPart],\n    record,\n  );\n", "import { type RecallWebhookBody } from 'src/logic-functions/recall-api/parse-recall-webhook-event.util';\nimport { asRecord } from 'src/logic-functions/utils/as-record.util';\nimport { getRecordAtPath } from 'src/logic-functions/utils/get-record-at-path.util';\n\n// Recall delivers bot metadata under several body shapes per event family; this is the single reader of all of them.\nexport const getRecallWebhookBotMetadata = (\n  body: RecallWebhookBody,\n): Record<string, unknown> | undefined => {\n  const data = asRecord(body.data);\n  const bot = asRecord(body.bot);\n\n  return (\n    asRecord(bot?.metadata) ??\n    asRecord(getRecordAtPath(data, ['bot', 'metadata'])) ??\n    asRecord(getRecordAtPath(data, ['recording', 'metadata'])) ??\n    asRecord(data?.metadata)\n  );\n};\n", "import { isString } from '@sniptt/guards';\n\n// Trimming variant of @sniptt/guards isNonEmptyString, for normalizing at read boundaries.\nexport const isNonEmptyString = (value: unknown): value is string =>\n  isString(value) && value.trim() !== '';\n", "import { isNonEmptyString } from 'src/logic-functions/utils/is-non-empty-string.util';\n\nexport const getString = (value: unknown): string | undefined =>\n  isNonEmptyString(value) ? value : undefined;\n", "import { getRecallWebhookBotMetadata } from 'src/logic-functions/recall-api/get-recall-webhook-bot-metadata.util';\nimport { type RecallWebhookBody } from 'src/logic-functions/recall-api/parse-recall-webhook-event.util';\nimport { getString } from 'src/logic-functions/utils/get-string.util';\n\nexport const extractTwentyWorkspaceIdFromRecallWebhook = (\n  body: RecallWebhookBody,\n): string | undefined =>\n  getString(getRecallWebhookBotMetadata(body)?.twentyWorkspaceId);\n", "import { createHmac, timingSafeEqual } from 'crypto';\n\nimport { isUndefined } from '@sniptt/guards';\n\nconst RECALL_WEBHOOK_SECRET_PREFIX = 'whsec_';\nconst RECALL_WEBHOOK_TIMESTAMP_TOLERANCE_SECONDS = 5 * 60;\n\nexport const verifyRecallWebhookSignature = ({\n  rawBody,\n  headers,\n  secret,\n  now = new Date(),\n}: {\n  rawBody: string;\n  headers: Record<string, string | undefined>;\n  secret: string;\n  now?: Date;\n}): { valid: true } | { valid: false; error: string } => {\n  if (!secret.startsWith(RECALL_WEBHOOK_SECRET_PREFIX)) {\n    return {\n      valid: false,\n      error: 'Webhook secret must start with whsec_',\n    };\n  }\n\n  const webhookId = headers['webhook-id'] ?? headers['svix-id'];\n  const webhookTimestamp =\n    headers['webhook-timestamp'] ?? headers['svix-timestamp'];\n  const webhookSignature =\n    headers['webhook-signature'] ?? headers['svix-signature'];\n\n  if (\n    isUndefined(webhookId) ||\n    isUndefined(webhookTimestamp) ||\n    isUndefined(webhookSignature)\n  ) {\n    return {\n      valid: false,\n      error: 'Missing webhook signature headers',\n    };\n  }\n\n  const webhookTimestampSeconds = Number(webhookTimestamp);\n\n  if (!Number.isInteger(webhookTimestampSeconds)) {\n    return {\n      valid: false,\n      error: 'Invalid webhook timestamp',\n    };\n  }\n\n  const nowSeconds = Math.floor(now.getTime() / 1000);\n\n  if (\n    Math.abs(nowSeconds - webhookTimestampSeconds) >\n    RECALL_WEBHOOK_TIMESTAMP_TOLERANCE_SECONDS\n  ) {\n    return {\n      valid: false,\n      error: 'Webhook timestamp is outside of the allowed tolerance',\n    };\n  }\n\n  const secretBytes = Buffer.from(\n    secret.slice(RECALL_WEBHOOK_SECRET_PREFIX.length),\n    'base64',\n  );\n  const expectedSignature = createHmac('sha256', secretBytes)\n    .update(`${webhookId}.${webhookTimestamp}.${rawBody}`)\n    .digest('base64');\n  const providedSignatures = webhookSignature\n    .split(' ')\n    .map((signaturePart) => signaturePart.trim())\n    .filter((signaturePart) => signaturePart !== '')\n    .flatMap((signaturePart) => {\n      if (signaturePart.startsWith('v1,') || signaturePart.startsWith('v1=')) {\n        return [signaturePart.slice(3).trim()];\n      }\n\n      return [];\n    })\n    .filter((signaturePart) => signaturePart !== '');\n\n  if (providedSignatures.length === 0) {\n    return {\n      valid: false,\n      error: 'Missing v1 signature',\n    };\n  }\n\n  const expectedSignatureBuffer = Buffer.from(expectedSignature, 'base64');\n\n  for (const providedSignature of providedSignatures) {\n    const providedSignatureBuffer = Buffer.from(providedSignature, 'base64');\n\n    if (providedSignatureBuffer.length !== expectedSignatureBuffer.length) {\n      continue;\n    }\n\n    if (timingSafeEqual(providedSignatureBuffer, expectedSignatureBuffer)) {\n      return { valid: true };\n    }\n  }\n\n  return {\n    valid: false,\n    error: 'Signature verification failed',\n  };\n};\n", "// Application and server variables are injected into process.env on every execution.\nexport const getApplicationVariableValue = (key: string): string | undefined =>\n  process.env[key];\n"],
  "mappings": "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",
  "names": ["isUndefined", "isString", "isNull", "isObject", "isArray", "isNonEmptyString", "import_guards", "import_guards", "import_guards"]
}
