{
  "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/cleanup-orphaned-recall-bots.ts", "twenty-sdk-define-stub:__twenty-sdk-define-stub__", "../../../../src/constants/universal-identifiers.ts", "../../../../src/logic-functions/flows/cleanup-orphaned-recall-bots.util.ts", "../../../../src/logic-functions/recall-api/cancel-or-eject-recall-bot.util.ts", "../../../../src/logic-functions/recall-api/get-recall-api-config.util.ts", "../../../../src/logic-functions/constants/call-recorder-name-env-var-name.ts", "../../../../src/logic-functions/constants/default-call-recorder-name.ts", "../../../../src/logic-functions/constants/default-recall-region.ts", "../../../../src/logic-functions/constants/recall-api-key-env-var-name.ts", "../../../../src/logic-functions/constants/recall-region-env-var-name.ts", "../../../../src/logic-functions/utils/get-application-variable-value.util.ts", "../../../../src/logic-functions/utils/is-non-empty-string.util.ts", "../../../../src/logic-functions/utils/normalize-optional-string.util.ts", "../../../../src/logic-functions/recall-api/recall-bot-api-request.util.ts", "../../../../src/logic-functions/constants/recall-api-max-in-process-retry-wait-ms.ts", "../../../../src/logic-functions/constants/recall-api-max-attempts.ts", "../../../../src/logic-functions/constants/recall-api-not-found-status.ts", "../../../../src/logic-functions/constants/recall-api-max-retry-after-ms.ts", "../../../../src/logic-functions/recall-api/parse-recall-retry-after.util.ts", "../../../../src/logic-functions/constants/recall-api-adhoc-pool-retry-delay-ms.ts", "../../../../src/logic-functions/constants/recall-api-retry-delay-ms.ts", "../../../../src/logic-functions/recall-api/recall-api-retry-policy.util.ts", "../../../../src/logic-functions/utils/build-abort-signal-with-timeout.util.ts", "../../../../src/logic-functions/utils/fetch-with-timeout.util.ts", "../../../../src/logic-functions/recall-api/cancel-recall-bot.util.ts", "../../../../src/logic-functions/recall-api/eject-recall-bot.util.ts", "../../../../src/logic-functions/data/find-call-recordings-by-filter.util.ts", "../../../../src/logic-functions/constants/twenty-page-size.ts", "../../../../src/logic-functions/data/fetch-all-nodes.util.ts", "../../../../src/logic-functions/data/find-call-recordings-by-ids.util.ts", "../../../../src/logic-functions/recall-api/get-claimed-workspace-id.util.ts", "../../../../src/logic-functions/data/get-current-workspace-id.util.ts", "../../../../src/logic-functions/utils/as-record.util.ts", "../../../../src/logic-functions/utils/get-string.util.ts", "../../../../src/logic-functions/utils/get-unique-sorted-ids.util.ts", "../../../../src/logic-functions/recall-api/list-scheduled-recall-bots.util.ts", "../../../../src/logic-functions/recall-api/fetch-recall-list-pages.util.ts", "../../../../src/logic-functions/recall-api/parse-recall-bot-snapshot.util.ts", "../../../../src/logic-functions/utils/build-step-failure.util.ts"],
  "sourcesContent": [null, null, null, null, "import { CoreApiClient } from 'twenty-client-sdk/core';\nimport { defineLogicFunction } from 'twenty-sdk/define';\n\nimport { CLEANUP_ORPHANED_RECALL_BOTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER } from 'src/constants/universal-identifiers';\nimport {\n  cleanupOrphanedRecallBots,\n  type CleanupOrphanedRecallBotsResult,\n} from 'src/logic-functions/flows/cleanup-orphaned-recall-bots.util';\nimport {\n  buildStepFailure,\n  type StepFailure,\n} from 'src/logic-functions/utils/build-step-failure.util';\n\n// Pending requests handle incomplete cancellation and bot-id write-back; this daily list fetch only finds unclaimed Recall bots.\nconst ORPHANED_BOT_JOIN_AT_LOOKBACK_HOURS = 25;\nconst ORPHANED_BOT_JOIN_AT_LOOKAHEAD_HOURS = 24;\n\nconst cleanupOrphanedRecallBotsHandler = async (): Promise<\n  CleanupOrphanedRecallBotsResult | StepFailure\n> => {\n  const now = new Date();\n\n  try {\n    return await cleanupOrphanedRecallBots({\n      client: new CoreApiClient(),\n      joinAtAfter: new Date(\n        now.getTime() - ORPHANED_BOT_JOIN_AT_LOOKBACK_HOURS * 60 * 60 * 1000,\n      ).toISOString(),\n      joinAtBefore: new Date(\n        now.getTime() + ORPHANED_BOT_JOIN_AT_LOOKAHEAD_HOURS * 60 * 60 * 1000,\n      ).toISOString(),\n    });\n  } catch (error) {\n    return buildStepFailure('orphaned bot cancellation', error);\n  }\n};\n\nexport default defineLogicFunction({\n  universalIdentifier:\n    CLEANUP_ORPHANED_RECALL_BOTS_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIER,\n  name: 'cleanup-orphaned-recall-bots',\n  description:\n    'Lists workspace Recall bots and cancels those no CallRecording request claims.',\n  timeoutSeconds: 250,\n  handler: cleanupOrphanedRecallBotsHandler,\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", "import { isUndefined } from '@sniptt/guards';\nimport { type CoreApiClient } from 'twenty-client-sdk/core';\n\nimport { CallRecordingRequestStatus } from 'src/logic-functions/constants/call-recording-request-status';\nimport { type CallRecordingRecord } from 'src/logic-functions/types/call-recording-record.type';\nimport { cancelOrEjectRecallBot } from 'src/logic-functions/recall-api/cancel-or-eject-recall-bot.util';\nimport { findCallRecordingsByIds } from 'src/logic-functions/data/find-call-recordings-by-ids.util';\nimport { getClaimedWorkspaceId } from 'src/logic-functions/recall-api/get-claimed-workspace-id.util';\nimport { getCurrentWorkspaceId } from 'src/logic-functions/data/get-current-workspace-id.util';\nimport { getUniqueSortedIds } from 'src/logic-functions/utils/get-unique-sorted-ids.util';\nimport { isNonEmptyString } from 'src/logic-functions/utils/is-non-empty-string.util';\nimport {\n  listScheduledRecallBots,\n  type RecallScheduledBot,\n} from 'src/logic-functions/recall-api/list-scheduled-recall-bots.util';\n\nexport type CleanupOrphanedRecallBotsResult = {\n  scannedBotCount: number;\n  canceledExternalBotIds: string[];\n  truncatedBotList: boolean;\n};\n\n// Bots no open CallRecording request claims would still join; cancel them on Recall.\nexport const cleanupOrphanedRecallBots = async ({\n  client,\n  joinAtAfter,\n  joinAtBefore,\n}: {\n  client: CoreApiClient;\n  joinAtAfter: string;\n  joinAtBefore: string;\n}): Promise<CleanupOrphanedRecallBotsResult> => {\n  const currentWorkspaceId = getCurrentWorkspaceId();\n\n  if (isUndefined(currentWorkspaceId)) {\n    console.warn(\n      '[call-recorder] cannot cancel orphaned Recall bots: workspace id unavailable',\n    );\n\n    return {\n      scannedBotCount: 0,\n      canceledExternalBotIds: [],\n      truncatedBotList: false,\n    };\n  }\n\n  // Server-side workspace filter: the shared Recall account holds every workspace's bots.\n  const listResult = await listScheduledRecallBots({\n    joinAtAfter,\n    joinAtBefore,\n    metadata: { twentyWorkspaceId: currentWorkspaceId },\n  });\n\n  if (!listResult.ok) {\n    console.warn(\n      `[call-recorder] failed to list Recall bots for orphan cancellation: ${listResult.errorMessage}`,\n    );\n\n    return {\n      scannedBotCount: 0,\n      canceledExternalBotIds: [],\n      truncatedBotList: false,\n    };\n  }\n\n  const workspaceManagedBots = listResult.bots.filter((bot) =>\n    isCurrentWorkspaceManagedBot({ bot, currentWorkspaceId }),\n  );\n\n  if (workspaceManagedBots.length === 0) {\n    return {\n      scannedBotCount: listResult.bots.length,\n      canceledExternalBotIds: [],\n      truncatedBotList: listResult.truncated,\n    };\n  }\n\n  const callRecordings = await findCallRecordingsByIds(\n    client,\n    getUniqueSortedIds(\n      workspaceManagedBots.map((bot) => getClaimedCallRecordingId(bot)),\n    ),\n  );\n  const callRecordingsById = new Map(\n    callRecordings.map((callRecording) => [callRecording.id, callRecording]),\n  );\n  const canceledExternalBotIds: string[] = [];\n\n  for (const bot of workspaceManagedBots) {\n    const claimedCallRecordingId = getClaimedCallRecordingId(bot);\n    const callRecording = isUndefined(claimedCallRecordingId)\n      ? undefined\n      : callRecordingsById.get(claimedCallRecordingId);\n\n    if (isBotClaimed({ bot, callRecording })) {\n      continue;\n    }\n\n    console.warn(\n      `[call-recorder] canceling orphaned Recall bot ${bot.id} (claimed callRecording: ${claimedCallRecordingId})`,\n    );\n\n    if (await cancelOrEjectRecallBot(bot.id)) {\n      canceledExternalBotIds.push(bot.id);\n    }\n  }\n\n  return {\n    scannedBotCount: listResult.bots.length,\n    canceledExternalBotIds,\n    truncatedBotList: listResult.truncated,\n  };\n};\n\nconst getClaimedCallRecordingId = (\n  bot: RecallScheduledBot,\n): string | undefined => {\n  const claimedCallRecordingId = bot.metadata.twentyCallRecordingId;\n\n  return normalizeOptionalString(claimedCallRecordingId);\n};\n\nconst isCurrentWorkspaceManagedBot = ({\n  bot,\n  currentWorkspaceId,\n}: {\n  bot: RecallScheduledBot;\n  currentWorkspaceId: string;\n}): boolean => {\n  if (isUndefined(getClaimedCallRecordingId(bot))) {\n    return false;\n  }\n\n  const claimedWorkspaceId = getClaimedWorkspaceId(bot);\n\n  return claimedWorkspaceId === currentWorkspaceId;\n};\n\nconst isBotClaimed = ({\n  bot,\n  callRecording,\n}: {\n  bot: RecallScheduledBot;\n  callRecording: CallRecordingRecord | undefined;\n}): boolean => {\n  if (\n    callRecording?.recordingRequestStatus !==\n    CallRecordingRequestStatus.REQUESTED\n  ) {\n    return false;\n  }\n\n  if (callRecording.externalBotId === bot.id) {\n    return true;\n  }\n\n  // An id-less REQUESTED recording may have a bot-id write-back in flight; spare its bot.\n  return isUndefined(callRecording.externalBotId);\n};\n\nconst normalizeOptionalString = (value: unknown): string | undefined =>\n  isNonEmptyString(value) ? value.trim() : undefined;\n", "import { isNull } from '@sniptt/guards';\n\nimport { cancelRecallBot } from 'src/logic-functions/recall-api/cancel-recall-bot.util';\nimport { ejectRecallBot } from 'src/logic-functions/recall-api/eject-recall-bot.util';\n\nexport const cancelOrEjectRecallBot = async (\n  externalBotId: string,\n): Promise<boolean> => {\n  const cancelResult = await cancelRecallBot({ externalBotId });\n\n  if (cancelResult.ok) {\n    return true;\n  }\n\n  let failureMessage = cancelResult.errorMessage;\n\n  // Deleting only works for not-yet-joined bots; eject the ones already in a call.\n  if (!isNull(cancelResult.status)) {\n    const ejectResult = await ejectRecallBot({ externalBotId });\n\n    if (ejectResult.ok) {\n      return true;\n    }\n\n    failureMessage = ejectResult.errorMessage;\n  }\n\n  console.warn(\n    `[call-recorder] failed to cancel or eject Recall bot ${externalBotId}: ${failureMessage}`,\n  );\n\n  return false;\n};\n", "import { isUndefined } from '@sniptt/guards';\n\nimport { CALL_RECORDER_NAME_ENV_VAR_NAME } from 'src/logic-functions/constants/call-recorder-name-env-var-name';\nimport { DEFAULT_CALL_RECORDER_NAME } from 'src/logic-functions/constants/default-call-recorder-name';\nimport { DEFAULT_RECALL_REGION } from 'src/logic-functions/constants/default-recall-region';\nimport { RECALL_API_KEY_ENV_VAR_NAME } from 'src/logic-functions/constants/recall-api-key-env-var-name';\nimport { RECALL_REGION_ENV_VAR_NAME } from 'src/logic-functions/constants/recall-region-env-var-name';\nimport { getApplicationVariableValue } from 'src/logic-functions/utils/get-application-variable-value.util';\nimport { normalizeOptionalString } from 'src/logic-functions/utils/normalize-optional-string.util';\n\nexport type RecallApiConfig = {\n  apiKey: string;\n  baseUrl: string;\n  botName: string;\n};\n\nexport const getRecallApiConfig = ():\n  | {\n      success: true;\n      config: RecallApiConfig;\n    }\n  | {\n      success: false;\n      error: string;\n    } => {\n  const apiKey = normalizeOptionalString(\n    getApplicationVariableValue(RECALL_API_KEY_ENV_VAR_NAME)?.trim(),\n  );\n\n  if (isUndefined(apiKey)) {\n    return {\n      success: false,\n      error:\n        'RECALL_API_KEY server variable is not set. A server admin must set it on the Call Recorder application registration before scheduling bots.',\n    };\n  }\n\n  const region =\n    normalizeOptionalString(\n      getApplicationVariableValue(RECALL_REGION_ENV_VAR_NAME)?.trim(),\n    ) ?? DEFAULT_RECALL_REGION;\n  const botName =\n    normalizeOptionalString(\n      getApplicationVariableValue(CALL_RECORDER_NAME_ENV_VAR_NAME)?.trim(),\n    ) ?? DEFAULT_CALL_RECORDER_NAME;\n\n  return {\n    success: true,\n    config: {\n      apiKey,\n      baseUrl: `https://${region}.recall.ai/api/v1`,\n      botName,\n    },\n  };\n};\n", "export const CALL_RECORDER_NAME_ENV_VAR_NAME = 'CALL_RECORDER_NAME';\n", "export const DEFAULT_CALL_RECORDER_NAME = 'Twenty.com';\n", "export const DEFAULT_RECALL_REGION = 'eu-central-1';\n", "export const RECALL_API_KEY_ENV_VAR_NAME = 'RECALL_API_KEY';\n", "export const RECALL_REGION_ENV_VAR_NAME = 'RECALL_REGION';\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", "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 normalizeOptionalString = (\n  value: string | null | undefined,\n): string | undefined => (isNonEmptyString(value) ? value : undefined);\n", "import { isUndefined } from '@sniptt/guards';\n\nimport { RECALL_API_MAX_IN_PROCESS_RETRY_WAIT_MS } from 'src/logic-functions/constants/recall-api-max-in-process-retry-wait-ms';\nimport { RECALL_API_MAX_ATTEMPTS } from 'src/logic-functions/constants/recall-api-max-attempts';\nimport { RECALL_API_NOT_FOUND_STATUS } from 'src/logic-functions/constants/recall-api-not-found-status';\nimport { type RecallApiConfig } from 'src/logic-functions/recall-api/get-recall-api-config.util';\nimport { parseRecallRetryAfterMs } from 'src/logic-functions/recall-api/parse-recall-retry-after.util';\nimport {\n  isRetryableRecallApiStatus,\n  resolveRecallApiRetryDelayMs,\n} from 'src/logic-functions/recall-api/recall-api-retry-policy.util';\nimport { fetchWithTimeout } from 'src/logic-functions/utils/fetch-with-timeout.util';\n\ntype RecallBotApiRequestArgs = {\n  config: RecallApiConfig;\n  path: string;\n  method: 'GET' | 'POST' | 'PATCH' | 'DELETE';\n  body?: unknown;\n  idempotencyKey?: string;\n  allowNotFound?: boolean;\n  signal?: AbortSignal;\n};\n\ntype RecallBotApiRequestResult<TData> =\n  | {\n      ok: true;\n      status: number;\n      data: TData;\n    }\n  | {\n      ok: false;\n      status: number | null;\n      errorMessage: string;\n    };\n\n// Retried creates provide an idempotency key so ambiguous attempts cannot\n// create duplicates.\nexport const recallBotApiRequest = async <TData>(\n  requestArgs: RecallBotApiRequestArgs,\n): Promise<RecallBotApiRequestResult<TData>> => {\n  let totalRetryWaitMs = 0;\n\n  for (let attemptNumber = 1; ; attemptNumber++) {\n    requestArgs.signal?.throwIfAborted();\n    const { result, isRetryable, retryAfterMs } =\n      await performRecallBotApiRequestAttempt<TData>(requestArgs);\n\n    if (!isRetryable || attemptNumber >= RECALL_API_MAX_ATTEMPTS) {\n      return result;\n    }\n\n    const retryDelayMs = resolveRecallApiRetryDelayMs({\n      retryAfterMs,\n      status: result.status,\n      attemptNumber,\n    });\n\n    // Sleeping past the invocation budget would hit the timeout kill; defer to the reconcilers.\n    if (\n      totalRetryWaitMs + retryDelayMs >=\n      RECALL_API_MAX_IN_PROCESS_RETRY_WAIT_MS\n    ) {\n      return result;\n    }\n\n    totalRetryWaitMs += retryDelayMs;\n    await sleep(retryDelayMs);\n  }\n};\n\nconst performRecallBotApiRequestAttempt = async <TData>({\n  config,\n  path,\n  method,\n  body,\n  idempotencyKey,\n  allowNotFound = false,\n  signal,\n}: RecallBotApiRequestArgs): Promise<{\n  result: RecallBotApiRequestResult<TData>;\n  isRetryable: boolean;\n  retryAfterMs?: number;\n}> => {\n  let response: Response;\n\n  try {\n    response = await fetchWithTimeout(`${config.baseUrl}${path}`, {\n      method,\n      signal,\n      headers: {\n        Authorization: buildRecallApiAuthorizationHeader(config.apiKey),\n        ...(isUndefined(idempotencyKey)\n          ? {}\n          : { 'Idempotency-Key': idempotencyKey }),\n        ...(isUndefined(body) ? {} : { 'Content-Type': 'application/json' }),\n      },\n      ...(isUndefined(body) ? {} : { body: JSON.stringify(body) }),\n    });\n  } catch (error) {\n    if (signal?.aborted) {\n      throw error;\n    }\n\n    return {\n      isRetryable: true,\n      result: {\n        ok: false,\n        status: null,\n        errorMessage: `Recall API request failed: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      },\n    };\n  }\n\n  if (allowNotFound && response.status === RECALL_API_NOT_FOUND_STATUS) {\n    return {\n      isRetryable: false,\n      result: {\n        ok: true,\n        status: response.status,\n        data: undefined as TData,\n      },\n    };\n  }\n\n  if (response.status === 204) {\n    return {\n      isRetryable: false,\n      result: {\n        ok: true,\n        status: response.status,\n        data: undefined as TData,\n      },\n    };\n  }\n\n  if (!response.ok) {\n    return {\n      isRetryable: isRetryableRecallApiStatus(response.status),\n      retryAfterMs: parseRecallRetryAfterMs(\n        response.headers?.get('retry-after') ?? null,\n        Date.now(),\n      ),\n      result: {\n        ok: false,\n        status: response.status,\n        errorMessage: await extractRecallApiErrorMessage(response),\n      },\n    };\n  }\n\n  try {\n    return {\n      isRetryable: false,\n      result: {\n        ok: true,\n        status: response.status,\n        data: (await response.json()) as TData,\n      },\n    };\n  } catch (error) {\n    const isAborted =\n      error instanceof Error &&\n      (error.name === 'TimeoutError' || error.name === 'AbortError');\n\n    return {\n      isRetryable: isAborted,\n      result: {\n        ok: false,\n        status: isAborted ? null : response.status,\n        errorMessage: `Recall API returned a non-JSON response: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      },\n    };\n  }\n};\n\nconst sleep = (delayMs: number): Promise<void> =>\n  new Promise((resolve) => {\n    setTimeout(resolve, delayMs);\n  });\n\nconst buildRecallApiAuthorizationHeader = (apiKey: string): string => {\n  const trimmedApiKey = apiKey.trim();\n\n  return trimmedApiKey.toLowerCase().startsWith('token ')\n    ? trimmedApiKey\n    : `Token ${trimmedApiKey}`;\n};\n\nconst extractRecallApiErrorMessage = async (\n  response: Response,\n): Promise<string> => {\n  const fallback = `Recall API responded with HTTP ${response.status}`;\n\n  try {\n    const body = (await response.json()) as unknown;\n\n    return `${fallback}: ${JSON.stringify(body)}`;\n  } catch {\n    return fallback;\n  }\n};\n", "export const RECALL_API_MAX_IN_PROCESS_RETRY_WAIT_MS = 10_000;\n", "export const RECALL_API_MAX_ATTEMPTS = 3;\n", "export const RECALL_API_NOT_FOUND_STATUS = 404;\n", "export const RECALL_API_MAX_RETRY_AFTER_MS = 60_000;\n", "import { RECALL_API_MAX_RETRY_AFTER_MS } from 'src/logic-functions/constants/recall-api-max-retry-after-ms';\n\nexport const parseRecallRetryAfterMs = (\n  retryAfterHeader: string | null,\n  nowMs: number,\n): number | undefined => {\n  if (retryAfterHeader === null) {\n    return undefined;\n  }\n\n  const trimmedRetryAfterHeader = retryAfterHeader.trim();\n\n  if (trimmedRetryAfterHeader.length === 0) {\n    return undefined;\n  }\n\n  if (/^\\d+$/.test(trimmedRetryAfterHeader)) {\n    return capRecallRetryAfterMs(Number(trimmedRetryAfterHeader) * 1000);\n  }\n\n  // Malformed numeric forms (1.5, 1e2, 0x10) would be misread as dates by Date.parse.\n  if (!Number.isNaN(Number(trimmedRetryAfterHeader))) {\n    return undefined;\n  }\n\n  const retryAfterDateMs = Date.parse(trimmedRetryAfterHeader);\n\n  if (Number.isNaN(retryAfterDateMs)) {\n    return undefined;\n  }\n\n  return capRecallRetryAfterMs(Math.max(0, retryAfterDateMs - nowMs));\n};\n\nconst capRecallRetryAfterMs = (retryAfterMs: number): number =>\n  Math.min(retryAfterMs, RECALL_API_MAX_RETRY_AFTER_MS);\n", "export const RECALL_API_ADHOC_POOL_RETRY_DELAY_MS = 10_000;\n", "export const RECALL_API_RETRY_DELAY_MS = 500;\n", "import { RECALL_API_ADHOC_POOL_RETRY_DELAY_MS } from 'src/logic-functions/constants/recall-api-adhoc-pool-retry-delay-ms';\nimport { RECALL_API_RETRY_DELAY_MS } from 'src/logic-functions/constants/recall-api-retry-delay-ms';\n\nconst RECALL_STATUS_UNAUTHORIZED = 401;\nconst RECALL_STATUS_PAYMENT_REQUIRED = 402;\nconst RECALL_STATUS_FORBIDDEN = 403;\nconst RECALL_STATUS_RATE_LIMITED = 429;\nconst RECALL_STATUS_CONFLICT = 409;\nconst RECALL_STATUS_ADHOC_POOL_EXHAUSTED = 507;\n\nconst isRecallServerError = (status: number): boolean => status >= 500;\n\nexport const isRetryableRecallApiStatus = (status: number): boolean =>\n  status === RECALL_STATUS_RATE_LIMITED ||\n  status === RECALL_STATUS_CONFLICT ||\n  isRecallServerError(status);\n\nexport const isRecallAccountStatus = (status: number): boolean =>\n  status === RECALL_STATUS_UNAUTHORIZED ||\n  status === RECALL_STATUS_PAYMENT_REQUIRED ||\n  status === RECALL_STATUS_FORBIDDEN;\n\nexport const resolveRecallApiRetryDelayMs = ({\n  retryAfterMs,\n  status,\n  attemptNumber,\n  random = Math.random,\n}: {\n  retryAfterMs: number | undefined;\n  status: number | null;\n  attemptNumber: number;\n  random?: () => number;\n}): number => {\n  if (retryAfterMs !== undefined) {\n    return retryAfterMs;\n  }\n\n  if (status === RECALL_STATUS_ADHOC_POOL_EXHAUSTED) {\n    return RECALL_API_ADHOC_POOL_RETRY_DELAY_MS;\n  }\n\n  // Equal jitter so retries sharing a failure instant do not re-collide.\n  const baseDelayMs = RECALL_API_RETRY_DELAY_MS * attemptNumber;\n\n  return Math.round((baseDelayMs * (1 + random())) / 2);\n};\n", "import { isUndefined } from '@sniptt/guards';\n\nexport const buildAbortSignalWithTimeout = ({\n  timeoutMs,\n  signal,\n}: {\n  timeoutMs: number;\n  signal: AbortSignal | undefined;\n}): AbortSignal =>\n  AbortSignal.any([\n    AbortSignal.timeout(timeoutMs),\n    ...(isUndefined(signal) ? [] : [signal]),\n  ]);\n", "import { buildAbortSignalWithTimeout } from 'src/logic-functions/utils/build-abort-signal-with-timeout.util';\n\nconst REQUEST_TIMEOUT_MS = 10_000;\n\nexport const fetchWithTimeout: typeof fetch = (input, options) => {\n  const signal =\n    options?.signal ?? (input instanceof Request ? input.signal : undefined);\n\n  return fetch(input, {\n    ...options,\n    signal: buildAbortSignalWithTimeout({\n      timeoutMs: REQUEST_TIMEOUT_MS,\n      signal,\n    }),\n  });\n};\n", "import { type RecallBotRemovalResult } from 'src/logic-functions/types/recall-bot-operation-result.type';\nimport { getRecallApiConfig } from 'src/logic-functions/recall-api/get-recall-api-config.util';\nimport { recallBotApiRequest } from 'src/logic-functions/recall-api/recall-bot-api-request.util';\n\nexport const cancelRecallBot = async ({\n  externalBotId,\n}: {\n  externalBotId: string;\n}): Promise<RecallBotRemovalResult> => {\n  const configResult = getRecallApiConfig();\n\n  if (!configResult.success) {\n    return { ok: false, status: null, errorMessage: configResult.error };\n  }\n\n  const result = await recallBotApiRequest<undefined>({\n    config: configResult.config,\n    path: `/bot/${externalBotId}/`,\n    method: 'DELETE',\n    allowNotFound: true,\n  });\n\n  if (!result.ok) {\n    return result;\n  }\n\n  return { ok: true };\n};\n", "import { type RecallBotRemovalResult } from 'src/logic-functions/types/recall-bot-operation-result.type';\nimport { getRecallApiConfig } from 'src/logic-functions/recall-api/get-recall-api-config.util';\nimport { recallBotApiRequest } from 'src/logic-functions/recall-api/recall-bot-api-request.util';\n\nexport const ejectRecallBot = async ({\n  externalBotId,\n}: {\n  externalBotId: string;\n}): Promise<RecallBotRemovalResult> => {\n  const configResult = getRecallApiConfig();\n\n  if (!configResult.success) {\n    return { ok: false, status: null, errorMessage: configResult.error };\n  }\n\n  const result = await recallBotApiRequest<undefined>({\n    config: configResult.config,\n    path: `/bot/${externalBotId}/leave_call/`,\n    method: 'POST',\n    allowNotFound: true,\n  });\n\n  if (!result.ok) {\n    return result;\n  }\n\n  return { ok: true };\n};\n", "import { isUndefined } from '@sniptt/guards';\nimport { type CoreApiClient } from 'twenty-client-sdk/core';\n\nimport { CallRecordingRequestStatus } from 'src/logic-functions/constants/call-recording-request-status';\nimport { TWENTY_PAGE_SIZE } from 'src/logic-functions/constants/twenty-page-size';\nimport { type CallRecordingRecord } from 'src/logic-functions/types/call-recording-record.type';\nimport {\n  fetchAllNodes,\n  type ConnectionPage,\n} from 'src/logic-functions/data/fetch-all-nodes.util';\nimport { normalizeOptionalString } from 'src/logic-functions/utils/normalize-optional-string.util';\n\ntype CallRecordingNode = {\n  id: string;\n  title?: string | null;\n  status?: string | null;\n  recordingRequestStatus?: unknown;\n  createdAt?: string | null;\n  updatedAt?: string | null;\n  startedAt?: string | null;\n  endedAt?: string | null;\n  calendarEventId?: string | null;\n  externalBotId?: string | null;\n  botScheduleAttemptedAt?: string | null;\n  botScheduleIdempotencyKey?: string | null;\n  externalRecordingId?: string | null;\n  callRecorderFailureReason?: string | null;\n};\n\nexport const findCallRecordingsByFilter = async (\n  client: CoreApiClient,\n  filter: Record<string, unknown>,\n  shouldStartPageRequest: () => boolean = () => true,\n): Promise<CallRecordingRecord[]> => {\n  const callRecordingNodes = await fetchAllNodes<CallRecordingNode>(\n    async (afterCursor) => {\n      const queryResult = await client.query({\n        callRecordings: {\n          __args: {\n            filter,\n            first: TWENTY_PAGE_SIZE,\n            ...(isUndefined(afterCursor) ? {} : { after: afterCursor }),\n          },\n          pageInfo: {\n            hasNextPage: true,\n            endCursor: true,\n          },\n          edges: {\n            node: {\n              id: true,\n              title: true,\n              status: true,\n              recordingRequestStatus: true,\n              createdAt: true,\n              updatedAt: true,\n              startedAt: true,\n              endedAt: true,\n              calendarEventId: true,\n              externalBotId: true,\n              botScheduleAttemptedAt: true,\n              botScheduleIdempotencyKey: true,\n              externalRecordingId: true,\n              callRecorderFailureReason: true,\n            },\n          },\n        },\n      });\n\n      return queryResult.callRecordings as\n        | ConnectionPage<CallRecordingNode>\n        | undefined;\n    },\n    shouldStartPageRequest,\n  );\n\n  return callRecordingNodes.map((callRecording) => ({\n    id: callRecording.id,\n    title: callRecording.title ?? undefined,\n    status: callRecording.status ?? undefined,\n    recordingRequestStatus: normalizeCallRecordingRequestStatus(\n      callRecording.recordingRequestStatus,\n    ),\n    createdAt: callRecording.createdAt ?? undefined,\n    updatedAt: callRecording.updatedAt ?? undefined,\n    startedAt: callRecording.startedAt ?? undefined,\n    endedAt: callRecording.endedAt ?? undefined,\n    calendarEventId: callRecording.calendarEventId ?? undefined,\n    externalBotId: normalizeOptionalString(callRecording.externalBotId),\n    botScheduleAttemptedAt: normalizeOptionalString(\n      callRecording.botScheduleAttemptedAt,\n    ),\n    botScheduleIdempotencyKey: normalizeOptionalString(\n      callRecording.botScheduleIdempotencyKey,\n    ),\n    externalRecordingId: normalizeOptionalString(\n      callRecording.externalRecordingId,\n    ),\n    callRecorderFailureReason: normalizeOptionalString(\n      callRecording.callRecorderFailureReason,\n    ),\n  }));\n};\n\nconst normalizeCallRecordingRequestStatus = (\n  recordingRequestStatus: unknown,\n): CallRecordingRequestStatus | undefined => {\n  if (recordingRequestStatus === CallRecordingRequestStatus.REQUESTED) {\n    return recordingRequestStatus;\n  }\n\n  if (recordingRequestStatus === CallRecordingRequestStatus.CANCELED) {\n    return recordingRequestStatus;\n  }\n\n  return undefined;\n};\n", "export const TWENTY_PAGE_SIZE = 100;\n", "import { isString, isUndefined } from '@sniptt/guards';\n\nexport type ConnectionPage<TNode> = {\n  pageInfo?: {\n    hasNextPage?: boolean | null;\n    endCursor?: string | null;\n  } | null;\n  edges?: Array<{ node: TNode }> | null;\n};\n\nexport const fetchAllNodes = async <TNode>(\n  fetchPage: (\n    afterCursor: string | undefined,\n  ) => Promise<ConnectionPage<TNode> | undefined>,\n  shouldStartPageRequest: () => boolean = () => true,\n): Promise<TNode[]> => {\n  const nodes: TNode[] = [];\n  let hasNextPage = true;\n  let afterCursor: string | undefined;\n\n  while (hasNextPage && shouldStartPageRequest()) {\n    const connection = await fetchPage(afterCursor);\n\n    if (isUndefined(connection)) {\n      throw new Error('Pagination query returned no connection');\n    }\n\n    for (const edge of connection.edges ?? []) {\n      nodes.push(edge.node);\n    }\n\n    hasNextPage = connection.pageInfo?.hasNextPage === true;\n    const endCursor = connection.pageInfo?.endCursor;\n\n    if (hasNextPage && !isString(endCursor)) {\n      throw new Error(\n        'Inconsistent pagination state: hasNextPage is true without an endCursor',\n      );\n    }\n\n    afterCursor = isString(endCursor) ? endCursor : undefined;\n  }\n\n  return nodes;\n};\n", "import { type CoreApiClient } from 'twenty-client-sdk/core';\n\nimport { type CallRecordingRecord } from 'src/logic-functions/types/call-recording-record.type';\nimport { findCallRecordingsByFilter } from 'src/logic-functions/data/find-call-recordings-by-filter.util';\n\nexport const findCallRecordingsByIds = async (\n  client: CoreApiClient,\n  callRecordingIds: string[],\n): Promise<CallRecordingRecord[]> => {\n  if (callRecordingIds.length === 0) {\n    return [];\n  }\n\n  return findCallRecordingsByFilter(client, {\n    id: { in: callRecordingIds },\n  });\n};\n", "import { type RecallScheduledBot } from 'src/logic-functions/recall-api/list-scheduled-recall-bots.util';\nimport { isNonEmptyString } from 'src/logic-functions/utils/is-non-empty-string.util';\n\nexport const getClaimedWorkspaceId = (\n  bot: RecallScheduledBot,\n): string | undefined => {\n  const claimedWorkspaceId = bot.metadata.twentyWorkspaceId;\n\n  return isNonEmptyString(claimedWorkspaceId)\n    ? claimedWorkspaceId.trim()\n    : undefined;\n};\n", "import { isUndefined } from '@sniptt/guards';\n\nimport { asRecord } from 'src/logic-functions/utils/as-record.util';\nimport { getString } from 'src/logic-functions/utils/get-string.util';\n\nconst APP_ACCESS_TOKEN_ENV_VAR_NAME = 'TWENTY_APP_ACCESS_TOKEN';\n\nexport const getCurrentWorkspaceId = (): string | undefined => {\n  const accessToken = getString(process.env[APP_ACCESS_TOKEN_ENV_VAR_NAME]);\n\n  if (isUndefined(accessToken)) {\n    return undefined;\n  }\n\n  return getWorkspaceIdFromAccessToken(accessToken);\n};\n\nconst getWorkspaceIdFromAccessToken = (\n  accessToken: string,\n): string | undefined => {\n  const encodedPayload = accessToken.split('.')[1];\n\n  if (isUndefined(encodedPayload)) {\n    return undefined;\n  }\n\n  try {\n    const payload = asRecord(\n      JSON.parse(Buffer.from(encodedPayload, 'base64url').toString('utf8')),\n    );\n\n    return getString(payload?.workspaceId);\n  } catch {\n    return undefined;\n  }\n};\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 { 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 { isString } from '@sniptt/guards';\n\nexport const getUniqueSortedIds = (\n  ids: Array<string | null | undefined>,\n): string[] =>\n  [...new Set(ids.filter(isString))].sort((firstId, secondId) =>\n    firstId.localeCompare(secondId),\n  );\n", "import { isUndefined } from '@sniptt/guards';\n\nimport { type RecallBotOperationFailure } from 'src/logic-functions/types/recall-bot-operation-result.type';\nimport { asRecord } from 'src/logic-functions/utils/as-record.util';\nimport {\n  fetchRecallListPages,\n  type RecallListResponse,\n} from 'src/logic-functions/recall-api/fetch-recall-list-pages.util';\nimport { getRecallApiConfig } from 'src/logic-functions/recall-api/get-recall-api-config.util';\nimport { parseRecallBotSnapshot } from 'src/logic-functions/recall-api/parse-recall-bot-snapshot.util';\nimport { type RecallBotSnapshot } from 'src/logic-functions/recall-api/recall-bot-snapshot.type';\n\nexport type RecallScheduledBot = RecallBotSnapshot & {\n  id: string;\n};\n\ntype ListScheduledRecallBotsResult =\n  | { ok: true; bots: RecallScheduledBot[]; truncated: boolean }\n  | RecallBotOperationFailure;\n\nconst RECALL_BOT_LIST_MAX_PAGES = 10;\n\ntype ListScheduledRecallBotsArguments = {\n  joinAtAfter?: string;\n  joinAtBefore?: string;\n  metadata?: Record<string, string>;\n  statuses?: string[];\n};\n\nexport const listScheduledRecallBots = async (\n  listScheduledRecallBotsArguments: ListScheduledRecallBotsArguments,\n): Promise<ListScheduledRecallBotsResult> =>\n  listScheduledRecallBotsWithPageRequestPolicy({\n    listScheduledRecallBotsArguments,\n    shouldStartPageRequest: () => true,\n  });\n\nexport const listScheduledRecallBotsBeforeRequestCutoff = async ({\n  requestStartCutoffEpochMs,\n  ...listScheduledRecallBotsArguments\n}: ListScheduledRecallBotsArguments & {\n  requestStartCutoffEpochMs: number;\n}): Promise<ListScheduledRecallBotsResult> =>\n  listScheduledRecallBotsWithPageRequestPolicy({\n    listScheduledRecallBotsArguments,\n    shouldStartPageRequest: () => Date.now() < requestStartCutoffEpochMs,\n  });\n\nconst listScheduledRecallBotsWithPageRequestPolicy = async ({\n  listScheduledRecallBotsArguments: {\n    joinAtAfter,\n    joinAtBefore,\n    metadata,\n    statuses,\n  },\n  shouldStartPageRequest,\n}: {\n  listScheduledRecallBotsArguments: ListScheduledRecallBotsArguments;\n  shouldStartPageRequest: () => boolean;\n}): Promise<ListScheduledRecallBotsResult> => {\n  const configResult = getRecallApiConfig();\n\n  if (!configResult.success) {\n    return { ok: false, status: null, errorMessage: configResult.error };\n  }\n\n  const searchParameters = new URLSearchParams();\n\n  if (!isUndefined(joinAtAfter)) {\n    searchParameters.set('join_at_after', joinAtAfter);\n  }\n\n  if (!isUndefined(joinAtBefore)) {\n    searchParameters.set('join_at_before', joinAtBefore);\n  }\n\n  Object.entries(metadata ?? {}).forEach(([key, value]) => {\n    searchParameters.set(`metadata__${key}`, value);\n  });\n\n  statuses?.forEach((status) => {\n    searchParameters.append('status', status);\n  });\n\n  const result = await fetchRecallListPages({\n    config: configResult.config,\n    initialPath: `/bot/?${searchParameters.toString()}`,\n    maxPages: RECALL_BOT_LIST_MAX_PAGES,\n    shouldStartPageRequest,\n    extractPageItems: extractRecallBots,\n    malformedErrorMessage: 'Recall API returned malformed bot list',\n  });\n\n  if (!result.ok) {\n    return result;\n  }\n\n  if (result.truncated && process.env.NODE_ENV !== 'test') {\n    console.warn(\n      `[call-recorder] Recall bot list exceeded ${RECALL_BOT_LIST_MAX_PAGES} pages; continuing with ${result.items.length} fetched bots`,\n    );\n  }\n\n  return { ok: true, bots: result.items, truncated: result.truncated };\n};\n\nconst extractRecallBots = (\n  response: RecallListResponse | undefined,\n): RecallScheduledBot[] => {\n  if (!Array.isArray(response?.results)) {\n    return [];\n  }\n\n  return response.results.flatMap((candidate: unknown) => {\n    const bot = asRecord(candidate);\n\n    if (isUndefined(bot)) {\n      return [];\n    }\n\n    const snapshot = parseRecallBotSnapshot(bot);\n\n    if (isUndefined(snapshot.id)) {\n      return [];\n    }\n\n    return [{ ...snapshot, id: snapshot.id }];\n  });\n};\n", "import { isString, isUndefined } from '@sniptt/guards';\n\nimport { type RecallBotOperationFailure } from 'src/logic-functions/types/recall-bot-operation-result.type';\nimport { type RecallApiConfig } from 'src/logic-functions/recall-api/get-recall-api-config.util';\nimport { recallBotApiRequest } from 'src/logic-functions/recall-api/recall-bot-api-request.util';\n\nexport type RecallListResponse = {\n  next?: unknown;\n  results?: unknown;\n};\n\nexport const fetchRecallListPages = async <TItem>({\n  config,\n  initialPath,\n  maxPages,\n  shouldStartPageRequest,\n  extractPageItems,\n  malformedErrorMessage,\n  signal,\n}: {\n  config: RecallApiConfig;\n  initialPath: string;\n  maxPages: number;\n  shouldStartPageRequest: () => boolean;\n  extractPageItems: (\n    response: RecallListResponse | undefined,\n  ) => TItem[] | undefined;\n  malformedErrorMessage: string;\n  signal?: AbortSignal;\n}): Promise<\n  { ok: true; items: TItem[]; truncated: boolean } | RecallBotOperationFailure\n> => {\n  const items: TItem[] = [];\n  let path: string | undefined = initialPath;\n\n  for (\n    let pageIndex = 0;\n    !isUndefined(path) && pageIndex < maxPages;\n    pageIndex++\n  ) {\n    if (!shouldStartPageRequest()) {\n      break;\n    }\n\n    const result = await recallBotApiRequest<RecallListResponse>({\n      config,\n      path,\n      method: 'GET',\n      signal,\n    });\n\n    if (!result.ok) {\n      return result;\n    }\n\n    const pageItems = extractPageItems(result.data);\n\n    if (isUndefined(pageItems)) {\n      return {\n        ok: false,\n        status: result.status,\n        errorMessage: malformedErrorMessage,\n      };\n    }\n\n    items.push(...pageItems);\n    path = extractNextPath(result.data, config.baseUrl);\n  }\n\n  return { ok: true, items, truncated: !isUndefined(path) };\n};\n\nconst extractNextPath = (\n  response: RecallListResponse | undefined,\n  baseUrl: string,\n): string | undefined => {\n  const next = response?.next;\n\n  if (!isString(next) || !next.startsWith(baseUrl)) {\n    return undefined;\n  }\n\n  return next.slice(baseUrl.length);\n};\n", "import { isArray, isUndefined } from '@sniptt/guards';\n\nimport {\n  type RecallBotRecording,\n  type RecallBotSnapshot,\n  type RecallBotStatusChange,\n} from 'src/logic-functions/recall-api/recall-bot-snapshot.type';\nimport { asRecord } from 'src/logic-functions/utils/as-record.util';\nimport { getString } from 'src/logic-functions/utils/get-string.util';\n\nexport const parseRecallBotSnapshot = (\n  payload: Record<string, unknown>,\n): RecallBotSnapshot => ({\n  id: getString(payload.id),\n  metadata: asRecord(payload.metadata) ?? {},\n  statusChanges: parseStatusChanges(payload.status_changes),\n  recordings: parseRecordings(payload.recordings),\n});\n\nconst parseStatusChanges = (value: unknown): RecallBotStatusChange[] => {\n  if (!isArray(value)) {\n    return [];\n  }\n\n  return value.flatMap((statusChange: unknown) => {\n    const code = getString(asRecord(statusChange)?.code);\n\n    if (isUndefined(code)) {\n      return [];\n    }\n\n    return [\n      {\n        code,\n        subCode: getString(asRecord(statusChange)?.sub_code),\n        createdAt: getString(asRecord(statusChange)?.created_at),\n      },\n    ];\n  });\n};\n\nconst parseRecordings = (value: unknown): RecallBotRecording[] => {\n  if (!isArray(value)) {\n    return [];\n  }\n\n  return value.flatMap((recording: unknown) => {\n    const recordingRecord = asRecord(recording);\n\n    if (isUndefined(recordingRecord)) {\n      return [];\n    }\n\n    return [\n      {\n        id: getString(recordingRecord.id),\n        startedAt: getString(recordingRecord.started_at),\n        completedAt: getString(recordingRecord.completed_at),\n      },\n    ];\n  });\n};\n", "import { RetryableLogicFunctionError } from 'twenty-sdk/logic-function';\n\nexport type StepFailure = { error: string };\n\nconst formatStepFailureMessage = (stepLabel: string, error: unknown): string =>\n  `[call-recorder] ${stepLabel} failed: ${\n    error instanceof Error ? error.message : String(error)\n  }`;\n\nexport const buildStepFailure = (\n  stepLabel: string,\n  error: unknown,\n): StepFailure => {\n  if (process.env.NODE_ENV !== 'test') {\n    console.error(formatStepFailureMessage(stepLabel, error));\n  }\n\n  return { error: `${stepLabel} failed` };\n};\n\n// Only RetryableLogicFunctionError makes the job runner redeliver an enqueued job.\nexport const buildRetryableStepFailure = (\n  stepLabel: string,\n  error: unknown,\n): RetryableLogicFunctionError =>\n  new RetryableLogicFunctionError(formatStepFailureMessage(stepLabel, error));\n"],
  "mappings": "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",
  "names": ["isUndefined", "isString", "isNull", "isObject", "isArray", "isNonEmptyString", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "import_guards", "normalizeOptionalString"]
}
